Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PHG4MvtxDetector.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PHG4MvtxDetector.h
1 // Tell emacs that this is a C++ source
2 // -*- C++ -*-.
3 #ifndef G4MVTX_PHG4MVTXDETECTOR_H
4 #define G4MVTX_PHG4MVTXDETECTOR_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  PHG4MvtxDetector(PHG4Subsystem* subsys, PHCompositeNode* Node, const PHParametersContainer* _paramsContainer, const std::string& dnam);
28 
30  ~PHG4MvtxDetector() 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 IsSupportActive(int lyr) const { return m_IsLayerSupportActive[lyr]; }
43  int IsBlackHole(int lyr) const { return m_IsBlackHole[lyr]; }
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  void FillSupportLVArray(G4LogicalVolume* lv) { m_SupportLV.insert(lv); }
53 
54  private:
55  void AddGeometryNode();
56  int ConstructMvtx(G4LogicalVolume* sandwich);
57  int ConstructMvtx_Layer(int layer, G4AssemblyVolume* stave, G4LogicalVolume*& trackerenvelope);
58  int ConstructMvtxPassiveVol(G4LogicalVolume*& lv);
59 
60  void SetDisplayProperty(G4AssemblyVolume* av);
61  void SetDisplayProperty(G4LogicalVolume* lv);
62  void FillPVArray(G4AssemblyVolume* av);
63  void FindSensor(G4LogicalVolume* lv);
64  // calculated quantities
65  double get_phistep(int lay) const { return 2.0 * M_PI / m_N_staves[lay]; }
66 
69 
70  static constexpr int n_Layers{3};
72 
76 
77  // map of sensor physical volume pointers
78  std::set<G4VPhysicalVolume*> m_SensorPV;
79  std::map<G4VPhysicalVolume*, std::tuple<int, int>> m_StavePV;
80  // set of support structures
81  std::set<G4LogicalVolume*> m_SupportLV;
82 
83  // setup parameters
84  std::array<int, n_Layers> m_IsLayerActive{};
85  std::array<int, n_Layers> m_IsLayerSupportActive{};
86  std::array<int, n_Layers> m_IsBlackHole{};
87  std::array<int, n_Layers> m_N_staves{};
88  std::array<double, n_Layers> m_nominal_radius{};
89  std::array<double, n_Layers> m_nominal_phitilt{};
90  std::array<double, n_Layers> m_nominal_phi0{};
91 };
92 
93 #endif