File indexing completed on 2025-12-17 09:21:43
0001
0002
0003 #ifndef G4DETECTORS_PHG4TPCGEOMV1_H
0004 #define G4DETECTORS_PHG4TPCGEOMV1_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 PHG4TpcGeomv1 : public PHG4TpcGeom
0015 {
0016 public:
0017 PHG4TpcGeomv1() = default;
0018
0019 ~PHG4TpcGeomv1() override = default;
0020
0021
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; }
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 std::pair<double, double> get_zbounds(const int ibin) const override;
0045 std::pair<double, double> get_phibounds(const int ibin) const override;
0046 std::pair<double, double> get_etabounds(const int ibin) const override;
0047 double get_etacenter(const int ibin) const override;
0048 double get_zcenter(const int ibin) const override;
0049 double get_phicenter(const int ibin, const int side = 0) const override;
0050 double get_phicenter_new(const int ibin) const override;
0051 double get_phi(const float ibin, const int side = 0) const override;
0052
0053 int get_etabin(const double eta) const override;
0054 int get_zbin(const double z) const override;
0055 int get_phibin(const double phi, int side = 0) const override;
0056 int get_phibin_new(const double phi) const override;
0057
0058 float get_pad_float(const double phi, int side = 0) const override;
0059 float get_tbin_float(const double z) const override;
0060 int find_phibin(const double phi, int side = 0) const override;
0061
0062 void set_layer(const int i) override { layer = i; }
0063 void set_binning(const int i) override { binning = i; }
0064 void set_radius(const double r) override { radius = r; }
0065 void set_thickness(const double t) override { thickness = t; }
0066 void set_zbins(const int i) override;
0067 void set_zmin(const double z) override;
0068 void set_zstep(const double z) override;
0069 void set_phibins(const int i) override;
0070 void set_phistep(const double phi) override;
0071 void set_phimin(const double phi) override;
0072 void set_etabins(const int i) override;
0073 void set_etamin(const double z) override;
0074 void set_etastep(const double z) override;
0075
0076 void set_max_driftlength(const double val) override { max_driftlength = val; }
0077 void set_CM_halfwidth(const double val) override { CM_halfwidth = val; }
0078 void set_adc_clock(const double val) override { adc_clock = val; }
0079 void set_extended_readout_time(const double val) override { extended_readout_time = val; }
0080 void set_drift_velocity_sim(const double val) override { drift_velocity_sim = val; }
0081
0082 static const int NSides = 2;
0083
0084 void set_r_bias(const std::array<std::vector<double>, NSides> &dr) override { sector_R_bias = dr; }
0085 void set_phi_bias(const std::array<std::vector<double>, NSides> &dphi) override { sector_Phi_bias = dphi; }
0086
0087 void set_sector_min_phi(const std::array<std::vector<double>, NSides> &s_min_phi) override
0088 {
0089 sector_min_Phi = s_min_phi;
0090 }
0091 void set_sector_max_phi(const std::array<std::vector<double>, NSides> &s_max_phi) override
0092 {
0093 sector_max_Phi = s_max_phi;
0094 }
0095
0096 const std::array<std::vector<double>, NSides> &get_sector_min_phi() override
0097 {
0098 return sector_min_Phi;
0099 }
0100 const std::array<std::vector<double>, NSides> &get_sector_max_phi() override
0101 {
0102 return sector_max_Phi;
0103 }
0104
0105 protected:
0106 void check_binning_method(const int i) const;
0107 void check_binning_method_eta(const std::string& src = "") const;
0108 void check_binning_method_phi(const std::string& src = "") const;
0109 std::string methodname(const int i) const;
0110 int layer{-999};
0111 int binning{0};
0112 double radius{std::numeric_limits<double>::quiet_NaN()};
0113 int nzbins{-1};
0114 double zmin{std::numeric_limits<double>::quiet_NaN()};
0115 double zstep{std::numeric_limits<double>::quiet_NaN()};
0116 int nphibins{-1};
0117 double phimin{-M_PI};
0118 double phistep{std::numeric_limits<double>::quiet_NaN()};
0119 double thickness{std::numeric_limits<double>::quiet_NaN()};
0120
0121 double max_driftlength{std::numeric_limits<double>::quiet_NaN()};
0122 double CM_halfwidth{std::numeric_limits<double>::quiet_NaN()};
0123 double adc_clock{std::numeric_limits<double>::quiet_NaN()};
0124 double extended_readout_time{std::numeric_limits<double>::quiet_NaN()};
0125 double drift_velocity_sim{std::numeric_limits<double>::quiet_NaN()};
0126
0127 std::array<std::vector<double>, NSides> sector_R_bias;
0128 std::array<std::vector<double>, NSides> sector_Phi_bias;
0129 std::array<std::vector<double>, NSides> sector_min_Phi;
0130 std::array<std::vector<double>, NSides> sector_max_Phi;
0131
0132
0133 friend std::ostream& operator<<(std::ostream&, const PHG4TpcGeomv1&);
0134
0135 ClassDefOverride(PHG4TpcGeomv1, 1)
0136 };
0137
0138 #endif