File indexing completed on 2025-02-23 09:22:14
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
0030 #ifndef ElectronBenchmarkDetector_h
0031 #define ElectronBenchmarkDetector_h 1
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 G4Tubs;
0041 class G4MultiFunctionalDetector;
0042 class G4Material;
0043 class G4VisAttributes;
0044 class ElectronBenchmarkDetectorMessenger;
0045
0046
0047
0048 class ElectronBenchmarkDetector : public G4VUserDetectorConstruction
0049 {
0050 public:
0051 ElectronBenchmarkDetector();
0052 ~ElectronBenchmarkDetector() override;
0053
0054 G4VPhysicalVolume* Construct() override;
0055
0056
0057 void ConstructSDandField() override;
0058
0059
0060 void DefineMaterials();
0061
0062
0063 G4VPhysicalVolume* CreateWorld();
0064 void CreateExitWindow(G4LogicalVolume* logicWorld);
0065 void CreatePrimaryFoil(G4LogicalVolume* logicWorld);
0066 void CreateMonitor(G4LogicalVolume* logicWorld);
0067 void CreateHeliumBag(G4LogicalVolume* logicWorld);
0068 void CreateScorer(G4LogicalVolume* logicWorld);
0069 G4VPhysicalVolume* CreateGeometry();
0070
0071
0072 void SetPrimFoilMaterial(const G4String& matname);
0073 void SetPrimFoilThickness(G4double thicknessPrimFoil);
0074
0075 private:
0076
0077 G4double fPosWindow0;
0078 G4double fPosWindow1;
0079
0080
0081 G4Material* fMaterialPrimFoil = nullptr;
0082 G4double fHalfThicknessPrimFoil;
0083 G4double fPosPrimFoil;
0084 G4LogicalVolume* fLogPrimFoil = nullptr;
0085 G4Tubs* fSolidPrimFoil;
0086
0087
0088 G4double fPosMon0;
0089 G4double fPosMon1;
0090
0091
0092 G4double fPosBag0;
0093 G4double fPosBag1;
0094 G4double fPosHelium0;
0095 G4double fPosHelium1;
0096 G4double fThicknessRing;
0097
0098
0099 G4double fPosScorer;
0100 G4double fThicknessScorer;
0101 G4double fWidthScorerRing;
0102 G4LogicalVolume* fScorerRingLog = nullptr;
0103
0104
0105 G4double fRadOverall;
0106 G4double fRadRingInner;
0107
0108
0109 G4double fPosDelta;
0110 G4double fRadDelta;
0111
0112
0113 G4LogicalVolume* fLogWorld = nullptr;
0114 G4VPhysicalVolume* fPhysiWorld = nullptr;
0115
0116
0117
0118
0119 const G4Cache<G4MultiFunctionalDetector*> fSensitiveDetectorCache;
0120
0121
0122 ElectronBenchmarkDetectorMessenger* fMessenger = nullptr;
0123
0124
0125 G4VisAttributes* fWorldVisAtt = nullptr;
0126 G4VisAttributes* fWindowVisAtt = nullptr;
0127 G4VisAttributes* fPrimFoilVisAtt = nullptr;
0128 G4VisAttributes* fMonVisAtt = nullptr;
0129 G4VisAttributes* fBagVisAtt = nullptr;
0130 G4VisAttributes* fHeliumVisAtt = nullptr;
0131 G4VisAttributes* fRingVisAtt = nullptr;
0132 G4VisAttributes* fScorerVisAtt = nullptr;
0133 };
0134
0135
0136
0137 #endif