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 1.0)


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