Geant4 Cross Reference

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


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