File indexing completed on 2025-08-05 08:18:13
0001
0002
0003 #ifndef G4MVTX_PHG4EICMVTXDETECTOR_H
0004 #define G4MVTX_PHG4EICMVTXDETECTOR_H
0005
0006 #include <g4main/PHG4Detector.h>
0007
0008 #include <array>
0009 #include <cmath> // for M_PI
0010 #include <map>
0011 #include <set>
0012 #include <string>
0013 #include <tuple> // for tuple
0014
0015 class G4AssemblyVolume;
0016 class G4LogicalVolume;
0017 class G4VPhysicalVolume;
0018 class PHCompositeNode;
0019 class PHG4MvtxDisplayAction;
0020 class PHG4Subsystem;
0021 class PHParametersContainer;
0022
0023 class PHG4EICMvtxDetector : public PHG4Detector
0024 {
0025 public:
0026
0027 PHG4EICMvtxDetector(PHG4Subsystem* subsys, PHCompositeNode* Node, const PHParametersContainer* _paramsContainer, const std::string& dnam);
0028
0029
0030 ~PHG4EICMvtxDetector() override = default;
0031
0032
0033 void ConstructMe(G4LogicalVolume* world) override;
0034
0035
0036
0037 int IsInMvtx(G4VPhysicalVolume*, int& layer, int& stave) const;
0038 int IsSensor(G4VPhysicalVolume*) const;
0039
0040
0041 int IsActive(int lyr) const { return m_IsLayerActive[lyr]; }
0042 int IsAbsorberActive(int lyr) const { return m_IsLayerAbsorberActive[lyr]; }
0043 int IsBlackHole(int lyr) const { return m_IsBlackHole[lyr]; }
0044 void SuperDetector(const std::string& name) { m_SuperDetector = name; }
0045 const std::string &SuperDetector() const { return m_SuperDetector; }
0046 void Detector(const std::string& name) { m_Detector = name; }
0047 const std::string &Detector() const { return m_Detector; }
0048
0049 int get_layer(int stv_index) const;
0050 int get_stave(int stv_index) const;
0051
0052 private:
0053 void AddGeometryNode();
0054 int ConstructMvtx(G4LogicalVolume* sandwich);
0055 int ConstructMvtx_Layer(int layer, G4AssemblyVolume* stave, G4LogicalVolume*& trackerenvelope);
0056 void SetDisplayProperty(G4AssemblyVolume* av);
0057 void SetDisplayProperty(G4LogicalVolume* lv);
0058 void FillPVArray(G4AssemblyVolume* av);
0059 void FindSensor(G4LogicalVolume* lv);
0060
0061 double get_phistep(int lay) const { return 2.0 * M_PI / m_N_staves[lay]; }
0062
0063 static constexpr int n_Layers = 3;
0064 PHG4MvtxDisplayAction* m_DisplayAction;
0065 const PHParametersContainer* m_ParamsContainer;
0066
0067
0068 std::set<G4VPhysicalVolume*> m_SensorPV;
0069 std::map<G4VPhysicalVolume*, std::tuple<int, int>> m_StavePV;
0070
0071
0072 std::array<int, n_Layers> m_IsLayerActive{};
0073 std::array<int, n_Layers> m_IsLayerAbsorberActive{};
0074 std::array<int, n_Layers> m_IsBlackHole{};
0075 std::array<int, n_Layers> m_N_staves{};
0076 std::array<double, n_Layers> m_nominal_radius{};
0077 std::array<double, n_Layers> m_nominal_phitilt{};
0078 std::array<double, n_Layers> m_nominal_phi0{};
0079
0080 std::string m_Detector;
0081 std::string m_SuperDetector;
0082 std::string m_StaveGeometryFile;
0083 };
0084
0085 #endif