Materials¶
Design Philosophy¶
The design of the materials category reflects what exists in nature: materials are made of a single element or a mixture of elements, and elements are made of a single isotope or a mixture of isotopes.
Materials have been initially designed as amorphous, with properties obtained by linear combinations of the properties of the elements or isotopes building them, like radiation and interaction lengths, etc. Provision was taken though to allow their ionisation parameters for departing from this assumption with the ability to override the default calculations, like the mean ionisation potential for example. Since Geant4 version 10.3, materials have been extended to allow for crystalline and molecular structures to be freely defined and associated with a material.
The materials category also defines optical surface properties used in the tracking of optical photons.
Design¶
Classes For Material Description¶
The material description is based on three main classes:
- G4Isotope:
used to define isotopes by name, atomic number Z and number of nucleons N. The molar mass A can be specified, and is otherwise taken from Geant4 NIST database. The isomer state can also be specified.
This class is essentially a “simple data container” and does not perform any physics calculations.
- G4Element:
defines elements as isotopes composition, with relative abundance. This class also holds the atomic electron shell structure, that it retrieves for itself using the
G4AtomicShells
utility class.G4AtomicShells
is a “database” class holding the atomic shells and subshells, number of electrons in each and related binding energies, for the first 100 elements.Similarly, G4Element also retrieves the element ionisation data, using the other utility and database class
G4IonisParamElm
.The class computes derived quantities : Coulomb correction and Tsai radiation length factors (Phys Rev. D50 3-1 (1994) page 1254). These calculations are triggered in the constructor, or in the AddIsotope method.
- G4Material:
defines a material as a collection of elements -directly, or by mixture of materials- adding, on top of the element composition, the physical properties density, state, temperature, pressure.
A material has also ionisation properties, gathered in an
G4IonisParamMat
object. The material creates this object, referencing itself to this ionisation object. This one extract properties from the element material composition. For the mean ionisation energy, it may use values defined for chemical formulas, or deduce from the element composition, or accept a value set directly.When the composition of the material is changed (adding an element or a material), derived quantities are computed, including radiation and nuclear interaction lengths.
These three classes hold each a static vector holding all created objects of the class.
The diagram of the these three main classes for material description together with their utility classes is shown in the Fig. 22.
The NIST Manager Utility¶
The G4NistManager
utility singleton class provides elements and
materials construction according to the NIST database on Atomic Weights
and Isotope Compositions,
http://physics.nist.gov/PhysRefData/Compositions/index.html . The
G4NistManager
is an interface class holding and steering one
instance of the following classes:
G4NistElementBuilder
,G4NistMaterialBuilder
,G4NistMessenger
.
The G4NistElementBuilder
and G4NistMaterialBuilder
classes
proceed in a similar manner, with an initialisation phase in which known
elements and materials are essentially “registered” (under
std::vector
’s of names, properties, etc.) but without actual
creation of the G4Element
, G4Isotope
and G4Material
objects.
These creation happen on user’s calls FindOrBuildElement
or
FindOrBuildMaterial
.
During the initialisation phase of these NIST builder objects, vectors
of elements and materials names and properties are hence created. They
may be used by the material construction classes exposed in the previous
section, which explains the dependencies on G4NistManager
shown in
the figure.
Optical Classes¶
The classes for describing optical properties are:
G4SurfaceProperty
: the base class for optical properties, which consists essentially in the enumerationG4SurfaceType
, and which holds a staticstd::vector<G4SurfaceProperty*>
of the properties created, accessible by the static methodGetSurfacePropertyTable()
,G4OpticalSurface
: which specialisesG4SurfaceProperty
, defining the enumerationsG4OpticalSurfaceFinish
andG4OpticalSurfaceModel
(this is presented in details in the user’s guide for application developer),G4MaterialPropertiesTable
: which holds the various optical properties as associations of a string key and aG4PhysicsOrderedFreeVector
; this key is used by the optical physics processes to get the properties they need for the simulation.
Material Extension¶
Since Geant4 version 10.3, a material extension capability has been introduced. The idea is to allow a material to get an arbitrary number of extensions, freely defined, that specialized processes may consume for their physics calculations. Examples of such extensions are crystal structures -for channelling-, and molecular properties -for low energy processes-.
The G4Material
class has been made abstract, introducing the virtual
method G4bool IsExtended()
that responds “false” for a genuine
G4Material object. The class G4ExtendedMaterial
class inherits from
G4Material
, overriding IsExtended()
, to make it responding
“true”. This method is checked at tracking time by the specialised
processes. The constructors of G4ExtendedMaterial
have the same
signatures than the ones of G4Material
.
The extended properties (e.g.: crystal structure, molecular properties)
are to be implemented in concrete classes inheriting from the interface
class G4VMaterialExtension
. A G4ExtendedMaterial
object can hold
an arbitrary number of G4VMaterialExtension
pointers, managed by a
hash map. Each G4VMaterialExtension
concrete class object is
associated to a string key, that is used to retrieve the object.
The diagram showing the relation between these three classes is shown in Fig. 23.
The first concrete implementation of G4VMaterialExtension
is
G4CrystalExtension
.