ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BrachyDetectorConstructionFlexi.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file BrachyDetectorConstructionFlexi.cc
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
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;
167 
168  delete endAttributes;
169  endAttributes = 0;
170 
171  delete steelAttributes;
172  steelAttributes = 0;
173 
174  delete physical_iridium_core;
176 
177  delete logical_iridium_core;
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 
194 
195  delete logical_End2_steel_shell;
197 
198  delete End2_steel_shell;
199  End2_steel_shell = 0;
200 
203 
204  delete logical_End1_steel_shell;
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;
221 
222  delete logical_steel_shell;
224 
225  delete steel_shell;
226  steel_shell = 0;
227 
229 }