File indexing completed on 2026-04-08 07:53:00
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 "G4Material.hh"
0033 #include "G4ThreeVector.hh"
0034 #include "G4VPhysicalVolume.hh"
0035 #include "G4VUserDetectorConstruction.hh"
0036 #include "globals.hh"
0037 #include "G4Threading.hh"
0038
0039 class G4Tubs;
0040 class G4LogicalVolume;
0041 class DetectorMessenger;
0042 class G4GlobalMagFieldMessenger;
0043
0044 const G4int kMaxBin = 500;
0045
0046
0047
0048 class DetectorConstruction : public G4VUserDetectorConstruction
0049 {
0050 public:
0051 DetectorConstruction();
0052 ~DetectorConstruction() override;
0053
0054 public:
0055 void SetMaterial(const G4String&);
0056 void SetLBining(const G4ThreeVector&);
0057 void SetRBining(const G4ThreeVector&);
0058
0059 G4VPhysicalVolume* Construct() override;
0060
0061 void ConstructSDandField() override;
0062
0063 const G4VPhysicalVolume* GetEcal() const { return fPhysiEcal; };
0064 const G4Material* GetMaterial() const { return fMaterial; };
0065
0066
0067 G4int GetnLtot() const { return fNLtot; };
0068 G4int GetnRtot() const { return fNRtot; };
0069 G4double GetdLradl() const { return fDLradl; };
0070 G4double GetdRradl() const { return fDRradl; };
0071 G4double GetdLlength() const { return fDLlength; };
0072 G4double GetdRlength() const { return fDRlength; };
0073 G4double GetfullLength() const { return fEcalLength; };
0074 G4double GetfullRadius() const { return fEcalRadius; };
0075
0076 private:
0077 void DefineMaterials();
0078 void UpdateParameters();
0079
0080 G4int fNLtot = 40, fNRtot = 50;
0081 G4double fDLradl = 0.5, fDRradl = 0.1;
0082 G4double fDLlength = 0., fDRlength = 0.;
0083
0084 G4Material* fMaterial = nullptr;
0085
0086 G4double fEcalLength = 0.;
0087 G4double fEcalRadius = 0.;
0088
0089 G4Tubs* fSolidEcal = nullptr;
0090 G4LogicalVolume* fLogicEcal = nullptr;
0091 G4VPhysicalVolume* fPhysiEcal = nullptr;
0092
0093 DetectorMessenger* fDetectorMessenger = nullptr;
0094
0095
0096 static G4ThreadLocal G4GlobalMagFieldMessenger* fMagFieldMessenger;
0097
0098 };
0099
0100
0101
0102 #endif