Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/iort_therapy/src/Collimator60BeamLine.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

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