Geant4  10.01.p02
Collimator50BeamLine.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 "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::Invisible);
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::Invisible);
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::Invisible);
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 
G4Material * Blocco3IORTMaterialIORT
static const double cm
Definition: G4SIunits.hh:106
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
G4VisAttributes * darkOrange3
G4VPhysicalVolume * physiVSIORT
CLHEP::Hep3Vector G4ThreeVector
IORTDetectorConstruction * iortDetectorConstruction
CLHEP::HepRotation G4RotationMatrix
G4VPhysicalVolume * physicalTreatmentRoom
Definition: G4Box.hh:64
void SetInnerRadiusFinalCollimatorIORT(G4double)
G4VPhysicalVolume * physiFTIORT
Definition: G4Tubs.hh:85
G4VPhysicalVolume * physiGiunz5FinalCollIORT
G4Material * CM1_1_2IORTMaterialIORT
G4int nComponents
Definition: TRTMaterials.hh:41
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
G4VPhysicalVolume * physiBlocco20mmIORT
G4VPhysicalVolume * physiFinalCollimatorIORT
G4VPhysicalVolume * physiBlocco1IORT
G4Material * Giunz4FinalCollMaterialIORT
Collimator50BeamLineMessenger * collimatorMessenger
G4VPhysicalVolume * physiPFS1IORT
G4VisAttributes * darkGreen
G4GLOB_DLL std::ostream G4cout
static const double deg
Definition: G4SIunits.hh:133
bool G4bool
Definition: G4Types.hh:79
G4Material * CM1_2_2IORTMaterialIORT
G4VPhysicalVolume * physiGiunz3FinalCollIORT
Definition: G4Cons.hh:83
static const double cm3
Definition: G4SIunits.hh:108
G4Material * Giunz3FinalCollMaterialIORT
G4VPhysicalVolume * physiGiunz4FinalCollIORT
HepGeom::Transform3D G4Transform3D
static const double perCent
Definition: G4SIunits.hh:296
G4VPhysicalVolume * physiCCMIORT
static G4RunManager * GetRunManager()
Definition: G4RunManager.cc:79
G4VPhysicalVolume * physiBlocco2IORT
static const double g
Definition: G4SIunits.hh:162
G4Material * CM2_2_2IORTMaterialIORT
static const G4VisAttributes Invisible
G4Material * finalCollimatorMaterialIORT
G4Material * Giunz3FinalCollMaterialIntIORT
#define G4endl
Definition: G4ios.hh:61
G4VPhysicalVolume * physiGiunz3FinalCollIntIORT
G4Material * Giunz1FinalCollMaterialIORT
G4Material * CM2_1_2IORTMaterialIORT
void SetOuterRadiusFinalCollimatorIORT(G4double)
G4VPhysicalVolume * Construct()
G4Material * Giunz5FinalCollMaterialIORT
double G4double
Definition: G4Types.hh:76
G4VPhysicalVolume * physiPFS3IORT
G4VPhysicalVolume * physiCM2_2_2IORT
G4Material * Giunz2FinalCollMaterialIORT
G4VPhysicalVolume * physiCM1_2_2IORT
G4Element * FindOrBuildElement(G4int Z, G4bool isotopes=true)
Air AddElement(elN,.7)
static const double mm
Definition: G4SIunits.hh:102
G4Material * Blocco2IORTMaterialIORT
G4Material * Blocco1IORTMaterialIORT
G4Material * Blocco20mmIORTMaterialIORT
G4VPhysicalVolume * physiPFS2IORT
G4VPhysicalVolume * physiBlocco3IORT
G4VPhysicalVolume * physiCM2_1_2IORT
G4VPhysicalVolume * physiCM1_1_2IORT