Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // 23 // 27 // ------------------------------------------- 24 // -------------------------------------------------------------- 28 // GEANT 4 - Brachytherapy exa 25 // GEANT 4 - Brachytherapy example 29 // ------------------------------------------- 26 // -------------------------------------------------------------- 30 // 27 // 31 // Code developed by: 28 // Code developed by: 32 // S.Guatelli 29 // S.Guatelli 33 // 30 // 34 // **************************************** 31 // ******************************************* 35 // * 32 // * * 36 // * BrachyDetectorConstructionLeipzig.c 33 // * BrachyDetectorConstructionLeipzig.cc * 37 // * 34 // * * 38 // **************************************** 35 // ******************************************* 39 // 36 // 40 #include "BrachyDetectorConstructionLeipzig.hh << 37 // >> 38 // $Id: BrachyDetectorConstructionLeipzig.cc,v 1.7 2003/12/09 15:29:58 gunter Exp $ >> 39 // GEANT4 tag $Name: geant4-08-00 $ >> 40 // >> 41 41 #include "globals.hh" 42 #include "globals.hh" 42 #include "G4SystemOfUnits.hh" << 43 #include "BrachyDetectorConstructionLeipzig.hh" 43 #include "G4CSGSolid.hh" 44 #include "G4CSGSolid.hh" 44 #include "G4Sphere.hh" 45 #include "G4Sphere.hh" >> 46 #include "G4MaterialPropertyVector.hh" >> 47 #include "G4SDManager.hh" >> 48 #include "G4SubtractionSolid.hh" 45 #include "G4RunManager.hh" 49 #include "G4RunManager.hh" >> 50 #include "G4MaterialPropertiesTable.hh" >> 51 #include "G4Material.hh" 46 #include "G4Box.hh" 52 #include "G4Box.hh" 47 #include "G4Tubs.hh" 53 #include "G4Tubs.hh" 48 #include "G4LogicalVolume.hh" 54 #include "G4LogicalVolume.hh" 49 #include "G4ThreeVector.hh" 55 #include "G4ThreeVector.hh" 50 #include "G4PVPlacement.hh" 56 #include "G4PVPlacement.hh" >> 57 #include "G4MaterialTable.hh" >> 58 #include "Randomize.hh" >> 59 #include "G4RunManager.hh" >> 60 #include "G4Element.hh" >> 61 #include "G4ElementTable.hh" >> 62 #include "G4PVParameterised.hh" 51 #include "G4Transform3D.hh" 63 #include "G4Transform3D.hh" 52 #include "G4RotationMatrix.hh" 64 #include "G4RotationMatrix.hh" >> 65 #include "G4FieldManager.hh" 53 #include "G4TransportationManager.hh" 66 #include "G4TransportationManager.hh" >> 67 #include "G4UnionSolid.hh" >> 68 #include "BrachyMaterial.hh" 54 #include "G4VisAttributes.hh" 69 #include "G4VisAttributes.hh" 55 #include "G4Colour.hh" 70 #include "G4Colour.hh" 56 #include "G4NistManager.hh" << 57 71 58 BrachyDetectorConstructionLeipzig::BrachyDetec << 72 // Leipzig Applicator ... 59 fCapsule(nullptr), fCapsuleTip(nullptr), fIrid << 73 60 fCapsuleLog(nullptr), fCapsuleTipLog(nullptr), << 74 BrachyDetectorConstructionLeipzig::BrachyDetectorConstructionLeipzig() 61 fApplicator2Log(nullptr), fCapsulePhys(nullptr << 75 : capsule(0),capsuleLog(0),capsulePhys(0), 62 fApplicator1Phys(nullptr), fApplicator2Phys(nu << 76 capsuleTip(0),capsuleTipLog(0),capsuleTipPhys(0), 63 {} << 77 iridiumCore(0),iridiumCoreLog(0),iridiumCorePhys(0), >> 78 applicator1(0),applicator1Log(0),applicator1Phys(0), >> 79 applicator2(0),applicator2Log(0),applicator2Phys(0) >> 80 { >> 81 pMaterial = new BrachyMaterial(); >> 82 } >> 83 >> 84 BrachyDetectorConstructionLeipzig::~BrachyDetectorConstructionLeipzig() >> 85 { >> 86 delete pMaterial; >> 87 } 64 88 65 void BrachyDetectorConstructionLeipzig::Const << 89 void BrachyDetectorConstructionLeipzig::ConstructLeipzig(G4VPhysicalVolume* mother) 66 { 90 { 67 G4Colour red (1.0, 0.0, 0.0) ; << 91 G4Colour red (1.0, 0.0, 0.0) ; 68 G4Colour lblue (0.0, 0.0, .75); << 92 69 << 93 G4Material* capsuleMat = pMaterial->GetMat("Stainless steel"); 70 G4NistManager* nist = G4NistManager::Instanc << 94 G4Material* iridium = pMaterial->GetMat("Iridium"); 71 G4Material* iridium = nist -> FindOrBuildMat << 95 G4Material* tungsten =pMaterial->GetMat("Tungsten"); 72 G4Material* tungsten = nist -> FindOrBuildMa << 73 << 74 // Stainless steel (Medical Physics, Vol 25, << 75 constexpr G4double d = 8.02*g/cm3; << 76 G4int Z; //atomic number of the element << 77 G4Element* elMn = nist -> FindOrBuildElement << 78 G4Element* elSi = nist -> FindOrBuildElement << 79 G4Element* elCr = nist -> FindOrBuildElement << 80 G4Element* elFe = nist -> FindOrBuildElement << 81 G4Element* elNi = nist -> FindOrBuildElement << 82 auto steel = new G4Material("Stainless steel << 83 steel -> AddElement(elMn, 0.02); << 84 steel -> AddElement(elSi, 0.01); << 85 steel -> AddElement(elCr, 0.19); << 86 steel -> AddElement(elNi, 0.10); << 87 steel -> AddElement(elFe, 0.68); << 88 96 89 //Iridium source ... 97 //Iridium source ... 90 98 91 fCapsule = new G4Tubs("Capsule",0,0.55*mm,3. << 99 capsule = new G4Tubs("Capsule",0,0.55*mm,3.725*mm,0.*deg,360.*deg); 92 fCapsuleLog = new G4LogicalVolume(fCapsule,s << 100 capsuleLog = new G4LogicalVolume(capsule,capsuleMat,"CapsuleLog"); 93 fCapsulePhys = new G4PVPlacement(nullptr, G4 << 101 capsulePhys = new G4PVPlacement(0, 94 fCapsuleLog, << 102 G4ThreeVector(0,0,-1.975*mm), 95 false,0, tru << 103 "CapsulePhys", >> 104 capsuleLog, >> 105 mother, //mother volume: phantom >> 106 false, >> 107 0); 96 108 97 // Capsule tip 109 // Capsule tip 98 fCapsuleTip = new G4Sphere("CapsuleTip",0.*m << 110 capsuleTip = new G4Sphere("CapsuleTip",0.*mm,0.55*mm,0.*deg,360.*deg,0.*deg,90.*deg); 99 fCapsuleTipLog = new G4LogicalVolume(fCapsul << 111 capsuleTipLog = new G4LogicalVolume(capsuleTip,capsuleMat,"CapsuleTipLog"); 100 fCapsuleTipPhys = new G4PVPlacement(nullptr, << 112 capsuleTipPhys = new G4PVPlacement(0, 101 fCapsule << 113 G4ThreeVector(0.,0.,1.75*mm), >> 114 "CapsuleTipPhys", >> 115 capsuleTipLog, >> 116 mother, >> 117 false, >> 118 0); 102 // Iridium core 119 // Iridium core 103 fIridiumCore = new G4Tubs("IrCore",0,0.30*mm << 120 104 fIridiumCoreLog = new G4LogicalVolume(fIridi << 121 iridiumCore = new G4Tubs("IrCore",0,0.30*mm,1.75*mm,0.*deg,360.*deg); 105 fIridiumCorePhys = new G4PVPlacement(nullptr << 122 iridiumCoreLog = new G4LogicalVolume(iridiumCore, 106 fIridium << 123 iridium, 107 << 124 "IridiumCoreLog"); 108 //Leipzig Applicator is modelled with two di << 125 iridiumCorePhys = new G4PVPlacement(0, 109 fApplicator1 = new G4Tubs("Appl1",5*mm,10.5* << 126 G4ThreeVector(0.,0.,1.975*mm), 110 fApplicator1Log = new G4LogicalVolume(fAppli << 127 "IridiumCorePhys", 111 fApplicator1Phys = new G4PVPlacement(nullptr << 128 iridiumCoreLog, 112 mother,f << 129 capsulePhys, 113 << 130 false, 114 fApplicator2 = new G4Tubs("Appl2",0.55*mm,5. << 131 0); 115 fApplicator2Log = new G4LogicalVolume(fAppli << 132 // Applicator 116 fApplicator2Phys = new G4PVPlacement(nullptr << 133 //Leipzig Applicator is given by two different volumes 117 "Appl2Ph << 134 118 << 135 applicator1 = new G4Tubs("Appl1",5*mm,10.5*mm,12*mm,0.*deg,360.*deg); 119 fSimpleCapsuleVisAtt = new G4VisAttributes(r << 136 applicator1Log = new G4LogicalVolume(applicator1,tungsten,"Appl1Log"); 120 fSimpleCapsuleVisAtt -> SetVisibility(true); << 137 applicator1Phys = new G4PVPlacement(0, 121 fSimpleCapsuleVisAtt -> SetForceWireframe(tr << 138 G4ThreeVector(0,0,4.0*mm), 122 fCapsuleLog -> SetVisAttributes(fSimpleCapsu << 139 "Appl1Phys", 123 << 140 applicator1Log, 124 fSimpleCapsuleTipVisAtt = new G4VisAttribute << 141 mother, 125 fSimpleCapsuleTipVisAtt -> SetVisibility(tru << 142 false, 126 fSimpleCapsuleTipVisAtt -> SetForceSolid(tru << 143 0); 127 fCapsuleTipLog -> SetVisAttributes(fSimpleCa << 144 128 fIridiumCoreLog -> SetVisAttributes(fSimpleC << 145 applicator2 = new G4Tubs("Appl2",0.55*mm,5.*mm,3.125*mm,0.*deg,360.*deg); 129 << 146 applicator2Log = new G4LogicalVolume(applicator2,tungsten,"Appl2"); 130 fApplicatorVisAtt = new G4VisAttributes(lblu << 147 applicator2Phys = new G4PVPlacement(0, 131 fApplicatorVisAtt -> SetVisibility(true); << 148 G4ThreeVector(0,0,-4.875*mm), 132 fApplicatorVisAtt -> SetForceWireframe(true) << 149 "Appl2Phys", 133 fApplicator1Log -> SetVisAttributes(fApplica << 150 applicator2Log, 134 fApplicator2Log -> SetVisAttributes(fApplica << 151 mother, 135 } << 152 false, 136 void BrachyDetectorConstructionLeipzig::CleanL << 153 0); 137 { << 154 138 delete fApplicatorVisAtt; fApplicatorVisAtt = << 155 G4VisAttributes* simpleCapsuleVisAtt= new G4VisAttributes(red); 139 delete fSimpleCapsuleTipVisAtt; fSimpleCapsule << 156 simpleCapsuleVisAtt->SetVisibility(true); 140 delete fSimpleCapsuleVisAtt; fSimpleCapsuleVis << 157 simpleCapsuleVisAtt->SetForceSolid(true); 141 delete fApplicator2Phys; fApplicator2Phys = nu << 158 capsuleLog->SetVisAttributes(simpleCapsuleVisAtt); 142 delete fApplicator1Phys; fApplicator1Phys = nu << 159 143 delete fIridiumCorePhys; fIridiumCorePhys = nu << 160 G4VisAttributes* simpleCapsuleTipVisAtt= new G4VisAttributes(red); 144 delete fCapsuleTipPhys; fCapsuleTipPhys = null << 161 simpleCapsuleTipVisAtt->SetVisibility(true); 145 delete fCapsulePhys; fCapsulePhys = nullptr; << 162 simpleCapsuleTipVisAtt->SetForceSolid(true); 146 delete fApplicator2Log; fApplicator2Log = null << 163 capsuleTipLog->SetVisAttributes(simpleCapsuleTipVisAtt); 147 delete fApplicator1Log; fApplicator1Log = null << 148 delete fIridiumCoreLog; fIridiumCoreLog = null << 149 delete fCapsuleTipLog; fCapsuleTipLog = nullpt << 150 delete fCapsuleLog; fCapsuleLog = nullptr; << 151 } 164 } 152 165