2.10.  Materials

2.10.1.  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 overide the default calculations, like the mean ionisation potential for example. Since 10.3, materials have been extended to allow for crytalline 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.

2.10.2.  Design

2.10.2.1.  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 formulaes, 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 figure Figure 2.22.

The three main classes used for material description, together with their utility classes.

Figure 2.22.  The three main classes used for material description, together with their utility classes.


2.10.2.2.  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 initialization 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 initialization 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 figure Figure 2.22.

2.10.2.3.  Optical Classes

The classes for describing optical properties are:

  • G4SurfaceProperty : the base class for optical properties, which consists essentially in the enumeration G4SurfaceType, and which holds a static std::vector<G4SurfaceProperty*> of the properties created, accessible by the static method GetSurfacePropertyTable(),
  • G4OpticalSurface : which specializes G4SurfaceProperty, defining the enumerations G4OpticalSurfaceFinish and G4OpticalSurfaceModel (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 a G4PhysicsOrderedFreeVector; this key is used by the optical physics processes to get the properties they need for the simulation.

2.10.2.4.  Material Extension

Since 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 channeling-, 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 specialized processes. The constructors of G4ExtendedMaterial have the same signatures than the ones of G4Material.

The extended properties (eg: 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 figure Figure 2.23.

Classes involved in material extension capability.

Figure 2.23.  Classes involved in material extension capability.


The first concrete implementation of G4VMaterialExtension is G4CrystalExtension.