Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BrachyDetectorConstructionFlexi.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 //
27 // --------------------------------------------------------------
28 // GEANT 4 - Brachytherapy example
29 // --------------------------------------------------------------
30 //
31 // Code developed by:
32 // S. Guatelli, D. Cutajar, J. Poder
33 // Centre For Medical Radiation Physics, University of Wollongong
34 //
35 // ****************************************
36 // * *
37 // * BrachyDetectorConstructionFlexi.cc*
38 // * *
39 // ****************************************
40 //
41 //
42 #include "globals.hh"
43 #include "G4SystemOfUnits.hh"
45 #include "G4RunManager.hh"
46 #include "G4Tubs.hh"
47 #include "G4Cons.hh"
48 #include "G4LogicalVolume.hh"
49 #include "G4ThreeVector.hh"
50 #include "G4PVPlacement.hh"
51 #include "G4Transform3D.hh"
52 #include "G4RotationMatrix.hh"
54 #include "BrachyMaterial.hh"
55 #include "G4VisAttributes.hh"
56 #include "G4Colour.hh"
57 
59  : steel_shell(0),logical_steel_shell(0),air_gap(0), logical_air_gap(0), physical_air_gap(0),
60  End1_steel_shell(0),logical_End1_steel_shell(0), physical_End1_steel_shell(0),
61  End2_steel_shell(0),logical_End2_steel_shell(0), physical_End2_steel_shell(0),
62  cable(0),logical_cable(0),physical_cable(0),
63  iridium_core(0),logical_iridium_core(0),physical_iridium_core(0),
64  steelAttributes(0), endAttributes(0), simpleIridiumVisAtt(0)
65 {
66  pMat = new BrachyMaterial();
67 }
68 
70 {
71  delete pMat;
72 }
73 
75 {
76  G4Material* steelMat = pMat -> GetMat("Stainless steel 304");
77  G4Material* iridiumMat = pMat -> GetMat("Iridium");
78  G4Material* airMat = pMat -> GetMat("Air");
79 
80  //Define dimensions of the outer Steel shell around the solid source - not including the ends
81 
82  G4double shellr_min = 0.00 * mm;
83  G4double shellr_max = 0.85 * mm;
84  G4double shell_length = 3.6 * mm;
85  steel_shell = new G4Tubs("steel_shell",shellr_min, shellr_max/2, shell_length/2.,0.*deg,360.*deg);
86  logical_steel_shell = new G4LogicalVolume(steel_shell, steelMat, "steel_shell_log", 0, 0, 0);
87  physical_steel_shell = new G4PVPlacement(0,G4ThreeVector(0,0,0),"phys_steel_shell", logical_steel_shell, mother, false, 0, true);
88 
89 //Define dimensions of the air gap between Steel shell and Iridium core
90  G4double airr_min = 0.00 * mm;
91  G4double airr_max = 0.67 * mm;
92  G4double air_length = 3.6 * mm;
93  air_gap = new G4Tubs("air_gap", airr_min, airr_max/2, air_length/2, 0.*deg, 360.*deg);
94  logical_air_gap = new G4LogicalVolume(air_gap, airMat, "air_gap_log", 0, 0, 0);
95  physical_air_gap = new G4PVPlacement(0, G4ThreeVector(0,0,0), "phys_air_gap",logical_air_gap, physical_steel_shell, false, 0, true);
96 
97 //Define the non-cable weld end of the Steel shell
98  G4double End1r_min = 0.0 * mm;
99  G4double End1r_max = 0.85 * mm;
100  G4double End1length = 0.65 * mm;
101  End1_steel_shell = new G4Tubs("End_1_steel_shell",End1r_min, End1r_max/2, End1length/2.,0.*deg,360.*deg);
102  logical_End1_steel_shell = new G4LogicalVolume(End1_steel_shell, steelMat, "End1_steel_shell_log", 0, 0, 0);
103  G4double end1offset_x = 0.0 * mm;
104  G4double end1offset_y = 0.0 * mm;
105  G4double end1offset_z = 2.125 * mm;
106  physical_End1_steel_shell = new G4PVPlacement(0,G4ThreeVector(end1offset_x,end1offset_y,end1offset_z),"phys_End1_steel_shell", logical_End1_steel_shell,mother, false, 0, true);
107 
108 //Define the cable weld end of the Steel shell
109  G4double End2r_min1 = 0.0 * mm;
110  G4double End2r_max1 = 0.85 * mm;
111  G4double End2r_min2 = 0.0 * mm;
112  G4double End2r_max2 = 0.5 * mm;
113  G4double End2length = 0.4 * mm;
114  End2_steel_shell = new G4Cons("End_2_steel_shell",End2r_min2, End2r_max2/2, End2r_min1, End2r_max1/2, End2length/2.0, 0.0, 360.0*deg);
115  logical_End2_steel_shell = new G4LogicalVolume(End2_steel_shell, steelMat, "End2_steel_shell_log", 0, 0, 0);
116  G4double end2offset_x = 0.0 * mm;
117  G4double end2offset_y = 0.0 * mm;
118  G4double end2offset_z = -2.0 * mm;
119  physical_End2_steel_shell = new G4PVPlacement(0,G4ThreeVector(end2offset_x,end2offset_y,end2offset_z), "phys_End2_steel_shell", logical_End2_steel_shell,mother, false, 0, true);
120 
121 //Define the cable
122  G4double cable_min = 0.0 * mm;
123  G4double cable_max = 0.5 * mm;
124  G4double cablelength = 5.0 * mm;
125  cable = new G4Tubs("cable",cable_min, cable_max/2, cablelength/2.,0.*deg,360.*deg);
126  logical_cable = new G4LogicalVolume(cable, steelMat, "cable_log", 0, 0, 0);
127  G4double cableoffset_x = 0.0 * mm;
128  G4double cableoffset_y = 0.0 * mm;
129  G4double cableoffset_z = -4.7 * mm;
130  physical_cable = new G4PVPlacement(0,G4ThreeVector(cableoffset_x,cableoffset_y,cableoffset_z),"phys_cable", logical_cable, mother, false, 0, true);
131 
132 // Define the Iridium core
133  G4double corer_min = 0.0 * mm;
134  G4double corer_max = 0.6 * mm;
135  G4double core_length = 3.5 * mm;
136  iridium_core = new G4Tubs("iridium_core",corer_min, corer_max/2,core_length/2.,0.*deg,360.*deg);
137  logical_iridium_core = new G4LogicalVolume(iridium_core, iridiumMat, "iridium_core_log", 0, 0, 0);
138  physical_iridium_core = new G4PVPlacement(0,G4ThreeVector(0,0,0), "phys_iridium_core", logical_iridium_core, physical_air_gap, false, 0, true);
139 
140 // Visualisations
141 
142 //Shell/cable attributes
143  steelAttributes = new G4VisAttributes(G4Colour(1.0, 0.0, 0.0)); // red
144  steelAttributes -> SetVisibility(true);
145  steelAttributes -> SetForceAuxEdgeVisible(true);
146 
147  endAttributes = new G4VisAttributes(G4Colour(1.0, 0.0, 0.0)); // red
148  endAttributes -> SetVisibility(true);
149  endAttributes -> SetForceAuxEdgeVisible(true);
150  logical_steel_shell -> SetVisAttributes(steelAttributes);
151  logical_End1_steel_shell -> SetVisAttributes(endAttributes);
152  logical_End2_steel_shell -> SetVisAttributes(endAttributes);
153  logical_cable -> SetVisAttributes(steelAttributes);
154 
155  G4Colour magenta (1.0, 0.0, 1.0) ;
156 
157  simpleIridiumVisAtt = new G4VisAttributes(magenta);
158  simpleIridiumVisAtt -> SetVisibility(true);
159  simpleIridiumVisAtt -> SetForceWireframe(true);
160  logical_iridium_core -> SetVisAttributes(simpleIridiumVisAtt);
161 }
162 
164 {
165  delete simpleIridiumVisAtt;
166  simpleIridiumVisAtt = 0;
167 
168  delete endAttributes;
169  endAttributes = 0;
170 
171  delete steelAttributes;
172  steelAttributes = 0;
173 
174  delete physical_iridium_core;
175  physical_iridium_core = 0 ;
176 
177  delete logical_iridium_core;
178  logical_iridium_core = 0;
179 
180  delete iridium_core;
181  iridium_core = 0;
182 
183  delete physical_cable;
184  physical_cable = 0;
185 
186  delete logical_cable;
187  logical_cable = 0;
188 
189  delete cable;
190  cable = 0;
191 
192  delete physical_End2_steel_shell;
193  physical_End2_steel_shell = 0;
194 
195  delete logical_End2_steel_shell;
196  logical_End2_steel_shell = 0;
197 
198  delete End2_steel_shell;
199  End2_steel_shell = 0;
200 
201  delete physical_End1_steel_shell;
202  physical_End1_steel_shell = 0;
203 
204  delete logical_End1_steel_shell;
205  logical_End1_steel_shell = 0;
206 
207  delete End1_steel_shell;
208  End1_steel_shell = 0;
209 
210  delete physical_air_gap;
211  physical_air_gap = 0;
212 
213  delete logical_air_gap;
214  logical_air_gap = 0;
215 
216  delete air_gap;
217  air_gap = 0;
218 
219  delete physical_steel_shell;
220  physical_steel_shell = 0;
221 
222  delete logical_steel_shell;
223  logical_steel_shell = 0;
224 
225  delete steel_shell;
226  steel_shell = 0;
227 
229 }
static constexpr double mm
Definition: G4SIunits.hh:115
CLHEP::Hep3Vector G4ThreeVector
Definition: G4Tubs.hh:85
Definition: G4Cons.hh:83
static G4RunManager * GetRunManager()
Definition: G4RunManager.cc:79
double G4double
Definition: G4Types.hh:76
static constexpr double deg
Definition: G4SIunits.hh:152