ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PHG4EICMvtxDetector.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PHG4EICMvtxDetector.h
1 // Tell emacs that this is a C++ source
2 // -*- C++ -*-.
3 #ifndef G4MVTX_PHG4EICMVTXDETECTOR_H
4 #define G4MVTX_PHG4EICMVTXDETECTOR_H
5 
6 #include <g4main/PHG4Detector.h>
7 
8 #include <array>
9 #include <cmath> // for M_PI
10 #include <map>
11 #include <set>
12 #include <string>
13 #include <tuple> // for tuple
14 
15 class G4AssemblyVolume;
16 class G4LogicalVolume;
17 class G4VPhysicalVolume;
18 class PHCompositeNode;
20 class PHG4Subsystem;
22 
24 {
25  public:
27  PHG4EICMvtxDetector(PHG4Subsystem* subsys, PHCompositeNode* Node, const PHParametersContainer* _paramsContainer, const std::string& dnam);
28 
30  ~PHG4EICMvtxDetector() override {}
31 
33  void ConstructMe(G4LogicalVolume* world) override;
34 
36 
37  int IsInMvtx(G4VPhysicalVolume*, int& layer, int& stave) const;
38  int IsSensor(G4VPhysicalVolume*) const;
40 
41  int IsActive(int lyr) const { return m_IsLayerActive[lyr]; }
42  int IsAbsorberActive(int lyr) const { return m_IsLayerAbsorberActive[lyr]; }
43  int IsBlackHole(int lyr) const { return m_IsBlackHole[lyr]; }
44  void SuperDetector(const std::string& name) { m_SuperDetector = name; }
45  const std::string SuperDetector() const { return m_SuperDetector; }
46  void Detector(const std::string& name) { m_Detector = name; }
47  const std::string Detector() const { return m_Detector; }
48 
49  int get_layer(int stv_index) const;
50  int get_stave(int stv_index) const;
51 
52  private:
53  void AddGeometryNode();
54  int ConstructMvtx(G4LogicalVolume* sandwich);
55  int ConstructMvtx_Layer(int layer, G4AssemblyVolume* stave, G4LogicalVolume*& trackerenvelope);
58  void FillPVArray(G4AssemblyVolume* av);
59  void FindSensor(G4LogicalVolume* lv);
60  // calculated quantities
61  double get_phistep(int lay) const { return 2.0 * M_PI / m_N_staves[lay]; }
62 
63  static constexpr int n_Layers = 3;
66 
67  // map of sensor physical volume pointers
68  std::set<G4VPhysicalVolume*> m_SensorPV;
69  std::map<G4VPhysicalVolume*, std::tuple<int, int>> m_StavePV;
70 
71  // setup parameters
72  std::array<int, n_Layers> m_IsLayerActive;
73  std::array<int, n_Layers> m_IsLayerAbsorberActive;
74  std::array<int, n_Layers> m_IsBlackHole;
75  std::array<int, n_Layers> m_N_staves;
76  std::array<double, n_Layers> m_nominal_radius;
77  std::array<double, n_Layers> m_nominal_phitilt;
78  std::array<double, n_Layers> m_nominal_phi0;
79 
80  std::string m_Detector;
81  std::string m_SuperDetector;
82  std::string m_StaveGeometryFile;
83 };
84 
85 #endif