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