EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ePHENIXRICHConstruction.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file ePHENIXRICHConstruction.h
1 // Tell emacs that this is a C++ source
2 // -*- C++ -*-.
3 
12 #ifndef G4DETECTORS_EPHENIXRICHCONSTRUCTION_H
13 #define G4DETECTORS_EPHENIXRICHCONSTRUCTION_H
14 
15 #include <Geant4/G4String.hh>
16 #include <Geant4/G4SystemOfUnits.hh>
17 #include <Geant4/G4Types.hh> // for G4int
18 
19 
20 #include <map>
21 #include <set>
22 #include <utility> // for pair
23 
24 class G4VPhysicalVolume;
25 class G4LogicalVolume;
26 class G4OpticalSurface;
27 class G4PVPlacement;
29 class PHG4Subsystem;
30 class G4Material;
31 
32 namespace ePHENIXRICH
33 {
47 {
48  public:
54  {
55  SetDefault();
57  }
58 
62  void
63  SetDefault();
64 
68  void
70 
74  static double Unit_cm() { return cm; }
78 
79  double
80  get_R_max() const
81  {
83  }
84 
85  double
87  {
88  return (z_shift + get_R_max()) * 2;
89  }
90 
91  double
92  get_R_frontwindow() const;
93 
94  double
95  get_half_angle_HBD() const;
96 
97  double
98  get_RZ_Seg1_HBD() const;
99 
100  double
101  get_RZ_Seg2_HBD() const;
102 
103  double
104  get_R_Tip_HBD() const;
105 
106  double
107  get_Z_Tip_HBD() const;
108 
109  double
110  get_Rotation_HBD() const;
111 
112  double
114  {
115  return R_beam_pipe_front;
116  }
117  double
119  {
120  return R_beam_pipe_back;
121  }
122  double
124  {
126  }
127 
128  double
130  {
132  }
133 
134  double
135  get_min_eta() const
136  {
137  return min_eta;
138  }
139 
140  double
142  {
143  return R_mirror_ref;
144  }
145 
146  double
148  {
149  return dR_backwindow;
150  }
151 
152  double
154  {
155  return dR_frontwindow;
156  }
157 
158  double
160  {
161  return dR_frontwindow_shrink;
162  }
163 
164  double
166  {
167  return dR_mirror;
168  }
169 
170  double
172  {
173  return dR_mirror_spt;
174  }
175 
176  G4String
178  {
179  return RICH_gas_mat;
180  }
181 
182  G4String
184  {
185  return RICH_Gas_Window_mat;
186  }
187 
188  G4String
190  {
191  return RICH_Mirror_mat;
192  }
193 
194  G4OpticalSurface*
196  {
198  }
199 
200  int get_N_RICH_Sector() const
201  {
202  return N_RICH_Sector;
203  }
204 
205  double
206  get_z_shift() const
207  {
208  return z_shift;
209  }
210 
211  double
212  get_R_shift() const
213  {
214  return R_shift;
215  }
216 
217  int get_n_GEM_layers() const
218  {
219  return n_GEM_layers;
220  }
221 
222  double
224  {
225  return HBD_thickness;
226  }
227 
228  G4OpticalSurface*
230  {
232  }
234 
238 
239  void
240  set_R_beam_pipe_front(double beamPipe)
241  {
242  R_beam_pipe_front = beamPipe;
243  }
244 
248 
249  void
250  set_R_beam_pipe_back(double beamPipe)
251  {
252  R_beam_pipe_back = beamPipe;
253  }
254 
255  void
256  set_frontwindow_DisplaceRatio(double frontwindowDisplaceRatio)
257  {
258  frontwindow_DisplaceRatio = frontwindowDisplaceRatio;
259  }
260 
261  void
262  set_min_eta(double minEta)
263  {
264  min_eta = minEta;
265  }
266 
267  void
268  set_R_mirror_ref(double mirrorRef)
269  {
270  R_mirror_ref = mirrorRef;
271  }
272 
273  void
274  set_dR_backwindow(double rBackwindow)
275  {
276  dR_backwindow = rBackwindow;
277  }
278 
279  void
280  set_dR_frontwindow(double rFrontwindow)
281  {
282  dR_frontwindow = rFrontwindow;
283  }
284 
285  void
286  set_dR_frontwindow_shrink(double rFrontwindowShrink)
287  {
288  dR_frontwindow_shrink = rFrontwindowShrink;
289  }
290 
291  void
292  set_dR_mirror(double rMirror)
293  {
294  dR_mirror = rMirror;
295  }
296 
297  void
298  set_dR_mirror_spt(double rMirrorSpt)
299  {
300  dR_mirror_spt = rMirrorSpt;
301  }
302 
303  void
304  set_RICH_gas_mat(G4String richGasMat)
305  {
306  RICH_gas_mat = richGasMat;
307  }
308 
309  void
310  set_RICH_Gas_Window_mat(G4String richGasWindowMat)
311  {
312  RICH_Gas_Window_mat = richGasWindowMat;
313  }
314 
315  void
316  set_RICH_Mirror_mat(G4String richMirrorMat)
317  {
318  RICH_Mirror_mat = richMirrorMat;
319  }
320 
321  void
322  set_N_RICH_Sector(int richSector)
323  {
324  N_RICH_Sector = richSector;
325  }
326 
327  void
328  set_z_shift(double shift)
329  {
330  z_shift = shift;
331  }
332 
333  void
334  set_R_shift(double shift)
335  {
336  R_shift = shift;
337  }
338 
339  void
340  set_n_GEM_layers(int gemLayers)
341  {
342  n_GEM_layers = gemLayers;
343  }
344 
345  void
346  set_HBD_thickness(double hbdThickness)
347  {
348  HBD_thickness = hbdThickness;
349  }
351 
352  private:
354 
355  double min_eta;
358 
359  double z_shift;
360  double R_shift;
361  double frontwindow_DisplaceRatio; // Displace R,Z and radius simultainously
363  double R_mirror_ref;
364 
365  double dR_mirror;
369 
372 
373  G4String RICH_gas_mat;
374  G4String RICH_Mirror_mat;
376 
377  G4OpticalSurface* RICH_Mirror_OpticalSurface;
379 };
380 
381 
394 {
395  public:
399 
400  virtual void
401  OverlapCheck(bool check)
402  {
403  overlapcheck_rich = check;
404  }
405 
406  G4LogicalVolume*
407  Construct_RICH(G4LogicalVolume*);
408 
409  G4LogicalVolume*
410  Construct_HBD(G4LogicalVolume* RICHSecLog);
411 
412  G4LogicalVolume*
413  Construct_HBD_Layers(G4LogicalVolume* RICHHBDLog, const G4String name,
414  const G4String material, const double start_z, const double thickness);
415 
417 
421  int is_in_sector(G4VPhysicalVolume*) const;
423 
424  protected:
425  static G4Material *GetDetectorMaterial(const std::string &name, const bool quit = true);
426 
427  G4LogicalVolume*
428  RegisterLogicalVolume(G4LogicalVolume*);
429 
430  typedef std::map<G4String, G4LogicalVolume*> map_log_vol_t;
432 
433  G4PVPlacement*
434  RegisterPhysicalVolume(G4PVPlacement*);
435 
436  typedef std::pair<G4String, G4int> phy_vol_idx_t;
437  typedef std::map<phy_vol_idx_t, G4PVPlacement*> map_phy_vol_t;
438 
441 
443 
447  std::set<G4VPhysicalVolume*> sector_vec;
448 };
449 
450 } //namespace ePHENIXRICH
451 
452 #endif // G4DETECTORS_EPHENIXRICHCONSTRUCTION_H