ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Collimator100BeamLine.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Collimator100BeamLine.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 "Collimator100BeamLine.hh"
58 
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
127 
128 }
131 {
132  delete collimatorMessenger;
134 }
135 
137 
138 
140 {
141  // Sets default geometry and materials
143 
144  // Construct the whole Collimator Beam Line
146 
147 
148  // IORTDetectorConstruction builds ONLY the phantom and the detector with its associated ROGeometry
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 // ----------------------------------------------------------
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);
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
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 
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);
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 
349 
350 }
351 
352 
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 
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 
424 {
425 
426  G4double phi3 = 90. *deg;
427 
428  // Matrix definition for a 90 deg rotation. Also used for other volumes
430  rm3.rotateY(phi3);
432 
433  // Monitor Chambers System
434 
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 
652 {
653 
654  G4double phi4 = 90. *deg;
655 
656 
657  G4RotationMatrix rm4;
658  rm4.rotateY(phi4);
659 
661 
662  // IORT BEAM LINE BLOCKS
663 
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 
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 
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 
963  rm6.rotateY(phi6);
964 
965 
966  solidFinalCollimatorIORT = new G4Tubs("FinalCollimatorIORT", innerRadiusFinalCollimatorIORT,
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 
986 
987 
989 {
990  solidFinalCollimatorIORT -> SetInnerRadius(value);
992  G4cout<<"Inner Radius of the final collimator IORT is (mm):"
993  << solidFinalCollimatorIORT -> GetInnerRadius()/mm
994  << G4endl;
995 }
996 
998 
1000 {
1001  solidFinalCollimatorIORT -> SetOuterRadius(value);
1003  G4cout<<"Outer Radius of the final collimator IORT is (mm):"
1004  << solidFinalCollimatorIORT -> GetOuterRadius()/mm
1005  << G4endl;
1006 }
1007 
1009 
1010 
1011