ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
DetectorConstruction.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file DetectorConstruction.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
//
28
//
29
//
30
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
31
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
32
33
#include "DetectorConstruction.hh"
34
#include "DetectorMessenger.hh"
35
36
#include "
G4Material.hh
"
37
#include "
G4NistManager.hh
"
38
#include "
G4Box.hh
"
39
#include "
G4LogicalVolume.hh
"
40
#include "
G4PVPlacement.hh
"
41
42
#include "
G4GeometryManager.hh
"
43
#include "
G4PhysicalVolumeStore.hh
"
44
#include "
G4LogicalVolumeStore.hh
"
45
#include "
G4SolidStore.hh
"
46
47
#include "
G4UnitsTable.hh
"
48
#include "
G4SystemOfUnits.hh
"
49
50
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
51
52
DetectorConstruction::DetectorConstruction
()
53
:
G4VUserDetectorConstruction
(),fPBox(0), fLBox(0), fMaterial(0),
54
fDetectorMessenger(0)
55
{
56
fBoxSize
= 1*
cm
;
57
DefineMaterials
();
58
SetMaterial
(
"Water"
);
59
fDetectorMessenger
=
new
DetectorMessenger
(
this
);
60
}
61
62
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
63
64
DetectorConstruction::~DetectorConstruction
()
65
{
delete
fDetectorMessenger
;}
66
67
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
68
69
G4VPhysicalVolume
*
DetectorConstruction::Construct
()
70
{
71
return
ConstructVolumes
();
72
}
73
74
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
75
76
void
DetectorConstruction::DefineMaterials
()
77
{
78
//
79
// define Elements
80
//
81
G4double
z
,
a
;
82
83
G4Element
*
H
=
new
G4Element
(
"Hydrogen"
,
"H"
, z= 1., a= 1.01*
g
/
mole
);
84
G4Element
*
N
=
new
G4Element
(
"Nitrogen"
,
"N"
, z= 7., a= 14.01*
g
/
mole
);
85
G4Element
* O =
new
G4Element
(
"Oxygen"
,
"O"
, z= 8., a= 16.00*
g
/
mole
);
86
87
//
88
// define materials
89
//
90
G4double
density;
91
G4int
ncomponents, natoms;
92
G4double
fractionmass;
93
94
G4Material
* Air =
95
new
G4Material
(
"Air"
, density= 1.290*
mg
/
cm3
, ncomponents=2);
96
Air->
AddElement
(N, fractionmass=70.*
perCent
);
97
Air->
AddElement
(O, fractionmass=30.*
perCent
);
98
99
G4Material
* H2O =
100
new
G4Material
(
"Water"
, density= 1.000*
g
/
cm3
, ncomponents=2);
101
H2O->
AddElement
(H, natoms=2);
102
H2O->
AddElement
(O, natoms=1);
103
H2O->
GetIonisation
()->
SetMeanExcitationEnergy
(78.0*
eV
);
104
105
G4Material
* vapor =
106
new
G4Material
(
"Water_vapor"
, density= 1.000*
mg
/
cm3
, ncomponents=2);
107
vapor->
AddElement
(H, natoms=2);
108
vapor->
AddElement
(O, natoms=1);
109
vapor->
GetIonisation
()->
SetMeanExcitationEnergy
(78.0*
eV
);
110
111
new
G4Material
(
"Carbon"
, z=6., a= 12.01*
g
/
mole
, density= 2.267*
g
/
cm3
);
112
new
G4Material
(
"Aluminium"
, z=13., a= 26.98*
g
/
mole
, density= 2.700*
g
/
cm3
);
113
new
G4Material
(
"Silicon"
, z=14., a= 28.09*
g
/
mole
, density= 2.330*
g
/
cm3
);
114
new
G4Material
(
"liquidArgon"
, z=18., a= 39.95*
g
/
mole
, density= 1.390*
g
/
cm3
);
115
new
G4Material
(
"Iron"
, z=26., a= 55.85*
g
/
mole
, density= 7.870*
g
/
cm3
);
116
new
G4Material
(
"Germanium"
, z=32., a= 72.61*
g
/
mole
, density= 5.323*
g
/
cm3
);
117
new
G4Material
(
"Tungsten"
, z=74., a=183.85*
g
/
mole
, density= 19.30*
g
/
cm3
);
118
new
G4Material
(
"Lead"
, z=82., a=207.19*
g
/
mole
, density= 11.35*
g
/
cm3
);
119
120
new
G4Material
(
"ArgonGas"
, z=18., a=39.948*
g
/
mole
, density= 1.782*
mg
/
cm3
,
121
kStateGas
, 273.15*
kelvin
, 1*
atmosphere
);
122
124
}
125
126
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
127
128
G4VPhysicalVolume
*
DetectorConstruction::ConstructVolumes
()
129
{
130
// Cleanup old geometry
131
G4GeometryManager::GetInstance
()->
OpenGeometry
();
132
G4PhysicalVolumeStore::GetInstance
()->
Clean
();
133
G4LogicalVolumeStore::GetInstance
()->
Clean
();
134
G4SolidStore::GetInstance
()->
Clean
();
135
136
G4Box
*
137
sBox =
new
G4Box
(
"Container"
,
//its name
138
fBoxSize
/2,
fBoxSize
/2,
fBoxSize
/2);
//its dimensions
139
140
fLBox
=
new
G4LogicalVolume
(sBox,
//its shape
141
fMaterial
,
//its material
142
fMaterial
->
GetName
());
//its name
143
144
fPBox
=
new
G4PVPlacement
(0,
//no rotation
145
G4ThreeVector
(),
//at (0,0,0)
146
fLBox
,
//its logical volume
147
fMaterial
->
GetName
(),
//its name
148
0,
//its mother volume
149
false
,
//no boolean operation
150
0);
//copy number
151
152
PrintParameters
();
153
154
//always return the root volume
155
//
156
return
fPBox
;
157
}
158
159
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
160
161
void
DetectorConstruction::PrintParameters
()
162
{
163
G4cout
<<
"\n The Box is "
<<
G4BestUnit
(
fBoxSize
,
"Length"
)
164
<<
" of "
<<
fMaterial
->
GetName
()
165
<<
"\n "
<<
fMaterial
<<
G4endl
;
166
}
167
168
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
169
170
void
DetectorConstruction::SetMaterial
(
const
G4String
&
name
)
171
{
172
// search the material by its name
173
G4Material
*
mat
=
G4Material::GetMaterial
(name,
false
);
174
175
// create the material by its name
176
if
(!mat) { mat =
G4NistManager::Instance
()->
FindOrBuildMaterial
(name); }
177
178
if
(mat && mat !=
fMaterial
) {
179
G4cout
<<
"### New material "
<< mat->
GetName
() <<
G4endl
;
180
fMaterial
=
mat
;
181
UpdateGeometry
();
182
}
183
184
if
(!mat) {
185
G4cout
<<
"\n--> warning from DetectorConstruction::SetMaterial : "
186
<< name <<
" not found"
<<
G4endl
;
187
}
188
}
189
190
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
191
192
void
DetectorConstruction::SetSize
(
G4double
value
)
193
{
194
fBoxSize
=
value
;
195
UpdateGeometry
();
196
}
197
198
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
199
200
#include "
G4RunManager.hh
"
201
202
void
DetectorConstruction::UpdateGeometry
()
203
{
204
G4RunManager::GetRunManager
()->
GeometryHasBeenModified
();
205
}
206
207
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
examples
extended
electromagnetic
TestEm18
src
DetectorConstruction.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:49
using
1.8.2 with
ECCE GitHub integration