Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:17:52

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
0003 #ifndef G4DETECTORS_PHG4TPCCYLINDERGEOM_H
0004 #define G4DETECTORS_PHG4TPCCYLINDERGEOM_H
0005 
0006 #include "PHG4CylinderGeom.h"
0007 
0008 #include <array>
0009 #include <cmath>
0010 #include <iostream>  // for cout, ostream
0011 #include <string>
0012 #include <utility>  // for pair
0013 
0014 class PHG4TpcCylinderGeom : public PHG4CylinderGeom
0015 {
0016  public:
0017   PHG4TpcCylinderGeom() = default;
0018 
0019   ~PHG4TpcCylinderGeom() override = default;
0020 
0021   // from PHObject
0022   void identify(std::ostream& os = std::cout) const override;
0023 
0024   int get_layer() const override { return layer; }
0025   double get_radius() const override { return radius; }
0026   double get_thickness() const override { return thickness; }
0027   int get_binning() const { return binning; }
0028   int get_zbins() const;
0029   int get_phibins() const;
0030   double get_zmin() const override;
0031   double get_phistep() const;
0032   double get_phimin() const;
0033   double get_zstep() const;
0034   int get_etabins() const;
0035   double get_etastep() const;
0036   double get_etamin() const;
0037 
0038   virtual std::pair<double, double> get_zbounds(const int ibin) const;
0039   virtual std::pair<double, double> get_phibounds(const int ibin) const;
0040   virtual std::pair<double, double> get_etabounds(const int ibin) const;
0041   virtual double get_etacenter(const int ibin) const;
0042   virtual double get_zcenter(const int ibin) const;
0043   virtual double get_phicenter(const int ibin, const int side = 0) const;
0044   virtual double get_phicenter_new(const int ibin) const;
0045   virtual double get_phi(const float ibin, const int side = 0) const;
0046 
0047   virtual int get_etabin(const double eta) const;
0048   virtual int get_zbin(const double z) const;
0049   virtual int get_phibin(const double phi, int side = 0) const;
0050   virtual int get_phibin_new(const double phi) const;
0051 
0052   virtual float get_pad_float(const double phi, int side = 0) const;
0053   virtual float get_tbin_float(const double z) const;
0054   virtual int find_phibin(const double phi, int side = 0) const;
0055 
0056   void set_layer(const int i) override { layer = i; }
0057   void set_binning(const int i) { binning = i; }
0058   void set_radius(const double r) override { radius = r; }
0059   void set_thickness(const double t) override { thickness = t; }
0060   void set_zbins(const int i);
0061   void set_zmin(const double z) override;
0062   void set_zstep(const double z);
0063   void set_phibins(const int i);
0064   void set_phistep(const double phi);
0065   void set_phimin(const double phi);
0066   void set_etabins(const int i);
0067   void set_etamin(const double z);
0068   void set_etastep(const double z);
0069 
0070   static const int NSides = 2;
0071 
0072   void set_r_bias(const std::array<std::vector<double>, NSides> &dr) { sector_R_bias = dr; }
0073   void set_phi_bias(const std::array<std::vector<double>, NSides> &dphi) { sector_Phi_bias = dphi; }
0074 
0075   // void set_sector_phi(const double s_phi){sector_phi = s_phi;}
0076   void set_sector_min_phi(const std::array<std::vector<double>, NSides> &s_min_phi) { sector_min_Phi = s_min_phi; }
0077   void set_sector_max_phi(const std::array<std::vector<double>, NSides> &s_max_phi) { sector_max_Phi = s_max_phi; }
0078 
0079   const std::array<std::vector<double>, NSides> &get_sector_min_phi() { return sector_min_Phi; }
0080   const std::array<std::vector<double>, NSides> &get_sector_max_phi() { return sector_max_Phi; }
0081 
0082  protected:
0083   void check_binning_method(const int i) const;
0084   void check_binning_method_eta(const std::string& src = "") const;
0085   void check_binning_method_phi(const std::string& src = "") const;
0086   std::string methodname(const int i) const;
0087   int layer{-999};
0088   int binning{0};
0089   double radius{std::numeric_limits<double>::quiet_NaN()};
0090   int nzbins{-1};
0091   double zmin{std::numeric_limits<double>::quiet_NaN()};
0092   double zstep{std::numeric_limits<double>::quiet_NaN()};
0093   int nphibins{-1};
0094   double phimin{-M_PI};
0095   double phistep{std::numeric_limits<double>::quiet_NaN()};
0096   double thickness{std::numeric_limits<double>::quiet_NaN()};
0097 
0098   std::array<std::vector<double>, NSides> sector_R_bias;
0099   std::array<std::vector<double>, NSides> sector_Phi_bias;
0100   std::array<std::vector<double>, NSides> sector_min_Phi;
0101   std::array<std::vector<double>, NSides> sector_max_Phi;
0102 
0103   // streamer
0104   friend std::ostream& operator<<(std::ostream&, const PHG4TpcCylinderGeom&);
0105 
0106   ClassDefOverride(PHG4TpcCylinderGeom, 2)
0107 };
0108 
0109 #endif