31 #include "DetectorConstruction.hh"
55 :fiberMat(0),lvol_fiber(0), absorberMat(0),lvol_layer(0),
56 moduleMat(0),lvol_module(0), calorimeterMat(0),lvol_calorimeter(0),
57 worldMat(0),pvol_world(0), defaultMat(0)
64 fiberDiameter = 1.13*
mm;
66 distanceInterFibers = 1.35*
mm;
67 layerThickness = 1.73*
mm;
68 milledLayer = 1.00*
mm;
72 fiberLength = (nbOfFibers+0.5)*distanceInterFibers;
84 return ConstructCalorimeter();
89 void DetectorConstruction::DefineMaterials()
98 G4int natoms, ncomponents;
109 new G4Material(
"Scintillator", density= 1.032*
g/
cm3, ncomponents=2);
136 moduleMat = defaultMat;
137 calorimeterMat = defaultMat;
138 worldMat = defaultMat;
159 svol_fiber =
new G4Tubs(
"fiber",
160 0*
mm, 0.5*fiberDiameter,
171 G4double sizeY = distanceInterFibers*nbOfFibers;
175 svol_layer =
new G4Box(
"layer",
176 0.5*sizeX, 0.5*sizeY, 0.5*sizeZ);
186 G4double Ycenter = -0.5*(sizeY + distanceInterFibers);
188 for (
G4int k=0; k<nbOfFibers; k++) {
189 Ycenter += distanceInterFibers;
202 moduleThickness = layerThickness*nbOfLayers + milledLayer;
203 sizeX = moduleThickness;
208 svol_module =
new G4Box(
"module",
209 0.5*sizeX, 0.5*sizeY, 0.5*sizeZ);
217 Xcenter = -0.5*(nbOfLayers+1)*layerThickness;
218 Ycenter = 0.25*distanceInterFibers;
220 for (
G4int k=0; k<nbOfLayers; k++) {
221 Xcenter += layerThickness;
235 calorThickness = moduleThickness*nbOfModules;
236 sizeX = calorThickness;
241 svol_calorimeter =
new G4Box(
"calorimeter",
242 0.5*sizeX, 0.5*sizeY, 0.5*sizeZ);
251 Xcenter = -0.5*(calorThickness + moduleThickness);
254 for (
G4int k=0; k<nbOfModules; k++) {
255 Xcenter += moduleThickness;
269 sizeX = 1.2*calorThickness;
270 sizeY = 1.2*fiberLength;
271 sizeZ = 1.2*fiberLength;
276 svol_world =
new G4Box(
"world",
277 0.5*sizeX, 0.5*sizeY, 0.5*sizeZ);
320 G4cout <<
"\n-------------------------------------------------------------"
321 <<
"\n ---> The calorimeter is " << nbOfModules <<
" Modules"
322 <<
"\n ---> A Module is " << nbOfLayers <<
" Layers + 1 milled Layer";
325 <<
"\n ---> A Layer is " <<
G4BestUnit(layerThickness,
"Length")
326 <<
" thickness of " << absorberMat->
GetName();
329 <<
"\n ---> A Layer includes " << nbOfFibers <<
" fibers of "
333 <<
"\n ---> diameter : " <<
G4BestUnit(fiberDiameter,
"Length")
334 <<
"\n ---> length : " <<
G4BestUnit(fiberLength,
"Length")
335 <<
"\n ---> distance : " <<
G4BestUnit(distanceInterFibers,
"Length");
338 <<
"\n ---> The milled Layer is " <<
G4BestUnit(milledLayer,
"Length")
339 <<
" thickness of " << absorberMat->
GetName();
342 <<
"\n\n ---> Module thickness " <<
G4BestUnit(moduleThickness,
"Length");
345 <<
"\n\n ---> Total calor thickness " <<
G4BestUnit(calorThickness,
"Length")
346 <<
"\n Tranverse size " <<
G4BestUnit(fiberLength,
"Length");
348 G4cout <<
"\n-------------------------------------------------------------\n";
359 if ( fFieldMessenger.
Get() == 0 ) {
368 fFieldMessenger.
Put( msg );
G4IonisParamMat * GetIonisation() const
static constexpr double mm
static constexpr double mg
CLHEP::Hep3Vector G4ThreeVector
HepRotation & rotateX(double delta)
int universe_mean_density
static constexpr double perCent
const G4String & GetName() const
G4VPhysicalVolume * Construct()
void SetBirksConstant(G4double value)
static G4MaterialTable * GetMaterialTable()
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
static constexpr double twopi
static G4PhysicalVolumeStore * GetInstance()
virtual void ConstructSDandField()
G4GLOB_DLL std::ostream G4cout
static G4LogicalVolumeStore * GetInstance()
static G4SolidStore * GetInstance()
static G4GeometryManager * GetInstance()
static constexpr double kelvin
static constexpr double cm3
static constexpr double MeV
void OpenGeometry(G4VPhysicalVolume *vol=0)
void AddElement(G4Element *element, G4int nAtoms)
static constexpr double deg
void PrintCalorParameters()
void Put(const value_type &val) const
static constexpr double mole
static const G4VisAttributes & GetInvisible()
void SetVisAttributes(const G4VisAttributes *pVA)