Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/microbeam/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/microbeam/src/DetectorConstruction.cc (Version 11.3.0) and /examples/advanced/microbeam/src/DetectorConstruction.cc (Version 7.1.p1)


  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 // This example is provided by the Geant4-DNA     
 27 // Any report or published results obtained us    
 28 // shall cite the following Geant4-DNA collabo    
 29 // Med. Phys. 37 (2010) 4692-4708                 
 30 // The Geant4-DNA web site is available at htt    
 31 //                                                
 32 // If you use this example, please cite the fo    
 33 // Rad. Prot. Dos. 133 (2009) 2-11                
 34                                                   
 35 #include "DetectorConstruction.hh"                
 36 #include "G4PhysicalConstants.hh"                 
 37 #include "G4SystemOfUnits.hh"                     
 38 #include "G4MagIntegratorDriver.hh"               
 39 #include "G4AutoDelete.hh"                        
 40                                                   
 41 DetectorConstruction::DetectorConstruction()      
 42                                                   
 43   :fDefaultMaterial(nullptr),fCollimatorMateri    
 44    fCathodeMaterial(nullptr),fVerreMaterial(nu    
 45    fKgmMaterial(nullptr),fBoite2Material(nullp    
 46    fNucleusMaterial1(nullptr),fCytoplasmMateri    
 47    fNucleusMaterial2(nullptr),fCytoplasmMateri    
 48    fNucleusMaterial3(nullptr),fCytoplasmMateri    
 49    fPhysiWorld(nullptr),fLogicWorld(nullptr),f    
 50    fPhysiVol(nullptr),fLogicVol(nullptr),fSoli    
 51    fPhysiBoite(nullptr),fLogicBoite(nullptr),f    
 52    fPhysiYoke1(nullptr),fLogicYoke1(nullptr),f    
 53    fPhysi1Gap(nullptr),fLogic1Gap(nullptr),fSo    
 54    fPhysi2Gap(nullptr),fLogic2Gap(nullptr),fSo    
 55    fPhysi3Gap(nullptr),fLogic3Gap(nullptr),fSo    
 56    fPhysiYoke2(nullptr),fLogicYoke2(nullptr),f    
 57    fPhysi4Gap(nullptr),fLogic4Gap(nullptr),fSo    
 58    fPhysi5Gap(nullptr),fLogic5Gap(nullptr),fSo    
 59    fPhysiBoiteIso(nullptr),fLogicBoiteIso(null    
 60    fPhysiCathode(nullptr),fLogicCathode(nullpt    
 61    fPhysiIso(nullptr),fLogicIso(nullptr),fSoli    
 62    fPhysiVerre(nullptr),fLogicVerre(nullptr),f    
 63    fPhysiBoite2(nullptr),fLogicBoite2(nullptr)    
 64    fPhysiBoite3(nullptr),fLogicBoite3(nullptr)    
 65    fPhysiKgm(nullptr),fLogicKgm(nullptr),fSoli    
 66    fPhysiVerre2(nullptr),fLogicVerre2(nullptr)    
 67    fPhysiPhantom(nullptr),fLogicPhantom(nullpt    
 68                                                   
 69 {                                                 
 70   DefineMaterials();                              
 71                                                   
 72   // Initialisation of variables which            
 73   // will then be appropriately fixed in metho    
 74   // to implement the simulation geometry set-    
 75   fDensityPhantom = 0.; // in g/cm3               
 76   fDensityNucleus = 0.; // in g/cm3               
 77   fDensityCytoplasm = 0.; // in g/cm3             
 78   fWorldSizeXY=fWorldSizeZ=0.;                    
 79   fCollObjSizeXY = 0.;                            
 80   fCollObjSizeZ = 0.;                             
 81                                                   
 82   // TARGET POSITION                              
 83   fCiblePositionX = 0.;                           
 84   fCiblePositionY = 0.;                           
 85   fCiblePositionZ = 0.;                           
 86                                                   
 87    // MICROBEAM LINE ANGLE                        
 88   fLineAngle = 0.;                                
 89                                                   
 90   fNbOfPixelsInPhantom=0;                         
 91 }                                                 
 92                                                   
 93 DetectorConstruction::~DetectorConstruction()     
 94 {}                                                
 95                                                   
 96 G4VPhysicalVolume* DetectorConstruction::Const    
 97 {                                                 
 98   if(fPhysiWorld) { return fPhysiWorld; }         
 99   return ConstructLine();                         
100 }                                                 
101                                                   
102 void DetectorConstruction::DefineMaterials()      
103 {                                                 
104   G4String name, symbol;                          
105   G4double density;                               
106                                                   
107   G4int ncomponents, natoms,nel;                  
108   G4double z, a;                                  
109   G4double fractionmass;                          
110   G4double temperature, pressure;                 
111                                                   
112   // Define Elements                              
113                                                   
114   G4Element*   H  = new G4Element ("Hydrogen",    
115   G4Element*   N  = new G4Element ("Nitrogen",    
116   G4Element*   O  = new G4Element ("Oxygen"  ,    
117   G4Element*   Ar = new G4Element ("Argon" , "    
118   G4Element*    C = new G4Element ("Carbon","C    
119   G4Element *  Si = new G4Element ("Silicon","    
120   G4Element *  Cu = new G4Element ("Cuivre","C    
121   G4Element *  Zn = new G4Element ("Zinc","Zn"    
122   G4Element *  P  = new G4Element ("Phosphorus    
123                                                   
124   // Vacuum standard definition...                
125                                                   
126   density = universe_mean_density;                
127   G4Material* vacuum = new G4Material(name="Va    
128               density);                           
129   // Water                                        
130                                                   
131   density = 1.000*g/cm3;                          
132   G4Material* H2O = new G4Material(name="H2O"     
133   H2O->AddElement(H, natoms=2);                   
134   H2O->AddElement(O, natoms=1);                   
135                                                   
136   // Air                                          
137                                                   
138   density = 1.290*mg/cm3;                         
139   pressure = 1*atmosphere;                        
140   temperature = 293.16*kelvin;                    
141   G4Material* Air = new G4Material(name="Air"     
142   Air->AddElement(N, fractionmass=0.7);           
143   Air->AddElement(O, fractionmass=0.3);           
144                                                   
145   // Low Pressure air                             
146                                                   
147   density = (5e-6/1013.)*1.290*mg/cm3; // 5e-6    
148   pressure = 1*atmosphere;                        
149   temperature = 293.16*kelvin;                    
150   G4Material* LPAir = new G4Material(name="LPA    
151   LPAir->AddElement(N, fractionmass=0.715);       
152   LPAir->AddElement(O, fractionmass=0.25);        
153   LPAir->AddElement(Ar, fractionmass=0.035);      
154                                                   
155   // Platinum                                     
156                                                   
157   a = 195.09*g/mole;                              
158   density = 21.4*g/cm3;                           
159   G4Material* Pt = new G4Material(name="Pl", z    
160                                                   
161   // Butane @ 10 mbar                             
162                                                   
163   density = 2.552e-2*mg/cm3;                      
164   pressure = 0.01*bar;                            
165   temperature = 293.16*kelvin;                    
166   G4Material* Butane = new G4Material(name = "    
167   Butane->AddElement (C, natoms=4);               
168   Butane->AddElement (H, natoms=10);              
169                                                   
170   // Polypropylene                                
171                                                   
172   density = 0.9*g/cm3;                            
173   G4Material* Polyprop = new G4Material(name =    
174   Polyprop->AddElement (C,3);                     
175   Polyprop->AddElement (H,6);                     
176                                                   
177   // Si3N4                                        
178                                                   
179   density = 3.44*g/cm3;                           
180   G4Material* Si3N4 = new G4Material(name = "S    
181   Si3N4->AddElement (Si, natoms=3);               
182   Si3N4->AddElement (N, natoms=4);                
183                                                   
184   // SiO2                                         
185                                                   
186   density = 2.5*g/cm3;                            
187   G4Material* SiO2 = new G4Material(name = "Si    
188   SiO2->AddElement (Si, natoms=1);                
189   SiO2->AddElement (O, natoms=2);                 
190                                                   
191   // Brass                                        
192                                                   
193   density = 8.5*g/cm3;                            
194   G4Material* Laiton = new G4Material(name = "    
195   Laiton->AddElement (Cu,1);                      
196   Laiton->AddElement (Zn,1);                      
197                                                   
198   // Phantom                                      
199                                                   
200   fDensityPhantom = 1.; // in g/cm3               
201                                                   
202   // Nucleus composition from Alard et al., Ra    
203   // Comp. Math. Meth. Med. 147252 (2012)         
204   //                                              
205   // Cytoplasm composition is assumed to be wa    
206                                                   
207   // Cytoplasm                                    
208                                                   
209   fDensityCytoplasm = 1.; // in g/cm3             
210   density = fDensityCytoplasm*g/cm3;              
211   G4Material* Cytoplasm1 = new G4Material(name    
212   Cytoplasm1->AddElement(H, fractionmass=0.112    
213   Cytoplasm1->AddElement(O, fractionmass=0.888    
214                                                   
215   // Nucleoli                                     
216                                                   
217   fDensityCytoplasm = 1.;                         
218   // in g/cm3 (nucleoli are assumed to have th    
219   density = fDensityCytoplasm*g/cm3;              
220   G4Material* Cytoplasm2 = new G4Material(name    
221   Cytoplasm2->AddElement(H, fractionmass=0.106    
222   Cytoplasm2->AddElement(O, fractionmass=0.745    
223   Cytoplasm2->AddElement(C, fractionmass=0.090    
224   Cytoplasm2->AddElement(N, fractionmass=0.032    
225   Cytoplasm2->AddElement(P, fractionmass=0.026    
226                                                   
227   // default is water                             
228                                                   
229   fDensityCytoplasm = 1.; // in g/cm3             
230   density = fDensityCytoplasm*g/cm3;              
231   G4Material* Cytoplasm3 = new G4Material(name    
232   Cytoplasm3->AddElement(H, fractionmass=0.112    
233   Cytoplasm3->AddElement(O, fractionmass=0.888    
234                                                   
235   // Nucleus chemical composition                 
236                                                   
237   fDensityNucleus = 1.; // in g/cm3               
238   density = fDensityNucleus*g/cm3;                
239   G4Material* Nucleus1 = new G4Material(name="    
240   Nucleus1->AddElement(H, fractionmass=0.1064)    
241   Nucleus1->AddElement(O, fractionmass=0.745);    
242   Nucleus1->AddElement(C, fractionmass=0.0904)    
243   Nucleus1->AddElement(N, fractionmass=0.0321)    
244   Nucleus1->AddElement(P, fractionmass=0.0261)    
245                                                   
246   fDensityNucleus = 1.; // in g/cm3               
247   density = fDensityNucleus*g/cm3;                
248   G4Material* Nucleus2 = new G4Material(name="    
249   Nucleus2->AddElement(H, fractionmass=0.1064)    
250   Nucleus2->AddElement(O, fractionmass=0.745);    
251   Nucleus2->AddElement(C, fractionmass=0.0904)    
252   Nucleus2->AddElement(N, fractionmass=0.0321)    
253   Nucleus2->AddElement(P, fractionmass=0.0261)    
254                                                   
255   // default                                      
256                                                   
257   fDensityNucleus = 1.; // in g/cm3               
258   density = fDensityNucleus*g/cm3;                
259   G4Material* Nucleus3 = new G4Material(name="    
260   Nucleus3->AddElement(H, fractionmass=0.1064)    
261   Nucleus3->AddElement(O, fractionmass=0.745);    
262   Nucleus3->AddElement(C, fractionmass=0.0904)    
263   Nucleus3->AddElement(N, fractionmass=0.0321)    
264   Nucleus3->AddElement(P, fractionmass=0.0261)    
265                                                   
266   // Materials in setup                           
267                                                   
268   fDefaultMaterial  = vacuum;                     
269   fCollimatorMaterial   = Pt;                     
270   fBoiteMaterial    = Butane;                     
271   fCathodeMaterial      = Laiton;                 
272   fVerreMaterial        = Si3N4;                  
273   fVerre2Material   = SiO2;                       
274   fKgmMaterial    = H2O;                          
275   fBoite2Material       = Air;                    
276   fBoite3Material       = Polyprop;               
277                                                   
278   fNucleusMaterial1   = Nucleus1;                 
279   fCytoplasmMaterial1   = Cytoplasm1;             
280   fNucleusMaterial2   = Nucleus2;                 
281   fCytoplasmMaterial2   = Cytoplasm2;             
282   fNucleusMaterial3   = Nucleus3;                 
283   fCytoplasmMaterial3   = Cytoplasm3;             
284                                                   
285   // DISPLAY MATERIALS                            
286   G4cout << G4endl << *(G4Material::GetMateria    
287                                                   
288 }                                                 
289                                                   
290 G4VPhysicalVolume* DetectorConstruction::Const    
291 {                                                 
292   // WORLD                                        
293   fWorldSizeXY  = 20*m;                           
294   fWorldSizeZ   = 40*m;                           
295                                                   
296   // MICROBEAM LINE ANGLE                         
297   fLineAngle = 10*deg;                            
298                                                   
299   // TARGET POSITION                              
300   fCiblePositionX = -1461.42*mm;                  
301   fCiblePositionY = 0*mm;                         
302   fCiblePositionZ = -1327 + (955*std::cos(fLin    
303                                                   
304   //*************                                 
305   // WORLD VOLUME                                 
306   //*************                                 
307                                                   
308   fSolidWorld = new G4Box("World",                
309         fWorldSizeXY/2,fWorldSizeXY/2,fWorldSi    
310                                                   
311                                                   
312   fLogicWorld = new G4LogicalVolume(fSolidWorl    
313             fDefaultMaterial, //its material      
314             "World");   //its name                
315                                                   
316   fPhysiWorld = new G4PVPlacement(0,      //no    
317            G4ThreeVector(), //at (0,0,0)          
318                                  "World",   //    
319                                  fLogicWorld,     
320                                  nullptr,   //    
321                                  false,     //    
322                                  0);      //co    
323                                                   
324   //*****************                             
325   // FULL LINE VOLUME                             
326   //*****************                             
327                                                   
328   fSolidVol = new G4Box("Vol",                    
329             10.*m/2,10.*m/2,(14025)*mm/2);        
330                                                   
331   fLogicVol = new G4LogicalVolume(fSolidVol,      
332           fDefaultMaterial,                       
333           "Vol");                                 
334                                                   
335   fPhysiVol = new G4PVPlacement(0,                
336              G4ThreeVector(0,0,-2012.5*mm),       
337              "Vol",                               
338              fLogicVol,                           
339              fPhysiWorld,                         
340              false,                               
341              0);                                  
342                                                   
343   // *****************************************    
344   // Whole microbeam line at 10 deg contained     
345   // *****************************************    
346                                                   
347   G4double PosX = fCiblePositionX*mm +( (6958.    
348   G4double PosZ = (fCiblePositionZ+2012.5)*mm     
349                                                   
350   // Adjust box absolute position                 
351                                                   
352   PosX = PosX + 1.3 * micrometer * std::cos(fL    
353   PosZ = PosZ + 1.3 * micrometer * std::sin(fL    
354                                                   
355   G4RotationMatrix *rot = new G4RotationMatrix    
356   //  rot->rotateX(0*deg);                        
357   rot->rotateY(10*deg);                           
358   //  rot->rotateZ(0*deg);                        
359                                                   
360   fSolidBoite = new G4Box("Boite", 4*cm, 4*cm,    
361                                                   
362   fLogicBoite = new G4LogicalVolume(fSolidBoit    
363                                                   
364   fPhysiBoite = new G4PVPlacement(rot,            
365          G4ThreeVector(PosX,0,PosZ),              
366          "Boite",                                 
367          fLogicBoite,                             
368          fPhysiVol,                               
369          false,                                   
370          0);                                      
371                                                   
372   //******************************************    
373   // OBJECT COLLIMATOR (after switching magnet    
374   //******************************************    
375                                                   
376   fCollObjSizeXY = 8*cm;                          
377   fCollObjSizeZ = 0.07*mm;                        
378                                                   
379   fSolidYoke1 = new G4Box("_CollObj_yoke1_", f    
380                                                   
381   fLogicYoke1 = new G4LogicalVolume(fSolidYoke    
382                                                   
383   fPhysiYoke1 = new G4PVPlacement( 0, G4ThreeV    
384                                    "_CollObj_y    
385                                                   
386   // --> FIRST PART                               
387                                                   
388   fSolid1Gap = new G4Cons("_CollObj_gap1_", 0.    
389        0.*micrometer,2.5*micrometer,              
390        3.5*micrometer,                            
391        0, twopi);                                 
392                                                   
393   fLogic1Gap = new G4LogicalVolume(fSolid1Gap,    
394                                                   
395   fPhysi1Gap = new G4PVPlacement(0, G4ThreeVec    
396                                  fLogicYoke1,     
397                                                   
398                                                   
399   // --> SECOND PART                              
400                                                   
401   fSolid2Gap = new G4Cons("_CollObj_gap2_", 0.    
402        0.*micrometer,6*micrometer,                
403        6.5*micrometer,                            
404        0, twopi);                                 
405                                                   
406   fLogic2Gap = new G4LogicalVolume(fSolid2Gap,    
407                                                   
408   fPhysi2Gap = new G4PVPlacement(0, G4ThreeVec    
409                                  fLogicYoke1,     
410                                                   
411                                                   
412   // --> THIRD PART                               
413                                                   
414   fSolid3Gap = new G4Cons("_CollObj_gap3_", 0.    
415        0.*micrometer,15*micrometer,               
416        25*micrometer,                             
417        0, twopi);                                 
418                                                   
419   fLogic3Gap = new G4LogicalVolume(fSolid3Gap,    
420                                                   
421   fPhysi3Gap = new G4PVPlacement(0, G4ThreeVec    
422                                  false, 0);       
423                                                   
424                                                   
425   //************************                      
426   // GAS DETECTOR COLLIMATOR                      
427   //************************                      
428                                                   
429   fSolidYoke2 = new G4Box("_CollDet_yoke_", 2.    
430                                                   
431   fLogicYoke2 = new G4LogicalVolume(fSolidYoke    
432                                                   
433   fPhysiYoke2 = new G4PVPlacement(0,              
434                                   G4ThreeVecto    
435                                   fLogicYoke2,    
436                                                   
437   // --> FIRST PART                               
438                                                   
439   fSolid4Gap = new G4Cons("_CollDet_gap4_", 0.    
440        0.*micrometer,5*micrometer,                
441        7.5*micrometer,                            
442        0, twopi);                                 
443                                                   
444   fLogic4Gap = new G4LogicalVolume(fSolid4Gap,    
445                                                   
446   fPhysi4Gap = new G4PVPlacement(0, G4ThreeVec    
447                                  fLogicYoke2,     
448                                                   
449   // --> SECOND PART                              
450                                                   
451   fSolid5Gap = new G4Cons("_CollDet_gap5_", 0.    
452        0.*micrometer,8*micrometer,                
453        27.5*micrometer,                           
454        0, twopi);                                 
455                                                   
456   fLogic5Gap = new G4LogicalVolume(fSolid5Gap,    
457                                                   
458   fPhysi5Gap = new G4PVPlacement(0,               
459         G4ThreeVector(0,0,-0.0075*mm),            
460         fLogic5Gap,                               
461         "_CollDet_gap5_",                         
462         fLogicYoke2,                              
463         false,                                    
464         0);                                       
465   // ************                                 
466   // GAS DETECTOR                                 
467   // ************                                 
468                                                   
469   fSolidBoiteIso = new G4Box("Isobutane", 2.5*    
470                                                   
471   fLogicBoiteIso = new G4LogicalVolume(fSolidB    
472                                                   
473   fPhysiBoiteIso = new G4PVPlacement(0,           
474          G4ThreeVector(0,0,6958.3*mm/2-0.3*mm-    
475          "Isobutane",                             
476          fLogicBoiteIso,                          
477          fPhysiBoite,                             
478          false,                                   
479          0);                                      
480                                                   
481   // --> GAS DETECTOR END CAP                     
482                                                   
483   fSolidCathode = new G4Box("_Laiton_", 2.5*cm    
484                                                   
485   fLogicCathode = new G4LogicalVolume(fSolidCa    
486                                                   
487   fPhysiCathode = new G4PVPlacement(0,            
488            G4ThreeVector(0,0,1.25*mm),            
489            "_Laiton_",                            
490            fLogicCathode,                         
491            fPhysiBoiteIso,                        
492            false, 0);                             
493                                                   
494   // --> ISOBUTANE GAS                            
495                                                   
496   fSolidIso = new G4Box("_Iso_", 1.*mm, 1.*mm,    
497                                                   
498   fLogicIso = new G4LogicalVolume(fSolidIso, f    
499                                                   
500   fPhysiIso = new G4PVPlacement(0,                
501              G4ThreeVector(0,0,-0.000075*mm),     
502              "_Iso_",                             
503              fLogicIso,                           
504              fPhysiCathode,                       
505              false,                               
506              0);                                  
507                                                   
508   // --> Si3N4 WINDOW                             
509                                                   
510   fSolidVerre = new G4Box("_Si3N4_", 0.5*mm, 0    
511                                                   
512   fLogicVerre = new G4LogicalVolume(fSolidVerr    
513                                                   
514                                                   
515   fPhysiVerre = new G4PVPlacement(0,              
516          G4ThreeVector(0,0,0.499925*mm),          
517          "_Si3N4_",                               
518          fLogicVerre,                             
519          fPhysiCathode,                           
520          false,                                   
521          0);                                      
522   // *******                                      
523   // AIR GAP                                      
524   // *******                                      
525                                                   
526   fSolidBoite2 = new G4Box("_Air_", 2.5*cm, 2.    
527                                                   
528   fLogicBoite2 = new G4LogicalVolume(fSolidBoi    
529                                                   
530   fPhysiBoite2 = new G4PVPlacement(0,             
531          G4ThreeVector(0,0,6958.3*mm/2-0.3*mm-    
532          "_Air_",                                 
533          fLogicBoite2,                            
534          fPhysiBoite,                             
535          false,                                   
536          0);                                      
537                                                   
538   //*************                                 
539   // CELL SUPPORT                                 
540   //*************                                 
541                                                   
542   fSolidBoite3 = new G4Box("Polyprop", 2.5*cm,    
543                                                   
544   fLogicBoite3 = new G4LogicalVolume(fSolidBoi    
545                                                   
546   fPhysiBoite3 = new G4PVPlacement(0,             
547           G4ThreeVector(0,0,6958.3*mm/2-0.3*mm    
548           "Polyprop",                             
549           fLogicBoite3,                           
550           fPhysiBoite,                            
551           false,                                  
552           0);                                     
553   //****                                          
554   // KGM                                          
555   //****                                          
556                                                   
557   fSolidKgm = new G4Box("KGM", 2.5*cm, 2.5*cm,    
558                                                   
559   fLogicKgm = new G4LogicalVolume(fSolidKgm, f    
560                                                   
561   fPhysiKgm = new G4PVPlacement(0,                
562              G4ThreeVector(0,0,6958.3*mm/2-0.3    
563              "KGM",                               
564              fLogicKgm,                           
565              fPhysiBoite,                         
566              false,                               
567              0);                                  
568                                                   
569   //*****************                             
570   // MICROSCOPE PLATE                             
571   //*****************                             
572                                                   
573   fSolidVerre2 = new G4Box("_Lame_", 2.5*cm, 2    
574                                                   
575   fLogicVerre2 = new G4LogicalVolume(fSolidVer    
576                                                   
577   fPhysiVerre2 = new G4PVPlacement(0,             
578           G4ThreeVector(0,0,6958.3*mm/2-0.3*mm    
579           "_Lame_",                               
580           fLogicVerre2,                           
581           fPhysiBoite,                            
582           false,                                  
583           0);                                     
584                                                   
585   // **************                               
586   // CELL CYTOPLASM                               
587   // **************                               
588                                                   
589   // WITHIN KGM                                   
590 /*                                                
591   fSolidCyto=new G4Ellipsoid("CYTO",25*microme    
592                                                   
593   fLogicCyto=new G4LogicalVolume (fSolidCyto,     
594                                                   
595   fPhysiCyto=new G4PVPlacement(0, G4ThreeVecto    
596 */                                                
597                                                   
598   // ************                                 
599   // CELL PHANTOM                                 
600   // ************                                 
601                                                   
602   fMyCellParameterisation = new CellParameteri    
603         (fNucleusMaterial1,fCytoplasmMaterial1    
604    fNucleusMaterial2,fCytoplasmMaterial2,         
605    fNucleusMaterial3,fCytoplasmMaterial3);        
606                                                   
607   fSolidPhantom = new G4Box("Phantom",            
608     fMyCellParameterisation->GetPixelSizeX()/2    
609   fMyCellParameterisation->GetPixelSizeY()/2,     
610   fMyCellParameterisation->GetPixelSizeZ()/2);    
611                                                   
612   fLogicPhantom = new G4LogicalVolume(fSolidPh    
613                                                   
614   SetNbOfPixelsInPhantom (fMyCellParameterisat    
615                                                   
616   SetMassNucleus(fMyCellParameterisation->GetN    
617                                                   
618   SetMassCytoplasm(fMyCellParameterisation->Ge    
619                                                   
620   fPhysiPhantom = new G4PVParameterised(          
621                             "Phantom",            
622                             fLogicPhantom,        
623                             //logicCyto,          
624                             fLogicKgm,            
625           kUndefined,       // Are placed alon    
626                             fMyCellParameteris    
627                             fMyCellParameteris    
628                                                   
629   G4cout << " ==========> The phantom contains    
630   G4cout << " ==========> Nucleus mass (kg)="     
631   G4cout << " ==========> Cytoplasm mass (kg)=    
632   G4cout << " ==========> Voxel size X (um)="     
633   G4cout << " ==========> Voxel size Y (um)="     
634   G4cout << " ==========> Voxel size Z (um)="     
635   G4cout << G4endl;                               
636                                                   
637   // VISUALISATION ATTRIBUTES (for phantom, se    
638                                                   
639   G4VisAttributes* simpleWorldVisAtt= new G4Vi    
640   simpleWorldVisAtt->SetVisibility(true);         
641                                                   
642   G4VisAttributes* simplePlain= new G4VisAttri    
643   simplePlain->SetVisibility(true);               
644   simplePlain->SetForceSolid(true);               
645                                                   
646   G4VisAttributes* simpleBoxAttLine= new G4Vis    
647   simpleBoxAttLine->SetVisibility(true);          
648                                                   
649   G4VisAttributes* simpleBoxAtt= new G4VisAttr    
650   simpleBoxAtt->SetDaughtersInvisible(false);     
651   simpleBoxAtt->SetForceSolid(false);             
652                                                   
653   G4VisAttributes* simpleBoxAtt2= new G4VisAtt    
654   simpleBoxAtt2->SetDaughtersInvisible(false);    
655   simpleBoxAtt2->SetForceSolid(false);            
656                                                   
657   G4VisAttributes* simpleBoxAttKGM= new G4VisA    
658   simpleBoxAttKGM->SetDaughtersInvisible(false    
659   simpleBoxAttKGM->SetForceSolid(false);          
660                                                   
661   G4VisAttributes* simpleBoxAttPropyl= new G4V    
662   simpleBoxAttPropyl->SetDaughtersInvisible(tr    
663   simpleBoxAttPropyl->SetForceSolid(false);       
664                                                   
665   G4VisAttributes* simpleBoxAttAir= new G4VisA    
666   simpleBoxAttAir->SetDaughtersInvisible(true)    
667   simpleBoxAttAir->SetForceSolid(false);          
668                                                   
669   G4VisAttributes* simpleBoxAtt3= new G4VisAtt    
670   simpleBoxAtt3->SetDaughtersInvisible(false);    
671   simpleBoxAtt3->SetForceSolid(false);            
672                                                   
673   fLogicYoke1->SetVisAttributes(simpleBoxAtt);    
674   fLogic1Gap->SetVisAttributes(simpleBoxAtt);     
675   fLogic2Gap->SetVisAttributes(simpleBoxAtt);     
676   fLogic3Gap->SetVisAttributes(simpleBoxAtt);     
677   fLogicYoke2->SetVisAttributes(simpleBoxAtt);    
678   fLogic4Gap->SetVisAttributes(simpleBoxAtt);     
679   fLogic5Gap->SetVisAttributes(simpleBoxAtt);     
680   fLogicBoite->SetVisAttributes(simpleBoxAttLi    
681   fLogicCathode->SetVisAttributes(simpleBoxAtt    
682   fLogicIso->SetVisAttributes(simpleBoxAttProp    
683   fLogicBoiteIso->SetVisAttributes(simpleBoxAt    
684   fLogicVerre->SetVisAttributes(simpleBoxAtt);    
685   fLogicBoite2->SetVisAttributes(simpleBoxAttA    
686   fLogicBoite3->SetVisAttributes(simpleBoxAtt)    
687   fLogicKgm->SetVisAttributes(simpleBoxAttKGM)    
688   fLogicVerre2->SetVisAttributes(simpleBoxAtt)    
689                                                   
690   return fPhysiWorld;                             
691 }                                                 
692                                                   
693 void DetectorConstruction::ConstructSDandField    
694 {                                                 
695   EMField* field = new EMField();                 
696   G4AutoDelete::Register(field);                  
697                                                   
698   G4EqMagElectricField* fEquation = new G4EqMa    
699   G4MagIntegratorStepper* fStepper = new G4Cla    
700   G4FieldManager* fFieldMgr =                     
701     G4TransportationManager::GetTransportation    
702                                                   
703   // Relaxed                                      
704   G4MagInt_Driver* fIntgrDriver =                 
705     new G4MagInt_Driver(1*mm,fStepper,fStepper    
706                                                   
707   G4ChordFinder* fChordFinder = new G4ChordFin    
708   fFieldMgr->SetChordFinder(fChordFinder);        
709   fFieldMgr->SetDetectorField(field);             
710                                                   
711   // FOLLOWING PARAMETERS TUNED FROM RAY-TRACI    
712   /*                                              
713   fFieldMgr->GetChordFinder()->SetDeltaChord(1    
714   fFieldMgr->SetDeltaIntersection(1e-9*m);        
715   fFieldMgr->SetDeltaOneStep(1e-9*m);             
716                                                   
717   fPropInField =                                  
718     G4TransportationManager::GetTransportation    
719   fPropInField->SetMinimumEpsilonStep(1e-16);     
720   fPropInField->SetMaximumEpsilonStep(1e-15);     
721   */                                              
722 }                                                 
723