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.2.p2)


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