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 ]

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