ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PHG4CylinderGeom_Spacalv3.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PHG4CylinderGeom_Spacalv3.h
1 // Tell emacs that this is a C++ source
2 // -*- C++ -*-.
3 // $$Id: PHG4CylinderGeom_Spacalv3.h,v 1.3 2014/08/28 22:18:35 jinhuang Exp $$
4 
12 #ifndef G4DETECTORS_PHG4CYLINDERGEOMSPACALV3_H
13 #define G4DETECTORS_PHG4CYLINDERGEOMSPACALV3_H
14 
16 
17 #include <iostream> // for operator<<, basic_ostream::op...
18 #include <map>
19 #include <string>
20 #include <utility> // std::pair, std::make_pair
21 
22 class PHParameters;
23 
25 {
26  public:
28 
29  ~PHG4CylinderGeom_Spacalv3() override;
30 
31 // from PHObject
32  void identify(std::ostream& os = std::cout) const override;
33 
34 // from TObject
35  void Print(Option_t* option = "") const override;
36 
37  void SetDefault() override;
38 
40  void ImportParameters(const PHParameters& param) override;
41 
42  double
44  {
45  return sidewall_outer_torr;
46  }
47 
48  void
49  set_sidewall_outer_torr(double sidewallOuterTorr)
50  {
51  sidewall_outer_torr = sidewallOuterTorr;
52  }
53 
54  double
56  {
57  return sidewall_thickness;
58  }
59 
60  void
61  set_sidewall_thickness(double sidewallThickness)
62  {
63  sidewall_thickness = sidewallThickness;
64  }
65 
66  std::string
68  {
69  return sidewall_mat;
70  }
71 
72  void
73  set_sidewall_mat(const std::string &absorberMat)
74  {
75  sidewall_mat = absorberMat;
76  }
77 
79  {
80  return max_phi_bin_in_sec;
81  }
82 
83  void
84  set_max_phi_bin_in_sec(int maxPhiBinInSec)
85  {
86  max_phi_bin_in_sec = maxPhiBinInSec;
87  }
88 
89  const std::string& get_divider_mat() const
90  {
91  return divider_mat;
92  }
93 
94  void set_divider_mat(const std::string& dividerMat)
95  {
96  divider_mat = dividerMat;
97  }
98 
99  double get_divider_width() const
100  {
101  return divider_width;
102  }
103 
104  void set_divider_width(double dividerWidth)
105  {
106  divider_width = dividerWidth;
107  }
108 
110  {
111  public:
112  geom_tower();
113  virtual ~geom_tower()
114  {
115  }
116 
117  int id;
118  double pDz;
119 
120  double pDy1;
121  double pDx1;
122  double pDx2;
123  double pDy2;
124  double pDx3;
125  double pDx4;
126 
127  double pTheta;
128  double pPhi;
129  double pAlp1;
130  double pAlp2;
131 
133  double centralX;
134  double centralY;
135  double centralZ;
136 
138 
140  int NFiberX;
142  int NFiberY;
143 
148 
150  int
151  compose_fiber_id(int index_x, int index_y) const;
153  int
154  get_sub_tower_ID_x(int fiber_id) const;
156  int
157  get_sub_tower_ID_y(int fiber_id) const;
159  double
160  get_position_fraction_x_in_sub_tower(int fiber_id) const;
162  double
163  get_position_fraction_y_in_sub_tower(int fiber_id) const;
164 
170  std::string LightguideMaterial;
171 
172  virtual void
173  identify(std::ostream& os = std::cout) const;
174 
176  void
177  ImportParameters(const PHParameters& param,
178  const std::string& param_prefix);
179 
181  };
182  typedef std::map<int, geom_tower> tower_map_t;
183 
184  void
186  void
188  void
190 
191  const tower_map_t&
193  {
194  return sector_tower_map;
195  }
196 
198  double
199  get_tower_radial_position(const geom_tower& tower) const;
200 
202  void
205  int get_n_subtower_eta() const;
207  int get_n_subtower_phi() const;
209  double
211 
212  //
213  // void
214  // set_geom_super_tower_map(geom_super_tower_map_t geomSuperTowerMap)
215  // {
216  // geom_super_tower_map = geomSuperTowerMap;
217  // }
218 
221  {
222  public:
223  explicit scint_id_coder(int scint_id);
224  scint_id_coder(int sector_id, int tower_id, int fiber_id);
225  virtual ~scint_id_coder()
226  {
227  }
228 
229  virtual void
230  identify(std::ostream& os = std::cout) const
231  {
232  os << "scint_id_coder with "
233  << "scint_ID(" << scint_ID << ") = "
234  << "sector_ID(" << sector_ID << "), "
235  << "tower_ID(" << tower_ID
236  << "), "
237  << "fiber_ID(" << fiber_ID << ")" << std::endl;
238  }
239 
240  int scint_ID;
242  int tower_ID;
243  int fiber_ID;
244 
245  static const int kfiber_bit = 13; // max 8192 fiber per tower
246  static const int ktower_bit = 11; // max 2048 towers per sector
247  static const int ksector_bit = 8; // max 256 sectors
248 
250  };
251 
254  virtual std::pair<int, int>
255  get_tower_z_phi_ID(const int tower_ID, const int sector_ID) const;
256 
257  protected:
260  std::string sidewall_mat;
262 
264 
268  std::string divider_mat;
269 
270  ClassDefOverride(PHG4CylinderGeom_Spacalv3, 4)
271 };
272 
273 #endif