62 fDetectorMessenger(0),
63 fSolidWorld(0), fLogicWorld(0), fPhysiWorld(0),
64 fSolidAbsorber(0), fLogicAbsorber(0), fPhysiAbsorber(0),
65 fSolidRadSlice(0), fLogicRadSlice(0), fPhysiRadSlice(0),
66 fSolidRadiator(0), fLogicRadiator(0), fPhysiRadiator(0),
67 fWorldMaterial(0), fAbsorberMaterial(0), fRadiatorMat(0),
69 fWorldSizeR( 22000.*
mm),
70 fWorldSizeZ( 44000.*
mm),
71 fAbsorberThickness( 1.*
mm),
72 fAbsorberRadius( 20000.*
mm),
73 fZAbsorber( 21990.*
mm),
76 fRadThickness( 100.*
mm),
93 delete fDetectorMessenger;
100 return ConstructCalorimeter();
105 void F03DetectorConstruction::DefineMaterials()
113 G4double fractionmass, pressure, temperature;
140 density = 1.39*
g/
cm3;
154 density = 3.700*
mg/
cm3;
160 density = 1.7836*
mg/
cm3;
164 density = 1.25053*
mg/
cm3;
168 density = 1.4289*
mg/
cm3;
172 density = 1.2928*
mg/
cm3;
179 air->
AddMaterial( nitrogen, fractionmass = 0.7557 );
185 density = 5.858*
mg/
cm3;
191 density = 1.842*
mg/
cm3;
198 density = 5.0818*
mg/
cm3;
201 Xe20CO2->
AddMaterial( CarbonDioxide, fractionmass = 0.078 );
205 density = 3.601*
mg/
cm3;
208 Kr20CO2->
AddMaterial( CarbonDioxide, fractionmass = 0.11 );
216 fAbsorberMaterial = air;
218 fWorldMaterial = air;
237 ComputeCalorParameters();
240 fSolidWorld =
new G4Tubs(
"World",
241 0.,fWorldSizeR,fWorldSizeZ/2.,0.,
twopi);
257 G4double radThick = fFoilNumber*(fRadThickness + fGasGap) + fDetGap;
259 G4double zRad = fZAbsorber - 20*
cm - 0.5*radThick;
268 fSolidRadiator =
new G4Tubs(
"Radiator",0.0,
269 1.01*fAbsorberRadius,
270 0.5*radThick,0.0,
twopi);
278 "Radiator", fLogicRadiator,
279 fPhysiWorld,
false, 0);
281 fSolidRadSlice =
new G4Tubs(
"RadSlice",0.0,
282 fAbsorberRadius,0.5*fRadThickness,0.0,
twopi);
288 zModule = zRad + 0.5*radThick/1.02;
291 for (
G4int j=0;j<fFoilNumber;j++)
293 zRadiator = zModule - j*(fRadThickness + fGasGap);
294 G4cout << zRadiator/
mm <<
" mm" <<
"\t";
298 "RadSlice",fLogicRadSlice,
299 fPhysiRadiator,
false,j);
305 fSolidAbsorber =
new G4Tubs(
"Absorber", 1.0*
mm,
307 fAbsorberThickness/2.,
329 G4cout <<
"\n The WORLD is made of "
330 << fWorldSizeZ/
mm <<
"mm of " << fWorldMaterial->
GetName();
331 G4cout <<
", the transverse size (R) of the world is "
332 << fWorldSizeR/
mm <<
" mm. " <<
G4endl;
333 G4cout <<
" The ABSORBER is made of "
334 << fAbsorberThickness/
mm <<
"mm of " << fAbsorberMaterial->
GetName();
335 G4cout <<
", the transverse size (R) is " << fAbsorberRadius/
mm
337 G4cout <<
" Z position of the (middle of the) absorber "
338 << fZAbsorber/
mm <<
" mm." <<
G4endl;
351 for (
size_t j=0 ; j<theMaterialTable->size() ; j++)
352 { material = (*theMaterialTable)[j];
353 if (material->
GetName() == materialChoice)
371 for (
size_t j=0 ; j<theMaterialTable->size() ; j++)
372 { material = (*theMaterialTable)[j];
373 if(material->
GetName() == materialChoice)
387 fAbsorberThickness = val;
388 ComputeCalorParameters();
397 fAbsorberRadius = val;
398 ComputeCalorParameters();
407 ComputeCalorParameters();
416 ComputeCalorParameters();
425 ComputeCalorParameters();
435 if (!fCalorimeterSD.
Get()) {
437 fCalorimeterSD.
Put(calorimeterSD);
444 if (!fEmFieldSetup.
Get()) {
447 fEmFieldSetup.
Put(emFieldSetup);
G4FieldManager * GetLocalFieldManager()
void SetWorldMaterial(G4String)
static constexpr double mm
static constexpr double mg
void SetWorldSizeZ(G4double)
CLHEP::Hep3Vector G4ThreeVector
void PrintCalorParameters()
void AddMaterial(G4Material *material, G4double fraction)
void SetWorldSizeR(G4double)
std::vector< ExP01TrackerHit * > a
const G4String & GetName() const
static G4MaterialTable * GetMaterialTable()
std::vector< G4Material * > G4MaterialTable
virtual ~F03DetectorConstruction()
void SetAbsorberZpos(G4double)
void SetFieldManager(G4FieldManager *pFieldMgr, G4bool forceToAllDaughters)
static constexpr double twopi
Definition of the F03DetectorConstruction class.
static G4PhysicalVolumeStore * GetInstance()
virtual void ConstructSDandField()
void SetAbsorberRadius(G4double)
G4GLOB_DLL std::ostream G4cout
void PhysicsHasBeenModified()
static constexpr double cm
void SetAbsorberMaterial(G4String)
static G4LogicalVolumeStore * GetInstance()
static G4SolidStore * GetInstance()
static G4GeometryManager * GetInstance()
Definition of the F03CalorimeterSD class.
static constexpr double cm3
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
void ReinitializeGeometry(G4bool destroyFirst=false, G4bool prop=true)
void AddNewDetector(G4VSensitiveDetector *aSD)
static G4RunManager * GetRunManager()
static G4SDManager * GetSDMpointer()
Definition of the F03DetectorMessenger class.
void OpenGeometry(G4VPhysicalVolume *vol=0)
virtual G4VPhysicalVolume * Construct()
void AddElement(G4Element *element, G4int nAtoms)
F03DetectorConstruction()
void SetMaterial(G4Material *pMaterial)
Definition of the F03FieldSetup class.
void Put(const value_type &val) const
static constexpr double mole
void SetAbsorberThickness(G4double)