61 fDetectorMessenger(0),
62 fSolidWorld(0), fLogicWorld(0), fPhysiWorld(0),
63 fSolidAbsorber(0), fLogicAbsorber(0), fPhysiAbsorber(0),
64 fAbsorberMaterial(0), fAbsorberThickness(0.), fAbsorberRadius(0.),
65 fZAbsorber(0.), fZStartAbs(0.), fZEndAbs(0.),
66 fWorldMaterial(0), fWorldSizeR(0.), fWorldSizeZ(0.)
70 fWorldSizeZ = 44000.*
mm;
71 fWorldSizeR = 22000.*
mm;
73 fAbsorberThickness = 1.0*
mm;
75 fAbsorberRadius = 20000.*
mm;
76 fZAbsorber = 21990.0*
mm;
92 delete fDetectorMessenger;
99 return ConstructCalorimeter();
104 void F01DetectorConstruction::DefineMaterials()
112 G4double fractionmass, pressure, temperature;
139 density = 1.39*
g/
cm3;
153 density = 3.700*
mg/
cm3;
159 density = 1.7836*
mg/
cm3;
163 density = 1.25053*
mg/
cm3;
167 density = 1.4289*
mg/
cm3;
171 density = 1.2928*
mg/
cm3;
179 air->
AddMaterial( nitrogen, fractionmass = 0.7557 );
186 density = 5.858*
mg/
cm3;
192 density = 1.842*
mg/
cm3;
199 density = 5.0818*
mg/
cm3;
202 Xe20CO2->
AddMaterial( CarbonDioxide, fractionmass = 0.078 );
206 density = 3.601*
mg/
cm3;
209 Kr20CO2->
AddMaterial( CarbonDioxide, fractionmass = 0.11 );
215 fAbsorberMaterial = air;
217 fWorldMaterial = air;
236 ComputeCalorParameters();
241 fSolidWorld =
new G4Tubs(
"World",
242 0.,fWorldSizeR,fWorldSizeZ/2.,0.,
twopi);
257 fSolidAbsorber =
new G4Tubs(
"Absorber", 1.0*
mm,
259 fAbsorberThickness/2.,
281 G4cout <<
"\n The WORLD is made of "
282 << fWorldSizeZ/
mm <<
"mm of " << fWorldMaterial->
GetName();
283 G4cout <<
", the transverse size (R) of the world is "
284 << fWorldSizeR/
mm <<
" mm. " <<
G4endl;
285 G4cout <<
" The ABSORBER is made of "
286 << fAbsorberThickness/
mm <<
"mm of " << fAbsorberMaterial->
GetName();
287 G4cout <<
", the transverse size (R) is " << fAbsorberRadius/
mm
289 G4cout <<
" Z position of the (middle of the) absorber "
290 << fZAbsorber/
mm <<
" mm." <<
G4endl;
303 for (
size_t j=0 ; j<theMaterialTable->size() ; j++)
304 { material = (*theMaterialTable)[j];
305 if (material->
GetName() == materialChoice)
323 for (
size_t j=0 ; j<theMaterialTable->size() ; j++)
324 { material = (*theMaterialTable)[j];
325 if(material->
GetName() == materialChoice)
339 fAbsorberThickness = val;
340 ComputeCalorParameters();
349 fAbsorberRadius = val;
350 ComputeCalorParameters();
359 ComputeCalorParameters();
368 ComputeCalorParameters();
377 ComputeCalorParameters();
387 if (!fCalorimeterSD.
Get()) {
389 fCalorimeterSD.
Put(calorimeterSD);
394 if (!fEmFieldSetup.
Get()) {
398 fEmFieldSetup.
Put(fieldSetup);
void SetAbsorberMaterial(G4String)
F01DetectorConstruction()
void SetAbsorberThickness(G4double)
CLHEP::Hep3Vector G4ThreeVector
void AddMaterial(G4Material *material, G4double fraction)
const G4String & GetName() const
static G4MaterialTable * GetMaterialTable()
std::vector< G4Material * > G4MaterialTable
Definition of the F01DetectorMessenger class.
static G4PhysicalVolumeStore * GetInstance()
Definition of the F01DetectorConstruction class.
void SetWorldSizeR(G4double)
void SetWorldMaterial(G4String)
void SetWorldSizeZ(G4double)
G4GLOB_DLL std::ostream G4cout
Definition of the F01FieldSetup class.
void PhysicsHasBeenModified()
void SetAbsorberZpos(G4double)
static G4LogicalVolumeStore * GetInstance()
static G4SolidStore * GetInstance()
static G4GeometryManager * GetInstance()
virtual G4VPhysicalVolume * Construct()
Definition of the F01CalorimeterSD class.
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
void ReinitializeGeometry(G4bool destroyFirst=false, G4bool prop=true)
static G4RunManager * GetRunManager()
virtual void ConstructSDandField()
void OpenGeometry(G4VPhysicalVolume *vol=0)
void AddElement(G4Element *element, G4int nAtoms)
virtual ~F01DetectorConstruction()
void SetMaterial(G4Material *pMaterial)
void Put(const value_type &val) const
void PrintCalorParameters()
void SetAbsorberRadius(G4double)