ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Collimator60BeamLine.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Collimator60BeamLine.cc
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
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"
56 #include "Collimator60BeamLine.hh"
58 
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
128 
129 }
132 {
133  delete collimatorMessenger;
135 }
136 
138 
139 
141 {
142  // Sets default geometry and materials
144 
145  // Construct the whole Collimator Beam Line
147 
148 
149  // IORTDetectorConstruction builds ONLY the phantom and the detector with its associated ROGeometry
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 // ----------------------------------------------------------
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);
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
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 
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);
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 
350 
351 }
352 
353 
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 
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 
425 {
426 
427  G4double phi3 = 90. *deg;
428 
429  // Matrix definition for a 90 deg rotation. Also used for other volumes
431  rm3.rotateY(phi3);
433 
434  // Monitor Chambers System
435 
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 
644 {
645 
646  G4double phi4 = 90. *deg;
647 
648 
649  G4RotationMatrix rm4;
650  rm4.rotateY(phi4);
651 
653 
654  // IORT BEAM LINE BLOCKS
655 
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 
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 
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 
940  rm6.rotateY(phi6);
941 
942 
943  solidFinalCollimatorIORT = new G4Tubs("FinalCollimatorIORT", innerRadiusFinalCollimatorIORT,
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 
962 
963 
965 {
966  solidFinalCollimatorIORT -> SetInnerRadius(value);
968  G4cout<<"Inner Radius of the final collimator IORT is (mm):"
969  << solidFinalCollimatorIORT -> GetInnerRadius()/mm
970  << G4endl;
971 }
972 
974 
976 {
977  solidFinalCollimatorIORT -> SetOuterRadius(value);
979  G4cout<<"Outer Radius of the final collimator IORT is (mm):"
980  << solidFinalCollimatorIORT -> GetOuterRadius()/mm
981  << G4endl;
982 }
983 
984 
986 
987 
988