34 #include "DetectorConstruction.hh"
35 #include "DetectorMessenger.hh"
59 :fDefaultMaterial(0),fPhysiWorld(0),fMagField(0)
63 fAbsorThickness[0] = 0*
mm;
64 fAbsorThickness[1] = 1*
mm;
67 fNbOfDivisions[iAbs] = 1;
83 delete fDetectorMessenger;
90 return ConstructVolumes();
95 void DetectorConstruction::DefineMaterials()
133 fDefaultMaterial = Galactic;
140 void DetectorConstruction::ComputeParameters()
144 for (
G4int iAbs=1; iAbs<=fNbOfAbsor; iAbs++) {
145 fAbsorSizeX += fAbsorThickness[iAbs];
167 fAbsorSizeX/2,fAbsorSizeYZ/2,fAbsorSizeYZ/2);
186 fXfront[0] = -0.5*fAbsorSizeX;
188 for (
G4int k=1; k<=fNbOfAbsor; k++) {
193 new G4Box(matname,fAbsorThickness[k]/2,fAbsorSizeYZ/2,fAbsorSizeYZ/2);
200 fXfront[k] = fXfront[k-1] + fAbsorThickness[k-1];
201 G4double xcenter = fXfront[k]+0.5*fAbsorThickness[k];
214 G4double LayerThickness = fAbsorThickness[k]/fNbOfDivisions[k];
216 new G4Box(matname,LayerThickness/2,fAbsorSizeYZ/2,fAbsorSizeYZ/2);
243 G4cout <<
"\n-------------------------------------------------------------"
244 <<
"\n ---> The Absorber is " << fNbOfAbsor <<
" layers of:";
245 for (
G4int i=1; i<=fNbOfAbsor; i++)
247 G4cout <<
"\n \t" << std::setw(12) << fAbsorMaterial[i]->
GetName() <<
": "
248 << std::setw(6) <<
G4BestUnit(fAbsorThickness[i],
"Length")
249 <<
" divided in " << fNbOfDivisions[i] <<
" slices";
251 G4cout <<
"\n-------------------------------------------------------------\n"
261 if (ival < 1 || ival > (
MaxAbsor-1))
262 {
G4cout <<
"\n ---> warning from SetfNbOfAbsor: "
263 << ival <<
" must be at least 1 and and most " <<
MaxAbsor-1
264 <<
". Command refused" <<
G4endl;
276 if (iabs > fNbOfAbsor || iabs <= 0)
277 {
G4cout <<
"\n --->warning from SetfAbsorMaterial: absor number "
278 << iabs <<
" out of range. Command refused" <<
G4endl;
284 if (pttoMaterial) fAbsorMaterial[iabs] = pttoMaterial;
293 if (iabs > fNbOfAbsor || iabs <= 0)
294 {
G4cout <<
"\n --->warning from SetfAbsorThickness: absor number "
295 << iabs <<
" out of range. Command refused" <<
G4endl;
299 {
G4cout <<
"\n --->warning from SetfAbsorThickness: thickness "
300 << val <<
" out of range. Command refused" <<
G4endl;
303 fAbsorThickness[iabs] = val;
313 {
G4cout <<
"\n --->warning from SetfAbsorSizeYZ: thickness "
314 << val <<
" out of range. Command refused" <<
G4endl;
326 if (iabs > fNbOfAbsor || iabs < 1)
327 {
G4cout <<
"\n --->warning from SetNbOfDivisions: absor number "
328 << iabs <<
" out of range. Command refused" <<
G4endl;
333 {
G4cout <<
"\n --->warning from SetNbOfDivisions: "
334 << ival <<
" must be at least 1. Command refused" <<
G4endl;
337 fNbOfDivisions[iabs] = ival;
352 if(fMagField)
delete fMagField;