File indexing completed on 2025-08-05 08:20:44
0001
0002
0003 #ifndef G4CALOPROTOTYPE_PHG4PROTOTYPE2OUTERHCALDETECTOR_H
0004 #define G4CALOPROTOTYPE_PHG4PROTOTYPE2OUTERHCALDETECTOR_H
0005
0006 #include <g4main/PHG4Detector.h>
0007
0008 #include <Geant4/G4TwoVector.hh>
0009
0010 #include <map>
0011 #include <set>
0012 #include <string> // for string
0013
0014 class G4AssemblyVolume;
0015 class G4LogicalVolume;
0016 class G4VPhysicalVolume;
0017 class PHCompositeNode;
0018 class PHG4Subsystem;
0019 class PHParameters;
0020
0021 class PHG4Prototype2OuterHcalDetector : public PHG4Detector
0022 {
0023 public:
0024
0025 PHG4Prototype2OuterHcalDetector(PHG4Subsystem* subsys, PHCompositeNode* Node, PHParameters* parameters, const std::string& dnam);
0026
0027
0028 virtual ~PHG4Prototype2OuterHcalDetector();
0029
0030
0031 virtual void ConstructMe(G4LogicalVolume* world);
0032
0033 virtual void Print(const std::string& what = "ALL") const;
0034
0035
0036
0037 int IsInPrototype2OuterHcal(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 G4LogicalVolume* ConstructSteelPlate(G4LogicalVolume* hcalenvelope);
0045 G4LogicalVolume* ConstructScintillatorBox(G4LogicalVolume* hcalenvelope);
0046 G4LogicalVolume* ConstructScintillatorBoxHiEta(G4LogicalVolume* hcalenvelope);
0047 G4LogicalVolume* ConstructScintiTileU1(G4LogicalVolume* hcalenvelope);
0048 G4LogicalVolume* ConstructScintiTileU2(G4LogicalVolume* hcalenvelope);
0049 G4LogicalVolume* ConstructScintiTile9(G4LogicalVolume* hcalenvelope);
0050 G4LogicalVolume* ConstructScintiTile10(G4LogicalVolume* hcalenvelope);
0051 G4LogicalVolume* ConstructScintiTile11(G4LogicalVolume* hcalenvelope);
0052 G4LogicalVolume* ConstructScintiTile12(G4LogicalVolume* hcalenvelope);
0053 double GetScintiAngle();
0054
0055 int get_scinti_row_id(const std::string& volname);
0056 int get_steel_plate_id(const std::string& volname);
0057
0058 private:
0059 int ConstructOuterHcal(G4LogicalVolume* sandwich);
0060 std::set<G4LogicalVolume*> m_ActiveVolumeSet;
0061 PHParameters* m_Params;
0062 G4LogicalVolume* m_OuterHcalSteelPlate;
0063 G4AssemblyVolume* m_OuterHcalAssembly;
0064 G4TwoVector m_SteelPlateCornerUpperLeft;
0065 G4TwoVector m_SteelPlateCornerUpperRight;
0066 G4TwoVector m_SteelPlateCornerLowerRight;
0067 G4TwoVector m_SteelPlateCornerLowerLeft;
0068
0069 double m_ScintiUoneFrontSize;
0070 G4TwoVector m_ScintiUoneCornerUpperLeft;
0071 G4TwoVector m_ScintiUoneCornerUpperRight;
0072 G4TwoVector m_ScintiUoneCornerLowerRight;
0073 G4TwoVector m_ScintiUoneCornerLowerLeft;
0074
0075 G4TwoVector m_ScintiU2CornerUpperLeft;
0076 G4TwoVector m_ScintiU2CornerUpperRight;
0077 G4TwoVector m_ScintiU2CornerLowerRight;
0078 G4TwoVector m_ScintiU2CornerLowerLeft;
0079 double m_ScintiT9DistanceToCorner;
0080 double m_ScintiT9FrontSize;
0081 G4TwoVector m_ScintiT9CornerUpperLeft;
0082 G4TwoVector m_ScintiT9CornerUpperRight;
0083 G4TwoVector m_ScintiT9CornerLowerRight;
0084 G4TwoVector m_ScintiT9CornerLowerLeft;
0085
0086 double m_ScintiT10FrontSize;
0087 G4TwoVector m_ScintiT10CornerUpperLeft;
0088 G4TwoVector m_ScintiT10CornerUpperRight;
0089 G4TwoVector m_ScintiT10CornerLowerRight;
0090 G4TwoVector m_ScintiT10CornerLowerLeft;
0091
0092 double m_ScintiT11FrontSize;
0093 G4TwoVector m_ScintiT11CornerUpperLeft;
0094 G4TwoVector m_ScintiT11CornerUpperRight;
0095 G4TwoVector m_ScintiT11CornerLowerRight;
0096 G4TwoVector m_ScintiT11CornerLowerLeft;
0097
0098 double m_ScintiT12FrontSize;
0099 G4TwoVector m_ScintiT12CornerUpperLeft;
0100 G4TwoVector m_ScintiT12CornerUpperRight;
0101 G4TwoVector m_ScintiT12CornerLowerRight;
0102 G4TwoVector m_ScintiT12CornerLowerLeft;
0103
0104 double m_ScintiX;
0105 double m_ScintiXHiEta;
0106 double m_SteelZ;
0107 double m_SizeZ;
0108 double m_ScintiTileZ;
0109 double m_ScintiTileThickness;
0110 double m_ScintiBoxSmaller;
0111 double m_GapBetweenTiles;
0112 double m_ScintiGap;
0113 double m_TiltAngle;
0114 double m_DeltaPhi;
0115 double m_VolumeSteel;
0116 double m_VolumeScintillator;
0117
0118 int m_NScintiPlates;
0119 int m_NSteelPlates;
0120
0121 int m_ActiveFlag;
0122 int m_AbsorberActiveFlag;
0123
0124 int m_Layer;
0125 std::string m_SuperDetector;
0126 std::map<std::string, int> m_SteelPlateIdMap;
0127 std::map<std::string, int> m_ScintillatorIdMap;
0128 };
0129
0130 #endif