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