File indexing completed on 2026-04-18 07:42:19
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 "G4SystemOfUnits.hh"
0034 #include "G4VUserDetectorConstruction.hh"
0035 #include "globals.hh"
0036
0037 #include <memory>
0038
0039 class DetectorMessenger;
0040
0041
0042
0043 class DetectorConstruction : public G4VUserDetectorConstruction
0044 {
0045 public:
0046
0047 DetectorConstruction();
0048 ~DetectorConstruction() override;
0049
0050 G4VPhysicalVolume* Construct() override;
0051 void ConstructSDandField() override;
0052
0053
0054 void SetMaterial(const G4String& name);
0055 void SetMaxRange(const G4double& range) { fMaxRange = range; }
0056 void SetHitSelRegZ(const G4double& side) { fHitSelRegZ = side; }
0057 void SetHitSelRegXY(const G4double& side) { fHitSelRegXY = side; }
0058 void SetSiteRadius(const G4double& siteRadius) { fSiteRadius = siteRadius; }
0059 void PrintParameters(G4VPhysicalVolume*) const;
0060 void CheckConsistency();
0061
0062
0063 G4String GetMaterial() const
0064 {
0065 return fMat ? fMat->GetName() : G4String("undefined");
0066 }
0067 G4double GetMaxRange() const { return fMaxRange; }
0068 G4double GetHitSelRegZ() const { return fHitSelRegZ; }
0069 G4double GetHitSelRegXY() const { return fHitSelRegXY; }
0070 G4double GetSiteRadius() const { return fSiteRadius; }
0071
0072 private:
0073 void DefineMaterials();
0074 G4VPhysicalVolume* DefineWorld();
0075 G4VPhysicalVolume* DefineSD(G4VPhysicalVolume*) const;
0076 std::unique_ptr<DetectorMessenger> fDetectorMessenger;
0077
0078 G4Material* fMat = nullptr;
0079 G4double fMaxRange = 8.25 * um;
0080 G4double fHitSelRegZ = 2. * um;
0081 G4double fHitSelRegXY = 16.5* um;
0082 G4double fSiteRadius = 0.5 * um;
0083 };
0084
0085
0086
0087 #endif