Geant4 Cross Reference

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


  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 Wallongong, 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 "Collimator80BeamLine.hh"                
 57 #include "Collimator80BeamLineMessenger.hh"       
 58                                                   
 59 Collimator80BeamLine::Collimator80BeamLine():     
 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 Collimator80BeamLi    
128                                                   
129 }                                                 
130 //////////////////////////////////////////////    
131 Collimator80BeamLine::~Collimator80BeamLine()     
132 {                                                 
133   delete collimatorMessenger;                     
134   delete iortDetectorConstruction;                
135 }                                                 
136                                                   
137 //////////////////////////////////////////////    
138                                                   
139                                                   
140 G4VPhysicalVolume* Collimator80BeamLine::Const    
141 {                                                 
142   // Sets default geometry and materials          
143   SetDefaultDimensions();                         
144                                                   
145   // Construct the whole Collimator Beam Line     
146   ConstructCollimator80BeamLine();                
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 Collimator80BeamLine::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 Collimator80BeamLine::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 Collimator80BeamLine::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 void Collimator80BeamLine::IortBeamLineTitaniu    
390 {                                                 
391 // -------------------------------------------    
392   //                     Titanium Window          
393   // -----------------------------------------    
394                                                   
395   G4double phi2 = 90. *deg;                       
396                                                   
397                                                   
398    G4RotationMatrix rm2;                          
399    rm2.rotateY(phi2);                             
400                                                   
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 Collimator80BeamLine::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 Collimator80BeamLine::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   solidBlocco3IORT = new G4Tubs("Blocco3IORT",    
696             outRadiusBlocco3IORT,                 
697             hightBlocco3IORT,                     
698             startAngleBlocco3IORT,                
699             spanningAngleBlocco3IORT);            
700                                                   
701   G4LogicalVolume* logBlocco3IORT = new G4Logi    
702                     Blocco3IORTMaterialIORT, "    
703                                                   
704   physiBlocco3IORT = new G4PVPlacement(G4Trans    
705              "Blocco3ORT", logBlocco3IORT, phy    
706                                                   
707   logBlocco3IORT -> SetVisAttributes(yellow);     
708                                                   
709  // -----------------------//                     
710   //        Block 2        //                     
711   // -----------------------//                    
712                                                   
713   const G4double outRadiusBlocco2IORT = 41.5 *    
714   const G4double innRadiusBlocco2IORT = 15. *m    
715   const G4double hightBlocco2IORT = 8. *mm;       
716   const G4double startAngleBlocco2IORT = 0.*de    
717   const G4double spanningAngleBlocco2IORT = 36    
718   const G4double XPositionBlocco2IORT = -812.     
719                                                   
720   solidBlocco2IORT = new G4Tubs("Blocco2IORT",    
721             outRadiusBlocco2IORT,                 
722             hightBlocco2IORT,                     
723             startAngleBlocco2IORT,                
724             spanningAngleBlocco2IORT);            
725                                                   
726   G4LogicalVolume* logBlocco2IORT = new G4Logi    
727                     Blocco2IORTMaterialIORT, "    
728                                                   
729   physiBlocco2IORT = new G4PVPlacement(G4Trans    
730              "Blocco2IORT", logBlocco2IORT, ph    
731                                                   
732   logBlocco2IORT -> SetVisAttributes(red);        
733                                                   
734   // ----------------------- //                   
735   //       Block 1          //                    
736   // ----------------------- //                   
737                                                   
738   const G4double outRadiusBlocco1IORT = 52.0 *    
739   const G4double innRadiusBlocco1IORT = 15. *m    
740   const G4double hightBlocco1IORT = 8.5 *mm;      
741   const G4double startAngleBlocco1IORT = 0.*de    
742   const G4double spanningAngleBlocco1IORT = 36    
743   const G4double XPositionBlocco1IORT = -795.5    
744                                                   
745   solidBlocco1IORT = new G4Tubs("Blocco1IORT",    
746             outRadiusBlocco1IORT,                 
747             hightBlocco1IORT,                     
748             startAngleBlocco1IORT,                
749             spanningAngleBlocco1IORT);            
750                                                   
751   G4LogicalVolume* logBlocco1IORT = new G4Logi    
752                     Blocco1IORTMaterialIORT, "    
753                                                   
754   physiBlocco1IORT = new G4PVPlacement(G4Trans    
755              "Blocco1IORT", logBlocco1IORT, ph    
756                                                   
757   logBlocco1IORT -> SetVisAttributes(white);      
758 }                                                 
759                                                   
760 void Collimator80BeamLine::IortBeamLineJunctio    
761 {                                                 
762                                                   
763                                                   
764   G4double phi5 = 90. *deg;                       
765                                                   
766                                                   
767    G4RotationMatrix rm5;                          
768    rm5.rotateY(phi5);                             
769 // --------------------------------- //           
770   // Junction 5 FINAL COLLIMATOR IORT //          
771   // --------------------------------- //         
772                                                   
773   const G4double outRadiusGiunz5FinalCollIORT     
774   const G4double innRadiusGiunz5FinalCollIORT     
775   const G4double hightGiunz5FinalCollIORT = 3.    
776   const G4double startAngleGiunz5FinalCollIORT    
777   const G4double spanningAngleGiunz5FinalCollI    
778   const G4double Giunz5FinalCollXPositionIORT     
779                                                   
780   solidGiunz5FinalCollIORT = new G4Tubs("Giunz    
781             outRadiusGiunz5FinalCollIORT,         
782             hightGiunz5FinalCollIORT,             
783             startAngleGiunz5FinalCollIORT,        
784             spanningAngleGiunz5FinalCollIORT);    
785                                                   
786   G4LogicalVolume* logGiunz5FinalCollIORT = ne    
787                     Giunz5FinalCollMaterialIOR    
788                                                   
789   physiGiunz5FinalCollIORT = new G4PVPlacement    
790              "Giunz5FinalCollIORT", logGiunz5F    
791                                                   
792   logGiunz5FinalCollIORT -> SetVisAttributes(y    
793                                                   
794 // --------------------------------- //           
795   // Junction 4 FINAL COLLIMATOR IORT //          
796   // --------------------------------- //         
797                                                   
798   const G4double outRadiusGiunz4FinalCollIORT     
799   const G4double innRadiusGiunz4FinalCollIORT     
800   const G4double hightGiunz4FinalCollIORT = 8.    
801   const G4double startAngleGiunz4FinalCollIORT    
802   const G4double spanningAngleGiunz4FinalCollI    
803   const G4double Giunz4FinalCollXPositionIORT     
804                                                   
805   solidGiunz4FinalCollIORT = new G4Tubs("Giunz    
806             outRadiusGiunz4FinalCollIORT,         
807             hightGiunz4FinalCollIORT,             
808             startAngleGiunz4FinalCollIORT,        
809             spanningAngleGiunz4FinalCollIORT);    
810                                                   
811   G4LogicalVolume* logGiunz4FinalCollIORT = ne    
812                     Giunz4FinalCollMaterialIOR    
813                                                   
814   physiGiunz4FinalCollIORT = new G4PVPlacement    
815              "Giunz4FinalCollIORT", logGiunz4F    
816                                                   
817   logGiunz4FinalCollIORT -> SetVisAttributes(b    
818                                                   
819                                                   
820                                                   
821  // --------------------------------- //          
822   // Junction 3 FINAL COLLIMATOR IORT //          
823   // --------------------------------- //         
824                                                   
825   const G4double outRadiusGiunz3FinalCollIORT     
826   const G4double innRadiusGiunz3FinalCollIORT     
827   const G4double hightGiunz3FinalCollIORT = 4.    
828   const G4double startAngleGiunz3FinalCollIORT    
829   const G4double spanningAngleGiunz3FinalCollI    
830   const G4double Giunz3FinalCollXPositionIORT     
831                                                   
832   solidGiunz3FinalCollIORT = new G4Tubs("Giunz    
833             outRadiusGiunz3FinalCollIORT,         
834             hightGiunz3FinalCollIORT,             
835             startAngleGiunz3FinalCollIORT,        
836             spanningAngleGiunz3FinalCollIORT);    
837                                                   
838   G4LogicalVolume* logicsolidGiunz3FinalCollIO    
839                     Giunz3FinalCollMaterialIOR    
840                                                   
841   physiGiunz3FinalCollIORT = new G4PVPlacement    
842              "Giunz3FinalCollIORT", logicsolid    
843                                                   
844   logicsolidGiunz3FinalCollIORT -> SetVisAttri    
845   //  logicsolidGiunz3FinalCollIORT -> SetVisA    
846                                                   
847                                                   
848                                                   
849   // --------------------------------- //         
850   // Junction 3 FINAL COLLIMATOR IORT internal    
851   // --------------------------------- //         
852                                                   
853                                                   
854                                                   
855   solidGiunz3FinalCollIntIORT = new G4Cons("Gi    
856                                                   
857   G4LogicalVolume* logicsolidGiunz3FinalCollIn    
858                     Giunz3FinalCollMaterialInt    
859                                                   
860   physiGiunz3FinalCollIntIORT = new G4PVPlacem    
861                                                   
862   logicsolidGiunz3FinalCollIntIORT -> SetVisAt    
863                                                   
864                                                   
865 // --------------------------------- //           
866   // Junction 2 FINAL COLLIMATOR IORT //          
867   // --------------------------------- //         
868                                                   
869   const G4double outRadiusGiunz2FinalCollIORT     
870   const G4double innRadiusGiunz2FinalCollIORT     
871   const G4double hightGiunz2FinalCollIORT = 5.    
872   const G4double startAngleGiunz2FinalCollIORT    
873   const G4double spanningAngleGiunz2FinalCollI    
874   const G4double Giunz2FinalCollXPositionIORT     
875                                                   
876   solidGiunz2FinalCollIORT = new G4Tubs("Giunz    
877             outRadiusGiunz2FinalCollIORT,         
878             hightGiunz2FinalCollIORT,             
879             startAngleGiunz2FinalCollIORT,        
880             spanningAngleGiunz2FinalCollIORT);    
881                                                   
882   G4LogicalVolume* logGiunz2FinalCollIORT = ne    
883                     Giunz2FinalCollMaterialIOR    
884                                                   
885   physiGiunz2FinalCollIORT = new G4PVPlacement    
886              "Giunz2FinalCollIORT", logGiunz2F    
887                                                   
888   logGiunz2FinalCollIORT -> SetVisAttributes(r    
889                                                   
890 // --------------------------------- //           
891   // Junction 1 FINAL COLLIMATOR IORT //          
892   // --------------------------------- //         
893                                                   
894   const G4double outRadiusGiunz1FinalCollIORT     
895   const G4double innRadiusGiunz1FinalCollIORT     
896   const G4double hightGiunz1FinalCollIORT = 10    
897   const G4double startAngleGiunz1FinalCollIORT    
898   const G4double spanningAngleGiunz1FinalCollI    
899   const G4double Giunz1FinalCollXPositionIORT     
900                                                   
901   solidGiunz1FinalCollIORT = new G4Tubs("Giunz    
902             outRadiusGiunz1FinalCollIORT,         
903             hightGiunz1FinalCollIORT,             
904             startAngleGiunz1FinalCollIORT,        
905             spanningAngleGiunz1FinalCollIORT);    
906                                                   
907   G4LogicalVolume* logGiunz1FinalCollIORT = ne    
908                     Giunz1FinalCollMaterialIOR    
909                                                   
910   physiGiunz1FinalCollIORT = new G4PVPlacement    
911              "Giunz1FinalCollIORT", logGiunz1F    
912                                                   
913   logGiunz1FinalCollIORT -> SetVisAttributes(g    
914 }                                                 
915                                                   
916 void Collimator80BeamLine::IortBeamLineFinalCo    
917 {                                                 
918 // -----------------------//                      
919   // FINAL COLLIMATOR IORT  //                    
920   //------------------------//                    
921                                                   
922  // const G4double outRadiusFinalCollimatorIOR    
923  // const G4double innRadiusFinalCollimatorIOR    
924   const G4double hightFinalCollimatorIORT = 33    
925   const G4double startAngleFinalCollimatorIORT    
926   const G4double spanningAngleFinalCollimatorI    
927   const G4double finalCollimatorXPositionIORT     
928                                                   
929                                                   
930                                                   
931                                                   
932   G4double phi6 = 90. *deg;                       
933                                                   
934                                                   
935    G4RotationMatrix rm6;                          
936    rm6.rotateY(phi6);                             
937                                                   
938                                                   
939   solidFinalCollimatorIORT = new G4Tubs("Final    
940             OuterRadiusFinalCollimatorIORT,       
941             hightFinalCollimatorIORT,             
942             startAngleFinalCollimatorIORT,        
943             spanningAngleFinalCollimatorIORT);    
944                                                   
945   G4LogicalVolume* logFinalCollimatorIORT = ne    
946                     finalCollimatorMaterialIOR    
947                                                   
948   physiFinalCollimatorIORT = new G4PVPlacement    
949              "FinalCollimatorIORT", logFinalCo    
950                                                   
951   //  logFinalCollimatorIORT -> SetVisAttribut    
952   logFinalCollimatorIORT -> SetVisAttributes(r    
953 }                                                 
954                                                   
955 //////////////////////////////////////////////    
956 /////////////////////////// MESSENGER ////////    
957 //////////////////////////////////////////////    
958                                                   
959                                                   
960 void Collimator80BeamLine::SetInnerRadiusFinal    
961 {                                                 
962   solidFinalCollimatorIORT -> SetInnerRadius(v    
963   G4RunManager::GetRunManager() -> GeometryHas    
964   G4cout<<"Inner Radius of the final collimato    
965   << solidFinalCollimatorIORT -> GetInnerRadiu    
966   << G4endl;                                      
967 }                                                 
968                                                   
969 //////////////////////////////////////////////    
970                                                   
971 void Collimator80BeamLine::SetOuterRadiusFinal    
972 {                                                 
973   solidFinalCollimatorIORT -> SetOuterRadius(v    
974   G4RunManager::GetRunManager() -> GeometryHas    
975   G4cout<<"Outer Radius of the final collimato    
976   << solidFinalCollimatorIORT -> GetOuterRadiu    
977   << G4endl;                                      
978 }                                                 
979                                                   
980 //////////////////////////////////////////////    
981                                                   
982                                                   
983                                                   
984