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