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
RMC01DetectorConstruction.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file RMC01DetectorConstruction.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
//
31
// Class Name: RMC01DetectorConstruction
32
// Author: L. Desorgher
33
// Organisation: SpaceIT GmbH
34
// Contract: ESA contract 21435/08/NL/AT
35
// Customer: ESA/ESTEC
37
38
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
39
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
40
41
#include "
RMC01DetectorConstruction.hh
"
42
#include "
RMC01DetectorMessenger.hh
"
43
44
#include "
G4Material.hh
"
45
#include "
G4Box.hh
"
46
#include "
G4Orb.hh
"
47
#include "
G4Tubs.hh
"
48
#include "
G4LogicalVolume.hh
"
49
#include "
G4PVPlacement.hh
"
50
#include "
G4GeometryManager.hh
"
51
#include "
G4PhysicalVolumeStore.hh
"
52
#include "
G4LogicalVolumeStore.hh
"
53
#include "
G4SolidStore.hh
"
54
#include "
G4VisAttributes.hh
"
55
#include "
G4Colour.hh
"
56
57
#include "
G4SDManager.hh
"
58
#include "
G4RunManager.hh
"
59
#include "
G4PhysicalConstants.hh
"
60
#include "
G4SystemOfUnits.hh
"
61
#include "
RMC01SD.hh
"
62
63
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
64
65
RMC01DetectorConstruction::RMC01DetectorConstruction
()
66
:
G4VUserDetectorConstruction
(),
67
fDetectorMessenger(0),
68
fShield_Thickness(5.*
mm
),
69
fSensitive_cylinder_H (1.*
mm
),
70
fSensitive_cylinder_Rout (1.*
mm
)
71
{
72
fDetectorMessenger
=
new
RMC01DetectorMessenger
(
this
);
73
}
74
75
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
76
77
RMC01DetectorConstruction::~RMC01DetectorConstruction
()
78
{
delete
fDetectorMessenger
;
79
}
80
81
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
82
83
G4VPhysicalVolume
*
RMC01DetectorConstruction::Construct
()
84
{
85
DefineMaterials
();
86
return
ConstructSimpleGeometry
();
87
}
88
89
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
90
91
void
RMC01DetectorConstruction::DefineMaterials
()
92
{
93
94
G4String
symbol;
//a=mass of a mole;
95
G4double
a
,
z
, density;
//z=mean number of protons;
96
G4double
fractionmass;
97
G4int
ncomponents;
98
99
//
100
// define Elements
101
//
102
103
G4Element
*
N
=
new
G4Element
(
"Nitrogen"
,symbol=
"N"
, z= 7., a= 14.01*
g
/
mole
);
104
G4Element
* O =
new
G4Element
(
"Oxygen"
,symbol=
"O"
, z= 8., a= 16.00*
g
/
mole
);
105
106
//
107
// define simple materials
108
//
109
110
new
G4Material
(
"Aluminum"
, z=13., a=26.98*
g
/
mole
, density=2.700*
g
/
cm3
);
111
new
G4Material
(
"Silicon"
, z=14., a=28.09*
g
/
mole
, density=2.33*
g
/
cm3
);
112
new
G4Material
(
"Tantalum"
, z=73., a=180.9479*
g
/
mole
, density=16.654*
g
/
cm3
);
113
114
//
115
// define air
116
//
117
118
G4Material
* Air =
new
G4Material
(
"Air"
, density= 1.290*
mg
/
cm3
, ncomponents=2);
119
Air->
AddElement
(N, fractionmass=0.7);
120
Air->
AddElement
(O, fractionmass=0.3);
121
122
//
123
//Example of Vacuum
124
//
125
126
new
G4Material
(
"Vacuum"
, z=1., a=1.01*
g
/
mole
,density=
universe_mean_density
,
127
kStateGas
, 3.
e
-18*
pascal
, 2.73*
kelvin
);
128
}
129
130
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
131
132
G4VPhysicalVolume
*
RMC01DetectorConstruction::ConstructSimpleGeometry
()
133
{
134
135
// Clean old geometry, if any
136
137
G4GeometryManager::GetInstance
()->
OpenGeometry
();
138
G4PhysicalVolumeStore::GetInstance
()->
Clean
();
139
G4LogicalVolumeStore::GetInstance
()->
Clean
();
140
G4SolidStore::GetInstance
()->
Clean
();
141
142
// World
143
//-----------
144
145
G4Box
* solidWorld =
new
G4Box
(
"World"
,15.*
cm
, 15.*
cm
, 15.*
cm
);
146
G4LogicalVolume
* logicWorld =
new
G4LogicalVolume
(solidWorld,
147
G4Material::GetMaterial
(
"Vacuum"
),
148
"World"
);
149
150
G4VPhysicalVolume
* physiWorld =
new
G4PVPlacement
(0,
//no rotation
151
G4ThreeVector
(),
//at (0,0,0)
152
logicWorld,
//its logical volume
153
"World"
,
//its name
154
0,
//its mother volume
155
false
,
//no boolean operation
156
0);
157
158
//Shielding Aluminum Sphere
159
//-------------------
160
161
G4double
radiusShieldingSphere =10.*
cm
;
162
163
G4Orb
* solidShieldingSphere=
new
G4Orb
(
"Shielding"
, radiusShieldingSphere);
164
G4LogicalVolume
* logicShieldingSphere=
165
new
G4LogicalVolume
(solidShieldingSphere,
166
G4Material::GetMaterial
(
"Aluminum"
),
167
"Shielding"
);
//its name;
168
169
new
G4PVPlacement
(0,
//no rotation
170
G4ThreeVector
(),
//at (0,0,0)
171
logicShieldingSphere,
//its logical volume
172
"Shielding"
,
//its name
173
logicWorld,
//its mother volume
174
false
,
//no boolean operation
175
0);
176
177
//Bulk Sphere
178
//-------------------
179
180
G4Orb
* solidBulkSphere=
new
G4Orb
(
"Bulk"
,
181
radiusShieldingSphere-
fShield_Thickness
);
182
G4LogicalVolume
* logicBulkSphere=
new
G4LogicalVolume
(
183
solidBulkSphere,
//its solid
184
G4Material::GetMaterial
(
"Air"
),
//its material
185
"Bulk"
);
//its name;
186
187
new
G4PVPlacement
(0,
//no rotation
188
G4ThreeVector
(),
//at (0,0,0)
189
logicBulkSphere,
//its logical volume
190
"Bulk"
,
//its name
191
logicShieldingSphere,
//its mother volume
192
false
,
//no boolean operation
193
0);
194
195
//Detecting cylinder
196
//-------------------
197
198
G4Tubs
* solidDetecting=
new
G4Tubs
(
"SensitiveVolume"
,
199
0.,
fSensitive_cylinder_Rout
,
fSensitive_cylinder_H
/2.,
200
0.,
twopi
);
201
202
G4LogicalVolume
* logicDetectingCylinder=
new
G4LogicalVolume
(solidDetecting,
203
G4Material::GetMaterial
(
"Silicon"
),
204
"SensitiveVolume"
);
205
206
new
G4PVPlacement
(0,
//no rotation
207
G4ThreeVector
(0.,0.,0.),
//at (0,0,0)
208
logicDetectingCylinder,
//its logical volume
209
"SensitiveVolume"
,
//its name
210
logicBulkSphere,
//its mother volume
211
false
,
//no boolean operation
212
0);
213
214
215
RMC01SD
* theSensitiveDetector =
new
RMC01SD
(
"/SensitiveCylinder"
);
216
217
G4SDManager::GetSDMpointer
()->
AddNewDetector
(theSensitiveDetector);
218
logicDetectingCylinder->
SetSensitiveDetector
(theSensitiveDetector);
219
220
//Tantalum Plates on the top and beside
221
//-------------------------------------
222
G4Box
* solidPlate=
new
G4Box
(
"TantalumPlate"
,4.*
cm
,4.*
cm
,0.25*
mm
);
223
G4LogicalVolume
* logicPlate=
new
G4LogicalVolume
(solidPlate,
//its solid
224
G4Material::GetMaterial
(
"Tantalum"
),
//its material
225
"TantalumPlate"
);
//its name;
226
227
228
new
G4PVPlacement
(0,
//no rotation
229
G4ThreeVector
(0.,0.,6.*
cm
),
//at (0,0,0)
230
logicPlate,
//its logical volume
231
"TantalumPlate1"
,
//its name
232
logicBulkSphere,
//its mother volume
233
false
,
//no boolean operation
234
0);
235
236
new
G4PVPlacement
(0,
//no rotation
237
G4ThreeVector
(0.,0.,-6.*
cm
),
//at (0,0,0)
238
logicPlate,
//its logical volume
239
"TantalumPlate2"
,
//its name
240
logicBulkSphere,
//its mother volume
241
false
,
//no boolean operation
242
0);
243
244
return
physiWorld;
245
246
}
247
248
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
249
250
void
RMC01DetectorConstruction::SetSensitiveVolumeRadius
(
G4double
r
)
251
{
fSensitive_cylinder_Rout
=
r
;
252
}
253
254
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
255
256
void
RMC01DetectorConstruction::SetSensitiveVolumeHeight
(
G4double
h
)
257
{
fSensitive_cylinder_H
=
h
;
258
}
259
260
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
261
262
void
RMC01DetectorConstruction::SetShieldingThickness
(
G4double
d
)
263
{
fShield_Thickness
=
d
;
264
}
265
266
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
examples
extended
biasing
ReverseMC01
src
RMC01DetectorConstruction.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:03
using
1.8.2 with
ECCE GitHub integration