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