Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-07-16 08:15:15

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
0003 #ifndef G4DETECTORS_PHG4TPCGEOMV2_H
0004 #define G4DETECTORS_PHG4TPCGEOMV2_H
0005 
0006 #include "PHG4TpcGeom.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 PHG4TpcGeomv2 : public PHG4TpcGeom
0015 {
0016  public:
0017   PHG4TpcGeomv2() = default;
0018 
0019   ~PHG4TpcGeomv2() 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 override { return binning; }
0028   int get_zbins() const override;
0029   int get_phibins() const override;
0030   double get_zmin() const override;
0031   double get_phistep() const override;
0032   double get_phimin() const override;
0033   double get_zstep() const override;
0034   int get_etabins() const override;
0035   double get_etastep() const override;
0036   double get_etamin() const override;
0037 
0038   double get_max_driftlength() const override { return max_driftlength; }
0039   double get_CM_halfwidth() const override  { return CM_halfwidth; }
0040   double get_adc_clock() const override  { return  adc_clock; } // default sim value
0041   double get_extended_readout_time() const override  { return extended_readout_time; }
0042   double get_drift_velocity_sim() const override  { return drift_velocity_sim; }
0043 
0044   double get_rot_x() const override  { return rot_x; }
0045   double get_rot_y() const override  { return rot_y; }
0046   double get_rot_z() const override  { return rot_z; }
0047   double get_place_x() const override  { return place_x; }
0048   double get_place_y() const override  { return place_y; }
0049   double get_place_z() const override  { return place_z; }
0050   
0051   std::pair<double, double> get_zbounds(const int ibin) const override;
0052   std::pair<double, double> get_phibounds(const int ibin) const override;
0053   std::pair<double, double> get_etabounds(const int ibin) const override;
0054   double get_etacenter(const int ibin) const override;
0055   double get_zcenter(const int ibin) const override;
0056   double get_phicenter(const int ibin, const int side = 0) const override;
0057   double get_phicenter_new(const int ibin) const override;
0058   double get_phi(const float ibin, const int side = 0) const override;
0059   
0060   int get_etabin(const double eta) const override;
0061   int get_zbin(const double z) const override;
0062   int get_phibin(const double phi, int side = 0) const override;
0063   int get_phibin_new(const double phi) const override;
0064   
0065   float get_pad_float(const double phi, int side = 0) const override;
0066   float get_tbin_float(const double z) const override;
0067   int find_phibin(const double phi, int side = 0) const override;
0068 
0069   void set_layer(const int i) override { layer = i; }
0070   void set_binning(const int i) override { binning = i; }
0071   void set_radius(const double r) override { radius = r; }
0072   void set_thickness(const double t) override { thickness = t; }
0073   void set_zbins(const int i) override;
0074   void set_zmin(const double z) override;
0075   void set_zstep(const double z) override;
0076   void set_phibins(const int i) override;
0077   void set_phistep(const double phi) override;
0078   void set_phimin(const double phi) override;
0079   void set_etabins(const int i) override;
0080   void set_etamin(const double z) override;
0081   void set_etastep(const double z) override;
0082   // capture the z geometry related setup parameters
0083   void set_max_driftlength(const double val) override { max_driftlength = val; }
0084   void set_CM_halfwidth(const double val) override { CM_halfwidth = val; }
0085   void set_adc_clock(const double val) override { adc_clock = val; }
0086   void set_extended_readout_time(const double val) override { extended_readout_time = val; }
0087   void set_drift_velocity_sim(const double val) override { drift_velocity_sim = val; }
0088   void set_rot_x(const double val) override { rot_x = val; }
0089   void set_rot_y(const double val) override { rot_y = val; }
0090   void set_rot_z(const double val) override { rot_z = val; }
0091   void set_place_x(const double val) override { place_x = val; }
0092   void set_place_y(const double val) override { place_y = val; }
0093   void set_place_z(const double val) override { place_z = val; }
0094   
0095   static const int NSides = 2;
0096 
0097   void set_r_bias(const std::array<std::vector<double>, NSides> &dr) override { sector_R_bias = dr; }
0098   void set_phi_bias(const std::array<std::vector<double>, NSides> &dphi) override { sector_Phi_bias = dphi; }
0099 
0100   void set_sector_min_phi(const std::array<std::vector<double>, NSides> &s_min_phi) override
0101   {
0102     sector_min_Phi = s_min_phi;
0103   }
0104   void set_sector_max_phi(const std::array<std::vector<double>, NSides> &s_max_phi) override
0105   {
0106     sector_max_Phi = s_max_phi;
0107   }
0108 
0109  const std::array<std::vector<double>, NSides> &get_sector_min_phi() override
0110   {
0111     return sector_min_Phi;
0112   }
0113   const std::array<std::vector<double>, NSides> &get_sector_max_phi() override
0114   {
0115     return sector_max_Phi;
0116   }
0117 
0118  protected:
0119   void check_binning_method(const int i) const;
0120   void check_binning_method_eta(const std::string& src = "") const;
0121   void check_binning_method_phi(const std::string& src = "") const;
0122   std::string methodname(const int i) const;
0123   int layer{-999};
0124   int binning{0};
0125   double radius{std::numeric_limits<double>::quiet_NaN()};
0126   int nzbins{-1};
0127   double zmin{std::numeric_limits<double>::quiet_NaN()};
0128   double zstep{std::numeric_limits<double>::quiet_NaN()};
0129   int nphibins{-1};
0130   double phimin{-M_PI};
0131   double phistep{std::numeric_limits<double>::quiet_NaN()};
0132   double thickness{std::numeric_limits<double>::quiet_NaN()};
0133 
0134   double max_driftlength{std::numeric_limits<double>::quiet_NaN()};
0135   double CM_halfwidth{std::numeric_limits<double>::quiet_NaN()};
0136   double adc_clock{std::numeric_limits<double>::quiet_NaN()};
0137   double extended_readout_time{std::numeric_limits<double>::quiet_NaN()};
0138   double drift_velocity_sim{std::numeric_limits<double>::quiet_NaN()};
0139 
0140   double rot_x{std::numeric_limits<double>::quiet_NaN()};
0141   double rot_y{std::numeric_limits<double>::quiet_NaN()};
0142   double rot_z{std::numeric_limits<double>::quiet_NaN()};
0143   double place_x{std::numeric_limits<double>::quiet_NaN()};
0144   double place_y{std::numeric_limits<double>::quiet_NaN()};
0145   double place_z{std::numeric_limits<double>::quiet_NaN()};
0146   
0147   std::array<std::vector<double>, NSides> sector_R_bias;
0148   std::array<std::vector<double>, NSides> sector_Phi_bias;
0149   std::array<std::vector<double>, NSides> sector_min_Phi;
0150   std::array<std::vector<double>, NSides> sector_max_Phi;
0151 
0152   // streamer
0153   friend std::ostream& operator<<(std::ostream&, const PHG4TpcGeomv2&);
0154 
0155   ClassDefOverride(PHG4TpcGeomv2, 1)
0156 };
0157 
0158 #endif