Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/iort_therapy/src/Collimator60BeamLine.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/iort_therapy/src/Collimator60BeamLine.cc (Version 11.3.0) and /examples/advanced/iort_therapy/src/Collimator60BeamLine.cc (Version 9.3.p2)


  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 is the *BASIC* version of IORT, a Gean    
 27 //                                                
 28 // Main Authors: G.Russo(a,b), C.Casarino*(c),    
 29 // Contributor Authors: S.Guatelli(e)             
 30 // Past Authors: G.Arnetta(c), S.E.Mazzaglia(d    
 31 //                                                
 32 //   (a) Fondazione Istituto San Raffaele G.Gi    
 33 //   (b) IBFM-CNR , Segrate (Milano), Italy       
 34 //   (c) LATO (Laboratorio di Tecnologie Oncol    
 35 //   (d) Laboratori Nazionali del Sud of the I    
 36 //   (e) University of Wollongong, Australia      
 37 //                                                
 38 //   *Corresponding author, email to carlo.cas    
 39 //////////////////////////////////////////////    
 40                                                   
 41 #include "globals.hh"                             
 42 #include "G4SystemOfUnits.hh"                     
 43 #include "G4Box.hh"                               
 44 #include "G4Tubs.hh"                              
 45 #include "G4Cons.hh"                              
 46 #include "G4VisAttributes.hh"                     
 47 #include "G4Colour.hh"                            
 48 #include "G4RunManager.hh"                        
 49 #include "G4LogicalVolume.hh"                     
 50 #include "G4PVPlacement.hh"                       
 51 #include "G4RotationMatrix.hh"                    
 52 #include "G4NistManager.hh"                       
 53 #include "G4NistElementBuilder.hh"                
 54 #include "G4SubtractionSolid.hh"                  
 55 #include "IORTDetectorConstruction.hh"            
 56 #include "Collimator60BeamLine.hh"                
 57 #include "Collimator60BeamLineMessenger.hh"       
 58                                                   
 59 Collimator60BeamLine::Collimator60BeamLine():     
 60   physicalTreatmentRoom(0),iortDetectorConstru    
 61                                                   
 62                                                   
 63                                                   
 64   solidFinalCollimatorIORT(0),                    
 65   physiFinalCollimatorIORT(0),                    
 66                                                   
 67   solidGiunz1FinalCollIORT(0),                    
 68   physiGiunz1FinalCollIORT(0),                    
 69                                                   
 70   solidGiunz2FinalCollIORT(0),                    
 71   physiGiunz2FinalCollIORT(0),                    
 72                                                   
 73   solidGiunz3FinalCollIORT(0),                    
 74   physiGiunz3FinalCollIORT(0),                    
 75                                                   
 76   solidGiunz3FinalCollIntIORT(0),                 
 77   physiGiunz3FinalCollIntIORT(0),                 
 78                                                   
 79   solidGiunz4FinalCollIORT(0),                    
 80   physiGiunz4FinalCollIORT(0),                    
 81                                                   
 82   solidGiunz5FinalCollIORT(0),                    
 83   physiGiunz5FinalCollIORT(0),                    
 84                                                   
 85   solidBlocco1IORT(0),                            
 86   physiBlocco1IORT(0),                            
 87                                                   
 88   solidBlocco2IORT(0),                            
 89   physiBlocco2IORT(0),                            
 90                                                   
 91   solidBlocco3IORT(0),                            
 92   physiBlocco3IORT(0),                            
 93                                                   
 94   solidBlocco20mmIORT(0),                         
 95   physiBlocco20mmIORT(0),                         
 96                                                   
 97   solidCM1_1_2IORT(0),                            
 98   physiCM1_1_2IORT(0),                            
 99                                                   
100   solidCM1_2_2IORT(0),                            
101   physiCM1_2_2IORT(0),                            
102                                                   
103   solidCM2_1_2IORT(0),                            
104   physiCM2_1_2IORT(0),                            
105                                                   
106   solidCM2_2_2IORT(0),                            
107   physiCM2_2_2IORT(0),                            
108                                                   
109   solidCCMIORT(0),                                
110   physiCCMIORT(0),                                
111                                                   
112   solidPFS1IORT(0),                               
113   physiPFS1IORT(0),                               
114                                                   
115   solidPFS2IORT(0),                               
116   physiPFS2IORT(0),                               
117                                                   
118   solidPFS3IORT(0),                               
119   physiPFS3IORT(0),                               
120                                                   
121   solidFTIORT(0),                                 
122   physiFTIORT(0)                                  
123                                                   
124                                                   
125 {                                                 
126   // Messenger to change parameters of the col    
127   collimatorMessenger = new Collimator60BeamLi    
128                                                   
129 }                                                 
130 //////////////////////////////////////////////    
131 Collimator60BeamLine::~Collimator60BeamLine()     
132 {                                                 
133   delete collimatorMessenger;                     
134   delete iortDetectorConstruction;                
135 }                                                 
136                                                   
137 //////////////////////////////////////////////    
138                                                   
139                                                   
140 G4VPhysicalVolume* Collimator60BeamLine::Const    
141 {                                                 
142   // Sets default geometry and materials          
143   SetDefaultDimensions();                         
144                                                   
145   // Construct the whole Collimator Beam Line     
146   ConstructCollimator60BeamLine();                
147                                                   
148                                                   
149   // IORTDetectorConstruction builds ONLY the     
150   iortDetectorConstruction = new IORTDetectorC    
151                                                   
152   return physicalTreatmentRoom;                   
153 }                                                 
154                                                   
155 // In the following method the DEFAULTS used i    
156 // collimator beam line are provided              
157 // HERE THE USER CAN CHANGE THE GEOMETRY CHARA    
158 // LINE ELEMENTS, ALTERNATIVELY HE/SHE CAN USE    
159 // MESSENGER IS PROVIDED)                         
160 //                                                
161 // DEFAULT MATERIAL ARE ALSO PROVIDED             
162 // and COLOURS ARE ALSO DEFINED                   
163 // -------------------------------------------    
164 //////////////////////////////////////////////    
165 void Collimator60BeamLine::SetDefaultDimension    
166 {                                                 
167                                                   
168    // Set of coulors that can be used             
169   white = new G4VisAttributes( G4Colour());       
170   white -> SetVisibility(true);                   
171   //white -> SetForceSolid(true);                 
172                                                   
173   blue = new G4VisAttributes(G4Colour(0. ,0. ,    
174   blue -> SetVisibility(true);                    
175   //blue -> SetForceSolid(true);                  
176                                                   
177   gray = new G4VisAttributes( G4Colour(0.5, 0.    
178   gray-> SetVisibility(true);                     
179   //gray-> SetForceSolid(true);                   
180                                                   
181   red = new G4VisAttributes(G4Colour(1. ,0. ,0    
182   red-> SetVisibility(true);                      
183   //red-> SetForceSolid(true);                    
184                                                   
185   yellow = new G4VisAttributes(G4Colour(1., 1.    
186   yellow-> SetVisibility(true);                   
187   //yellow-> SetForceSolid(true);                 
188                                                   
189   green = new G4VisAttributes( G4Colour(25/255    
190   green -> SetVisibility(true);                   
191   //green -> SetForceSolid(true);                 
192                                                   
193   darkGreen = new G4VisAttributes( G4Colour(0/    
194   darkGreen -> SetVisibility(true);               
195   //darkGreen -> SetForceSolid(true);             
196                                                   
197   darkOrange3 = new G4VisAttributes( G4Colour(    
198   darkOrange3 -> SetVisibility(true);             
199   //darkOrange3 -> SetForceSolid(true);           
200                                                   
201   skyBlue = new G4VisAttributes( G4Colour(135/    
202   skyBlue -> SetVisibility(true);                 
203   //skyBlue -> SetForceSolid(true);               
204                                                   
205                                                   
206                                                   
207  // Geometry FINAL COLLIMATOR DEFAULTS            
208                                                   
209   G4double defaultOuterRadiusFinalCollimatorIO    
210   OuterRadiusFinalCollimatorIORT = defaultOute    
211                                                   
212   G4double defaultinnerRadiusFinalCollimatorIO    
213   innerRadiusFinalCollimatorIORT = defaultinne    
214                                                   
215   // DEFAULT DEFINITION OF THE MATERIALS          
216   // All elements and compound definition foll    
217                                                   
218   // ELEMENTS                                     
219   G4bool isotopes = false;                        
220   G4Material* aluminumNist = G4NistManager::In    
221   //G4Material* tantalumNist = G4NistManager::    
222   //G4Material* copperNistAsMaterial = G4NistM    
223   G4Element* zincNist = G4NistManager::Instanc    
224   G4Element* copperNist = G4NistManager::Insta    
225                                                   
226   // COMPOUND                                     
227   G4Material* airNist =  G4NistManager::Instan    
228   //G4Material* kaptonNist = G4NistManager::In    
229   G4Material* galacticNist = G4NistManager::In    
230   G4Material* PMMANist = G4NistManager::Instan    
231   //G4Material* mylarNist = G4NistManager::Ins    
232   G4Material* titanioNist = G4NistManager::Ins    
233                                                   
234                                                   
235   G4double d; // Density                          
236   G4int nComponents;// Number of components       
237   G4double fractionmass; // Fraction in mass o    
238                                                   
239   d = 8.40*g/cm3;   // brass                      
240   nComponents = 2;                                
241   G4Material* brass = new G4Material("Brass",     
242   brass -> AddElement(zincNist, fractionmass =    
243   brass -> AddElement(copperNist, fractionmass    
244                                                   
245                                                   
246   // MATERIAL ASSIGNMENT                          
247                                                   
248                                                   
249  // Material of the FINAL COLLIMATOR IORT         
250   finalCollimatorMaterialIORT = PMMANist;         
251                                                   
252  // Junction 1 FINAL COLLIMATOR IORT              
253   Giunz1FinalCollMaterialIORT = PMMANist;         
254                                                   
255  // Junction 2 FINAL COLLIMATOR IORT              
256   Giunz2FinalCollMaterialIORT = PMMANist;         
257                                                   
258  // Junction 3 FINAL COLLIMATOR IORT              
259   Giunz3FinalCollMaterialIORT = PMMANist;         
260                                                   
261  // Junction 3 FINAL COLLIMATOR Int IORT          
262   Giunz3FinalCollMaterialIntIORT = airNist;       
263                                                   
264  // Junction 4 FINAL COLLIMATOR IORT              
265   Giunz4FinalCollMaterialIORT = PMMANist;         
266                                                   
267  // Junction 5 FINAL COLLIMATOR IORT              
268   Giunz5FinalCollMaterialIORT = PMMANist;         
269                                                   
270  // Block 1 Diameter 30 mm                        
271   Blocco1IORTMaterialIORT = PMMANist;             
272                                                   
273  // Block 2 Diameter 30 mm                        
274   Blocco2IORTMaterialIORT = PMMANist;             
275                                                   
276  // Block 3 Diameter 30 mm                        
277   Blocco3IORTMaterialIORT = PMMANist;             
278                                                   
279  // Block Diameter 20 mm                          
280   Blocco20mmIORTMaterialIORT = PMMANist;          
281                                                   
282  // First Monitor Chamber Lamina Al 1 of 2        
283     CM1_1_2IORTMaterialIORT = aluminumNist;       
284                                                   
285  // First Monitor Chamber Lamina Al 2 of 2        
286     CM1_2_2IORTMaterialIORT = aluminumNist;       
287                                                   
288  // Second Monitor Chamber Lamina Al 1 of 2       
289     CM2_1_2IORTMaterialIORT = aluminumNist;       
290                                                   
291  // Second Monitor Chamber Lamina Al 2 of 2       
292     CM2_2_2IORTMaterialIORT = aluminumNist;       
293                                                   
294  // Monitor Chamber Cylinder                      
295     CCMIORTMaterialIORT = PMMANist;               
296                                                   
297  // Superior Final Part Monitor Chambers          
298     PFS1IORTMaterialIORT = PMMANist;              
299                                                   
300  // Superior Final Part Monitor Chambers          
301     PFS2IORTMaterialIORT = PMMANist;              
302                                                   
303  // Superior Final Part Monitor Chambers          
304     PFS3IORTMaterialIORT = PMMANist;              
305                                                   
306  // Superior Final Part Monitor Chambers Mater    
307     FTIORTMaterialIORT = titanioNist;             
308                                                   
309  // Vacuum Source                                 
310     VSIORTMaterialIORT = galacticNist;            
311                                                   
312 }                                                 
313                                                   
314 //////////////////////////////////////////////    
315 void Collimator60BeamLine::ConstructCollimator    
316 {                                                 
317   // -----------------------------                
318   // Treatment room - World volume                
319   //------------------------------                
320   // Treatment room sizes                         
321   const G4double worldX = 400.0 *cm;              
322   const G4double worldY = 400.0 *cm;              
323   const G4double worldZ = 400.0 *cm;              
324   G4bool isotopes = false;                        
325                                                   
326   G4Material* airNist =  G4NistManager::Instan    
327   G4Box* treatmentRoom = new G4Box("TreatmentR    
328   G4LogicalVolume* logicTreatmentRoom = new G4    
329                                                   
330                                                   
331                   0,0,0);                         
332   physicalTreatmentRoom = new G4PVPlacement(0,    
333               G4ThreeVector(),                    
334               "physicalTreatmentRoom",            
335               logicTreatmentRoom,                 
336               0,false,0);                         
337                                                   
338                                                   
339   // The treatment room is invisible in the Vi    
340   logicTreatmentRoom -> SetVisAttributes (G4Vi    
341                                                   
342   // Components of the Collimator Beam Line       
343                                                   
344   IortBeamLineVacuumSource();                     
345   IortBeamLineTitaniumWindows();                  
346   IortBeamLineMonitorChambers();                  
347   IortBeamLineBlocks() ;                          
348   IortBeamLineJunctions();                        
349   IortBeamLineFinalCollimator();                  
350                                                   
351 }                                                 
352                                                   
353                                                   
354 void Collimator60BeamLine::IortBeamLineVacuumS    
355 {                                                 
356  // ------------------------------------------    
357   //                     Vacuum Source            
358   // -----------------------------------------    
359                                                   
360                                                   
361   G4double phi1 = 90. *deg;                       
362                                                   
363                                                   
364    G4RotationMatrix rm1;                          
365    rm1.rotateY(phi1);                             
366                                                   
367   const G4double outRadiusVSIORT = 44.75 *mm;     
368   const G4double innRadiusVSIORT = 0.*mm;         
369   const G4double hightVSIORT = 1. *mm;            
370   const G4double startAngleVSIORT = 0.*deg;       
371   const G4double spanningAngleVSIORT = 360.*de    
372   const G4double XPositionVSIORT = -862.797 *m    
373                                                   
374   solidVSIORT = new G4Tubs("VSIORT", innRadius    
375             outRadiusVSIORT,                      
376             hightVSIORT,                          
377             startAngleVSIORT,                     
378             spanningAngleVSIORT);                 
379                                                   
380   G4LogicalVolume* logVSIORT = new G4LogicalVo    
381                     VSIORTMaterialIORT, "VSIOR    
382                                                   
383   physiVSIORT = new G4PVPlacement(G4Transform3    
384              "VSIORT", logVSIORT, physicalTrea    
385                                                   
386   logVSIORT -> SetVisAttributes(green);           
387                                                   
388 }                                                 
389                                                   
390 void Collimator60BeamLine::IortBeamLineTitaniu    
391 {                                                 
392 // -------------------------------------------    
393   //                     Titanium Window          
394   // -----------------------------------------    
395                                                   
396   G4double phi2 = 90. *deg;                       
397                                                   
398                                                   
399    G4RotationMatrix rm2;                          
400    rm2.rotateY(phi2);                             
401                                                   
402   const G4double outRadiusFTIORT = 44.75 *mm;     
403   const G4double innRadiusFTIORT = 8.5 *mm;       
404   const G4double hightFTIORT = 0.006 *mm;         
405   const G4double startAngleFTIORT = 0.*deg;       
406   const G4double spanningAngleFTIORT = 360.*de    
407   const G4double XPositionFTIORT = -861.791 *m    
408                                                   
409   solidFTIORT = new G4Tubs("FTIORT", innRadius    
410             outRadiusFTIORT,                      
411             hightFTIORT,                          
412             startAngleFTIORT,                     
413             spanningAngleFTIORT);                 
414                                                   
415   G4LogicalVolume* logFTIORT = new G4LogicalVo    
416                     FTIORTMaterialIORT, "FTIOR    
417                                                   
418   physiFTIORT = new G4PVPlacement(G4Transform3    
419              "FTIORT", logFTIORT, physicalTrea    
420                                                   
421   logFTIORT -> SetVisAttributes(yellow);          
422 }                                                 
423                                                   
424 void Collimator60BeamLine::IortBeamLineMonitor    
425 {                                                 
426                                                   
427    G4double phi3 = 90. *deg;                      
428                                                   
429      // Matrix definition for a 90 deg rotatio    
430    G4RotationMatrix rm3;                          
431    rm3.rotateY(phi3);                             
432 //////////////////////////////////////////////    
433                                                   
434   // Monitor Chambers System                      
435                                                   
436 //////////////////////////////////////////////    
437                                                   
438                                                   
439   // -----------------------------------------    
440   //             Superior Final Part Monitor C    
441   // -----------------------------------------    
442                                                   
443   const G4double outRadiusPFS3IORT = 44.75 *mm    
444   const G4double innRadiusPFS3IORT = 17.5 *mm;    
445   const G4double hightPFS3IORT = 3.03 *mm;        
446   const G4double startAnglePFS3IORT = 0.*deg;     
447   const G4double spanningAnglePFS3IORT = 360.*    
448   const G4double XPositionPFS3IORT = -848.755     
449                                                   
450   solidPFS3IORT = new G4Tubs("PFS3IORT", innRa    
451             outRadiusPFS3IORT,                    
452             hightPFS3IORT,                        
453             startAnglePFS3IORT,                   
454             spanningAnglePFS3IORT);               
455                                                   
456   G4LogicalVolume* logPFS3IORT = new G4Logical    
457                     PFS3IORTMaterialIORT, "PFS    
458                                                   
459   physiPFS3IORT = new G4PVPlacement(G4Transfor    
460              "PFS3IORT", logPFS3IORT, physical    
461                                                   
462   logPFS3IORT -> SetVisAttributes(white);         
463                                                   
464                                                   
465   // -----------------------------------------    
466   //             Superior Final Part Monitor C    
467   // -----------------------------------------    
468                                                   
469   const G4double outRadiusPFS2IORT = 44.75 *mm    
470   const G4double innRadiusPFS2IORT = 10. *mm;     
471   const G4double hightPFS2IORT = 1.47 *mm;        
472   const G4double startAnglePFS2IORT = 0.*deg;     
473   const G4double spanningAnglePFS2IORT = 360.*    
474   const G4double XPositionPFS2IORT = -844.255     
475                                                   
476   solidPFS2IORT = new G4Tubs("PFS2IORT", innRa    
477             outRadiusPFS2IORT,                    
478             hightPFS2IORT,                        
479             startAnglePFS2IORT,                   
480             spanningAnglePFS2IORT);               
481                                                   
482   G4LogicalVolume* logPFS2IORT = new G4Logical    
483                     PFS2IORTMaterialIORT, "PFS    
484                                                   
485   physiPFS2IORT = new G4PVPlacement(G4Transfor    
486              "PFS2IORT", logPFS2IORT, physical    
487                                                   
488   logPFS2IORT -> SetVisAttributes(green);         
489                                                   
490   // -----------------------------------------    
491   //             Superior Final Part Monitor C    
492   // -----------------------------------------    
493                                                   
494   const G4double outRadiusPFS1IORT = 35. *mm;     
495   const G4double innRadiusPFS1IORT = 10. *mm;     
496   const G4double hightPFS1IORT = 0.88 *mm;        
497   const G4double startAnglePFS1IORT = 0.*deg;     
498   const G4double spanningAnglePFS1IORT = 360.*    
499   const G4double XPositionPFS1IORT = -841.905     
500                                                   
501   solidPFS1IORT = new G4Tubs("PFS1IORT", innRa    
502             outRadiusPFS1IORT,                    
503             hightPFS1IORT,                        
504             startAnglePFS1IORT,                   
505             spanningAnglePFS1IORT);               
506                                                   
507   G4LogicalVolume* logPFS1IORT = new G4Logical    
508                     PFS1IORTMaterialIORT, "PFS    
509                                                   
510   physiPFS1IORT = new G4PVPlacement(G4Transfor    
511              "PFS1IORT", logPFS1IORT, physical    
512                                                   
513   logPFS1IORT -> SetVisAttributes(green);         
514                                                   
515   // -----------------------------------------    
516   //           Monitor Chambers Cylinder          
517   // -----------------------------------------    
518                                                   
519   const G4double outRadiusCCMIORT = 35. *mm;      
520   const G4double innRadiusCCMIORT = 10. *mm;      
521   const G4double hightCCMIORT = 4.0125 *mm;       
522   const G4double startAngleCCMIORT = 0.*deg;      
523   const G4double spanningAngleCCMIORT = 360.*d    
524   const G4double XPositionCCMIORT = -837.0125     
525                                                   
526   solidCCMIORT = new G4Tubs("CCMIORT", innRadi    
527             outRadiusCCMIORT,                     
528             hightCCMIORT,                         
529             startAngleCCMIORT,                    
530             spanningAngleCCMIORT);                
531                                                   
532   G4LogicalVolume* logCCMIORT = new G4LogicalV    
533                     CCMIORTMaterialIORT, "CCMI    
534                                                   
535   physiCCMIORT = new G4PVPlacement(G4Transform    
536              "CCMIORT", logCCMIORT, physicalTr    
537                                                   
538   logCCMIORT -> SetVisAttributes(green);          
539                                                   
540                                                   
541   // -----------------------------------------    
542   //        Second Monitor Chamber Lamina Al 2    
543   // -----------------------------------------    
544                                                   
545   const G4double outRadiusCM2_2_2IORT = 20. *m    
546   const G4double innRadiusCM2_2_2IORT = 0. *mm    
547   const G4double hightCM2_2_2IORT = 0.025 *mm;    
548   const G4double startAngleCM2_2_2IORT = 0.*de    
549   const G4double spanningAngleCM2_2_2IORT = 36    
550   const G4double XPositionCM2_2_2IORT = -841.     
551                                                   
552   solidCM2_2_2IORT = new G4Tubs("CM2_2_2IORT",    
553             outRadiusCM2_2_2IORT,                 
554             hightCM2_2_2IORT,                     
555             startAngleCM2_2_2IORT,                
556             spanningAngleCM2_2_2IORT);            
557                                                   
558   G4LogicalVolume* logCM2_2_2IORT = new G4Logi    
559                     CM2_2_2IORTMaterialIORT, "    
560                                                   
561   physiCM2_2_2IORT = new G4PVPlacement(G4Trans    
562              "CM2_2_2ORT", logCM2_2_2IORT, phy    
563                                                   
564   logCM2_2_2IORT -> SetVisAttributes(green);      
565                                                   
566                                                   
567 // -------------------------------------------    
568   //        Second Monitor Chamber Lamina Al 1    
569   // -----------------------------------------    
570                                                   
571   const G4double outRadiusCM2_1_2IORT = 20. *m    
572   const G4double innRadiusCM2_1_2IORT = 0. *mm    
573   const G4double hightCM2_1_2IORT = 0.025 *mm;    
574   const G4double startAngleCM2_1_2IORT = 0.*de    
575   const G4double spanningAngleCM2_1_2IORT = 36    
576   const G4double XPositionCM2_1_2IORT = -839.     
577                                                   
578   solidCM2_1_2IORT = new G4Tubs("CM2_1_2IORT",    
579             outRadiusCM2_1_2IORT,                 
580             hightCM2_1_2IORT,                     
581             startAngleCM2_1_2IORT,                
582             spanningAngleCM2_1_2IORT);            
583                                                   
584   G4LogicalVolume* logCM2_1_2IORT = new G4Logi    
585                     CM2_1_2IORTMaterialIORT, "    
586                                                   
587   physiCM2_1_2IORT = new G4PVPlacement(G4Trans    
588              "CM2_1_2ORT", logCM2_1_2IORT, phy    
589                                                   
590   logCM2_1_2IORT -> SetVisAttributes(yellow);     
591                                                   
592   // -----------------------------------------    
593   //        First Monitor Chamber Lamina Al 2     
594   // -----------------------------------------    
595                                                   
596   const G4double outRadiusCM1_2_2IORT = 20. *m    
597   const G4double innRadiusCM1_2_2IORT = 0. *mm    
598   const G4double hightCM1_2_2IORT = 0.025 *mm;    
599   const G4double startAngleCM1_2_2IORT = 0.*de    
600   const G4double spanningAngleCM1_2_2IORT = 36    
601   const G4double XPositionCM1_2_2IORT = -837.     
602                                                   
603   solidCM1_2_2IORT = new G4Tubs("CM1_2_2IORT",    
604             outRadiusCM1_2_2IORT,                 
605             hightCM1_2_2IORT,                     
606             startAngleCM1_2_2IORT,                
607             spanningAngleCM1_2_2IORT);            
608                                                   
609   G4LogicalVolume* logCM1_2_2IORT = new G4Logi    
610                 CM1_2_2IORTMaterialIORT, "CM1_    
611                                                   
612   physiCM1_2_2IORT = new G4PVPlacement(G4Trans    
613              "CM1_2_2ORT", logCM1_2_2IORT, phy    
614                                                   
615   logCM1_2_2IORT -> SetVisAttributes(yellow);     
616                                                   
617   // -----------------------------------------    
618   //        First Monitor Chamber Lamina Al 1     
619   // -----------------------------------------    
620                                                   
621   const G4double outRadiusCM1_1_2IORT = 20. *m    
622   const G4double innRadiusCM1_1_2IORT = 0. *mm    
623   const G4double hightCM1_1_2IORT = 0.025 *mm;    
624   const G4double startAngleCM1_1_2IORT = 0.*de    
625   const G4double spanningAngleCM1_1_2IORT = 36    
626   const G4double XPositionCM1_1_2IORT = -835.     
627                                                   
628   solidCM1_1_2IORT = new G4Tubs("CM1_1_2IORT",    
629             outRadiusCM1_1_2IORT,                 
630             hightCM1_1_2IORT,                     
631             startAngleCM1_1_2IORT,                
632             spanningAngleCM1_1_2IORT);            
633                                                   
634   G4LogicalVolume* logCM1_1_2IORT = new G4Logi    
635                     CM1_1_2IORTMaterialIORT, "    
636                                                   
637   physiCM1_1_2IORT = new G4PVPlacement(G4Trans    
638              "CM1_1_2ORT", logCM1_1_2IORT, phy    
639                                                   
640   logCM1_1_2IORT -> SetVisAttributes(yellow);     
641 }                                                 
642                                                   
643 void Collimator60BeamLine::IortBeamLineBlocks(    
644 {                                                 
645                                                   
646    G4double phi4 = 90. *deg;                      
647                                                   
648                                                   
649    G4RotationMatrix rm4;                          
650    rm4.rotateY(phi4);                             
651                                                   
652 //////////////////////////////////////////////    
653                                                   
654   // IORT BEAM LINE BLOCKS                        
655                                                   
656 //////////////////////////////////////////////    
657                                                   
658   // -----------------------------------------    
659   //        Block 4       //                      
660   // -----------------------------------------    
661                                                   
662   const G4double outRadiusBlocco20mmIORT = 36.    
663   const G4double innRadiusBlocco20mmIORT = 10.    
664   const G4double hightBlocco20mmIORT = 3. *mm;    
665   const G4double startAngleBlocco20mmIORT = 0.    
666   const G4double spanningAngleBlocco20mmIORT =    
667   const G4double XPositionBlocco20mmIORT = -83    
668                                                   
669   solidBlocco20mmIORT = new G4Tubs("Blocco20mm    
670             outRadiusBlocco20mmIORT,              
671             hightBlocco20mmIORT,                  
672             startAngleBlocco20mmIORT,             
673             spanningAngleBlocco20mmIORT);         
674                                                   
675   G4LogicalVolume* logBlocco20mmIORT = new G4L    
676                     Blocco20mmIORTMaterialIORT    
677                                                   
678   physiBlocco20mmIORT = new G4PVPlacement(G4Tr    
679              "Blocco20mmORT", logBlocco20mmIOR    
680                                                   
681   logBlocco20mmIORT -> SetVisAttributes(green)    
682                                                   
683                                                   
684   // -----------------------//                    
685   //        Block 3        //                     
686   // -----------------------//                    
687                                                   
688   const G4double outRadiusBlocco3IORT = 36.5 *    
689   const G4double innRadiusBlocco3IORT = 15. *m    
690   const G4double hightBlocco3IORT = 3.5 *mm;      
691   const G4double startAngleBlocco3IORT = 0.*de    
692   const G4double spanningAngleBlocco3IORT = 36    
693   const G4double XPositionBlocco3IORT = -823.5    
694                                                   
695                                                   
696   solidBlocco3IORT = new G4Tubs("Blocco3IORT",    
697             outRadiusBlocco3IORT,                 
698             hightBlocco3IORT,                     
699             startAngleBlocco3IORT,                
700             spanningAngleBlocco3IORT);            
701                                                   
702   G4LogicalVolume* logBlocco3IORT = new G4Logi    
703                     Blocco3IORTMaterialIORT, "    
704                                                   
705   physiBlocco3IORT = new G4PVPlacement(G4Trans    
706              "Blocco3ORT", logBlocco3IORT, phy    
707                                                   
708   logBlocco3IORT -> SetVisAttributes(yellow);     
709                                                   
710  // -----------------------//                     
711   //        Block 2        //                     
712   // -----------------------//                    
713                                                   
714   const G4double outRadiusBlocco2IORT = 41.5 *    
715   const G4double innRadiusBlocco2IORT = 15. *m    
716   const G4double hightBlocco2IORT = 8. *mm;       
717   const G4double startAngleBlocco2IORT = 0.*de    
718   const G4double spanningAngleBlocco2IORT = 36    
719   const G4double XPositionBlocco2IORT = -812.     
720                                                   
721                                                   
722   solidBlocco2IORT = new G4Tubs("Blocco2IORT",    
723             outRadiusBlocco2IORT,                 
724             hightBlocco2IORT,                     
725             startAngleBlocco2IORT,                
726             spanningAngleBlocco2IORT);            
727                                                   
728   G4LogicalVolume* logBlocco2IORT = new G4Logi    
729                     Blocco2IORTMaterialIORT, "    
730                                                   
731   physiBlocco2IORT = new G4PVPlacement(G4Trans    
732              "Blocco2IORT", logBlocco2IORT, ph    
733                                                   
734   logBlocco2IORT -> SetVisAttributes(red);        
735                                                   
736   // ----------------------- //                   
737   //       Block 1          //                    
738   // ----------------------- //                   
739                                                   
740   const G4double outRadiusBlocco1IORT = 52.0 *    
741   const G4double innRadiusBlocco1IORT = 15. *m    
742   const G4double hightBlocco1IORT = 8.5 *mm;      
743   const G4double startAngleBlocco1IORT = 0.*de    
744   const G4double spanningAngleBlocco1IORT = 36    
745   const G4double XPositionBlocco1IORT = -795.5    
746                                                   
747   solidBlocco1IORT = new G4Tubs("Blocco1IORT",    
748             outRadiusBlocco1IORT,                 
749             hightBlocco1IORT,                     
750             startAngleBlocco1IORT,                
751             spanningAngleBlocco1IORT);            
752                                                   
753   G4LogicalVolume* logBlocco1IORT = new G4Logi    
754                     Blocco1IORTMaterialIORT, "    
755                                                   
756   physiBlocco1IORT = new G4PVPlacement(G4Trans    
757              "Blocco1IORT", logBlocco1IORT, ph    
758                                                   
759   logBlocco1IORT -> SetVisAttributes(white);      
760 }                                                 
761                                                   
762 void Collimator60BeamLine::IortBeamLineJunctio    
763 {                                                 
764                                                   
765                                                   
766   G4double phi5 = 90. *deg;                       
767                                                   
768                                                   
769    G4RotationMatrix rm5;                          
770    rm5.rotateY(phi5);                             
771                                                   
772   // --------------------------------- //         
773   // Junction 5 FINAL COLLIMATOR IORT //          
774   // --------------------------------- //         
775                                                   
776   const G4double outRadiusGiunz5FinalCollIORT     
777   const G4double innRadiusGiunz5FinalCollIORT     
778   const G4double hightGiunz5FinalCollIORT = 3.    
779   const G4double startAngleGiunz5FinalCollIORT    
780   const G4double spanningAngleGiunz5FinalCollI    
781   const G4double Giunz5FinalCollXPositionIORT     
782                                                   
783   solidGiunz5FinalCollIORT = new G4Tubs("Giunz    
784             outRadiusGiunz5FinalCollIORT,         
785             hightGiunz5FinalCollIORT,             
786             startAngleGiunz5FinalCollIORT,        
787             spanningAngleGiunz5FinalCollIORT);    
788                                                   
789   G4LogicalVolume* logGiunz5FinalCollIORT = ne    
790                     Giunz5FinalCollMaterialIOR    
791                                                   
792   physiGiunz5FinalCollIORT = new G4PVPlacement    
793              "Giunz5FinalCollIORT", logGiunz5F    
794                                                   
795   logGiunz5FinalCollIORT -> SetVisAttributes(y    
796                                                   
797 // --------------------------------- //           
798   // Junction 4 FINAL COLLIMATOR IORT //          
799   // --------------------------------- //         
800                                                   
801   const G4double outRadiusGiunz4FinalCollIORT     
802   const G4double innRadiusGiunz4FinalCollIORT     
803   const G4double hightGiunz4FinalCollIORT = 8.    
804   const G4double startAngleGiunz4FinalCollIORT    
805   const G4double spanningAngleGiunz4FinalCollI    
806   const G4double Giunz4FinalCollXPositionIORT     
807                                                   
808   solidGiunz4FinalCollIORT = new G4Tubs("Giunz    
809             outRadiusGiunz4FinalCollIORT,         
810             hightGiunz4FinalCollIORT,             
811             startAngleGiunz4FinalCollIORT,        
812             spanningAngleGiunz4FinalCollIORT);    
813                                                   
814   G4LogicalVolume* logGiunz4FinalCollIORT = ne    
815                     Giunz4FinalCollMaterialIOR    
816                                                   
817   physiGiunz4FinalCollIORT = new G4PVPlacement    
818              "Giunz4FinalCollIORT", logGiunz4F    
819                                                   
820   logGiunz4FinalCollIORT -> SetVisAttributes(b    
821                                                   
822                                                   
823                                                   
824  // --------------------------------- //          
825   // Junction 3 FINAL COLLIMATOR IORT //          
826   // --------------------------------- //         
827                                                   
828   const G4double outRadiusGiunz3FinalCollIORT     
829   const G4double innRadiusGiunz3FinalCollIORT     
830   const G4double hightGiunz3FinalCollIORT = 4.    
831   const G4double startAngleGiunz3FinalCollIORT    
832   const G4double spanningAngleGiunz3FinalCollI    
833   const G4double Giunz3FinalCollXPositionIORT     
834                                                   
835                                                   
836   solidGiunz3FinalCollIORT = new G4Tubs("Giunz    
837             outRadiusGiunz3FinalCollIORT,         
838             hightGiunz3FinalCollIORT,             
839             startAngleGiunz3FinalCollIORT,        
840             spanningAngleGiunz3FinalCollIORT);    
841                                                   
842   G4LogicalVolume* logicsolidGiunz3FinalCollIO    
843                     Giunz3FinalCollMaterialIOR    
844                                                   
845   physiGiunz3FinalCollIORT = new G4PVPlacement    
846              "Giunz3FinalCollIORT", logicsolid    
847                                                   
848   logicsolidGiunz3FinalCollIORT -> SetVisAttri    
849  //  logicsolidGiunz3FinalCollIORT -> SetVisAt    
850                                                   
851                                                   
852                                                   
853   // --------------------------------- //         
854   // Junction 3 FINAL COLLIMATOR IORT internal    
855   // --------------------------------- //         
856                                                   
857                                                   
858                                                   
859   solidGiunz3FinalCollIntIORT = new G4Cons("Gi    
860                                                   
861   G4LogicalVolume* logicsolidGiunz3FinalCollIn    
862                     Giunz3FinalCollMaterialInt    
863                                                   
864   physiGiunz3FinalCollIntIORT = new G4PVPlacem    
865                                                   
866   logicsolidGiunz3FinalCollIntIORT -> SetVisAt    
867                                                   
868                                                   
869 // --------------------------------- //           
870   // Junction 2 FINAL COLLIMATOR IORT //          
871   // --------------------------------- //         
872                                                   
873   const G4double outRadiusGiunz2FinalCollIORT     
874   const G4double innRadiusGiunz2FinalCollIORT     
875   const G4double hightGiunz2FinalCollIORT = 5.    
876   const G4double startAngleGiunz2FinalCollIORT    
877   const G4double spanningAngleGiunz2FinalCollI    
878   const G4double Giunz2FinalCollXPositionIORT     
879                                                   
880   solidGiunz2FinalCollIORT = new G4Tubs("Giunz    
881             outRadiusGiunz2FinalCollIORT,         
882             hightGiunz2FinalCollIORT,             
883             startAngleGiunz2FinalCollIORT,        
884             spanningAngleGiunz2FinalCollIORT);    
885                                                   
886   G4LogicalVolume* logGiunz2FinalCollIORT = ne    
887                     Giunz2FinalCollMaterialIOR    
888                                                   
889   physiGiunz2FinalCollIORT = new G4PVPlacement    
890              "Giunz2FinalCollIORT", logGiunz2F    
891                                                   
892   logGiunz2FinalCollIORT -> SetVisAttributes(r    
893                                                   
894 // --------------------------------- //           
895   // Junction 1 FINAL COLLIMATOR IORT //          
896   // --------------------------------- //         
897                                                   
898   const G4double outRadiusGiunz1FinalCollIORT     
899   const G4double innRadiusGiunz1FinalCollIORT     
900   const G4double hightGiunz1FinalCollIORT = 10    
901   const G4double startAngleGiunz1FinalCollIORT    
902   const G4double spanningAngleGiunz1FinalCollI    
903   const G4double Giunz1FinalCollXPositionIORT     
904                                                   
905   solidGiunz1FinalCollIORT = new G4Tubs("Giunz    
906             outRadiusGiunz1FinalCollIORT,         
907             hightGiunz1FinalCollIORT,             
908             startAngleGiunz1FinalCollIORT,        
909             spanningAngleGiunz1FinalCollIORT);    
910                                                   
911   G4LogicalVolume* logGiunz1FinalCollIORT = ne    
912                     Giunz1FinalCollMaterialIOR    
913                                                   
914   physiGiunz1FinalCollIORT = new G4PVPlacement    
915              "Giunz1FinalCollIORT", logGiunz1F    
916                                                   
917   logGiunz1FinalCollIORT -> SetVisAttributes(g    
918 }                                                 
919                                                   
920 void Collimator60BeamLine::IortBeamLineFinalCo    
921 {                                                 
922 // -----------------------//                      
923   // FINAL COLLIMATOR IORT  //                    
924   //------------------------//                    
925                                                   
926  // const G4double OuterRadiusFinalCollimatorI    
927  // const G4double innerRadiusFinalCollimatorI    
928   const G4double hightFinalCollimatorIORT = 33    
929   const G4double startAngleFinalCollimatorIORT    
930   const G4double spanningAngleFinalCollimatorI    
931   const G4double finalCollimatorXPositionIORT     
932                                                   
933                                                   
934                                                   
935                                                   
936   G4double phi6 = 90. *deg;                       
937                                                   
938                                                   
939    G4RotationMatrix rm6;                          
940    rm6.rotateY(phi6);                             
941                                                   
942                                                   
943   solidFinalCollimatorIORT = new G4Tubs("Final    
944             OuterRadiusFinalCollimatorIORT,       
945             hightFinalCollimatorIORT,             
946             startAngleFinalCollimatorIORT,        
947             spanningAngleFinalCollimatorIORT);    
948                                                   
949   G4LogicalVolume* logFinalCollimatorIORT = ne    
950                     finalCollimatorMaterialIOR    
951                                                   
952   physiFinalCollimatorIORT = new G4PVPlacement    
953              "FinalCollimatorIORT", logFinalCo    
954                                                   
955   //  logFinalCollimatorIORT -> SetVisAttribut    
956   logFinalCollimatorIORT -> SetVisAttributes(b    
957 }                                                 
958                                                   
959 //////////////////////////////////////////////    
960 /////////////////////////// MESSENGER ////////    
961 //////////////////////////////////////////////    
962                                                   
963                                                   
964 void Collimator60BeamLine::SetInnerRadiusFinal    
965 {                                                 
966   solidFinalCollimatorIORT -> SetInnerRadius(v    
967   G4RunManager::GetRunManager() -> GeometryHas    
968   G4cout<<"Inner Radius of the final collimato    
969   << solidFinalCollimatorIORT -> GetInnerRadiu    
970   << G4endl;                                      
971 }                                                 
972                                                   
973 //////////////////////////////////////////////    
974                                                   
975 void Collimator60BeamLine::SetOuterRadiusFinal    
976 {                                                 
977   solidFinalCollimatorIORT -> SetOuterRadius(v    
978   G4RunManager::GetRunManager() -> GeometryHas    
979   G4cout<<"Outer Radius of the final collimato    
980   << solidFinalCollimatorIORT -> GetOuterRadiu    
981   << G4endl;                                      
982 }                                                 
983                                                   
984                                                   
985 //////////////////////////////////////////////    
986                                                   
987                                                   
988                                                   
989