31 #include "DetectorConstruction.hh"
32 #include "DetectorMessenger.hh"
59 :fiberMat(0),lvol_fiber(0), absorberMat(0),lvol_layer(0),
60 moduleMat(0),lvol_module(0), calorimeterMat(0),lvol_calorimeter(0),
61 worldMat(0),pvol_world(0), defaultMat(0), magField(0)
68 fiberDiameter = 1.13*
mm;
70 distanceInterFibers = 1.35*
mm;
71 layerThickness = 1.73*
mm;
72 milledLayer = 1.00*
mm;
76 fiberLength = (nbOfFibers+1)*distanceInterFibers;
81 n1pxl = nbOfModules*nSubModul;
85 if (n1pxl > 1) n1shift = 10;
86 if (n1pxl > 10) n1shift = 100;
87 if (n1pxl > 100) n1shift = 1000;
89 sizeVectorPxl = n1pxl*n1shift;
99 delete detectorMessenger;
106 return ConstructCalorimeter();
111 void DetectorConstruction::DefineMaterials()
120 G4int natoms, ncomponents;
131 new G4Material(
"Scintillator", density= 1.032*
g/
cm3, ncomponents=2);
158 moduleMat = defaultMat;
159 calorimeterMat = defaultMat;
160 worldMat = defaultMat;
181 svol_fiber =
new G4Tubs(
"fiber",
182 0*
mm, 0.5*fiberDiameter,
193 G4double sizeY = distanceInterFibers*nbOfFibers;
197 svol_layer =
new G4Box(
"layer",
198 0.5*sizeX, 0.5*sizeY, 0.5*sizeZ);
208 G4double Ycenter = -0.5*(sizeY + distanceInterFibers);
210 for (
G4int k=0; k<nbOfFibers; k++) {
211 Ycenter += distanceInterFibers;
224 moduleThickness = layerThickness*nbOfLayers + milledLayer;
225 sizeX = moduleThickness;
230 svol_module =
new G4Box(
"module",
231 0.5*sizeX, 0.5*sizeY, 0.5*sizeZ);
239 Xcenter = -0.5*(nbOfLayers+1)*layerThickness;
240 Ycenter = 0.25*distanceInterFibers;
242 for (
G4int k=0; k<nbOfLayers; k++) {
243 Xcenter += layerThickness;
257 calorThickness = moduleThickness*nbOfModules;
258 sizeX = calorThickness;
263 svol_calorimeter =
new G4Box(
"calorimeter",
264 0.5*sizeX, 0.5*sizeY, 0.5*sizeZ);
273 Xcenter = -0.5*(calorThickness + moduleThickness);
280 for (
G4int k=0; k<nbOfModules; k++) {
282 if ((k+1)%2 == 0) rotm = rotmX;
283 Xcenter += moduleThickness;
295 sizeX = 1.2*calorThickness;
296 sizeY = 1.2*fiberLength;
297 sizeZ = 1.2*fiberLength;
302 svol_world =
new G4Box(
"world",
303 0.5*sizeX, 0.5*sizeY, 0.5*sizeZ);
337 d1pxl = calorThickness/n1pxl;
338 d2pxl = fiberLength/n2pxl;
349 G4cout <<
"\n-------------------------------------------------------------"
350 <<
"\n ---> The calorimeter is " << nbOfModules <<
" Modules"
351 <<
"\n ---> A Module is " << nbOfLayers <<
" Layers + 1 milled Layer";
354 <<
"\n ---> A Layer is " <<
G4BestUnit(layerThickness,
"Length")
355 <<
" thickness of " << absorberMat->
GetName();
358 <<
"\n ---> A Layer includes " << nbOfFibers <<
" fibers of "
362 <<
"\n ---> diameter : " <<
G4BestUnit(fiberDiameter,
"Length")
363 <<
"\n ---> length : " <<
G4BestUnit(fiberLength,
"Length")
364 <<
"\n ---> distance : " <<
G4BestUnit(distanceInterFibers,
"Length");
367 <<
"\n ---> The milled Layer is " <<
G4BestUnit(milledLayer,
"Length")
368 <<
" thickness of " << absorberMat->
GetName();
371 <<
"\n\n ---> Module thickness " <<
G4BestUnit(moduleThickness,
"Length");
374 <<
"\n\n ---> Total calor thickness " <<
G4BestUnit(calorThickness,
"Length")
375 <<
"\n Tranverse size " <<
G4BestUnit(fiberLength,
"Length");
377 G4cout <<
"\n-------------------------------------------------------------\n";
393 if(magField)
delete magField;
G4IonisParamMat * GetIonisation() const
CLHEP::Hep3Vector G4ThreeVector
HepRotation & rotateX(double delta)
CLHEP::HepRotation G4RotationMatrix
G4bool SetDetectorField(G4Field *detectorField)
int universe_mean_density
const G4String & GetName() const
G4VPhysicalVolume * Construct()
void SetBirksConstant(G4double value)
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 G4TransportationManager * GetTransportationManager()
G4FieldManager * GetFieldManager() const
static G4RunManager * GetRunManager()
void SetMagField(G4double)
static const G4VisAttributes Invisible
void OpenGeometry(G4VPhysicalVolume *vol=0)
void AddElement(G4Element *element, G4int nAtoms)
void CreateChordFinder(G4MagneticField *detectorMagField)
void PrintCalorParameters()
void SetVisAttributes(const G4VisAttributes *pVA)