source: trunk/examples/advanced/human_phantom/src/G4PhantomBuilder.cc@ 1358

Last change on this file since 1358 was 807, checked in by garnier, 17 years ago

update

File size: 13.4 KB
Line 
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// Authors: S. Guatelli and M. G. Pia, INFN Genova, Italy
27//
28// Based on code developed by the undergraduate student G. Guerrieri
29// Note: this is a preliminary beta-version of the code; an improved
30// version will be distributed in the next Geant4 public release, compliant
31// with the design in a forthcoming publication, and subject to a
32// design and code review.
33//
34#include "G4PhantomBuilder.hh"
35#include "G4VBodyFactory.hh"
36#include "G4MIRDBodyFactory.hh"
37#include "G4ORNLFemaleBodyFactory.hh"
38#include "G4ORNLMaleBodyFactory.hh"
39#include "G4RunManager.hh"
40#include "G4Element.hh"
41#include "G4Material.hh"
42#include "G4Box.hh"
43#include "G4LogicalVolume.hh"
44#include "G4PVPlacement.hh"
45#include "G4Colour.hh"
46#include "G4VisAttributes.hh"
47
48G4PhantomBuilder::G4PhantomBuilder(): model("MIRD")
49{
50 // sex can be "female" or "male"
51 body = 0;
52 motherVolume = 0;
53 headVolume = 0;
54 trunkVolume = 0;
55 leftLegVolume =0;
56 rightLegVolume =0;
57 maleGenitaliaVolume = 0;
58}
59
60G4PhantomBuilder::~G4PhantomBuilder()
61{
62}
63void G4PhantomBuilder::BuildTrunk(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
64{
65 if (motherVolume == 0)
66 G4Exception("The world volume is missing !!!!!");
67
68 G4cout <<"MotherVolume: " << motherVolume -> GetName()<< G4endl;
69 G4cout << "sensitivity : "<< sensitivity << G4endl;
70 trunkVolume = body -> CreateOrgan("Trunk", motherVolume, colourName, solidVis, sensitivity);
71}
72
73void G4PhantomBuilder::BuildLeftLeg(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
74{
75 if (motherVolume == 0)
76 G4Exception("The world volume is missing !!!!!");
77
78 G4cout <<"MotherVolume: " << motherVolume -> GetName()<< G4endl;
79 G4cout << "sensitivity : "<< sensitivity << G4endl;
80 leftLegVolume = body -> CreateOrgan("LeftLeg", motherVolume, colourName, solidVis, sensitivity);
81}
82void G4PhantomBuilder::BuildRightLeg(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
83{
84 if (motherVolume == 0)
85 G4Exception("The world volume is missing !!!!!");
86
87 G4cout <<"MotherVolume: " << motherVolume -> GetName()<< G4endl;
88 G4cout << "sensitivity : "<< sensitivity << G4endl;
89 rightLegVolume = body -> CreateOrgan("RightLeg", motherVolume, colourName, solidVis, sensitivity);
90}
91
92void G4PhantomBuilder::BuildLeftLegBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
93{
94 if (leftLegVolume == 0)
95 G4Exception("The left leg volume is missing !!!!!");
96
97 G4cout <<"MotherVolume: " << leftLegVolume -> GetName()<< G4endl;
98 G4cout << "sensitivity : "<< sensitivity << G4endl;
99 body -> CreateOrgan("LeftLegBone", leftLegVolume,colourName, solidVis, sensitivity);
100}
101
102void G4PhantomBuilder::BuildRightLegBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
103{
104 if (trunkVolume == 0)
105 G4Exception("The right leg volume is missing !!!!!");
106
107 G4cout <<"MotherVolume: " << rightLegVolume -> GetName()<< G4endl;
108 G4cout << "sensitivity : "<< sensitivity << G4endl;
109 body -> CreateOrgan("RightLegBone", rightLegVolume, colourName, solidVis, sensitivity);
110}
111
112void G4PhantomBuilder::BuildLeftArmBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
113{
114 if (trunkVolume == 0)
115 G4Exception("The world volume is missing !!!!!");
116
117 G4cout <<"MotherVolume: " << trunkVolume -> GetName()<< G4endl;
118 G4cout << "sensitivity : "<< sensitivity << G4endl;
119 body -> CreateOrgan("LeftArmBone" ,trunkVolume,colourName,solidVis, sensitivity);
120}
121void G4PhantomBuilder::BuildRightArmBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
122{
123 if (trunkVolume == 0)
124 G4Exception("The trunk volume is missing !!!!!");
125
126 G4cout <<"MotherVolume: " << trunkVolume -> GetName()<< G4endl;
127 G4cout << "sensitivity : "<< sensitivity << G4endl;
128 body -> CreateOrgan("RightArmBone",trunkVolume,colourName,solidVis, sensitivity);
129}
130
131void G4PhantomBuilder::BuildLeftScapula(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
132{
133 if (trunkVolume == 0)
134 G4Exception("The trunk volume is missing !!!!!");
135
136 G4cout <<"MotherVolume: " << trunkVolume -> GetName()<< G4endl;
137 G4cout << "sensitivity : "<< sensitivity << G4endl;
138 body -> CreateOrgan("LeftScapula",trunkVolume,colourName,solidVis, sensitivity);
139}
140
141void G4PhantomBuilder::BuildRightScapula(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
142{
143 if (trunkVolume == 0)
144 G4Exception("The trunk volume is missing !!!!!");
145
146 G4cout <<"MotherVolume: " << trunkVolume -> GetName()<< G4endl;
147 G4cout << "sensitivity : "<< sensitivity << G4endl;
148 body -> CreateOrgan("RightScapula",trunkVolume,colourName,solidVis, sensitivity);
149}
150
151
152
153void G4PhantomBuilder::BuildHead(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
154{
155 if (motherVolume == 0)
156 G4Exception("The mother volume is missing !!!!!");
157
158 G4cout <<"MotherVolume: " << motherVolume -> GetName()<< G4endl;
159 G4cout << "sensitivity : "<< sensitivity << G4endl;
160 headVolume = body -> CreateOrgan("Head",motherVolume, colourName, solidVis, sensitivity);
161}
162
163void G4PhantomBuilder::BuildSkull(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
164{
165 if (headVolume == 0)
166 G4Exception("The head volume is missing !!!!!");
167
168 G4cout <<"MotherVolume: " << headVolume -> GetName()<< G4endl;
169 G4cout << "sensitivity : "<< sensitivity << G4endl;
170 body -> CreateOrgan( "Skull",headVolume, colourName, solidVis, sensitivity);
171}
172
173void G4PhantomBuilder::BuildUpperSpine(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
174{
175 if (headVolume == 0)
176 G4Exception("The head volume is missing !!!!!");
177
178 G4cout <<"MotherVolume: " << headVolume -> GetName()<< G4endl;
179 G4cout << "sensitivity : "<< sensitivity << G4endl;
180 body -> CreateOrgan("UpperSpine",headVolume,colourName, solidVis, sensitivity);
181}
182
183void G4PhantomBuilder::BuildMiddleLowerSpine(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
184{
185 if (trunkVolume == 0)
186 G4Exception("The trunk volume is missing !!!!!");
187
188 G4cout <<"MotherVolume: " << trunkVolume -> GetName()<< G4endl;
189 G4cout << "sensitivity : "<< sensitivity << G4endl;
190 body -> CreateOrgan("MiddleLowerSpine",trunkVolume, colourName, solidVis, sensitivity);
191}
192
193void G4PhantomBuilder::BuildPelvis(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
194{
195 if (trunkVolume == 0)
196 G4Exception("The trunk volume is missing !!!!!");
197
198 body -> CreateOrgan( "Pelvis",trunkVolume,
199 colourName, solidVis, sensitivity);
200}
201/*
202
203void G4PhantomBuilder::BuildClavicles(G4bool sensitivity)
204{
205 if (trunkVolume == 0)
206 G4Exception("The trunk volume is missing !!!!!");
207
208 body -> CreateClavicles(trunkVolume, sensitivity);
209}
210*/
211
212void G4PhantomBuilder::BuildBrain(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
213{
214 if (headVolume == 0)
215 G4Exception("The head volume is missing !!!!!");
216
217 body -> CreateOrgan("Brain",headVolume, colourName, solidVis, sensitivity);
218}
219
220void G4PhantomBuilder::BuildHeart(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
221{
222 if (trunkVolume == 0)
223 G4Exception("The trunk volume is missing !!!!!");
224 body -> CreateOrgan("Heart", trunkVolume,colourName, solidVis, sensitivity);
225}
226
227void G4PhantomBuilder::BuildLeftLung(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
228{
229 if (trunkVolume == 0)
230 G4Exception("The trunk volume is missing !!!!!");
231
232 body -> CreateOrgan("LeftLung",trunkVolume,colourName,solidVis, sensitivity);
233}
234
235void G4PhantomBuilder::BuildRightLung(const G4String& colourName, G4bool solidVis, G4bool sensitivity )
236{
237 if (trunkVolume == 0)
238 G4Exception("The trunk volume is missing !!!!!");
239
240 body -> CreateOrgan("RightLung",trunkVolume,colourName, solidVis, sensitivity);
241}
242
243void G4PhantomBuilder::BuildStomach(const G4String& colourName, G4bool solidVis, G4bool sensitivity )
244{
245 if (trunkVolume == 0)
246 G4Exception("The trunk volume is missing !!!!!");
247
248 body -> CreateOrgan("Stomach",trunkVolume,colourName, solidVis, sensitivity);
249}
250
251void G4PhantomBuilder::BuildRibCage(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
252{
253 if (trunkVolume == 0)
254 G4Exception("The trunk volume is missing !!!!!");
255
256 body -> CreateOrgan("RibCage",trunkVolume,colourName, solidVis, sensitivity);
257}
258
259void G4PhantomBuilder::BuildSpleen(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
260{
261 if (trunkVolume == 0)
262 G4Exception("The trunk volume is missing !!!!!");
263
264 body -> CreateOrgan("Spleen", trunkVolume,colourName, solidVis, sensitivity);
265}
266
267void G4PhantomBuilder::BuildUpperLargeIntestine(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
268{
269 if (trunkVolume == 0)
270 G4Exception("The trunk volume is missing !!!!!");
271
272 body -> CreateOrgan("UpperLargeIntestine",trunkVolume, colourName, solidVis, sensitivity);
273}
274
275void G4PhantomBuilder::BuildLowerLargeIntestine(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
276{
277 if (trunkVolume == 0)
278 G4Exception("The trunk volume is missing !!!!!");
279
280 body -> CreateOrgan("LowerLargeIntestine", trunkVolume, colourName,solidVis, sensitivity);
281}
282/*
283void G4PhantomBuilder::BuildEsophagus(G4bool sensitivity)
284{
285 if (trunkVolume == 0)
286 G4Exception("The trunk volume is missing !!!!!");
287
288 body -> CreateEsophagus(trunkVolume, sensitivity);
289}
290*/
291void G4PhantomBuilder::BuildLeftKidney(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
292{
293 if (trunkVolume == 0)
294 G4Exception("The trunk volume is missing !!!!!");
295
296 body -> CreateOrgan("LeftKidney", trunkVolume,colourName, solidVis, sensitivity);
297}
298void G4PhantomBuilder::BuildRightKidney(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
299{
300 if (trunkVolume == 0)
301 G4Exception("The trunk volume is missing !!!!!");
302
303 body -> CreateOrgan("RightKidney",trunkVolume,colourName, solidVis, sensitivity);
304}
305
306void G4PhantomBuilder::BuildLeftAdrenal(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
307{
308 if (trunkVolume == 0)
309 G4Exception("The trunk volume is missing !!!!!");
310
311 body -> CreateOrgan("LeftAdrenal", trunkVolume,colourName, solidVis, sensitivity);
312}
313
314void G4PhantomBuilder::BuildRightAdrenal(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
315{
316 if (trunkVolume == 0)
317 G4Exception("The trunk volume is missing !!!!!");
318
319 body -> CreateOrgan("RightAdrenal", trunkVolume,colourName, solidVis, sensitivity);
320}
321
322
323void G4PhantomBuilder::BuildLiver(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
324{
325 if (trunkVolume == 0)
326 G4Exception("The trunk volume is missing !!!!!");
327
328 body -> CreateOrgan("Liver", trunkVolume,colourName, solidVis, sensitivity);
329}
330void G4PhantomBuilder::BuildPancreas(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
331{
332 if (trunkVolume == 0)
333 G4Exception("The trunk volume is missing !!!!!");
334
335 body -> CreateOrgan("Pancreas",trunkVolume,colourName, solidVis, sensitivity);
336}
337
338void G4PhantomBuilder::BuildUrinaryBladder(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
339{
340 if (trunkVolume == 0)
341 G4Exception("The trunk volume is missing !!!!!");
342
343 body -> CreateOrgan("UrinaryBladder",trunkVolume, colourName, solidVis, sensitivity);
344}
345
346void G4PhantomBuilder::BuildThyroid(const G4String& colourName, G4bool solidVis, G4bool sensitivity )
347{
348 if (headVolume == 0)
349 G4Exception("The trunk volume is missing !!!!!");
350
351 body -> CreateOrgan("Thyroid",headVolume, colourName,solidVis, sensitivity);
352}
353
354
355G4VPhysicalVolume* G4PhantomBuilder::GetPhantom()
356{
357 return motherVolume;
358}
359
360void G4PhantomBuilder::SetMotherVolume(G4VPhysicalVolume* mother)
361{
362 motherVolume = mother;
363}
364
365
366void G4PhantomBuilder::SetModel(G4String modelFlag)
367{
368 model = modelFlag;
369
370 if(model=="MIRD" || model =="MIX") body = new G4MIRDBodyFactory();
371 if(model=="ORNLFemale") body = new G4ORNLFemaleBodyFactory();
372 if(model=="ORNLMale") body = new G4ORNLMaleBodyFactory();
373}
374
Note: See TracBrowser for help on using the repository browser.