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