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 9.6.p4)


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