File indexing completed on 2026-04-07 07:51:43
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifndef DetectorConstruction_h
0030 #define DetectorConstruction_h 1
0031
0032 #include "CLHEP/Units/SystemOfUnits.h"
0033
0034 #include "G4VUserDetectorConstruction.hh"
0035 #include "globals.hh"
0036
0037 class G4Box;
0038 class G4LogicalVolume;
0039 class G4VPhysicalVolume;
0040 class G4Material;
0041 class DetectorMessenger;
0042
0043
0044
0045 class DetectorConstruction : public G4VUserDetectorConstruction
0046 {
0047 public:
0048 DetectorConstruction();
0049 ~DetectorConstruction() override;
0050
0051 public:
0052 G4VPhysicalVolume* Construct() override;
0053
0054 void SetAbsorberMaterial(const G4String&);
0055 void SetAbsorberThickness(G4double);
0056
0057 void SetGapMaterial(const G4String&);
0058 void SetGapThickness(G4double);
0059
0060 void SetCalorSizeYZ(G4double);
0061 void SetNbOfLayers(G4int);
0062
0063 void PrintCalorParameters();
0064
0065 G4double GetWorldSizeX() { return fWorldSizeX; }
0066 G4double GetWorldSizeYZ() { return fWorldSizeYZ; }
0067
0068 G4double GetCalorThickness() { return fCalorThickness; }
0069 G4double GetCalorSizeYZ() { return fCalorSizeYZ; }
0070
0071 G4int GetNbOfLayers() { return fNbOfLayers; }
0072
0073 G4Material* GetAbsorberMaterial() { return fAbsorberMaterial; }
0074 G4double GetAbsorberThickness() { return fAbsorberThickness; }
0075
0076 G4Material* GetGapMaterial() { return fGapMaterial; }
0077 G4double GetGapThickness() { return fGapThickness; }
0078
0079 const G4VPhysicalVolume* GetphysiWorld() { return fPhysiWorld; }
0080 const G4VPhysicalVolume* GetAbsorber() { return fPhysiAbsorber; }
0081 const G4VPhysicalVolume* GetGap() { return fPhysiGap; }
0082
0083 private:
0084 void DefineMaterials();
0085 void ComputeCalorParameters();
0086 G4VPhysicalVolume* ConstructCalorimeter();
0087
0088 G4Material* fAbsorberMaterial = nullptr;
0089 G4Material* fGapMaterial = nullptr;
0090 G4Material* fDefaultMaterial = nullptr;
0091
0092 G4int fNbOfLayers = 10;
0093 G4double fAbsorberThickness = 10. * CLHEP::mm;
0094 G4double fGapThickness = 5. * CLHEP::mm;
0095 G4double fCalorSizeYZ = 10. * CLHEP::cm;
0096
0097 G4double fCalorThickness = 0.;
0098 G4double fLayerThickness = 0.;
0099 G4double fWorldSizeYZ = 0.;
0100 G4double fWorldSizeX = 0.;
0101
0102 G4Box* fSolidWorld = nullptr;
0103 G4LogicalVolume* fLogicWorld = nullptr;
0104 G4VPhysicalVolume* fPhysiWorld = nullptr;
0105
0106 G4Box* fSolidCalor = nullptr;
0107 G4LogicalVolume* fLogicCalor = nullptr;
0108 G4VPhysicalVolume* fPhysiCalor = nullptr;
0109
0110 G4Box* fSolidLayer = nullptr;
0111 G4LogicalVolume* fLogicLayer = nullptr;
0112 G4VPhysicalVolume* fPhysiLayer = nullptr;
0113
0114 G4Box* fSolidAbsorber = nullptr;
0115 G4LogicalVolume* fLogicAbsorber = nullptr;
0116 G4VPhysicalVolume* fPhysiAbsorber = nullptr;
0117
0118 G4Box* fSolidGap = nullptr;
0119 G4LogicalVolume* fLogicGap = nullptr;
0120 G4VPhysicalVolume* fPhysiGap = nullptr;
0121
0122 DetectorMessenger* fDetectorMessenger = nullptr;
0123 };
0124
0125
0126
0127 inline void DetectorConstruction::ComputeCalorParameters()
0128 {
0129
0130 fLayerThickness = fAbsorberThickness + fGapThickness;
0131 fCalorThickness = fNbOfLayers * fLayerThickness;
0132
0133 fWorldSizeX = 1.2 * fCalorThickness;
0134 fWorldSizeYZ = 1.2 * fCalorSizeYZ;
0135 }
0136
0137
0138
0139 #endif