Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/amsEcal/src/DetectorConstruction.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/amsEcal/src/DetectorConstruction.cc (Version 11.3.0) and /examples/advanced/amsEcal/src/DetectorConstruction.cc (Version 10.7)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 //....oooOO0OOooo........oooOO0OOooo........oo     27 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 28 //....oooOO0OOooo........oooOO0OOooo........oo     28 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 29                                                    29 
 30 #include "DetectorConstruction.hh"                 30 #include "DetectorConstruction.hh"
 31                                                    31 
 32 #include "G4SystemOfUnits.hh"                      32 #include "G4SystemOfUnits.hh"
 33 #include "G4PhysicalConstants.hh"                  33 #include "G4PhysicalConstants.hh"
 34 #include "G4Material.hh"                           34 #include "G4Material.hh"
 35 #include "G4Tubs.hh"                               35 #include "G4Tubs.hh"
 36 #include "G4Box.hh"                                36 #include "G4Box.hh"
 37 #include "G4LogicalVolume.hh"                      37 #include "G4LogicalVolume.hh"
 38 #include "G4PVPlacement.hh"                        38 #include "G4PVPlacement.hh"
 39 #include "G4PVReplica.hh"                          39 #include "G4PVReplica.hh"
 40 #include "G4Transform3D.hh"                        40 #include "G4Transform3D.hh"
 41 #include "G4RotationMatrix.hh"                     41 #include "G4RotationMatrix.hh"
 42                                                    42 
 43 #include "G4GeometryManager.hh"                    43 #include "G4GeometryManager.hh"
 44 #include "G4PhysicalVolumeStore.hh"                44 #include "G4PhysicalVolumeStore.hh"
 45 #include "G4LogicalVolumeStore.hh"                 45 #include "G4LogicalVolumeStore.hh"
 46 #include "G4SolidStore.hh"                         46 #include "G4SolidStore.hh"
 47                                                    47 
 48 #include "G4VisAttributes.hh"                      48 #include "G4VisAttributes.hh"
 49                                                    49 
 50                                                    50 
 51 //....oooOO0OOooo........oooOO0OOooo........oo     51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 52                                                    52 
 53 DetectorConstruction::DetectorConstruction()       53 DetectorConstruction::DetectorConstruction()
 54 :fiberMat(0),lvol_fiber(0), absorberMat(0),lvo     54 :fiberMat(0),lvol_fiber(0), absorberMat(0),lvol_layer(0),
 55  moduleMat(0),lvol_module(0), calorimeterMat(0     55  moduleMat(0),lvol_module(0), calorimeterMat(0),lvol_calorimeter(0),
 56  worldMat(0),pvol_world(0), defaultMat(0)          56  worldMat(0),pvol_world(0), defaultMat(0)
 57 {                                                  57 {
 58   // materials                                     58   // materials
 59   DefineMaterials();                               59   DefineMaterials();
 60                                                    60   
 61   // default parameter values of calorimeter       61   // default parameter values of calorimeter
 62   //                                               62   //
 63   fiberDiameter       = 1.13*mm;  //1.08*mm        63   fiberDiameter       = 1.13*mm;  //1.08*mm
 64   nbOfFibers          = 490;    //490              64   nbOfFibers          = 490;    //490
 65   distanceInterFibers = 1.35*mm;  //1.35*mm        65   distanceInterFibers = 1.35*mm;  //1.35*mm
 66   layerThickness      = 1.73*mm;  //1.68*mm        66   layerThickness      = 1.73*mm;  //1.68*mm  
 67   milledLayer         = 1.00*mm;    //1.40*mm      67   milledLayer         = 1.00*mm;    //1.40*mm ?
 68   nbOfLayers          = 10;       //10             68   nbOfLayers          = 10;       //10
 69   nbOfModules         = 9;        //9              69   nbOfModules         = 9;        //9
 70                                                    70      
 71   fiberLength         = (nbOfFibers+0.5)*dista     71   fiberLength         = (nbOfFibers+0.5)*distanceInterFibers; //662.175*mm
 72 }                                                  72 }
 73                                                    73 
 74 //....oooOO0OOooo........oooOO0OOooo........oo     74 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 75                                                    75 
 76 DetectorConstruction::~DetectorConstruction()      76 DetectorConstruction::~DetectorConstruction()
 77 { }                                                77 { }
 78                                                    78 
 79 //....oooOO0OOooo........oooOO0OOooo........oo     79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 80                                                    80 
 81 G4VPhysicalVolume* DetectorConstruction::Const     81 G4VPhysicalVolume* DetectorConstruction::Construct()
 82 {                                                  82 {
 83   return ConstructCalorimeter();                   83   return ConstructCalorimeter();
 84 }                                                  84 }
 85                                                    85 
 86 //....oooOO0OOooo........oooOO0OOooo........oo     86 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 87                                                    87 
 88 void DetectorConstruction::DefineMaterials()       88 void DetectorConstruction::DefineMaterials()
 89 {                                                  89 {
 90   // define Elements                               90   // define Elements
 91   //                                               91   //
 92   G4Element* H  = new G4Element("Hydrogen","H"     92   G4Element* H  = new G4Element("Hydrogen","H", 1,  1.01*g/mole);
 93   G4Element* C  = new G4Element("Carbon",  "C"     93   G4Element* C  = new G4Element("Carbon",  "C", 6, 12.01*g/mole);
 94   G4Element* N  = new G4Element("Nitrogen","N"     94   G4Element* N  = new G4Element("Nitrogen","N", 7, 14.01*g/mole);
 95   G4Element* O  = new G4Element("Oxygen",  "O"     95   G4Element* O  = new G4Element("Oxygen",  "O", 8, 16.00*g/mole);
 96                                                    96 
 97   G4int natoms, ncomponents;                       97   G4int natoms, ncomponents;
 98   G4double density, massfraction;                  98   G4double density, massfraction;            
 99                                                    99 
100   // Lead                                         100   // Lead
101   //                                              101   //
102   G4Material* Pb =                                102   G4Material* Pb =   
103   new G4Material("Lead", 82., 207.20*g/mole, d    103   new G4Material("Lead", 82., 207.20*g/mole, density= 0.98*11.20*g/cm3);
104                                                   104 
105   // Scintillator                                 105   // Scintillator
106   //                                              106   //
107   G4Material* Sci =                               107   G4Material* Sci = 
108   new G4Material("Scintillator", density= 1.03    108   new G4Material("Scintillator", density= 1.032*g/cm3, ncomponents=2);
109   Sci->AddElement(C, natoms=8);                   109   Sci->AddElement(C, natoms=8);
110   Sci->AddElement(H, natoms=8);                   110   Sci->AddElement(H, natoms=8);
111                                                   111   
112   Sci->GetIonisation()->SetBirksConstant(0.126    112   Sci->GetIonisation()->SetBirksConstant(0.126*mm/MeV);
113                                                   113 
114   // Air                                          114   // Air
115   //                                              115   //
116   G4Material* Air =                               116   G4Material* Air = 
117   new G4Material("Air", density= 1.290*mg/cm3,    117   new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2);
118   Air->AddElement(N, massfraction=70*perCent);    118   Air->AddElement(N, massfraction=70*perCent);
119   Air->AddElement(O, massfraction=30.*perCent)    119   Air->AddElement(O, massfraction=30.*perCent);
120                                                   120 
121   // example of vacuum                            121   // example of vacuum
122   //                                              122   //
123   density     = universe_mean_density;    //fr    123   density     = universe_mean_density;    //from PhysicalConstants.h
124   G4double pressure    = 3.e-18*pascal;           124   G4double pressure    = 3.e-18*pascal;
125   G4double temperature = 2.73*kelvin;             125   G4double temperature = 2.73*kelvin;
126   G4Material* Vacuum =                            126   G4Material* Vacuum =   
127   new G4Material("Galactic", 1., 1.008*g/mole,    127   new G4Material("Galactic", 1., 1.008*g/mole, density,
128                              kStateGas,tempera    128                              kStateGas,temperature,pressure);
129                                                   129 
130   //attribute materials                           130   //attribute materials
131   //                                              131   //
132   defaultMat     = Vacuum;                        132   defaultMat     = Vacuum;  
133   fiberMat       = Sci;                           133   fiberMat       = Sci;
134   absorberMat    = Pb;                            134   absorberMat    = Pb;
135   moduleMat      = defaultMat;                    135   moduleMat      = defaultMat;
136   calorimeterMat = defaultMat;                    136   calorimeterMat = defaultMat;
137   worldMat       = defaultMat;                    137   worldMat       = defaultMat;
138                                                   138 
139   // print table                                  139   // print table
140   //                                              140   //      
141   G4cout << *(G4Material::GetMaterialTable())     141   G4cout << *(G4Material::GetMaterialTable()) << G4endl;
142 }                                                 142 }
143                                                   143 
144 //....oooOO0OOooo........oooOO0OOooo........oo    144 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
145                                                   145 
146 G4VPhysicalVolume* DetectorConstruction::Const    146 G4VPhysicalVolume* DetectorConstruction::ConstructCalorimeter()
147 {                                                 147 {
148   // Cleanup old geometry                         148   // Cleanup old geometry
149   //                                              149   //
150   G4GeometryManager::GetInstance()->OpenGeomet    150   G4GeometryManager::GetInstance()->OpenGeometry();
151   G4PhysicalVolumeStore::GetInstance()->Clean(    151   G4PhysicalVolumeStore::GetInstance()->Clean();
152   G4LogicalVolumeStore::GetInstance()->Clean()    152   G4LogicalVolumeStore::GetInstance()->Clean();
153   G4SolidStore::GetInstance()->Clean();           153   G4SolidStore::GetInstance()->Clean();
154                                                   154   
155   // fibers                                       155   // fibers
156   //                                              156   //
157   G4Tubs*                                         157   G4Tubs*
158   svol_fiber = new G4Tubs("fiber",      //name    158   svol_fiber = new G4Tubs("fiber",      //name
159                          0*mm, 0.5*fiberDiamet    159                          0*mm, 0.5*fiberDiameter, //r1, r2
160        0.5*fiberLength,   //half-length           160        0.5*fiberLength,   //half-length 
161        0., twopi);      //theta1, theta2          161        0., twopi);      //theta1, theta2
162                                                   162        
163   lvol_fiber = new G4LogicalVolume(svol_fiber,    163   lvol_fiber = new G4LogicalVolume(svol_fiber,    //solid
164                                    fiberMat,      164                                    fiberMat,    //material
165                                    "fiber");      165                                    "fiber");    //name
166                                                   166            
167   // layer                                        167   // layer
168   //                                              168   //
169   G4double sizeX = layerThickness;                169   G4double sizeX = layerThickness;
170   G4double sizeY = distanceInterFibers*nbOfFib    170   G4double sizeY = distanceInterFibers*nbOfFibers;
171   G4double sizeZ = fiberLength;                   171   G4double sizeZ = fiberLength;
172                                                   172   
173   G4Box*                                          173   G4Box*      
174   svol_layer = new G4Box("layer",     //name      174   svol_layer = new G4Box("layer",     //name
175                   0.5*sizeX, 0.5*sizeY, 0.5*si    175                   0.5*sizeX, 0.5*sizeY, 0.5*sizeZ); //size
176                                                   176 
177                                                   177 
178   lvol_layer = new G4LogicalVolume(svol_layer,    178   lvol_layer = new G4LogicalVolume(svol_layer,    //solid
179                                    absorberMat    179                                    absorberMat,   //material
180                                    "layer");      180                                    "layer");    //name
181                                                   181 
182   // put fibers within layer                      182   // put fibers within layer
183   //                                              183   //
184   G4double Xcenter = 0.;                          184   G4double Xcenter = 0.;
185   G4double Ycenter = -0.5*(sizeY + distanceInt    185   G4double Ycenter = -0.5*(sizeY + distanceInterFibers);
186                                                   186   
187   for (G4int k=0; k<nbOfFibers; k++) {            187   for (G4int k=0; k<nbOfFibers; k++) {
188     Ycenter += distanceInterFibers;               188     Ycenter += distanceInterFibers;
189     new G4PVPlacement(0,          //no rotatio    189     new G4PVPlacement(0,          //no rotation
190             G4ThreeVector(Xcenter,Ycenter,0.),    190             G4ThreeVector(Xcenter,Ycenter,0.),    //position
191                       lvol_fiber,                 191                       lvol_fiber,             //logical volume  
192                       "fiber",          //name    192                       "fiber",          //name
193                       lvol_layer,           //    193                       lvol_layer,           //mother
194                       false,                //    194                       false,                //no boulean operat
195                       k+1);                       195                       k+1);                   //copy number
196                                                   196 
197   }                                               197   }
198                                                   198            
199   // modules                                      199   // modules
200   //                                              200   //
201   moduleThickness = layerThickness*nbOfLayers     201   moduleThickness = layerThickness*nbOfLayers + milledLayer;       
202   sizeX = moduleThickness;                        202   sizeX = moduleThickness;
203   sizeY = fiberLength;                            203   sizeY = fiberLength;
204   sizeZ = fiberLength;                            204   sizeZ = fiberLength;
205                                                   205   
206   G4Box*                                          206   G4Box*      
207   svol_module = new G4Box("module",     //name    207   svol_module = new G4Box("module",     //name
208                   0.5*sizeX, 0.5*sizeY, 0.5*si    208                   0.5*sizeX, 0.5*sizeY, 0.5*sizeZ); //size
209                                                   209 
210   lvol_module = new G4LogicalVolume(svol_modul    210   lvol_module = new G4LogicalVolume(svol_module,  //solid
211                                    absorberMat    211                                    absorberMat,   //material
212                                    "module");     212                                    "module");   //name
213                                                   213 
214   // put layers within module                     214   // put layers within module
215   //                                              215   //
216   Xcenter = -0.5*(nbOfLayers+1)*layerThickness    216   Xcenter = -0.5*(nbOfLayers+1)*layerThickness;
217   Ycenter =  0.25*distanceInterFibers;            217   Ycenter =  0.25*distanceInterFibers;
218                                                   218   
219   for (G4int k=0; k<nbOfLayers; k++) {            219   for (G4int k=0; k<nbOfLayers; k++) {
220     Xcenter += layerThickness;                    220     Xcenter += layerThickness;
221     Ycenter  = - Ycenter;                         221     Ycenter  = - Ycenter;
222     new G4PVPlacement(0,          //no rotatio    222     new G4PVPlacement(0,          //no rotation
223             G4ThreeVector(Xcenter,Ycenter,0.),    223             G4ThreeVector(Xcenter,Ycenter,0.),    //position
224                       lvol_layer,                 224                       lvol_layer,             //logical volume  
225                       "layer",          //name    225                       "layer",          //name
226                       lvol_module,                226                       lvol_module,            //mother
227                       false,                //    227                       false,                //no boulean operat
228                       k+1);                       228                       k+1);                   //copy number
229                                                   229 
230   }                                               230   }                    
231                                                   231 
232   // calorimeter                                  232   // calorimeter
233   //                                              233   //
234   calorThickness = moduleThickness*nbOfModules    234   calorThickness = moduleThickness*nbOfModules;
235   sizeX = calorThickness;                         235   sizeX = calorThickness;
236   sizeY = fiberLength;                            236   sizeY = fiberLength;
237   sizeZ = fiberLength;                            237   sizeZ = fiberLength;
238                                                   238   
239   G4Box*                                          239   G4Box*      
240   svol_calorimeter = new G4Box("calorimeter",     240   svol_calorimeter = new G4Box("calorimeter",   //name
241                   0.5*sizeX, 0.5*sizeY, 0.5*si    241                   0.5*sizeX, 0.5*sizeY, 0.5*sizeZ); //size
242                                                   242 
243                                                   243 
244   lvol_calorimeter = new G4LogicalVolume(svol_    244   lvol_calorimeter = new G4LogicalVolume(svol_calorimeter,  //solid
245                                    calorimeter    245                                    calorimeterMat,    //material
246                                    "calorimete    246                                    "calorimeter");    //name  
247                                                   247 
248   // put modules inside calorimeter               248   // put modules inside calorimeter
249   //                                              249   //  
250   Xcenter = -0.5*(calorThickness + moduleThick    250   Xcenter = -0.5*(calorThickness + moduleThickness);
251                                                   251   
252                                                   252 
253   for (G4int k=0; k<nbOfModules; k++) {           253   for (G4int k=0; k<nbOfModules; k++) {
254     Xcenter += moduleThickness;                   254     Xcenter += moduleThickness;     
255     G4RotationMatrix rotm;                        255     G4RotationMatrix rotm;                    //rotation matrix to place modules    
256     if ((k+1)%2 == 0) rotm.rotateX(90*deg);       256     if ((k+1)%2 == 0) rotm.rotateX(90*deg);
257   G4Transform3D transform(rotm, G4ThreeVector(    257   G4Transform3D transform(rotm, G4ThreeVector(Xcenter,0.,0.));    
258     new G4PVPlacement(transform,          //ro    258     new G4PVPlacement(transform,          //rotation+position
259                       lvol_module,          //    259                       lvol_module,          //logical volume  
260                       "module",             //    260                       "module",             //name
261                       lvol_calorimeter,           261                       lvol_calorimeter,         //mother
262                       false,                //    262                       false,                //no boulean operat
263                       k+1);                       263                       k+1);                   //copy number
264   }                                               264   }
265                                                   265 
266   // world                                        266   // world
267   //                                              267   //
268   sizeX = 1.2*calorThickness;                     268   sizeX = 1.2*calorThickness;
269   sizeY = 1.2*fiberLength;                        269   sizeY = 1.2*fiberLength;
270   sizeZ = 1.2*fiberLength;                        270   sizeZ = 1.2*fiberLength;
271                                                   271   
272   worldSizeX = sizeX;                             272   worldSizeX = sizeX;
273                                                   273   
274   G4Box*                                          274   G4Box*      
275   svol_world = new G4Box("world",     //name      275   svol_world = new G4Box("world",     //name
276                   0.5*sizeX, 0.5*sizeY, 0.5*si    276                   0.5*sizeX, 0.5*sizeY, 0.5*sizeZ); //size
277                                                   277 
278   lvol_world = new G4LogicalVolume(svol_world,    278   lvol_world = new G4LogicalVolume(svol_world,    //solid
279                                    worldMat,      279                                    worldMat,    //material
280                                    "world");      280                                    "world");    //name 
281                                                   281             
282   pvol_world = new G4PVPlacement(0,     //no r    282   pvol_world = new G4PVPlacement(0,     //no rotation
283            G4ThreeVector(), //at (0,0,0)          283            G4ThreeVector(), //at (0,0,0)
284                                  lvol_world,      284                                  lvol_world,    //logical volume
285                                  "world",   //    285                                  "world",   //name
286                                  0,     //moth    286                                  0,     //mother  volume
287                                  false,     //    287                                  false,     //no boolean operation
288                                  0);      //co    288                                  0);      //copy number
289                                                   289 
290   //put calorimeter in world                      290   //put calorimeter in world
291   //                                              291   //  
292   new G4PVPlacement(0,        //no rotation       292   new G4PVPlacement(0,        //no rotation
293                     G4ThreeVector(),    //at (    293                     G4ThreeVector(),    //at (0,0,0)
294                     lvol_calorimeter,   //logi    294                     lvol_calorimeter,   //logical volume
295                     "calorimeter",    //name      295                     "calorimeter",    //name
296                     lvol_world,     //mother      296                     lvol_world,     //mother  volume
297                     false,      //no boolean o    297                     false,      //no boolean operation
298                     0);       //copy number       298                     0);       //copy number
299                                                   299                  
300   PrintCalorParameters();                         300   PrintCalorParameters();
301                                                   301   
302   // Visualization attributes                     302   // Visualization attributes
303   //                                              303   //
304   lvol_fiber->SetVisAttributes (G4VisAttribute    304   lvol_fiber->SetVisAttributes (G4VisAttributes::GetInvisible());  
305   lvol_layer->SetVisAttributes (G4VisAttribute    305   lvol_layer->SetVisAttributes (G4VisAttributes::GetInvisible());
306   lvol_world->SetVisAttributes (G4VisAttribute    306   lvol_world->SetVisAttributes (G4VisAttributes::GetInvisible());
307                                                   307     
308   //always return the physical World              308   //always return the physical World
309   //                                              309   //
310   return pvol_world;                              310   return pvol_world;
311 }                                                 311 }
312                                                   312 
313 //....oooOO0OOooo........oooOO0OOooo........oo    313 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
314                                                   314 
315 #include "G4UnitsTable.hh"                        315 #include "G4UnitsTable.hh"
316                                                   316 
317 void DetectorConstruction::PrintCalorParameter    317 void DetectorConstruction::PrintCalorParameters()
318 {                                                 318 {
319   G4cout << "\n-------------------------------    319   G4cout << "\n-------------------------------------------------------------"
320      << "\n ---> The calorimeter is " << nbOfM    320      << "\n ---> The calorimeter is " << nbOfModules << " Modules"
321      << "\n ---> A Module is " << nbOfLayers <    321      << "\n ---> A Module is " << nbOfLayers << " Layers + 1 milled Layer";
322                                                   322      
323   G4cout                                          323   G4cout  
324      << "\n ---> A Layer is " << G4BestUnit(la    324      << "\n ---> A Layer is " << G4BestUnit(layerThickness,"Length")  
325      << " thickness of " << absorberMat->GetNa    325      << " thickness of " << absorberMat->GetName();    
326                                                   326      
327   G4cout                                          327   G4cout 
328      << "\n ---> A Layer includes " << nbOfFib    328      << "\n ---> A Layer includes " << nbOfFibers << " fibers of " 
329      << fiberMat->GetName();                      329      << fiberMat->GetName();
330                                                   330      
331   G4cout                                          331   G4cout 
332      << "\n      ---> diameter : " << G4BestUn    332      << "\n      ---> diameter : " << G4BestUnit(fiberDiameter,"Length")
333      << "\n      ---> length   : " << G4BestUn    333      << "\n      ---> length   : " << G4BestUnit(fiberLength,"Length")
334      << "\n      ---> distance : " << G4BestUn    334      << "\n      ---> distance : " << G4BestUnit(distanceInterFibers,"Length");
335                                                   335      
336   G4cout                                          336   G4cout  
337      << "\n ---> The milled Layer is " << G4Be    337      << "\n ---> The milled Layer is " << G4BestUnit(milledLayer,"Length")  
338      << " thickness of " << absorberMat->GetNa    338      << " thickness of " << absorberMat->GetName();
339                                                   339      
340   G4cout                                          340   G4cout 
341    << "\n\n ---> Module thickness " << G4BestU    341    << "\n\n ---> Module thickness " << G4BestUnit(moduleThickness,"Length");
342                                                   342   
343   G4cout                                          343   G4cout 
344    << "\n\n ---> Total calor thickness " << G4    344    << "\n\n ---> Total calor thickness " << G4BestUnit(calorThickness,"Length")
345    <<   "\n      Tranverse size        " << G4    345    <<   "\n      Tranverse size        " << G4BestUnit(fiberLength,"Length");
346                                                   346 
347   G4cout << "\n-------------------------------    347   G4cout << "\n-------------------------------------------------------------\n";
348   G4cout << G4endl;                               348   G4cout << G4endl;
349 }                                                 349 }
350                                                   350 
351 //....oooOO0OOooo........oooOO0OOooo........oo    351 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
352                                                   352 
353 #include "G4GlobalMagFieldMessenger.hh"           353 #include "G4GlobalMagFieldMessenger.hh"
354 #include "G4AutoDelete.hh"                        354 #include "G4AutoDelete.hh"
355                                                   355 
356 void DetectorConstruction::ConstructSDandField    356 void DetectorConstruction::ConstructSDandField()
357 {                                                 357 {
358     if ( fFieldMessenger.Get() == 0 ) {           358     if ( fFieldMessenger.Get() == 0 ) {
359         // Create global magnetic field messen    359         // Create global magnetic field messenger.
360         // Uniform magnetic field is then crea    360         // Uniform magnetic field is then created automatically if
361         // the field value is not zero.           361         // the field value is not zero.
362         G4ThreeVector fieldValue = G4ThreeVect    362         G4ThreeVector fieldValue = G4ThreeVector();
363         G4GlobalMagFieldMessenger* msg =          363         G4GlobalMagFieldMessenger* msg =
364         new G4GlobalMagFieldMessenger(fieldVal    364         new G4GlobalMagFieldMessenger(fieldValue);
365         //msg->SetVerboseLevel(1);                365         //msg->SetVerboseLevel(1);
366         G4AutoDelete::Register(msg);              366         G4AutoDelete::Register(msg);
367         fFieldMessenger.Put( msg );               367         fFieldMessenger.Put( msg );
368                                                   368         
369     }                                             369     }
370 }                                                 370 }
371                                                   371 
372 //....oooOO0OOooo........oooOO0OOooo........oo    372 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
373                                                   373