EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PHG4mRICHDetector.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PHG4mRICHDetector.h
1 // Tell emacs that this is a C++ source
2 // -*- C++ -*-.
3 /*===============================================================*
4  * March 2nd 2017 *
5  * mRICH Detector created by Cheuk-Ping Wong @GSU *
6  *===============================================================*/
7 #ifndef G4DETECTORS_PHG4MRICHDETECTOR_H
8 #define G4DETECTORS_PHG4MRICHDETECTOR_H
9 
10 #include <g4main/PHG4Detector.h>
11 
12 #include <Geant4/G4Colour.hh>
13 #include <Geant4/G4ThreeVector.hh>
14 #include <Geant4/G4Types.hh> // for G4double, G4int
15 
16 #include <map> // for map
17 #include <string>
18 
19 class G4LogicalVolume;
20 class G4Material;
21 class G4VPhysicalVolume;
22 class PHParameters;
23 class PHCompositeNode;
24 class PHG4Subsystem;
25 
26 //___________________________________________________________________________
28 {
29  public:
31  PHG4mRICHDetector(PHG4Subsystem* subsys, PHCompositeNode* Node, PHParameters* parameters, const std::string& dnam, const int lyr = 0);
32 
34  virtual ~PHG4mRICHDetector() {}
35 
37  virtual void ConstructMe(G4LogicalVolume* world);
38 
39  //name volume accessors
40  //bool IsInBlock(G4VPhysicalVolume*) const;
41  int IsInmRICH(G4VPhysicalVolume*) const;
42 
43  //void BlackHole(const int i=1) {blackhole = i;}
44  //int IsBlackHole() const {return blackhole;}
45 
46  void SetActive(const int i = 1)
47  {
48  active = i;
49  }
50 
51  void SetAbsorberActive(const int i = 1)
52  {
53  absorberactive = i;
54  }
55 
56  void SuperDetector(const std::string& name) { superdetector = name; }
57  const std::string SuperDetector() const { return superdetector; }
58  int get_Layer() const { return layer; }
59 
60  enum
61  {
62  SENSOR = 1,
63  AEROGEL = 0,
64  INACTIVE = -100
65  };
66 
68  {
71  kHSector = 1,
72  kEWall = 2,
73  kHWall = 3,
77  kESph = 7
78  };
79 
80  private:
81  class mRichParameter;
82  class BoxPar;
83  class PolyPar;
84  class LensPar;
85 
87 
88  G4VPhysicalVolume* build_box(BoxPar* par, G4LogicalVolume* motherLV);
89  G4VPhysicalVolume* build_polyhedra(PolyPar* par, G4LogicalVolume* motherLV);
90 
91  G4LogicalVolume* Construct_a_mRICH(G4LogicalVolume* logicWorld); //, int detectorSetup); //single mRICH
92  G4VPhysicalVolume* build_holderBox(mRichParameter* detectorParameter, G4LogicalVolume* motherLV);
93  void build_foamHolder(mRichParameter* detectorParameter, G4LogicalVolume* motherLV);
94  void build_aerogel(mRichParameter* detectorParameter, G4VPhysicalVolume* motherPV);
95  void build_lens(LensPar* par, G4LogicalVolume* motherLV);
96  void build_mirror(mRichParameter* detectorParameter, G4VPhysicalVolume* motherPV);
97  void build_sensor(mRichParameter* detectorParameter, G4LogicalVolume* motherLV);
98 
99  void build_mRICH_wall_hside(G4LogicalVolume* space);
100  void build_mRICH_wall_eside(G4LogicalVolume* space);
101  void build_mRICH_sector(G4LogicalVolume* logicWorld, int numSector);
102  void build_mRICH_sector2(G4LogicalVolume* logicWorld, int numSector);
103  void build_mRICH_wall_eside_proj(G4LogicalVolume* space);
104 
105  int layer;
106  int active;
108  //int blackhole;
109  std::string superdetector;
110  G4VPhysicalVolume* mRICH_PV; //physical volume of detector box of single module
111  G4VPhysicalVolume* sensor_PV[4]; //physical volume of sensors the sensitive components
112 
113  std::map<const G4VPhysicalVolume*, int> sensor_vol; // physical volume of senseors
114  std::map<const G4VPhysicalVolume*, int> aerogel_vol; // physical volume of senseors
115 };
116 //___________________________________________________________________________
118 {
119  private:
130 
131  public:
132  mRichParameter();
133  ~mRichParameter();
134 
135  void SetPar_glassWindow(int i, G4double x, G4double y);
136  void SetPar_sensor(int i, G4double x, G4double y);
137  BoxPar* GetBoxPar(std::string componentName);
138  LensPar* GetLensPar(std::string componentName);
139  PolyPar* GetPolyPar(std::string componentName);
140 };
141 //___________________________________________________________________________
143 {
144  public:
145  std::string name;
146  G4double halfXYZ[3];
147  G4ThreeVector pos;
148  G4Material* material;
150 
151  G4Colour color;
153  bool wireframe;
154  bool surface;
155 
156  BoxPar();
157  ~BoxPar();
158 };
159 //___________________________________________________________________________
161 {
162  public:
163  std::string name;
164  G4ThreeVector pos;
165  G4double start;
166  G4double theta;
167  G4int numSide;
168  G4int num_zLayer;
169  G4double z[4]; //max. layer is 4
170  G4double rinner[4];
171  G4double router[4];
172  G4Material* material;
174 
175  G4Colour color;
177  bool wireframe;
178  bool surface;
179 
180  PolyPar();
181  ~PolyPar() {}
182 };
183 //___________________________________________________________________________
185 {
186  public:
187  std::string name;
188  G4double n;
189  G4double f;
190  G4double diameter;
191  G4double eff_diameter;
192  G4double centerThickness;
193  G4double grooveWidth;
194 
195  G4double halfXYZ[3];
196  G4ThreeVector pos;
197  G4Material* material;
199 
200  G4Colour color;
202  bool wireframe;
203  bool surface;
204 
205  LensPar();
206  ~LensPar() {}
207 
208  void Set_halfXYZ(G4double halfX, G4double grooveDensity);
209  G4double GetSagita(G4double r);
210 };
211 //___________________________________________________________________________
212 #endif