34 #include "DetectorConstruction.hh"
35 #include "DetectorMessenger.hh"
54 :fMaterial_World(0), fMaterial_Frame(0),
55 fMaterial_ExitWindow(0), fMaterial_ScatterFoil(0), fMaterial_MonitorChbr(0),
56 fMaterial_Bag(0), fMaterial_Gas(0), fMaterial_Ring(0),
57 fPvol_World(0), fPvol_Frame(0), fDetectorMessenger(0)
73 delete fDetectorMessenger;
80 return ConstructVolumes();
85 void DetectorConstruction::DefineMaterials()
88 G4int ncomponents, natoms;
181 temperature = 2.73*
kelvin;
193 fMaterial_World = Vacuum;
194 fMaterial_Frame =
Air;
195 fMaterial_ExitWindow = Titanium;
196 fMaterial_ScatterFoil = fMaterial_Frame;
197 fMaterial_MonitorChbr = Mylar;
198 fMaterial_Bag = Mylar;
199 fMaterial_Gas = Helium;
200 fMaterial_Ring = Aluminium;
205 void DetectorConstruction::GeometryParameters()
207 fZfront_ExitWindow = 0.0*um;
208 fThickness_ExitWindow = 41.2*um;
210 fZfront_ScatterFoil = 2.65*
cm;
211 fThickness_ScatterFoil = 0.0*um;
213 fZfront_MonitorChbr = 50.*
mm;
214 fThickness_MonitorChbr = 112.7*um;
216 fZfront_Bag = 64.975*
mm;
217 fThickness_Bag = 110.0050*
cm;
219 fThickness_Gas = 110.*
cm;
221 fThickness_Ring = 14.*
mm;
222 fInnerRadius_Ring = 20.*
cm;
224 fZfront_Frame = 2.0*um;
225 fThickness_Frame = 118.2*
cm;
227 fThickness_World = fZfront_Frame + fThickness_Frame;
228 fRadius_World = 23.3*
cm;
245 svol_World =
new G4Tubs(
"World",
247 0.5*fThickness_World,
266 svol_Frame =
new G4Tubs(
"Frame",
268 0.5*fThickness_Frame,
277 zpos = fZfront_Frame;
291 svol_ExitWindow =
new G4Tubs(
"ExitWindow",
293 0.5*fThickness_ExitWindow,
298 fMaterial_ExitWindow,
301 zpos = fZfront_ExitWindow + 0.5*fThickness_ExitWindow - 0.5*fThickness_Frame;
314 svol_MonitorChbr =
new G4Tubs(
"MonitorChbr",
316 0.5*fThickness_MonitorChbr,
321 fMaterial_MonitorChbr,
324 zpos = fZfront_MonitorChbr + 0.5*fThickness_MonitorChbr - 0.5*fThickness_Frame;
338 svol_Bag =
new G4Tubs(
"Bag",
348 zpos = fZfront_Bag + 0.5*fThickness_Bag - 0.5*fThickness_Frame;
362 svol_Gas =
new G4Tubs(
"Gas",
385 svol_Ring =
new G4Tubs(
"Ring",
386 fInnerRadius_Ring, fRadius_World,
395 zpos = 0.5*(fThickness_Gas - fThickness_Ring);
416 if ((fMaterial_ScatterFoil != fMaterial_Frame) && (fThickness_ScatterFoil > 0.))
419 svol_ScatterFoil =
new G4Tubs(
"ScatterFoil",
421 0.5*fThickness_ScatterFoil,
426 fMaterial_ScatterFoil,
429 zpos = fZfront_ScatterFoil + 0.5*fThickness_ScatterFoil - 0.5*fThickness_Frame;
453 std::ios::fmtflags mode =
G4cout.flags();
454 G4cout.setf(std::ios::fixed,std::ios::floatfield);
457 G4cout <<
"\n \t \t" <<
"Material \t" <<
"Z_front \t" <<
"Thickness \n";
459 G4cout <<
"\n ExitWindow \t" << fMaterial_ExitWindow->
GetName()
460 <<
"\t" <<
G4BestUnit(fZfront_ExitWindow,
"Length")
461 <<
"\t" <<
G4BestUnit(fThickness_ExitWindow,
"Length");
463 if (fMaterial_ScatterFoil != fMaterial_Frame) {
464 G4cout <<
"\n ScatterFoil \t" << fMaterial_ScatterFoil->
GetName() <<
"\t"
465 <<
"\t" <<
G4BestUnit(fZfront_ScatterFoil,
"Length")
466 <<
"\t" <<
G4BestUnit(fThickness_ScatterFoil,
"Length");
469 G4cout <<
"\n MonitorChbr \t" << fMaterial_MonitorChbr->
GetName() <<
"\t"
470 <<
"\t" <<
G4BestUnit(fZfront_MonitorChbr,
"Length")
471 <<
"\t" <<
G4BestUnit(fThickness_MonitorChbr,
"Length");
473 G4double thickBagWindow = 0.5*(fThickness_Bag - fThickness_Gas);
474 G4double zfrontGas = fZfront_Bag + thickBagWindow;
475 G4double zfrontBagWindow2 = zfrontGas + fThickness_Gas;
477 G4cout <<
"\n BagWindow1 \t" << fMaterial_Bag->
GetName() <<
"\t"
479 <<
"\t" <<
G4BestUnit(thickBagWindow,
"Length");
483 <<
"\t" <<
G4BestUnit(fThickness_Gas,
"Length");
485 G4cout <<
"\n BagWindow2 \t" << fMaterial_Bag->
GetName() <<
"\t"
486 <<
"\t" <<
G4BestUnit(zfrontBagWindow2,
"Length")
487 <<
"\t" <<
G4BestUnit(thickBagWindow,
"Length");
489 G4cout <<
"\n ScoringPlane \t" << fMaterial_Frame->
GetName() <<
"\t"
493 G4cout.setf(mode,std::ios::floatfield);
504 if (pMaterial) fMaterial_ScatterFoil = pMaterial;
511 fThickness_ScatterFoil = val;
CLHEP::Hep3Vector G4ThreeVector
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
int universe_mean_density
const G4String & GetName() const
G4VPhysicalVolume * Construct()
static G4MaterialTable * GetMaterialTable()
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
virtual void DefineWorldVolume(G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
static G4PhysicalVolumeStore * GetInstance()
G4GLOB_DLL std::ostream G4cout
static G4LogicalVolumeStore * GetInstance()
static G4SolidStore * GetInstance()
static G4GeometryManager * GetInstance()
static G4RunManager * GetRunManager()
void SetThicknessScatter(G4double)
void SetMaterialScatter(G4String)
void OpenGeometry(G4VPhysicalVolume *vol=0)
void AddElement(G4Element *element, G4int nAtoms)