File indexing completed on 2025-08-06 08:22:07
0001
0002
0003 #ifndef G4CALOPROTOTYPE_PHG4PROTOTYPE3INNERHCALDETECTOR_H
0004 #define G4CALOPROTOTYPE_PHG4PROTOTYPE3INNERHCALDETECTOR_H
0005
0006 #include <g4main/PHG4Detector.h>
0007
0008 #include <Geant4/G4TwoVector.hh>
0009
0010 #include <map>
0011 #include <set>
0012 #include <string>
0013
0014 class G4AssemblyVolume;
0015 class G4LogicalVolume;
0016 class G4VPhysicalVolume;
0017 class PHCompositeNode;
0018 class PHG4Subsystem;
0019 class PHParameters;
0020
0021 class PHG4Prototype3InnerHcalDetector : public PHG4Detector
0022 {
0023 public:
0024
0025 PHG4Prototype3InnerHcalDetector(PHG4Subsystem *subsys, PHCompositeNode *Node, PHParameters *parameters, const std::string &dnam);
0026
0027
0028 virtual ~PHG4Prototype3InnerHcalDetector();
0029
0030 void ConstructMe(G4LogicalVolume *world);
0031
0032
0033 void Print(const std::string &what = "ALL") const;
0034
0035
0036
0037 int IsInPrototype3InnerHcal(G4VPhysicalVolume *) const;
0038
0039
0040 void SuperDetector(const std::string &name) { m_SuperDetector = name; }
0041 const std::string SuperDetector() const { return m_SuperDetector; }
0042 int get_Layer() const { return m_Layer; }
0043
0044 int get_scinti_row_id(const std::string &volname);
0045 int get_steel_plate_id(const std::string &volname);
0046
0047 private:
0048 G4LogicalVolume *ConstructSteelPlate(G4LogicalVolume *hcalenvelope);
0049 G4LogicalVolume *ConstructScintillatorBoxHiEta(G4LogicalVolume *hcalenvelope);
0050 G4LogicalVolume *ConstructScintiTile9(G4LogicalVolume *hcalenvelope);
0051 G4LogicalVolume *ConstructScintiTile10(G4LogicalVolume *hcalenvelope);
0052 G4LogicalVolume *ConstructScintiTile11(G4LogicalVolume *hcalenvelope);
0053 G4LogicalVolume *ConstructScintiTile12(G4LogicalVolume *hcalenvelope);
0054 double GetScintiAngle();
0055 int ConstructInnerHcal(G4LogicalVolume *sandwich);
0056
0057 PHParameters *m_params;
0058 G4LogicalVolume *m_InnerHcalSteelPlate;
0059 G4AssemblyVolume *m_InnerHcalAssembly;
0060 G4LogicalVolume *m_scintibox;
0061 std::set<G4LogicalVolume *> m_ActiveVolumeSet;
0062 G4TwoVector m_SteelPlateCornerUpperLeft;
0063 G4TwoVector m_SteelPlateCornerUpperRight;
0064 G4TwoVector m_SteelPlateCornerLowerRight;
0065 G4TwoVector m_SteelPlateCornerLowerLeft;
0066
0067 double m_ScintiTile9DistanceToCorner;
0068 double m_ScintiTile9FrontSize;
0069 G4TwoVector m_ScintiTile9CornerUpperLeft;
0070 G4TwoVector m_ScintiTile9CornerUpperRight;
0071 G4TwoVector m_ScintiTile9CornerLowerRight;
0072 G4TwoVector m_ScintiTile9CornerLowerLeft;
0073
0074 double m_ScintiTile10FrontSize;
0075 G4TwoVector m_ScintiTile10CornerUpperLeft;
0076 G4TwoVector m_ScintiTile10CornerUpperRight;
0077 G4TwoVector m_ScintiTile10CornerLowerRight;
0078 G4TwoVector m_ScintiTile10CornerLowerLeft;
0079
0080 double m_ScintiTile11FrontSize;
0081 G4TwoVector m_ScintiTile11CornerUpperLeft;
0082 G4TwoVector m_ScintiTile11CornerUpperRight;
0083 G4TwoVector m_ScintiTile11CornerLowerRight;
0084 G4TwoVector m_ScintiTile11CornerLowerLeft;
0085
0086 double m_ScintiTile12FrontSize;
0087 G4TwoVector m_ScintiTile12CornerUpperLeft;
0088 G4TwoVector m_ScintiTile12CornerUpperRight;
0089 G4TwoVector m_ScintiTile12CornerLowerRight;
0090 G4TwoVector m_ScintiTile12CornerLowerLeft;
0091
0092 double m_ScintiX;
0093 double m_SteelZ;
0094 double m_ScintiTileZ;
0095 double m_ScintiTileThickness;
0096 double m_GapBetweenTiles;
0097 double m_ScintiGap;
0098 double m_DeltaPhi;
0099 double m_VolumeSteel;
0100 double m_VolumeScintillator;
0101
0102 G4TwoVector m_ScintiCornerLowerLeft;
0103 G4TwoVector m_ScintiCornerLowerRight;
0104
0105
0106
0107
0108 int m_NumScintiPlates;
0109 int m_NumSteelPlates;
0110
0111 int m_Active;
0112 int m_AbsorberActive;
0113
0114 int m_Layer;
0115 std::string m_SuperDetector;
0116 std::map<std::string, int> m_SteelPlateIdMap;
0117 std::map<std::string, int> m_ScintillatorIdMap;
0118 };
0119
0120 #endif