3.3.  Particles

3.3.1.  Properties of particles

The G4ParticleDefinition class contains the properties which characterize individual particles, such as name, mass, charge, spin, and so on. Properties of particles are set during the initialization of each particle type. The default values of these properties are described in each particle class. In the case of heavy nuclei properties may be given by external files. Once initialized, particle properties cannot be changed except for those related to its decay; these are life time, branching ratio of each decay mode and the ``stable'' flag. Geant4 proivides a method to override these properties by using external files.

Properties of nuclei

Individual classes are provided for light nuclei (i.e. deuteron, triton, He3, and He4) with default values of their properties. Other nuclei are dynamically created by requests from processes (and users). G4IonTable class handles the creation of such ions. Default properties of nuclei are determined with help of G4NuclearProperties.

Users can register a G4IsotopeTable to the G4IonTable. G4IsotopeTable which describes the properties used to create ions. Excitation energy, decay modes, and life times for relatively long-lived nuclei can be obtained by using G4RIsotopeTable and data files such as those pointed to by the G4RADIOACTIVEDATA environment variable. G4IsotopeMagneticMomentTable provides a table of nuclear magnetic moments using the data file G4IsotopeMagneticMoment.table. The environment variable G4IONMAGNETICMOMENT should be set to point to this file.

Changing particle properties

Only in the ``PreInit'' phase can properties be modified with the help of the G4ParticlePropertyTable class. Particle properties can be overridden with the method

G4bool SetParticleProperty(const G4ParticlePropertyData& newProperty)

by setting new values in G4ParticlePropertyData . In addition, the current particle property values can be extracted to text files by using G4TextPPReporter . On the other hand, G4TextPPRetriever can change particle properties according to text files.

3.3.2.  Adding New Particles

A new particle can be added by creating a new class for it. The new class should be derived from G4ParticleDefinition. You can find an example under examples/extended/exoticphysics/monopole. There, the new class for the monopole is defined as follows:

class G4Monopole : public G4ParticleDefinition
{
private:
  static G4Monopole*  theMonopole;

  G4Monopole(
       const G4String&     aName,        G4double            mass,
       G4double            width,        G4double            charge,   
       G4int               iSpin,        G4int               iParity,    
       G4int               iConjugation, G4int               iIsospin,   
       G4int               iIsospin3,    G4int               gParity,
       const G4String&     pType,        G4int               lepton,      
       G4int               baryon,       G4int               encoding,
       G4bool              stable,       G4double            lifetime,
       G4DecayTable        *decaytable );

public: 
   virtual ~G4Monopole();
   static G4Monopole* MonopoleDefinition();
   static G4Monopole* Monopole();
}

The static methods above must be defined and implemented so that the new particle instance will be created in the ConstructParticles method of your physics list. New properties may be added if necessary (G4Monopole has a a property for magnetic charge). Values of properties need to be given in the static method as other particle classes.

G4Monopole* G4Monopole::MonopoleDefinition(G4double mass, G4int mCharge, G4int eCharge)
{    
  if(!theMonopole) {
    theMonopole = new G4Monopole(
              "monopole",         mass,       0.0*MeV,           0, 
                    0,               0,             0,          
                    0,               0,             0,             
              "boson",               0,             0,           0,
                 true,            -1.0,             0);
  }
  return theMonopole;
}

3.3.3.  Nuclide properties from the Evaluated Nuclear Structure Data File

G4NuclideTable

G4NuclideTable was introduced in Geant4 v10 to provide properties of nuclides. The excitation energy and decay constant of each of 25,497 states are listed in the table and the spin and dipole magnetic moments are available for some states. The source of these data is ENSDF as of February 2015. In Geant4 v10.02 the hard-coded list of the nuclide states was removed and it now uses only the ENSDFSTATE.dat. G4NuclideTable fills this array by scanning the file and selecting all nuclides with half-lives greater than 1.0 microsecond.

The user may set the minimum half-life of states that will be selected during the scan of ENSDFSTATE.dat. If that value is less than the default of 1 microsecond, more states will be read into G4NuclideTable. If it is larger, fewer states will be included. Any nuclide thus read into G4NuclideTable will be treated as a track-able particle, which will travel some distance as sampled from its decay time. For each state, G4NuclideTable assigns a level number ranging from 0 to the PDG limit of 9. All ground states are assigned the value 0. In a given nucleus, the selected state with the smallest excitation energy is assigned to be level 1, and so on for the subsequent higher selected excitation energy states up to level 8. Note that the ordering of states in a given nucleus will change depending on the minimum half-life value chosen. If more than 8 excited states are found, the excess states are all assigned to level 9. The above action is taken at initialization time and may be invoked in two ways:

  •  G4NuclideTable::SetThresholdOfHalfLife (G4double) 
  • /particle/manage/nuclideTable/min_halflife 0.001 ns

Note that while setting a small minimum half-life will provide a more precise decay chain with more short-lived nuclides, the increased number of states will reduce CPU performance and increase memory footprint.

Adding states

User may add states with user specified values of excitation energy, decay constant, spin and dipole magnetic moment by:

 AddState (G4int Z, G4int A , G4double excitation_energy, G4double lifetime, G4int ionJ=0, 
           G4double ionMu=0.0) 

This is done at initialization time and all values are read into the G4NuclideTable array regardless of the minimum half-life value. These user states are all assigned to level number 9.

In addition to the minimum half-life value, G4NuclideTable also allows the user to set the tolerance level of the excitation energy used to identify the state. The default value of the tolerance is 1 eV which the user may modify in one of two ways:

  • G4NuclideTable::SetLevelTolerance(G4double)
  • /particle/manage/nuclideTable/level_tolerance 1 keV

This modification is also done during the initialization phase. Note that in adding states a user must specify excited states with a precision that matches the tolerance. Thus, if the tolerance is 1 eV, the level in keV would be given, for example, by 2505.531, otherwise that state will be missed. If it is not desirable to specify levels to such a precision, the tolerance value can be increased. If, however, there are two levels in a nucleus which are closer to one another than the value of the tolerance, one of the levels will be missed. Currently G4RadioactiveDecay and G4PhotoEvporation models share the state information with G4NuclideTable. Other models are encouraged to do lifewise.