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 10.3.p2)


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