ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BrachyDetectorConstructionLeipzig.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file BrachyDetectorConstructionLeipzig.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
33 //
34 // *******************************************
35 // * *
36 // * BrachyDetectorConstructionLeipzig.cc *
37 // * *
38 // *******************************************
39 //
40 //
41 //
42 // Code by S. Guatelli
43 //
44 #include "globals.hh"
45 #include "G4SystemOfUnits.hh"
47 #include "G4CSGSolid.hh"
48 #include "G4Sphere.hh"
49 #include "G4RunManager.hh"
50 #include "G4Box.hh"
51 #include "G4Tubs.hh"
52 #include "G4LogicalVolume.hh"
53 #include "G4ThreeVector.hh"
54 #include "G4PVPlacement.hh"
55 #include "G4Transform3D.hh"
56 #include "G4RotationMatrix.hh"
58 #include "BrachyMaterial.hh"
59 #include "G4VisAttributes.hh"
60 #include "G4Colour.hh"
61 
62 // Leipzig Applicator ...
63 
65 capsule(0),capsuleTip(0), iridiumCore(0), applicator1(0), applicator2(0),
66 capsuleLog(0), capsuleTipLog(0), iridiumCoreLog(0), applicator1Log(0),
67 applicator2Log(0),capsulePhys(0), capsuleTipPhys(0),iridiumCorePhys(0),
68 applicator1Phys(0), applicator2Phys(0)
69 {
70  pMaterial = new BrachyMaterial();
71 }
72 
74 {
75  delete pMaterial;
76 }
77 
79 {
80  G4Colour red (1.0, 0.0, 0.0) ;
81  G4Colour lblue (0.0, 0.0, .75);
82 
83  G4Material* capsuleMat = pMaterial -> GetMat("Stainless steel");
84  G4Material* iridium = pMaterial -> GetMat("Iridium");
85  G4Material* tungsten = pMaterial -> GetMat("Tungsten");
86 
87  //Iridium source ...
88 
89  capsule = new G4Tubs("Capsule",0,0.55*mm,3.725*mm,0.*deg,360.*deg);
90  capsuleLog = new G4LogicalVolume(capsule,capsuleMat,"CapsuleLog");
91  capsulePhys = new G4PVPlacement(0, G4ThreeVector(0,0,-1.975*mm),"CapsulePhys",
92  capsuleLog,mother, //mother volume: phantom
93  false,0, true);
94 
95  // Capsule tip
96  capsuleTip = new G4Sphere("CapsuleTip",0.*mm,0.55*mm,0.*deg,360.*deg,0.*deg,90.*deg);
97  capsuleTipLog = new G4LogicalVolume(capsuleTip,capsuleMat,"CapsuleTipLog");
98  capsuleTipPhys = new G4PVPlacement(0,G4ThreeVector(0.,0.,1.75*mm),"CapsuleTipPhys",
99  capsuleTipLog,mother,false,0, true);
100  // Iridium core
101  iridiumCore = new G4Tubs("IrCore",0,0.30*mm,1.75*mm,0.*deg,360.*deg);
102  iridiumCoreLog = new G4LogicalVolume(iridiumCore, iridium, "IridiumCoreLog");
103  iridiumCorePhys = new G4PVPlacement(0,G4ThreeVector(0.,0.,1.975*mm),"IridiumCorePhys",
104  iridiumCoreLog,capsulePhys,false,0, true);
105 
106  //Leipzig Applicator is modelled with two different volumes
107  applicator1 = new G4Tubs("Appl1",5*mm,10.5*mm,12*mm,0.*deg,360.*deg);
108  applicator1Log = new G4LogicalVolume(applicator1,tungsten,"Appl1Log");
109  applicator1Phys = new G4PVPlacement(0,G4ThreeVector(0,0,4.0*mm),"Appl1Phys",applicator1Log,
110  mother,false,0, true);
111 
112  applicator2 = new G4Tubs("Appl2",0.55*mm,5.*mm,3.125*mm,0.*deg,360.*deg);
113  applicator2Log = new G4LogicalVolume(applicator2,tungsten,"Appl2");
114  applicator2Phys = new G4PVPlacement(0,G4ThreeVector(0,0,-4.875*mm),
115  "Appl2Phys",applicator2Log,mother,false,0, true);
116 
118  simpleCapsuleVisAtt -> SetVisibility(true);
119  simpleCapsuleVisAtt -> SetForceWireframe(true);
120  capsuleLog -> SetVisAttributes(simpleCapsuleVisAtt);
121 
123  simpleCapsuleTipVisAtt -> SetVisibility(true);
124  simpleCapsuleTipVisAtt -> SetForceSolid(true);
125  capsuleTipLog -> SetVisAttributes(simpleCapsuleTipVisAtt);
126  iridiumCoreLog -> SetVisAttributes(simpleCapsuleTipVisAtt);
127 
128  applicatorVisAtt = new G4VisAttributes(lblue);
129  applicatorVisAtt -> SetVisibility(true);
130  applicatorVisAtt -> SetForceWireframe(true);
131  applicator1Log -> SetVisAttributes(applicatorVisAtt);
132  applicator2Log -> SetVisAttributes(applicatorVisAtt);
133 }
135 {
139 delete applicator2Phys; applicator2Phys = 0;
140 delete applicator1Phys; applicator1Phys = 0;
141 delete iridiumCorePhys; iridiumCorePhys = 0;
142 delete capsuleTipPhys; capsuleTipPhys = 0;
143 delete capsulePhys; capsulePhys = 0;
144 delete applicator2Log; applicator2Log = 0;
145 delete applicator1Log; applicator1Log = 0;
146 delete iridiumCoreLog; iridiumCoreLog = 0;
147 delete capsuleTipLog; capsuleTipLog = 0;
148 delete capsuleLog; capsuleLog = 0;
149 }