File indexing completed on 2026-01-01 09:04:48
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 ExGflashDetectorConstruction_h
0030 #define ExGflashDetectorConstruction_h 1
0031
0032 #include "ExGflashSensitiveDetector.hh"
0033
0034 #include "G4Cache.hh"
0035 #include "G4ThreeVector.hh"
0036 #include "G4VUserDetectorConstruction.hh"
0037 #include "globals.hh"
0038
0039 class G4LogicalVolume;
0040 class G4VPhysicalVolume;
0041 class G4Material;
0042 class G4Region;
0043
0044 class GFlashHomoShowerParameterisation;
0045 class GFlashShowerModel;
0046 class GFlashHitMaker;
0047 class GFlashParticleBounds;
0048 class ExGflashMessenger;
0049
0050 class ExGflashDetectorConstruction : public G4VUserDetectorConstruction
0051 {
0052 public:
0053 ExGflashDetectorConstruction();
0054 ~ExGflashDetectorConstruction() override;
0055
0056 G4VPhysicalVolume* Construct() override;
0057 void ConstructSDandField() override;
0058
0059 void SetLBining(G4ThreeVector);
0060 void SetRBining(G4ThreeVector);
0061
0062 void SetVerbose(G4int val) { fVerbose = val; }
0063
0064 void SetMaterial(G4String mat);
0065
0066 G4int GetVerbose() const { return fVerbose; }
0067
0068 G4int GetnLtot() const { return fNLtot; }
0069 G4int GetnRtot() const { return fNRtot; }
0070 G4double GetdLradl() const { return fDLradl; }
0071 G4double GetdRradl() const { return fDRradl; }
0072
0073 G4double GetSDRadLen() const { return fSDRadLen; }
0074 G4double GetSDRm() const { return fSDRm; }
0075
0076 G4int GetNbOfCrystals() const { return fNbOfCrystals; }
0077
0078 G4double GetCrystalWidth() const { return fCrystalWidth; }
0079 G4double GetCrystalLength() const { return fCrystalLength; }
0080
0081 void SetNbOfCrystals(G4int n) { fNbOfCrystals = n; }
0082
0083 void SetCrystalWidth(G4double cw) { fCrystalWidth = cw; }
0084 void SetCrystalLength(G4double cl) { fCrystalLength = cl; }
0085
0086 private:
0087 void DefineMaterials();
0088
0089 G4int fNbOfCrystals{10};
0090
0091 G4double fCrystalWidth;
0092 G4double fCrystalLength;
0093
0094 G4LogicalVolume* fCrystal_log{nullptr};
0095 G4Material* fDetMat{nullptr};
0096 G4Material* fHallMat{nullptr};
0097
0098 G4Region* fRegion{nullptr};
0099
0100 G4double fSDRadLen{1.0};
0101 G4double fSDRm{1.0};
0102
0103 G4int fVerbose{1};
0104
0105 G4int fNLtot{112}, fNRtot{80};
0106 G4double fDLradl{0.25}, fDRradl{0.05};
0107
0108 ExGflashMessenger* fGflashMessenger{nullptr};
0109
0110 inline static G4ThreadLocal GFlashShowerModel* fFastShowerModel = nullptr;
0111 inline static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation = nullptr;
0112 inline static G4ThreadLocal GFlashParticleBounds* fParticleBounds = nullptr;
0113 inline static G4ThreadLocal GFlashHitMaker* fHitMaker = nullptr;
0114 };
0115
0116 #endif