ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Collimator40BeamLine.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Collimator40BeamLine.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 "Collimator40BeamLine.hh"
58 
60  physicalTreatmentRoom(0),iortDetectorConstruction(0),
61 
62 
63 
64  solidFinalCollimatorIORT(0),
65  physiFinalCollimatorIORT(0),
66 
67  solidGiunz3FinalCollIORT(0),
68  physiGiunz3FinalCollIORT(0),
69 
70  solidGiunz3FinalCollIntIORT(0),
71  physiGiunz3FinalCollIntIORT(0),
72 
73  solidGiunz4FinalCollIORT(0),
74  physiGiunz4FinalCollIORT(0),
75 
76  solidGiunz5FinalCollIORT(0),
77  physiGiunz5FinalCollIORT(0),
78 
79  solidBlocco1IORT(0),
80  physiBlocco1IORT(0),
81 
82  solidBlocco2IORT(0),
83  physiBlocco2IORT(0),
84 
85  solidBlocco3IORT(0),
86  physiBlocco3IORT(0),
87 
88  solidBlocco20mmIORT(0),
89  physiBlocco20mmIORT(0),
90 
91  solidCM1_1_2IORT(0),
92  physiCM1_1_2IORT(0),
93 
94  solidCM1_2_2IORT(0),
95  physiCM1_2_2IORT(0),
96 
97  solidCM2_1_2IORT(0),
98  physiCM2_1_2IORT(0),
99 
100  solidCM2_2_2IORT(0),
101  physiCM2_2_2IORT(0),
102 
103  solidCCMIORT(0),
104  physiCCMIORT(0),
105 
106  solidPFS1IORT(0),
107  physiPFS1IORT(0),
108 
109  solidPFS2IORT(0),
110  physiPFS2IORT(0),
111 
112  solidPFS3IORT(0),
113  physiPFS3IORT(0),
114 
115  solidFTIORT(0),
116  physiFTIORT(0)
117 
118 
119 {
120  // Messenger to change parameters of the collimator40BeamLine geometry
122 
123 }
126 {
127  delete collimatorMessenger;
129 }
130 
132 
133 
135 {
136  // Sets default geometry and materials
138 
139  // Construct the whole Collimator Beam Line
141 
142  // IORTDetectorConstruction builds ONLY the phantom and the detector with its associated ROGeometry
144 
145  return physicalTreatmentRoom;
146 }
147 
148 // In the following method the DEFAULTS used in the geometry of
149 // collimator beam line are provided
150 // HERE THE USER CAN CHANGE THE GEOMETRY CHARACTERISTICS OF BEAM
151 // LINE ELEMENTS, ALTERNATIVELY HE/SHE CAN USE THE MACRO FILE (IF A
152 // MESSENGER IS PROVIDED)
153 //
154 // DEFAULT MATERIAL ARE ALSO PROVIDED
155 // and COLOURS ARE ALSO DEFINED
156 // ----------------------------------------------------------
159 {
160 
161  // Set of coulors that can be used
162  white = new G4VisAttributes( G4Colour());
163  white -> SetVisibility(true);
164  //white -> SetForceSolid(true);
165 
166  blue = new G4VisAttributes(G4Colour(0. ,0. ,1.));
167  blue -> SetVisibility(true);
168  //blue -> SetForceSolid(true);
169 
170  gray = new G4VisAttributes( G4Colour(0.5, 0.5, 0.5 ));
171  gray-> SetVisibility(true);
172  //gray-> SetForceSolid(true);
173 
174  red = new G4VisAttributes(G4Colour(1. ,0. ,0.));
175  red-> SetVisibility(true);
176  //red-> SetForceSolid(true);
177 
178  yellow = new G4VisAttributes(G4Colour(1., 1., 0. ));
179  yellow-> SetVisibility(true);
180  //yellow-> SetForceSolid(true);
181 
182  green = new G4VisAttributes( G4Colour(25/255. , 255/255. , 25/255. ));
183  green -> SetVisibility(true);
184  //green -> SetForceSolid(true);
185 
186  darkGreen = new G4VisAttributes( G4Colour(0/255. , 100/255. , 0/255. ));
187  darkGreen -> SetVisibility(true);
188  //darkGreen -> SetForceSolid(true);
189 
190  darkOrange3 = new G4VisAttributes( G4Colour(205/255. , 102/255. , 000/255. ));
191  darkOrange3 -> SetVisibility(true);
192  //darkOrange3 -> SetForceSolid(true);
193 
194  skyBlue = new G4VisAttributes( G4Colour(135/255. , 206/255. , 235/255. ));
195  skyBlue -> SetVisibility(true);
196  //skyBlue -> SetForceSolid(true);
197 
198 
199 
200  // Geometry FINAL COLLIMATOR DEFAULTS
201 
202  G4double defaultOuterRadiusFinalCollimatorIORT = 25. *mm;
203  OuterRadiusFinalCollimatorIORT = defaultOuterRadiusFinalCollimatorIORT;
204 
205  G4double defaultinnerRadiusFinalCollimatorIORT = 20. *mm;
206  innerRadiusFinalCollimatorIORT = defaultinnerRadiusFinalCollimatorIORT;
207 
208  // DEFAULT DEFINITION OF THE MATERIALS
209  // All elements and compound definition follows the NIST database
210 
211  // ELEMENTS
212  G4bool isotopes = false;
213  G4Material* aluminumNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Al", isotopes);
214  //G4Material* tantalumNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Ta", isotopes);
215  //G4Material* copperNistAsMaterial = G4NistManager::Instance()->FindOrBuildMaterial("G4_Cu", isotopes);
218 
219  // COMPOUND
220  G4Material* airNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_AIR", isotopes);
221  //G4Material* kaptonNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_KAPTON", isotopes);
222  G4Material* galacticNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Galactic", isotopes);
223  G4Material* PMMANist = G4NistManager::Instance()->FindOrBuildMaterial("G4_PLEXIGLASS", isotopes);
224  //G4Material* mylarNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_MYLAR", isotopes);
225  G4Material* titanioNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_Ti", isotopes);
226 
227  G4double d; // Density
228  G4int nComponents;// Number of components
229  G4double fractionmass; // Fraction in mass of an element in a material
230 
231  d = 8.40*g/cm3; // brass
232  nComponents = 2;
233  G4Material* brass = new G4Material("Brass", d, nComponents);
234  brass -> AddElement(zincNist, fractionmass = 30 *perCent);
235  brass -> AddElement(copperNist, fractionmass = 70 *perCent);
236 
237 
238  // MATERIAL ASSIGNMENT
239 
240 
241  // Material of the FINAL COLLIMATOR IORT
242  finalCollimatorMaterialIORT = PMMANist;
243 
244  // Junction 1 FINAL COLLIMATOR IORT
245  Giunz1FinalCollMaterialIORT = PMMANist;
246 
247  // Junction 2 FINAL COLLIMATOR IORT
248  Giunz2FinalCollMaterialIORT = PMMANist;
249 
250  // Junction 3 FINAL COLLIMATOR IORT
251  Giunz3FinalCollMaterialIORT = PMMANist;
252 
253  // Junction 3 FINAL COLLIMATOR Int IORT
255 
256  // Junction 4 FINAL COLLIMATOR IORT
257  Giunz4FinalCollMaterialIORT = PMMANist;
258 
259  // Junction 5 FINAL COLLIMATOR IORT
260  Giunz5FinalCollMaterialIORT = PMMANist;
261 
262  // Block 1 Diameter 30 mm
263  Blocco1IORTMaterialIORT = PMMANist;
264 
265  // Block 2 Diameter 30 mm
266  Blocco2IORTMaterialIORT = PMMANist;
267 
268  // Block 3 Diameter 30 mm
269  Blocco3IORTMaterialIORT = PMMANist;
270 
271  // Block Diameter 20 mm
272  Blocco20mmIORTMaterialIORT = PMMANist;
273 
274  // First Monitor Chamber Lamina Al 1 of 2
275  CM1_1_2IORTMaterialIORT = aluminumNist;
276 
277  // First Monitor Chamber Lamina Al 2 of 2
278  CM1_2_2IORTMaterialIORT = aluminumNist;
279 
280  // Second Monitor Chamber Lamina Al 1 of 2
281  CM2_1_2IORTMaterialIORT = aluminumNist;
282 
283  // Second Monitor Chamber Lamina Al 2 of 2
284  CM2_2_2IORTMaterialIORT = aluminumNist;
285 
286  // Monitor Chamber Cylinder
287  CCMIORTMaterialIORT = PMMANist;
288 
289  // Superior Final Part Monitor Chambers
290  PFS1IORTMaterialIORT = PMMANist;
291 
292  // Superior Final Part Monitor Chambers
293  PFS2IORTMaterialIORT = PMMANist;
294 
295  // Superior Final Part Monitor Chambers
296  PFS3IORTMaterialIORT = PMMANist;
297 
298  // Superior Final Part Monitor Chambers Material
299  FTIORTMaterialIORT = titanioNist;
300 
301  // Vacuum Source
302  VSIORTMaterialIORT = galacticNist;
303 }
304 
307 {
308  // -----------------------------
309  // Treatment room - World volume
310  //------------------------------
311  // Treatment room sizes
312  const G4double worldX = 400.0 *cm;
313  const G4double worldY = 400.0 *cm;
314  const G4double worldZ = 400.0 *cm;
315  G4bool isotopes = false;
316 
317  G4Material* airNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_AIR", isotopes);
318  G4Box* treatmentRoom = new G4Box("TreatmentRoom",worldX,worldY,worldZ);
319  G4LogicalVolume* logicTreatmentRoom = new G4LogicalVolume(treatmentRoom,
320  airNist,
321  "logicTreatmentRoom",
322  0,0,0);
324  G4ThreeVector(),
325  "physicalTreatmentRoom",
326  logicTreatmentRoom,
327  0,false,0);
328 
329 
330  // The treatment room is invisible in the Visualisation
331  logicTreatmentRoom -> SetVisAttributes (G4VisAttributes::GetInvisible());
332 
333  // Components of the Collimator Beam Line
334 
341 
342 }
343 
344 
346 {
347  // ---------------------------------------------------------------//
348  // Vacuum Source //
349  // ---------------------------------------------------------------//
350 
351 
352  G4double phi1 = 90. *deg;
353 
354 
355  G4RotationMatrix rm1;
356  rm1.rotateY(phi1);
357 
358  const G4double outRadiusVSIORT = 44.75 *mm;
359  const G4double innRadiusVSIORT = 0.*mm;
360  const G4double hightVSIORT = 1. *mm;
361  const G4double startAngleVSIORT = 0.*deg;
362  const G4double spanningAngleVSIORT = 360.*deg;
363  const G4double XPositionVSIORT = -862.797 *mm;
364 
365  solidVSIORT = new G4Tubs("VSIORT", innRadiusVSIORT,
366  outRadiusVSIORT,
367  hightVSIORT,
368  startAngleVSIORT,
369  spanningAngleVSIORT);
370 
371  G4LogicalVolume* logVSIORT = new G4LogicalVolume(solidVSIORT,
372  VSIORTMaterialIORT, "VSIORT", 0, 0, 0);
373 
374  physiVSIORT = new G4PVPlacement(G4Transform3D(rm1, G4ThreeVector((XPositionVSIORT),0.,0.)),
375  "VSIORT", logVSIORT, physicalTreatmentRoom, false, 0);
376 
377  logVSIORT -> SetVisAttributes(green);
378 
379 }
380 
382 {
383 // ---------------------------------------------------------------//
384  // Titanium Window //
385  // ---------------------------------------------------------------//
386 
387  G4double phi2 = 90. *deg;
388 
389 
390  G4RotationMatrix rm2;
391  rm2.rotateY(phi2);
392 
393  const G4double outRadiusFTIORT = 44.75 *mm;
394  const G4double innRadiusFTIORT = 8.5 *mm;
395  const G4double hightFTIORT = 0.006 *mm;
396  const G4double startAngleFTIORT = 0.*deg;
397  const G4double spanningAngleFTIORT = 360.*deg;
398  const G4double XPositionFTIORT = -861.791 *mm;
399 
400  solidFTIORT = new G4Tubs("FTIORT", innRadiusFTIORT,
401  outRadiusFTIORT,
402  hightFTIORT,
403  startAngleFTIORT,
404  spanningAngleFTIORT);
405 
406  G4LogicalVolume* logFTIORT = new G4LogicalVolume(solidFTIORT,
407  FTIORTMaterialIORT, "FTIORT", 0, 0, 0);
408 
409  physiFTIORT = new G4PVPlacement(G4Transform3D(rm2, G4ThreeVector((XPositionFTIORT),0.,0.)),
410  "FTIORT", logFTIORT, physicalTreatmentRoom, false, 0);
411 
412  logFTIORT -> SetVisAttributes(yellow);
413 }
414 
416 {
417 
418  G4double phi3 = 90. *deg;
419 
420 
422  rm3.rotateY(phi3);
423 
425 
426  // Monitor Chamber System
427 
429 
430 
431  // ---------------------------------------------------------------//
432  // Superior Final Part Monitor Chambers 3 //
433  // ---------------------------------------------------------------//
434 
435  const G4double outRadiusPFS3IORT = 44.75 *mm;
436  const G4double innRadiusPFS3IORT = 17.5 *mm;
437  const G4double hightPFS3IORT = 3.03 *mm;
438  const G4double startAnglePFS3IORT = 0.*deg;
439  const G4double spanningAnglePFS3IORT = 360.*deg;
440  const G4double XPositionPFS3IORT = -848.755 *mm;
441 
442  solidPFS3IORT = new G4Tubs("PFS3IORT", innRadiusPFS3IORT,
443  outRadiusPFS3IORT,
444  hightPFS3IORT,
445  startAnglePFS3IORT,
446  spanningAnglePFS3IORT);
447 
448  G4LogicalVolume* logPFS3IORT = new G4LogicalVolume(solidPFS3IORT,
449  PFS3IORTMaterialIORT, "PFS3IORT", 0, 0, 0);
450 
451  physiPFS3IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS3IORT),0.,0.)),
452  "PFS3IORT", logPFS3IORT, physicalTreatmentRoom, false, 0);
453 
454  logPFS3IORT -> SetVisAttributes(white);
455 
456 
457  // ---------------------------------------------------------------//
458  // Superior Final Part Monitor Chambers 2 //
459  // ---------------------------------------------------------------//
460 
461  const G4double outRadiusPFS2IORT = 44.75 *mm;
462  const G4double innRadiusPFS2IORT = 10. *mm;
463  const G4double hightPFS2IORT = 1.47 *mm;
464  const G4double startAnglePFS2IORT = 0.*deg;
465  const G4double spanningAnglePFS2IORT = 360.*deg;
466  const G4double XPositionPFS2IORT = -844.255 *mm;
467 
468 
469  solidPFS2IORT = new G4Tubs("PFS2IORT", innRadiusPFS2IORT,
470  outRadiusPFS2IORT,
471  hightPFS2IORT,
472  startAnglePFS2IORT,
473  spanningAnglePFS2IORT);
474 
475  G4LogicalVolume* logPFS2IORT = new G4LogicalVolume(solidPFS2IORT,
476  PFS2IORTMaterialIORT, "PFS2IORT", 0, 0, 0);
477 
478  physiPFS2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS2IORT),0.,0.)),
479  "PFS2IORT", logPFS2IORT, physicalTreatmentRoom, false, 0);
480 
481  logPFS2IORT -> SetVisAttributes(green);
482 
483  // ---------------------------------------------------------------//
484  // Superior Final Part Monitor Chambers 1 //
485  // ---------------------------------------------------------------//
486 
487  const G4double outRadiusPFS1IORT = 35. *mm;
488  const G4double innRadiusPFS1IORT = 10. *mm;
489  const G4double hightPFS1IORT = 0.88 *mm;
490  const G4double startAnglePFS1IORT = 0.*deg;
491  const G4double spanningAnglePFS1IORT = 360.*deg;
492  const G4double XPositionPFS1IORT = -841.905 *mm;
493 
494 
495  solidPFS1IORT = new G4Tubs("PFS1IORT", innRadiusPFS1IORT,
496  outRadiusPFS1IORT,
497  hightPFS1IORT,
498  startAnglePFS1IORT,
499  spanningAnglePFS1IORT);
500 
501  G4LogicalVolume* logPFS1IORT = new G4LogicalVolume(solidPFS1IORT,
502  PFS1IORTMaterialIORT, "PFS1IORT", 0, 0, 0);
503 
504  physiPFS1IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS1IORT),0.,0.)),
505  "PFS1IORT", logPFS1IORT, physicalTreatmentRoom, false, 0);
506 
507  logPFS1IORT -> SetVisAttributes(green);
508 
509  // ------------------------------------------------//
510  // Monitor Chambers Cylinder //
511  // ------------------------------------------------//
512 
513  const G4double outRadiusCCMIORT = 35. *mm;
514  const G4double innRadiusCCMIORT = 10. *mm;
515  const G4double hightCCMIORT = 4.0125 *mm;
516  const G4double startAngleCCMIORT = 0.*deg;
517  const G4double spanningAngleCCMIORT = 360.*deg;
518  const G4double XPositionCCMIORT = -837.0125 *mm;
519 
520 
521  solidCCMIORT = new G4Tubs("CCMIORT", innRadiusCCMIORT,
522  outRadiusCCMIORT,
523  hightCCMIORT,
524  startAngleCCMIORT,
525  spanningAngleCCMIORT);
526 
527  G4LogicalVolume* logCCMIORT = new G4LogicalVolume(solidCCMIORT,
528  CCMIORTMaterialIORT, "CCMIORT", 0, 0, 0);
529 
530  physiCCMIORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCCMIORT),0.,0.)),
531  "CCMIORT", logCCMIORT, physicalTreatmentRoom, false, 0);
532 
533  logCCMIORT -> SetVisAttributes(green);
534 
535 
536  // ------------------------------------------------//
537  // Second Monitor Chamber Lamina Al 2 of 2 //
538  // ------------------------------------------------//
539 
540  const G4double outRadiusCM2_2_2IORT = 20. *mm;
541  const G4double innRadiusCM2_2_2IORT = 0. *mm;
542  const G4double hightCM2_2_2IORT = 0.025 *mm;
543  const G4double startAngleCM2_2_2IORT = 0.*deg;
544  const G4double spanningAngleCM2_2_2IORT = 360.*deg;
545  const G4double XPositionCM2_2_2IORT = -841. *mm;
546 
547 
548  solidCM2_2_2IORT = new G4Tubs("CM2_2_2IORT", innRadiusCM2_2_2IORT,
549  outRadiusCM2_2_2IORT,
550  hightCM2_2_2IORT,
551  startAngleCM2_2_2IORT,
552  spanningAngleCM2_2_2IORT);
553 
554  G4LogicalVolume* logCM2_2_2IORT = new G4LogicalVolume(solidCM2_2_2IORT,
555  CM2_2_2IORTMaterialIORT, "CM2_2_2IORT", 0, 0, 0);
556 
557  physiCM2_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_2_2IORT),0.,0.)),
558  "CM2_2_2ORT", logCM2_2_2IORT, physicalTreatmentRoom, false, 0);
559 
560  logCM2_2_2IORT -> SetVisAttributes(green);
561 
562 
563 // ------------------------------------------------//
564  // Second Monitor Chamber Lamina Al 1 of 2 //
565  // ------------------------------------------------//
566 
567  const G4double outRadiusCM2_1_2IORT = 20. *mm;
568  const G4double innRadiusCM2_1_2IORT = 0. *mm;
569  const G4double hightCM2_1_2IORT = 0.025 *mm;
570  const G4double startAngleCM2_1_2IORT = 0.*deg;
571  const G4double spanningAngleCM2_1_2IORT = 360.*deg;
572  const G4double XPositionCM2_1_2IORT = -839. *mm;
573 
574 
575  solidCM2_1_2IORT = new G4Tubs("CM2_1_2IORT", innRadiusCM2_1_2IORT,
576  outRadiusCM2_1_2IORT,
577  hightCM2_1_2IORT,
578  startAngleCM2_1_2IORT,
579  spanningAngleCM2_1_2IORT);
580 
581  G4LogicalVolume* logCM2_1_2IORT = new G4LogicalVolume(solidCM2_1_2IORT,
582  CM2_1_2IORTMaterialIORT, "CM2_1_2IORT", 0, 0, 0);
583 
584  physiCM2_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_1_2IORT),0.,0.)),
585  "CM2_1_2ORT", logCM2_1_2IORT, physicalTreatmentRoom, false, 0);
586 
587  logCM2_1_2IORT -> SetVisAttributes(yellow);
588 
589  // ------------------------------------------------//
590  // First Monitor Chamber Lamina Al 2 of 2 //
591  // ------------------------------------------------//
592 
593  const G4double outRadiusCM1_2_2IORT = 20. *mm;
594  const G4double innRadiusCM1_2_2IORT = 0. *mm;
595  const G4double hightCM1_2_2IORT = 0.025 *mm;
596  const G4double startAngleCM1_2_2IORT = 0.*deg;
597  const G4double spanningAngleCM1_2_2IORT = 360.*deg;
598  const G4double XPositionCM1_2_2IORT = -837. *mm;
599 
600  solidCM1_2_2IORT = new G4Tubs("CM1_2_2IORT", innRadiusCM1_2_2IORT,
601  outRadiusCM1_2_2IORT,
602  hightCM1_2_2IORT,
603  startAngleCM1_2_2IORT,
604  spanningAngleCM1_2_2IORT);
605 
606  G4LogicalVolume* logCM1_2_2IORT = new G4LogicalVolume(solidCM1_2_2IORT,
607  CM1_2_2IORTMaterialIORT, "CM1_2_2IORT", 0, 0, 0);
608 
609  physiCM1_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_2_2IORT),0.,0.)),
610  "CM1_2_2ORT", logCM1_2_2IORT, physicalTreatmentRoom, false, 0);
611 
612  logCM1_2_2IORT -> SetVisAttributes(yellow);
613 
614  // ------------------------------------------------//
615  // First Monitor Chamber Lamina Al 1 of 2 //
616  // ------------------------------------------------//
617 
618  const G4double outRadiusCM1_1_2IORT = 20. *mm;
619  const G4double innRadiusCM1_1_2IORT = 0. *mm;
620  const G4double hightCM1_1_2IORT = 0.025 *mm;
621  const G4double startAngleCM1_1_2IORT = 0.*deg;
622  const G4double spanningAngleCM1_1_2IORT = 360.*deg;
623  const G4double XPositionCM1_1_2IORT = -835. *mm;
624 
625 
626 
627  solidCM1_1_2IORT = new G4Tubs("CM1_1_2IORT", innRadiusCM1_1_2IORT,
628  outRadiusCM1_1_2IORT,
629  hightCM1_1_2IORT,
630  startAngleCM1_1_2IORT,
631  spanningAngleCM1_1_2IORT);
632 
633  G4LogicalVolume* logCM1_1_2IORT = new G4LogicalVolume(solidCM1_1_2IORT,
634  CM1_1_2IORTMaterialIORT, "CM1_1_2IORT", 0, 0, 0);
635 
636  physiCM1_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_1_2IORT),0.,0.)),
637  "CM1_1_2ORT", logCM1_1_2IORT, physicalTreatmentRoom, false, 0);
638 
639  logCM1_1_2IORT -> SetVisAttributes(yellow);
640 }
641 
643 {
644 
645  G4double phi4 = 90. *deg;
646 
647 
648  G4RotationMatrix rm4;
649  rm4.rotateY(phi4);
650 
652 
653  // IORT BEAM LINE BLOCKS
654 
656 
657  // ------------------------------------------------//
658  // Block 4 //
659  // ------------------------------------------------//
660 
661  const G4double outRadiusBlocco20mmIORT = 36.5 *mm;
662  const G4double innRadiusBlocco20mmIORT = 10. *mm;
663  const G4double hightBlocco20mmIORT = 3. *mm;
664  const G4double startAngleBlocco20mmIORT = 0.*deg;
665  const G4double spanningAngleBlocco20mmIORT = 360.*deg;
666  const G4double XPositionBlocco20mmIORT = -830. *mm;
667 
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 
748  solidBlocco1IORT = new G4Tubs("Blocco1IORT", innRadiusBlocco1IORT,
749  outRadiusBlocco1IORT,
750  hightBlocco1IORT,
751  startAngleBlocco1IORT,
752  spanningAngleBlocco1IORT);
753 
754  G4LogicalVolume* logBlocco1IORT = new G4LogicalVolume(solidBlocco1IORT,
755  Blocco1IORTMaterialIORT, "Blocco1IORT", 0, 0, 0);
756 
757  physiBlocco1IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco1IORT),0.,0.)),
758  "Blocco1IORT", logBlocco1IORT, physicalTreatmentRoom, false, 0);
759 
760  logBlocco1IORT -> SetVisAttributes(white);
761 }
762 
764 {
765 
766 
767  G4double phi5 = 90. *deg;
768 
769 
770  G4RotationMatrix rm5;
771  rm5.rotateY(phi5);
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 
809 
810  solidGiunz4FinalCollIORT = new G4Tubs("Giunz4FinalCollIORT", innRadiusGiunz4FinalCollIORT,
811  outRadiusGiunz4FinalCollIORT,
812  hightGiunz4FinalCollIORT,
813  startAngleGiunz4FinalCollIORT,
814  spanningAngleGiunz4FinalCollIORT);
815 
816  G4LogicalVolume* logGiunz4FinalCollIORT = new G4LogicalVolume(solidGiunz4FinalCollIORT,
817  Giunz4FinalCollMaterialIORT, "Giunz4FinalCollIORT", 0, 0, 0);
818 
819  physiGiunz4FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz4FinalCollXPositionIORT),0.,0.)),
820  "Giunz4FinalCollIORT", logGiunz4FinalCollIORT, physicalTreatmentRoom, false, 0);
821 
822  logGiunz4FinalCollIORT -> SetVisAttributes(blue);
823 
824 
825 
826  // --------------------------------- //
827  // Junction 3 FINAL COLLIMATOR IORT //
828  // --------------------------------- //
829 
830  const G4double outRadiusGiunz3FinalCollIORT = 42. *mm;
831  const G4double innRadiusGiunz3FinalCollIORT = 0. *mm;
832  const G4double hightGiunz3FinalCollIORT = 4.25 *mm;
833  const G4double startAngleGiunz3FinalCollIORT = 0.*deg;
834  const G4double spanningAngleGiunz3FinalCollIORT = 360.*deg;
835  const G4double Giunz3FinalCollXPositionIORT = -758.75 *mm;
836 
837 
838  solidGiunz3FinalCollIORT = new G4Tubs("Giunz3FinalCollIORT", innRadiusGiunz3FinalCollIORT,
839  outRadiusGiunz3FinalCollIORT,
840  hightGiunz3FinalCollIORT,
841  startAngleGiunz3FinalCollIORT,
842  spanningAngleGiunz3FinalCollIORT);
843 
844  G4LogicalVolume* logicsolidGiunz3FinalCollIORT = new G4LogicalVolume(solidGiunz3FinalCollIORT,
845  Giunz3FinalCollMaterialIORT, "Giunz3FinalCollIORT", 0, 0, 0);
846 
847  physiGiunz3FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz3FinalCollXPositionIORT),0.,0.)),
848  "Giunz3FinalCollIORT", logicsolidGiunz3FinalCollIORT, physicalTreatmentRoom, false, 0);
849 
850  logicsolidGiunz3FinalCollIORT -> SetVisAttributes(yellow);
851  // logicsolidGiunz3FinalCollIORT -> SetVisAttributes (G4VisAttributes::GetInvisible());
852 
853 
854 
855  // --------------------------------- //
856  // Junction 3 FINAL COLLIMATOR IORT internal //
857  // --------------------------------- //
858 
859 
860 
861  solidGiunz3FinalCollIntIORT = new G4Cons("Giunz3FinalCollIntIORT",0.*mm,13.75*mm,0.*mm,20.0*mm,4.25*mm,0.*deg,360.*deg);
862 
863  G4LogicalVolume* logicsolidGiunz3FinalCollIntIORT = new G4LogicalVolume(solidGiunz3FinalCollIntIORT,
864  Giunz3FinalCollMaterialIntIORT, "Giunz3FinalCollIntIORT", 0, 0, 0);
865 
866  physiGiunz3FinalCollIntIORT = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.),"Giunz3FinalCollIntIORT", logicsolidGiunz3FinalCollIntIORT,physiGiunz3FinalCollIORT, false, 0);
867 
868  logicsolidGiunz3FinalCollIntIORT -> SetVisAttributes(yellow);
869 }
870 
872 {
873 // -----------------------//
874  // FINAL COLLIMATOR IORT //
875  //------------------------//
876 
877  // const G4double outRadiusFinalCollimatorIORT = 35. *mm;
878  // const G4double innRadiusFinalCollimatorIORT = 30. *mm;
879  const G4double hightFinalCollimatorIORT = 349.75 *mm;
880  const G4double startAngleFinalCollimatorIORT = 0.*deg;
881  const G4double spanningAngleFinalCollimatorIORT = 360.*deg;
882  const G4double finalCollimatorXPositionIORT = -404.75 *mm;
883 
884  G4double phi6 = 90. *deg;
885 
886 
888  rm6.rotateY(phi6);
889 
890 
891  solidFinalCollimatorIORT = new G4Tubs("FinalCollimatorIORT", innerRadiusFinalCollimatorIORT,
893  hightFinalCollimatorIORT,
894  startAngleFinalCollimatorIORT,
895  spanningAngleFinalCollimatorIORT);
896 
897  G4LogicalVolume* logFinalCollimatorIORT = new G4LogicalVolume(solidFinalCollimatorIORT,
898  finalCollimatorMaterialIORT, "FinalCollimatorIORT", 0, 0, 0);
899 
900  physiFinalCollimatorIORT = new G4PVPlacement(G4Transform3D(rm6, G4ThreeVector((finalCollimatorXPositionIORT),0.,0.)),
901  "FinalCollimatorIORT", logFinalCollimatorIORT, physicalTreatmentRoom, false, 0);
902 
903  // logFinalCollimatorIORT -> SetVisAttributes(G4VisAttributes::GetInvisible());
904  logFinalCollimatorIORT -> SetVisAttributes(green);
905 
906 }
907 
911 
912 
914 {
915  solidFinalCollimatorIORT -> SetInnerRadius(value);
917  G4cout<<"Inner Radius of the final collimator IORT is (mm):"
918  << solidFinalCollimatorIORT -> GetInnerRadius()/mm
919  << G4endl;
920 }
921 
923 
925 {
926  solidFinalCollimatorIORT -> SetOuterRadius(value);
928  G4cout<<"Outer Radius of the final collimator IORT is (mm):"
929  << solidFinalCollimatorIORT -> GetOuterRadius()/mm
930  << G4endl;
931 }
932 
934 
935 
936