File indexing completed on 2025-01-31 09:22:53
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 B5DetectorConstruction_h
0031 #define B5DetectorConstruction_h 1
0032
0033 #include "G4VUserDetectorConstruction.hh"
0034
0035 #include "G4RotationMatrix.hh"
0036 #include "G4Threading.hh"
0037 #include "globals.hh"
0038
0039 #include <CLHEP/Units/SystemOfUnits.h>
0040
0041 class G4FieldManager;
0042 class G4VPhysicalVolume;
0043 class G4GenericMessenger;
0044
0045 namespace B5
0046 {
0047
0048 class MagneticField;
0049
0050
0051
0052 class DetectorConstruction : public G4VUserDetectorConstruction
0053 {
0054 public:
0055 DetectorConstruction();
0056 ~DetectorConstruction() override;
0057
0058 G4VPhysicalVolume* Construct() override;
0059 void ConstructSDandField() override;
0060
0061 void SetArmAngle(G4double val);
0062 G4double GetArmAngle() { return fArmAngle; }
0063
0064 void ConstructMaterials();
0065
0066 private:
0067 void DefineCommands();
0068
0069 static G4ThreadLocal MagneticField* fMagneticField;
0070 static G4ThreadLocal G4FieldManager* fFieldMgr;
0071
0072 G4GenericMessenger* fMessenger = nullptr;
0073
0074 G4LogicalVolume* fHodoscope1Logical = nullptr;
0075 G4LogicalVolume* fHodoscope2Logical = nullptr;
0076 G4LogicalVolume* fWirePlane1Logical = nullptr;
0077 G4LogicalVolume* fWirePlane2Logical = nullptr;
0078 G4LogicalVolume* fCellLogical = nullptr;
0079 G4LogicalVolume* fHadCalScintiLogical = nullptr;
0080 G4LogicalVolume* fMagneticLogical = nullptr;
0081
0082 G4double fArmAngle = 30. * CLHEP::deg;
0083 G4RotationMatrix* fArmRotation = nullptr;
0084 G4VPhysicalVolume* fSecondArmPhys = nullptr;
0085 };
0086
0087 }
0088
0089
0090
0091 #endif