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