File indexing completed on 2025-02-23 09:20:13
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 #include "G4PhantomBuilder.hh"
0031 #include "G4VBodyFactory.hh"
0032 #include "G4MIRDBodyFactory.hh"
0033 #include "G4ORNLFemaleBodyFactory.hh"
0034 #include "G4ORNLMaleBodyFactory.hh"
0035 #include "G4RunManager.hh"
0036 #include "G4Element.hh"
0037 #include "G4Material.hh"
0038 #include "G4Box.hh"
0039 #include "G4LogicalVolume.hh"
0040 #include "G4PVPlacement.hh"
0041 #include "G4Colour.hh"
0042 #include "G4VisAttributes.hh"
0043
0044 G4PhantomBuilder::G4PhantomBuilder(): fModel("MIRD")
0045 {
0046
0047 fBody = nullptr;
0048 fMotherVolume = nullptr;
0049 fHeadVolume = nullptr;
0050 fTrunkVolume = nullptr;
0051 fLeftLegVolume =nullptr;
0052 fRightLegVolume = nullptr;
0053 fMaleGenitaliaVolume = nullptr;
0054 }
0055
0056 void G4PhantomBuilder::BuildTrunk(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0057 {
0058 if (fMotherVolume == nullptr)
0059 G4Exception("G4PhantomBuilder::BuildTrunk()", "human_phantom0014", FatalException, "The world volume is missing !!!!!");
0060
0061 G4cout <<"MotherVolume: " << fMotherVolume -> GetName()<< G4endl;
0062 G4cout << "sensitivity : "<< sensitivity << G4endl;
0063 fTrunkVolume = fBody -> CreateOrgan("Trunk", fMotherVolume, colourName, solidVis, sensitivity);
0064 }
0065
0066 void G4PhantomBuilder::BuildLeftLeg(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0067 {
0068 if (fMotherVolume == nullptr)
0069 G4Exception("G4PhantomBuilder::BuildLeftLeg()", "human_phantom0015", FatalException, "The world volume is missing !!!!!");
0070
0071 G4cout <<"MotherVolume: " << fMotherVolume -> GetName()<< G4endl;
0072 G4cout << "sensitivity : "<< sensitivity << G4endl;
0073 fLeftLegVolume = fBody -> CreateOrgan("LeftLeg", fMotherVolume, colourName, solidVis, sensitivity);
0074 }
0075 void G4PhantomBuilder::BuildRightLeg(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0076 {
0077 if (fMotherVolume == nullptr)
0078 G4Exception("G4PhantomBuilder::BuildRightLeg()", "human_phantom0016", FatalException, "The world volume is missing !!!!!");
0079
0080 G4cout <<"MotherVolume: " << fMotherVolume -> GetName()<< G4endl;
0081 G4cout << "sensitivity : "<< sensitivity << G4endl;
0082 fRightLegVolume = fBody -> CreateOrgan("RightLeg", fMotherVolume, colourName, solidVis, sensitivity);
0083 }
0084
0085 void G4PhantomBuilder::BuildLeftLegBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0086 {
0087 if (fLeftLegVolume == nullptr)
0088 G4Exception("G4PhantomBuilder::BuildLeftLegBone()", "human_phantom0017", FatalException, "The left leg volume is missing !!!!!");
0089
0090 G4cout <<"MotherVolume: " << fLeftLegVolume -> GetName()<< G4endl;
0091 G4cout << "sensitivity : "<< sensitivity << G4endl;
0092 fBody -> CreateOrgan("LeftLegBone", fLeftLegVolume,colourName, solidVis, sensitivity);
0093 }
0094
0095 void G4PhantomBuilder::BuildRightLegBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0096 {
0097 if (fTrunkVolume == nullptr)
0098 G4Exception("G4PhantomBuilder::BuildRightLegBone()", "human_phantom0018", FatalException, "The right leg volume is missing !!!!!");
0099
0100 G4cout <<"MotherVolume: " << fRightLegVolume -> GetName()<< G4endl;
0101 G4cout << "sensitivity : "<< sensitivity << G4endl;
0102 fBody -> CreateOrgan("RightLegBone", fRightLegVolume, colourName, solidVis, sensitivity);
0103 }
0104
0105 void G4PhantomBuilder::BuildLeftArmBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0106 {
0107 if (fTrunkVolume == nullptr)
0108 G4Exception("G4PhantomBuilder::BuildLeftArmBone()", "human_phantom0019", FatalException, "The world volume is missing !!!!!");
0109
0110 G4cout <<"MotherVolume: " << fTrunkVolume -> GetName()<< G4endl;
0111 G4cout << "sensitivity : "<< sensitivity << G4endl;
0112 fBody -> CreateOrgan("LeftArmBone", fTrunkVolume, colourName, solidVis, sensitivity);
0113 }
0114 void G4PhantomBuilder::BuildRightArmBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0115 {
0116 if (fTrunkVolume == nullptr)
0117 G4Exception("G4PhantomBuilder::BuildRightArmBone()", "human_phantom0020", FatalException, "The trunk volume is missing !!!!!");
0118
0119 G4cout <<"MotherVolume: " << fTrunkVolume -> GetName()<< G4endl;
0120 G4cout << "sensitivity : "<< sensitivity << G4endl;
0121 fBody -> CreateOrgan("RightArmBone", fTrunkVolume,colourName,solidVis, sensitivity);
0122 }
0123
0124 void G4PhantomBuilder::BuildLeftScapula(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0125 {
0126 if (fTrunkVolume == nullptr)
0127 G4Exception("G4PhantomBuilder::BuildLeftScapula()", "human_phantom0021", FatalException, "The trunk volume is missing !!!!!");
0128
0129 G4cout <<"MotherVolume: " << fTrunkVolume -> GetName()<< G4endl;
0130 G4cout << "sensitivity : "<< sensitivity << G4endl;
0131 fBody -> CreateOrgan("LeftScapula",fTrunkVolume,colourName,solidVis, sensitivity);
0132 }
0133
0134 void G4PhantomBuilder::BuildRightScapula(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0135 {
0136 if (fTrunkVolume == nullptr)
0137 G4Exception("G4PhantomBuilder::BuildRightScapula()", "human_phantom0022", FatalException, "The trunk volume is missing !!!!!");
0138
0139 G4cout <<"MotherVolume: " << fTrunkVolume -> GetName()<< G4endl;
0140 G4cout << "sensitivity : "<< sensitivity << G4endl;
0141 fBody -> CreateOrgan("RightScapula",fTrunkVolume,colourName,solidVis, sensitivity);
0142 }
0143
0144 void G4PhantomBuilder::BuildLeftClavicle(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0145 {
0146 if (fTrunkVolume == nullptr)
0147 G4Exception("G4PhantomBuilder::BuildLeftClavicle()", "human_phantom0023", FatalException, "The trunk volume is missing !!!!!");
0148
0149 G4cout <<"MotherVolume: " << fTrunkVolume -> GetName()<< G4endl;
0150 G4cout << "sensitivity : "<< sensitivity << G4endl;
0151 fBody -> CreateOrgan("LeftClavicle", fTrunkVolume,colourName,solidVis, sensitivity);
0152 }
0153
0154 void G4PhantomBuilder::BuildRightClavicle(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0155 {
0156 if (fTrunkVolume == nullptr)
0157 G4Exception("G4PhantomBuilder::BuildRightClavicle()", "human_phantom0024", FatalException, "The trunk volume is missing !!!!!");
0158
0159 G4cout <<"MotherVolume: " << fTrunkVolume -> GetName()<< G4endl;
0160 G4cout << "sensitivity : "<< sensitivity << G4endl;
0161 fBody -> CreateOrgan("RightClavicle",fTrunkVolume,colourName,solidVis, sensitivity);
0162 }
0163
0164 void G4PhantomBuilder::BuildHead(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0165 {
0166 if (fMotherVolume == nullptr)
0167 G4Exception("G4PhantomBuilder::BuildHead()", "human_phantom0025", FatalException, "The mother volume is missing !!!!!");
0168
0169 G4cout <<"MotherVolume: " << fMotherVolume -> GetName()<< G4endl;
0170 G4cout << "sensitivity : "<< sensitivity << G4endl;
0171 fHeadVolume = fBody -> CreateOrgan("Head", fMotherVolume, colourName, solidVis, sensitivity);
0172 }
0173
0174 void G4PhantomBuilder::BuildSkull(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0175 {
0176 if (fHeadVolume == nullptr)
0177 G4Exception("G4PhantomBuilder::BuildSkull()", "human_phantom0026", FatalException, "The head volume is missing !!!!!");
0178
0179 G4cout <<"MotherVolume: " << fHeadVolume -> GetName()<< G4endl;
0180 G4cout << "sensitivity : "<< sensitivity << G4endl;
0181 fBody -> CreateOrgan( "Skull", fHeadVolume, colourName, solidVis, sensitivity);
0182 }
0183
0184 void G4PhantomBuilder::BuildUpperSpine(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0185 {
0186 if (fHeadVolume == nullptr)
0187 G4Exception("G4PhantomBuilder::BuildUpperSpine()", "human_phantom0027", FatalException, "The head volume is missing !!!!!");
0188
0189 G4cout <<"MotherVolume: " << fHeadVolume -> GetName()<< G4endl;
0190 G4cout << "sensitivity : "<< sensitivity << G4endl;
0191 fBody -> CreateOrgan("UpperSpine", fHeadVolume,colourName, solidVis, sensitivity);
0192 }
0193
0194 void G4PhantomBuilder::BuildMiddleLowerSpine(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0195 {
0196 if (fTrunkVolume == nullptr)
0197 G4Exception("G4PhantomBuilder::BuildMiddleLowerSpine()", "human_phantom0028", FatalException, "The trunk volume is missing !!!!!");
0198
0199 G4cout <<"MotherVolume: " << fTrunkVolume -> GetName()<< G4endl;
0200 G4cout << "sensitivity : "<< sensitivity << G4endl;
0201 fBody -> CreateOrgan("MiddleLowerSpine",fTrunkVolume, colourName, solidVis, sensitivity);
0202 }
0203
0204 void G4PhantomBuilder::BuildPelvis(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0205 {
0206 if (fTrunkVolume == nullptr)
0207 G4Exception("G4PhantomBuilder::BuildPelvis()", "human_phantom0029", FatalException, "The trunk volume is missing !!!!!");
0208
0209 fBody -> CreateOrgan( "Pelvis", fTrunkVolume, colourName, solidVis, sensitivity);
0210 }
0211
0212 void G4PhantomBuilder::BuildBrain(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0213 {
0214 if (fHeadVolume == nullptr)
0215 G4Exception("G4PhantomBuilder::BuildBrain()", "human_phantom0030", FatalException, "The head volume is missing !!!!!");
0216
0217 fBody -> CreateOrgan("Brain", fHeadVolume, colourName, solidVis, sensitivity);
0218 }
0219
0220 void G4PhantomBuilder::BuildHeart(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0221 {
0222 if (fTrunkVolume == nullptr)
0223 G4Exception("G4PhantomBuilder::BuildHeart()", "human_phantom0031", FatalException, "The trunk volume is missing !!!!!");
0224 fBody -> CreateOrgan("Heart", fTrunkVolume,colourName, solidVis, sensitivity);
0225 }
0226
0227 void G4PhantomBuilder::BuildLeftLung(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0228 {
0229 if (fTrunkVolume == nullptr)
0230 G4Exception("G4PhantomBuilder::BuildLeftLung()", "human_phantom0032", FatalException, "The trunk volume is missing !!!!!");
0231
0232 fBody -> CreateOrgan("LeftLung", fTrunkVolume,colourName,solidVis, sensitivity);
0233 }
0234
0235 void G4PhantomBuilder::BuildRightLung(const G4String& colourName, G4bool solidVis, G4bool sensitivity )
0236 {
0237 if (fTrunkVolume == nullptr)
0238 G4Exception("G4PhantomBuilder::BuildRightLung()", "human_phantom0033", FatalException, "The trunk volume is missing !!!!!");
0239
0240 fBody -> CreateOrgan("RightLung", fTrunkVolume,colourName, solidVis, sensitivity);
0241 }
0242
0243 void G4PhantomBuilder::BuildStomach(const G4String& colourName, G4bool solidVis, G4bool sensitivity )
0244 {
0245 if (fTrunkVolume == nullptr)
0246 G4Exception("G4PhantomBuilder::BuildStomach()", "human_phantom0034", FatalException, "The trunk volume is missing !!!!!");
0247
0248 fBody -> CreateOrgan("Stomach", fTrunkVolume,colourName, solidVis, sensitivity);
0249 }
0250
0251 void G4PhantomBuilder::BuildRibCage(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0252 {
0253 if (fTrunkVolume == nullptr)
0254 G4Exception("G4PhantomBuilder::BuildRibCage()", "human_phantom0035", FatalException, "The trunk volume is missing !!!!!");
0255
0256 fBody -> CreateOrgan("RibCage", fTrunkVolume,colourName, solidVis, sensitivity);
0257 }
0258
0259 void G4PhantomBuilder::BuildSpleen(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0260 {
0261 if (fTrunkVolume == nullptr)
0262 G4Exception("G4PhantomBuilder::BuildSpleen()", "human_phantom0036", FatalException, "The trunk volume is missing !!!!!");
0263
0264 fBody -> CreateOrgan("Spleen", fTrunkVolume,colourName, solidVis, sensitivity);
0265 }
0266
0267 void G4PhantomBuilder::BuildUpperLargeIntestine(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0268 {
0269 if (fTrunkVolume == nullptr)
0270 G4Exception("G4PhantomBuilder::BuildUpperLargeIntestine()", "human_phantom0037", FatalException, "The trunk volume is missing !!!!!");
0271
0272 fBody -> CreateOrgan("UpperLargeIntestine", fTrunkVolume, colourName, solidVis, sensitivity);
0273 }
0274
0275 void G4PhantomBuilder::BuildLowerLargeIntestine(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0276 {
0277 if (fTrunkVolume == nullptr)
0278 G4Exception("G4PhantomBuilder::BuildLowerLargeIntestine()", "human_phantom0038", FatalException, "The trunk volume is missing !!!!!");
0279
0280 fBody -> CreateOrgan("LowerLargeIntestine", fTrunkVolume, colourName,solidVis, sensitivity);
0281 }
0282
0283 void G4PhantomBuilder::BuildSmallIntestine(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0284 {
0285 if (fTrunkVolume == nullptr)
0286 G4Exception("G4PhantomBuilder::BuildSamllIntestine()", "human_phantom0039", FatalException, "The trunk volume is missing !!!!!");
0287
0288 fBody -> CreateOrgan("SmallIntestine", fTrunkVolume, colourName, solidVis, sensitivity);
0289 }
0290
0291 void G4PhantomBuilder::BuildLeftKidney(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0292 {
0293 if (fTrunkVolume == nullptr)
0294 G4Exception("G4PhantomBuilder::BuildLeftKidney()", "human_phantom0040", FatalException, "The trunk volume is missing !!!!!");
0295
0296 fBody -> CreateOrgan("LeftKidney", fTrunkVolume,colourName, solidVis, sensitivity);
0297 }
0298 void G4PhantomBuilder::BuildRightKidney(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0299 {
0300 if (fTrunkVolume == nullptr)
0301 G4Exception("G4PhantomBuilder::BuildRightKidney()", "human_phantom0041", FatalException, "The trunk volume is missing !!!!!");
0302
0303 fBody -> CreateOrgan("RightKidney", fTrunkVolume,colourName, solidVis, sensitivity);
0304 }
0305
0306 void G4PhantomBuilder::BuildLeftAdrenal(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0307 {
0308 if (fTrunkVolume == nullptr)
0309 G4Exception("G4PhantomBuilder::BuildLeftAdrenal()", "human_phantom0042", FatalException, "The trunk volume is missing !!!!!");
0310
0311 fBody -> CreateOrgan("LeftAdrenal", fTrunkVolume,colourName, solidVis, sensitivity);
0312 }
0313
0314 void G4PhantomBuilder::BuildRightAdrenal(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0315 {
0316 if (fTrunkVolume == nullptr)
0317 G4Exception("G4PhantomBuilder::BuildRightAdrenal()", "human_phantom0043", FatalException, "The trunk volume is missing !!!!!");
0318
0319 fBody -> CreateOrgan("RightAdrenal", fTrunkVolume,colourName, solidVis, sensitivity);
0320 }
0321
0322 void G4PhantomBuilder::BuildLiver(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0323 {
0324 if (fTrunkVolume == nullptr)
0325 G4Exception("G4PhantomBuilder::BuildLiver()", "human_phantom0044", FatalException, "The trunk volume is missing !!!!!");
0326
0327 fBody -> CreateOrgan("Liver", fTrunkVolume,colourName, solidVis, sensitivity);
0328 }
0329 void G4PhantomBuilder::BuildPancreas(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0330 {
0331 if (fTrunkVolume == nullptr)
0332 G4Exception("G4PhantomBuilder::BuildPancreas()", "human_phantom0045", FatalException, "The trunk volume is missing !!!!!");
0333
0334 fBody -> CreateOrgan("Pancreas", fTrunkVolume,colourName, solidVis, sensitivity);
0335 }
0336
0337 void G4PhantomBuilder::BuildUrinaryBladder(const G4String& colourName, G4bool solidVis, G4bool sensitivity)
0338 {
0339 if (fTrunkVolume == nullptr)
0340 G4Exception("G4PhantomBuilder::BuildUrinaryBladder()", "human_phantom0046", FatalException, "The trunk volume is missing !!!!!");
0341
0342 fBody -> CreateOrgan("UrinaryBladder", fTrunkVolume, colourName, solidVis, sensitivity);
0343 }
0344
0345 void G4PhantomBuilder::BuildThyroid(const G4String& colourName, G4bool solidVis, G4bool sensitivity )
0346 {
0347 if (fHeadVolume == nullptr)
0348 G4Exception("G4PhantomBuilder::BuildThyroid()", "human_phantom0047", FatalException, "The trunk volume is missing !!!!!");
0349
0350 fBody -> CreateOrgan("Thyroid", fHeadVolume, colourName,solidVis, sensitivity);
0351 }
0352
0353 void G4PhantomBuilder::BuildThymus(const G4String& colourName, G4bool solidVis, G4bool sensitivity )
0354 {
0355 if (fTrunkVolume == nullptr)
0356 G4Exception("G4PhantomBuilder::BuildThymus()", "human_phantom0048", FatalException, "The trunk volume is missing !!!!!");
0357
0358 fBody -> CreateOrgan("Thymus",fTrunkVolume, colourName,solidVis, sensitivity);
0359 }
0360
0361 G4VPhysicalVolume* G4PhantomBuilder::GetPhantom()
0362 {
0363 return fMotherVolume;
0364 }
0365
0366 void G4PhantomBuilder::SetMotherVolume(G4VPhysicalVolume* mother)
0367 {
0368 fMotherVolume = mother;
0369 }
0370
0371 void G4PhantomBuilder::SetModel(G4String modelFlag)
0372 {
0373 fModel = modelFlag;
0374
0375 if(fModel=="MIRD") fBody = new G4MIRDBodyFactory();
0376 else if(fModel=="ORNLFemale")
0377 {
0378 #ifdef G4LIB_USE_GDML
0379 fBody = new G4ORNLFemaleBodyFactory();
0380 #else
0381 G4cout << fModel << " Working with GDML only! set -DWITH_GDML_USE=ON flag during the CMAKE configuration step" << G4endl;
0382 #endif
0383 }
0384 else if(fModel=="ORNLMale")
0385 {
0386 #ifdef G4LIB_USE_GDML
0387 fBody = new G4ORNLMaleBodyFactory();
0388 #else
0389 G4cout << fModel << " Working with GDML only! set -DWITH_GDML_USE=ON flag during the CMAKE configuration step" << G4endl;
0390 #endif
0391 }
0392 }