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
G4Material.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4Material.hh
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
//---------------------------------------------------------------------------
27
//
28
// ClassName: G4Material
29
//
30
// Description: Contains material properties
31
//
32
// Class description:
33
//
34
// Is used to define the material composition of Geant4 volumes.
35
// A G4Material is always made of G4Elements. It should has the name,
36
// the list of G4Elements, material density, material state, temperature,
37
// pressure. Other parameters are optional and may be set by the user code
38
// or computed at initialisation.
39
//
40
// There is several ways to construct G4Material:
41
// - from single element;
42
// - from a list of components (elements or other materials);
43
// - from internal Geant4 database of materials
44
//
45
// A collection of constituent Elements/Materials should be defined
46
// with specified weights by fractional mass or atom counts (only for Elements).
47
//
48
// Quantities, with physical meaning or not, which are constant in a given
49
// material are computed and stored here as Derived data members.
50
//
51
// The class contains as a private static member the Table of defined
52
// materials (an ordered vector of materials).
53
//
54
// It is strongly not recommended to delete materials in user code.
55
// All materials will be deleted automatically at the end of Geant4 session.
56
//
57
58
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
59
60
// 10-07-96, new data members added by L.Urban
61
// 12-12-96, new data members added by L.Urban
62
// 20-01-97, aesthetic rearrangement. RadLength calculation modified
63
// Data members Zeff and Aeff REMOVED (i.e. passed to the Elements).
64
// (local definition of Zeff in DensityEffect and FluctModel...)
65
// Vacuum defined as a G4State. Mixture flag removed, M.Maire
66
// 29-01-97, State=Vacuum automatically set density=0 in the contructors.
67
// Subsequent protections have been put in the calculation of
68
// MeanExcEnergy, ShellCorrectionVector, DensityEffect, M.Maire
69
// 20-03-97, corrected initialization of pointers, M.Maire
70
// 10-06-97, new data member added by V.Grichine (fSandiaPhotoAbsCof)
71
// 27-06-97, new function GetElement(int), M.Maire
72
// 24-02-98, fFractionVector become fMassFractionVector
73
// 28-05-98, kState=kVacuum removed:
74
// The vacuum is an ordinary gas vith very low density, M.Maire
75
// 12-06-98, new method AddMaterial() allowing mixture of materials, M.Maire
76
// 09-07-98, Ionisation parameters removed from the class, M.Maire
77
// 04-08-98, new method GetMaterial(materialName), M.Maire
78
// 05-10-98, change name: NumDensity -> NbOfAtomsPerVolume
79
// 18-11-98, SandiaTable interface modified.
80
// 19-07-99, new data member (chemicalFormula) added by V.Ivanchenko
81
// 12-03-01, G4bool fImplicitElement (mma)
82
// 30-03-01, suppression of the warning message in GetMaterial
83
// 17-07-01, migration to STL. M. Verderi.
84
// 14-09-01, Suppression of the data member fIndexInTable
85
// 31-10-01, new function SetChemicalFormula() (mma)
86
// 26-02-02, fIndexInTable renewed
87
// 06-08-02, remove constructors with ChemicalFormula (mma)
88
// 15-11-05, GetMaterial(materialName, G4bool warning=true)
89
// 13-04-12, std::map<G4Material*,G4double> fMatComponents (mma)
90
// 21-04-12, fMassOfMolecule (mma)
91
92
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
93
94
#ifndef G4MATERIAL_HH
95
#define G4MATERIAL_HH 1
96
97
#include <vector>
98
#include <map>
99
#include <
CLHEP/Units/PhysicalConstants.h
>
100
101
#include "
globals.hh
"
102
#include "
G4ios.hh
"
103
#include "
G4Element.hh
"
104
#include "
G4MaterialPropertiesTable.hh
"
105
#include "
G4IonisParamMat.hh
"
106
#include "
G4SandiaTable.hh
"
107
#include "
G4ElementVector.hh
"
108
#include "
G4MaterialTable.hh
"
109
#include "
G4Threading.hh
"
110
111
enum
G4State
{
kStateUndefined
= 0,
kStateSolid
,
kStateLiquid
,
kStateGas
};
112
113
static
const
G4double
NTP_Temperature
= 293.15*
CLHEP::kelvin
;
114
115
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
116
117
class
G4Material
118
{
119
public
:
// with description
120
//
121
// Constructor to create a material from single element
122
//
123
G4Material
(
const
G4String
&
name
,
//its name
124
G4double
z
,
//atomic number
125
G4double
a
,
//mass of mole
126
G4double
density,
//density
127
G4State
state =
kStateUndefined
,
//solid,gas
128
G4double
temp =
NTP_Temperature
,
//temperature
129
G4double
pressure =
CLHEP::STP_Pressure
);
//pressure
130
131
//
132
// Constructor to create a material from a combination of elements
133
// and/or materials subsequently added via AddElement and/or AddMaterial
134
//
135
G4Material
(
const
G4String
& name,
//its name
136
G4double
density,
//density
137
G4int
nComponents,
//nbOfComponents
138
G4State
state =
kStateUndefined
,
//solid,gas
139
G4double
temp =
NTP_Temperature
,
//temperature
140
G4double
pressure =
CLHEP::STP_Pressure
);
//pressure
141
142
//
143
// Constructor to create a material from the base material
144
//
145
G4Material
(
const
G4String
& name,
//its name
146
G4double
density,
//density
147
const
G4Material
* baseMaterial,
//base material
148
G4State
state =
kStateUndefined
,
//solid,gas
149
G4double
temp =
NTP_Temperature
,
//temperature
150
G4double
pressure =
CLHEP::STP_Pressure
);
//pressure
151
152
//
153
// Add an element, giving number of atoms
154
//
155
void
AddElement
(
G4Element
* element,
//the element
156
G4int
nAtoms);
//nb of atoms in
157
// a molecule
158
//
159
// Add an element or material, giving fraction of mass
160
//
161
void
AddElement
(
G4Element
* element ,
//the element
162
G4double
fraction);
//fractionOfMass
163
164
void
AddMaterial
(
G4Material
*
material
,
//the material
165
G4double
fraction);
//fractionOfMass
166
167
virtual
~G4Material
();
168
//
169
// retrieval methods
170
//
171
inline
const
G4String
&
GetName
()
const
{
return
fName
;}
172
inline
const
G4String
&
GetChemicalFormula
()
const
{
return
fChemicalFormula
;}
173
inline
G4double
GetFreeElectronDensity
()
const
{
return
fFreeElecDensity
;}
174
inline
G4double
GetDensity
()
const
{
return
fDensity
;}
175
inline
G4State
GetState
()
const
{
return
fState
;}
176
inline
G4double
GetTemperature
()
const
{
return
fTemp
;}
177
inline
G4double
GetPressure
()
const
{
return
fPressure
;}
178
179
//number of elements constituing this material:
180
inline
size_t
GetNumberOfElements
()
const
{
return
fNumberOfElements
;}
181
182
//vector of pointers to elements constituing this material:
183
inline
const
184
G4ElementVector
*
GetElementVector
()
const
{
return
theElementVector
;}
185
186
//vector of fractional mass of each element:
187
inline
const
188
G4double
*
GetFractionVector
()
const
{
return
fMassFractionVector
;}
189
190
//vector of atom count of each element:
191
inline
const
192
G4int
*
GetAtomsVector
()
const
{
return
fAtomsVector
;}
193
194
//return a pointer to an element, given its index in the material:
195
inline
const
196
G4Element
*
GetElement
(
G4int
iel)
const
{
return
(*
theElementVector
)[iel];}
197
198
//vector of nb of atoms per volume of each element in this material:
199
inline
const
200
G4double
*
GetVecNbOfAtomsPerVolume
()
const
{
return
fVecNbOfAtomsPerVolume
;}
201
//total number of atoms per volume:
202
inline
203
G4double
GetTotNbOfAtomsPerVolume
()
const
{
return
fTotNbOfAtomsPerVolume
;}
204
//total number of electrons per volume:
205
inline
206
G4double
GetTotNbOfElectPerVolume
()
const
{
return
fTotNbOfElectPerVolume
;}
207
208
//obsolete names (5-10-98) see the 2 functions above
209
inline
const
210
G4double
*
GetAtomicNumDensityVector
()
const
{
return
fVecNbOfAtomsPerVolume
;}
211
inline
G4double
GetElectronDensity
()
const
{
return
fTotNbOfElectPerVolume
;}
212
213
// Radiation length:
214
inline
G4double
GetRadlen
()
const
{
return
fRadlen
;}
215
216
// Nuclear interaction length
217
inline
G4double
GetNuclearInterLength
()
const
{
return
fNuclInterLen
;}
218
219
// ionisation parameters:
220
inline
G4IonisParamMat
*
GetIonisation
()
const
{
return
fIonisation
;}
221
222
// Sandia table:
223
inline
G4SandiaTable
*
GetSandiaTable
()
const
{
return
fSandiaTable
; }
224
225
// Base material:
226
inline
227
const
G4Material
*
GetBaseMaterial
()
const
{
return
fBaseMaterial
;}
228
229
// material components:
230
inline
231
const
std::map<G4Material*,G4double>&
GetMatComponents
()
const
232
{
return
fMatComponents
;}
233
234
// for chemical compound
235
inline
G4double
GetMassOfMolecule
()
const
{
return
fMassOfMolecule
;}
236
237
void
SetChemicalFormula
(
const
G4String
& chF);
238
239
void
SetFreeElectronDensity
(
G4double
);
240
241
void
ComputeDensityEffectOnFly
(
G4bool
);
242
243
// meaningful only for single material:
244
G4double
GetZ
()
const
;
245
G4double
GetA
()
const
;
246
247
//the MaterialPropertiesTable (if any) attached to this material:
248
void
SetMaterialPropertiesTable
(
G4MaterialPropertiesTable
* anMPT);
249
250
inline
G4MaterialPropertiesTable
*
GetMaterialPropertiesTable
()
const
251
{
return
fMaterialPropertiesTable
;}
252
253
//the index of this material in the Table:
254
inline
size_t
GetIndex
()
const
{
return
fIndexInTable
;}
255
256
// the static Table of Materials:
257
//
258
static
G4MaterialTable
*
GetMaterialTable
();
259
260
static
size_t
GetNumberOfMaterials
();
261
262
//return pointer to a material, given its name:
263
static
G4Material
*
GetMaterial
(
const
G4String
& name,
G4bool
warning=
true
);
264
265
//return pointer to a simple material, given its propeties:
266
static
G4Material
*
GetMaterial
(
G4double
z,
G4double
a,
G4double
dens);
267
268
//return pointer to a composit material, given its propeties:
269
static
G4Material
*
GetMaterial
(
size_t
nComp,
G4double
dens);
270
271
//
272
//printing methods
273
//
274
friend
std::ostream&
operator<<
(std::ostream&,
const
G4Material
*);
275
friend
std::ostream&
operator<<
(std::ostream&,
const
G4Material
&);
276
friend
std::ostream&
operator<<
(std::ostream&,
G4MaterialTable
);
277
278
G4Material
(__void__&);
279
// Fake default constructor for usage restricted to direct object
280
// persistency for clients requiring preallocation of memory for
281
// persistifiable objects.
282
283
inline
void
SetName
(
const
G4String
& name) {
fName
=
name
;}
284
285
virtual
G4bool
IsExtended
()
const
;
286
287
private
:
288
289
// operators
290
G4bool
operator==
(
const
G4Material
&)
const
;
291
G4bool
operator!=
(
const
G4Material
&)
const
;
292
G4Material
(
const
G4Material
&);
293
const
G4Material
&
operator=
(
const
G4Material
&);
294
295
void
InitializePointers
();
296
297
// Header routine for all derived quantities
298
void
ComputeDerivedQuantities
();
299
300
// Compute Radiation length
301
void
ComputeRadiationLength
();
302
303
// Compute Nuclear interaction length
304
void
ComputeNuclearInterLength
();
305
306
// Copy pointers of base material
307
void
CopyPointersOfBaseMaterial
();
308
309
private
:
310
311
const
G4Material
*
fBaseMaterial
;
// Pointer to the base material
312
G4MaterialPropertiesTable
*
fMaterialPropertiesTable
;
313
314
G4ElementVector
*
theElementVector
;
// vector of constituent Elements
315
G4double
*
fMassFractionVector
;
// composition by fractional mass
316
G4int
*
fAtomsVector
;
// composition by atom count
317
318
static
319
G4MaterialTable
theMaterialTable
;
// the material table
320
321
//
322
// Derived data members (computed from the basic data members)
323
//
324
// some general atomic properties
325
326
G4double
*
fVecNbOfAtomsPerVolume
;
// vector of nb of atoms per volume
327
328
G4IonisParamMat
*
fIonisation
;
// ionisation parameters
329
G4SandiaTable
*
fSandiaTable
;
// Sandia table
330
331
G4double
fDensity
;
// Material density
332
G4double
fFreeElecDensity
;
// Free electron density
333
G4double
fTemp
;
// Temperature (defaults: STP)
334
G4double
fPressure
;
// Pressure (defaults: STP)
335
336
G4double
fTotNbOfAtomsPerVolume
;
// total nb of atoms per volume
337
G4double
fTotNbOfElectPerVolume
;
// total nb of electrons per volume
338
G4double
fRadlen
;
// Radiation length
339
G4double
fNuclInterLen
;
// Nuclear interaction length
340
G4double
fMassOfMolecule
;
// for materials built by atoms count
341
342
G4State
fState
;
// Material state (determined
343
// internally based on density)
344
size_t
fIndexInTable
;
// the position in the material table
345
346
G4int
maxNbComponents
;
// totalNbOfComponentsInTheMaterial
347
G4int
fArrayLength
;
// the length of fAtomsVector
348
G4int
fNumberOfComponents
;
// Nb of components declared so far
349
350
G4int
fNumberOfElements
;
// Nb of Elements in the material
351
352
std::map<G4Material*,G4double>
fMatComponents
;
// for composites built via
353
// AddMaterial()
354
355
G4String
fName
;
// Material name
356
G4String
fChemicalFormula
;
// Material chemical formula
357
358
#ifdef G4MULTITHREADED
359
static
G4Mutex
materialMutex;
360
#endif
361
};
362
363
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
364
365
#endif
geant4
tree
geant4-10.6-release
source
materials
include
G4Material.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:22
using
1.8.2 with
ECCE GitHub integration