Geant4  10.02.p01
B1DetectorConstruction.cc
Go to the documentation of this file.
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 // $Id: B1DetectorConstruction.cc 94307 2015-11-11 13:42:46Z gcosmo $
27 //
30 
31 #include "B1DetectorConstruction.hh"
32 
33 #include "G4RunManager.hh"
34 #include "G4NistManager.hh"
35 #include "G4Box.hh"
36 #include "G4Cons.hh"
37 #include "G4Orb.hh"
38 #include "G4Sphere.hh"
39 #include "G4Trd.hh"
40 #include "G4LogicalVolume.hh"
41 #include "G4PVPlacement.hh"
42 #include "G4SystemOfUnits.hh"
43 
44 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
45 
48  fScoringVolume(0)
49 { }
50 
51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
52 
54 { }
55 
56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
57 
59 {
60  // Get nist material manager
62 
63  // Envelope parameters
64  //
65  G4double env_sizeXY = 20*cm, env_sizeZ = 30*cm;
66  G4Material* env_mat = nist->FindOrBuildMaterial("G4_WATER");
67 
68  // Option to switch on/off checking of volumes overlaps
69  //
70  G4bool checkOverlaps = true;
71 
72  //
73  // World
74  //
75  G4double world_sizeXY = 1.2*env_sizeXY;
76  G4double world_sizeZ = 1.2*env_sizeZ;
77  G4Material* world_mat = nist->FindOrBuildMaterial("G4_AIR");
78 
79  G4Box* solidWorld =
80  new G4Box("World", //its name
81  0.5*world_sizeXY, 0.5*world_sizeXY, 0.5*world_sizeZ); //its size
82 
83  G4LogicalVolume* logicWorld =
84  new G4LogicalVolume(solidWorld, //its solid
85  world_mat, //its material
86  "World"); //its name
87 
88  G4VPhysicalVolume* physWorld =
89  new G4PVPlacement(0, //no rotation
90  G4ThreeVector(), //at (0,0,0)
91  logicWorld, //its logical volume
92  "World", //its name
93  0, //its mother volume
94  false, //no boolean operation
95  0, //copy number
96  checkOverlaps); //overlaps checking
97 
98  //
99  // Envelope
100  //
101  G4Box* solidEnv =
102  new G4Box("Envelope", //its name
103  0.5*env_sizeXY, 0.5*env_sizeXY, 0.5*env_sizeZ); //its size
104 
105  G4LogicalVolume* logicEnv =
106  new G4LogicalVolume(solidEnv, //its solid
107  env_mat, //its material
108  "Envelope"); //its name
109 
110  new G4PVPlacement(0, //no rotation
111  G4ThreeVector(), //at (0,0,0)
112  logicEnv, //its logical volume
113  "Envelope", //its name
114  logicWorld, //its mother volume
115  false, //no boolean operation
116  0, //copy number
117  checkOverlaps); //overlaps checking
118 
119  //
120  // Shape 1
121  //
122  G4Material* shape1_mat = nist->FindOrBuildMaterial("G4_A-150_TISSUE");
123  G4ThreeVector pos1 = G4ThreeVector(0, 2*cm, -7*cm);
124 
125  // Conical section shape
126  G4double shape1_rmina = 0.*cm, shape1_rmaxa = 2.*cm;
127  G4double shape1_rminb = 0.*cm, shape1_rmaxb = 4.*cm;
128  G4double shape1_hz = 3.*cm;
129  G4double shape1_phimin = 0.*deg, shape1_phimax = 360.*deg;
130  G4Cons* solidShape1 =
131  new G4Cons("Shape1",
132  shape1_rmina, shape1_rmaxa, shape1_rminb, shape1_rmaxb, shape1_hz,
133  shape1_phimin, shape1_phimax);
134 
135  G4LogicalVolume* logicShape1 =
136  new G4LogicalVolume(solidShape1, //its solid
137  shape1_mat, //its material
138  "Shape1"); //its name
139 
140  new G4PVPlacement(0, //no rotation
141  pos1, //at position
142  logicShape1, //its logical volume
143  "Shape1", //its name
144  logicEnv, //its mother volume
145  false, //no boolean operation
146  0, //copy number
147  checkOverlaps); //overlaps checking
148 
149  //
150  // Shape 2
151  //
152  G4Material* shape2_mat = nist->FindOrBuildMaterial("G4_BONE_COMPACT_ICRU");
153  G4ThreeVector pos2 = G4ThreeVector(0, -1*cm, 7*cm);
154 
155  // Trapezoid shape
156  G4double shape2_dxa = 12*cm, shape2_dxb = 12*cm;
157  G4double shape2_dya = 10*cm, shape2_dyb = 16*cm;
158  G4double shape2_dz = 6*cm;
159  G4Trd* solidShape2 =
160  new G4Trd("Shape2", //its name
161  0.5*shape2_dxa, 0.5*shape2_dxb,
162  0.5*shape2_dya, 0.5*shape2_dyb, 0.5*shape2_dz); //its size
163 
164  G4LogicalVolume* logicShape2 =
165  new G4LogicalVolume(solidShape2, //its solid
166  shape2_mat, //its material
167  "Shape2"); //its name
168 
169  new G4PVPlacement(0, //no rotation
170  pos2, //at position
171  logicShape2, //its logical volume
172  "Shape2", //its name
173  logicEnv, //its mother volume
174  false, //no boolean operation
175  0, //copy number
176  checkOverlaps); //overlaps checking
177 
178  // Set Shape2 as scoring volume
179  //
180  fScoringVolume = logicShape2;
181 
182  //
183  //always return the physical World
184  //
185  return physWorld;
186 }
187 
188 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
static const double cm
Definition: G4SIunits.hh:118
G4LogicalVolume * fScoringVolume
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
CLHEP::Hep3Vector G4ThreeVector
Definition: G4Box.hh:64
Definition: G4Trd.hh:72
static G4NistManager * Instance()
static const double deg
Definition: G4SIunits.hh:151
bool G4bool
Definition: G4Types.hh:79
Definition: G4Cons.hh:83
virtual G4VPhysicalVolume * Construct()
double G4double
Definition: G4Types.hh:76