71 fDetectorMessenger(0),
72 fSolidWorld(0), fLogicWorld(0), fPhysiWorld(0),
73 fSolidTarget(0), fLogicTarget(0), fPhysiTarget(0),
74 fSolidDegrader(0), fLogicDegrader(0), fPhysiDegrader(0),
75 fSolidCaptureMgnt(0), fLogicCaptureMgnt(0), fPhysiCaptureMgnt(0),
76 fSolidTransferMgnt(0), fLogicTransferMgnt(0), fPhysiTransferMgnt(0),
77 fWorldMaterial(0), fTargetMaterial(0), fDegraderMaterial(0)
82 fTargetRadius = 0.4*
cm;
83 fTargetThickness = 16.0*
cm;
87 fDegraderRadius = 30.0*
cm;
88 fDegraderThickness = 0.1*
cm;
90 fCaptureMgntRadius = 0.6*
m;
91 fCaptureMgntLength = 4.0*
m;
96 fTransferMgntRadius = 0.3*
m;
97 fTransferMgntLength = 15.0*
m;
101 fDegraderPos = -fTransferMgntLength/2. + fDegraderThickness/2.;
110 delete fDetectorMessenger;
134 void F04DetectorConstruction::DefineMaterials()
140 fWorldMaterial = fMaterials->
GetMaterial(
"G4_AIR");
141 fDegraderMaterial = fMaterials->
GetMaterial(
"G4_Pb");
149 fSolidWorld =
new G4Tubs(
"World",
166 fSolidCaptureMgnt =
new G4Tubs(
"CaptureMgnt",
186 fSolidTransferMgnt =
new G4Tubs(
"TransferMgnt",
239 fSolidTarget =
new G4Tubs(
"Target",
275 fSolidDegrader =
new G4Tubs(
"Degrader",
304 if (pttoMaterial != fWorldMaterial) {
305 if ( pttoMaterial ) {
306 fWorldMaterial = pttoMaterial;
309 G4cout <<
"\n--> WARNING from SetWorldMaterial : "
310 << materialChoice <<
" not found" <<
G4endl;
322 if (pttoMaterial != fTargetMaterial) {
323 if ( pttoMaterial ) {
324 fTargetMaterial = pttoMaterial;
327 G4cout <<
"\n--> WARNING from SetTargetMaterial : "
328 << materialChoice <<
" not found" <<
G4endl;
341 if (pttoMaterial != fDegraderMaterial) {
342 if ( pttoMaterial ) {
343 fDegraderMaterial = pttoMaterial;
346 G4cout <<
"\n--> WARNING from SetDegraderMaterial : "
347 << materialChoice <<
" not found" <<
G4endl;
372 fCaptureMgntRadius = val;
380 fCaptureMgntLength = val;
388 fCaptureMgntB1 = val;
396 fCaptureMgntB2 = val;
404 fTransferMgntRadius = val;
412 fTransferMgntLength = val;
420 fTransferMgntB = val;
428 fTransferMgntPos = val;
444 fTargetThickness = val;
468 fDegraderRadius = val;
476 fDegraderThickness = val;
492 if (!fFieldSetUp.
Get()) {
495 fFieldSetUp.
Put(field);
510 unsigned int place = 0;
512 while (place < rotation.size()) {
516 G4String current=rotation.substr(place+1);
517 angle = strtod(current.c_str(),&
p) *
deg;
519 if (!p || (*p !=
',' && *p !=
'\0')) {
520 G4cerr <<
"Invalid rotation specification: " <<
521 rotation.c_str() <<
G4endl;
528 switch(rotation.substr(place,1).c_str()[0]) {
539 G4cerr <<
" Invalid rotation specification: "
544 rot = thisRotation * rot;
545 place = rotation.find(
',',place);
546 if (place > rotation.size())
break;
static constexpr double tesla
void SetTargetAngle(G4int)
void SetCaptureMgntB2(G4double)
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
G4Material * GetWorldMaterial()
G4double GetDegraderPos()
static constexpr double mm
G4double GetCaptureMgntRadius()
void SetTransferMgntLength(G4double)
Definition of the F04Materials class.
G4double GetDegraderRadius()
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepRotation G4RotationMatrix
G4VPhysicalVolume * ConstructDetector()
Definition of the F04GlobalField class.
void SetDegraderPos(G4double)
virtual ~F04DetectorConstruction()
G4String strip(G4int strip_Type=trailing, char c=' ')
G4Material * GetTargetMaterial()
void SetTargetThickness(G4double)
void SetDegraderMaterial(G4String)
void SetCaptureMgntLength(G4double)
static G4double angle[DIM]
F04DetectorConstruction()
void SetTargetMaterial(G4String)
G4double GetCaptureMgntLength()
G4Material * GetMaterial(G4String)
static G4NistManager * Instance()
HepRotation inverse() const
void SetDegraderRadius(G4double)
static constexpr double twopi
G4double GetDegraderThickness()
static G4PhysicalVolumeStore * GetInstance()
static F04GlobalField * GetObject()
Definition of the F04DetectorConstruction class.
virtual G4VPhysicalVolume * Construct()
void SetWorldSizeZ(G4double)
G4GLOB_DLL std::ostream G4cout
static constexpr double m
G4double GetTransferMgntRadius()
void SetWorldMaterial(G4String)
G4double GetTargetRadius()
Definition of the F04DetectorMessenger class.
void SetCaptureMgntRadius(G4double)
void PhysicsHasBeenModified()
Definition of the F04FocusSolenoid class.
static constexpr double cm
void SetDegraderThickness(G4double)
static G4LogicalVolumeStore * GetInstance()
static G4SolidStore * GetInstance()
void SetTargetPos(G4double)
G4double GetTransferMgntLength()
static G4GeometryManager * GetInstance()
void SetTransferMgntRadius(G4double)
void ReinitializeGeometry(G4bool destroyFirst=false, G4bool prop=true)
static G4RunManager * GetRunManager()
G4Material * GetDegraderMaterial()
static F04Materials * GetInstance()
Definition of the F04SimpleSolenoid class.
void OpenGeometry(G4VPhysicalVolume *vol=0)
void SetTransferMgntB(G4double)
virtual void ConstructSDandField()
static constexpr double deg
static G4RotationMatrix StringToRotationMatrix(G4String rotation)
G4double GetTargetThickness()
void SetTargetRadius(G4double)
void SetCaptureMgntB1(G4double)
void Put(const value_type &val) const
G4double GetTransferMgntPos()
void SetWorldSizeR(G4double)
G4GLOB_DLL std::ostream G4cerr
void SetTransferMgntPos(G4double)