#include "G4MIRDBodyFactory.h" #include "G4PhantomBuilder.h" #include "G4VBodyFactory.h" #include "G4Box.hh" #include "G4Colour.hh" #include "G4Element.hh" #include "G4LogicalVolume.hh" #include "G4Material.hh" #include "G4PVPlacement.hh" #include "G4RunManager.hh" #include "G4VisAttributes.hh" G4PhantomBuilder::G4PhantomBuilder() : model("MIRD") { // sex can be "female" or "male" body = 0; motherVolume = 0; headVolume = 0; trunkVolume = 0; leftLegVolume = 0; rightLegVolume = 0; maleGenitaliaVolume = 0; } G4PhantomBuilder::~G4PhantomBuilder() {} void G4PhantomBuilder::BuildTrunk(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (motherVolume == 0) G4Exception("G4PhantomBuilder::BuildTrunk()", "human_phantom0014", FatalException, "The world volume is missing !!!!!"); G4cout << "MotherVolume: " << motherVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; trunkVolume = body->CreateOrgan("Trunk", motherVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLeftLeg(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (motherVolume == 0) G4Exception("G4PhantomBuilder::BuildLeftLeg()", "human_phantom0015", FatalException, "The world volume is missing !!!!!"); G4cout << "MotherVolume: " << motherVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; leftLegVolume = body->CreateOrgan("LeftLeg", motherVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildRightLeg(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (motherVolume == 0) G4Exception("G4PhantomBuilder::BuildRightLeg()", "human_phantom0016", FatalException, "The world volume is missing !!!!!"); G4cout << "MotherVolume: " << motherVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; rightLegVolume = body->CreateOrgan("RightLeg", motherVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLeftLegBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (leftLegVolume == 0) G4Exception("G4PhantomBuilder::BuildLeftLegBone()", "human_phantom0017", FatalException, "The left leg volume is missing !!!!!"); G4cout << "MotherVolume: " << leftLegVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("LeftLegBone", leftLegVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildRightLegBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildRightLegBone()", "human_phantom0018", FatalException, "The right leg volume is missing !!!!!"); G4cout << "MotherVolume: " << rightLegVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("RightLegBone", rightLegVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLeftArmBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildLeftArmBone()", "human_phantom0019", FatalException, "The world volume is missing !!!!!"); G4cout << "MotherVolume: " << trunkVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("LeftArmBone", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildRightArmBone(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildRightArmBone()", "human_phantom0020", FatalException, "The trunk volume is missing !!!!!"); G4cout << "MotherVolume: " << trunkVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("RightArmBone", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLeftScapula(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildLeftScapula()", "human_phantom0021", FatalException, "The trunk volume is missing !!!!!"); G4cout << "MotherVolume: " << trunkVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("LeftScapula", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildRightScapula(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildRightScapula()", "human_phantom0022", FatalException, "The trunk volume is missing !!!!!"); G4cout << "MotherVolume: " << trunkVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("RightScapula", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLeftClavicle(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildLeftClavicle()", "human_phantom0023", FatalException, "The trunk volume is missing !!!!!"); G4cout << "MotherVolume: " << trunkVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("LeftClavicle", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildRightClavicle(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildRightClavicle()", "human_phantom0024", FatalException, "The trunk volume is missing !!!!!"); G4cout << "MotherVolume: " << trunkVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("RightClavicle", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildHead(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (motherVolume == 0) G4Exception("G4PhantomBuilder::BuildHead()", "human_phantom0025", FatalException, "The mother volume is missing !!!!!"); G4cout << "MotherVolume: " << motherVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; headVolume = body->CreateOrgan("Head", motherVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildSkull(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (headVolume == 0) G4Exception("G4PhantomBuilder::BuildSkull()", "human_phantom0026", FatalException, "The head volume is missing !!!!!"); G4cout << "MotherVolume: " << headVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("Skull", headVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildUpperSpine(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (headVolume == 0) G4Exception("G4PhantomBuilder::BuildUpperSpine()", "human_phantom0027", FatalException, "The head volume is missing !!!!!"); G4cout << "MotherVolume: " << headVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("UpperSpine", headVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildMiddleLowerSpine(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildMiddleLowerSpine()", "human_phantom0028", FatalException, "The trunk volume is missing !!!!!"); G4cout << "MotherVolume: " << trunkVolume->GetName() << G4endl; G4cout << "sensitivity : " << sensitivity << G4endl; body->CreateOrgan("MiddleLowerSpine", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildPelvis(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildPelvis()", "human_phantom0029", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("Pelvis", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildBrain(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (headVolume == 0) G4Exception("G4PhantomBuilder::BuildBrain()", "human_phantom0030", FatalException, "The head volume is missing !!!!!"); body->CreateOrgan("Brain", headVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildHeart(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildHeart()", "human_phantom0031", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("Heart", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLeftLung(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildLeftLung()", "human_phantom0032", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("LeftLung", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildRightLung(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildRightLung()", "human_phantom0033", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("RightLung", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildStomach(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildStomach()", "human_phantom0034", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("Stomach", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildRibCage(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildRibCage()", "human_phantom0035", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("RibCage", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildSpleen(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildSpleen()", "human_phantom0036", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("Spleen", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildUpperLargeIntestine(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildUpperLargeIntestine()", "human_phantom0037", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("UpperLargeIntestine", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLowerLargeIntestine(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildLowerLargeIntestine()", "human_phantom0038", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("LowerLargeIntestine", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildSmallIntestine(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildSamllIntestine()", "human_phantom0039", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("SmallIntestine", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLeftKidney(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildLeftKidney()", "human_phantom0040", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("LeftKidney", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildRightKidney(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildRightKidney()", "human_phantom0041", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("RightKidney", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLeftAdrenal(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildLeftAdrenal()", "human_phantom0042", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("LeftAdrenal", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildRightAdrenal(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildRightAdrenal()", "human_phantom0043", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("RightAdrenal", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildLiver(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildLiver()", "human_phantom0044", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("Liver", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildPancreas(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildPancreas()", "human_phantom0045", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("Pancreas", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildUrinaryBladder(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildUrinaryBladder()", "human_phantom0046", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("UrinaryBladder", trunkVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildThyroid(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (headVolume == 0) G4Exception("G4PhantomBuilder::BuildThyroid()", "human_phantom0047", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("Thyroid", headVolume, colourName, solidVis, sensitivity); } void G4PhantomBuilder::BuildThymus(const G4String& colourName, G4bool solidVis, G4bool sensitivity) { if (trunkVolume == 0) G4Exception("G4PhantomBuilder::BuildThymus()", "human_phantom0048", FatalException, "The trunk volume is missing !!!!!"); body->CreateOrgan("Thymus", trunkVolume, colourName, solidVis, sensitivity); } G4VPhysicalVolume* G4PhantomBuilder::GetPhantom() { return motherVolume; } void G4PhantomBuilder::SetMotherVolume(G4VPhysicalVolume* mother) { motherVolume = mother; } void G4PhantomBuilder::SetModel(G4String modelFlag) { model = modelFlag; if (model == "MIRD") body = new G4MIRDBodyFactory(); }