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  //
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......