ECCE @ 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 
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 
101  void build_mRICH_sector(G4LogicalVolume* logicWorld, int numSector);
102  void build_mRICH_sector2(G4LogicalVolume* logicWorld, int numSector);
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;
150 
153  bool wireframe;
154  bool surface;
155 
156  BoxPar();
157  ~BoxPar();
158 };
159 //___________________________________________________________________________
161 {
162  public:
163  std::string name;
169  G4double z[4]; //max. layer is 4
174 
177  bool wireframe;
178  bool surface;
179 
180  PolyPar();
181  ~PolyPar() {}
182 };
183 //___________________________________________________________________________
185 {
186  public:
187  std::string name;
194 
199 
202  bool wireframe;
203  bool surface;
204 
205  LensPar();
206  ~LensPar() {}
207 
208  void Set_halfXYZ(G4double halfX, G4double grooveDensity);
210 };
211 //___________________________________________________________________________
212 #endif