KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
Classes
Energy Loss & Range Calculations

Range tables and energy loss calculations for charged particles.

Energy losses and ranges of charged particles in matter can be calculated for a wide range of materials and ions, principally through the classes KVMaterial, KVDetector and KVTarget:

KVMaterial mat("CsI", 10*KVUnits::cm);
mat.GetRange(2,4,20) // range of alpha with KE 20 MeV
9.83723725162513885e-02 // in g/cm**2
mat.GetLinearRange(2,4,20)
2.18120548833410678e-02 // in cm
KVNucleus a("4He", 5.0); // alpha particle with KE 5 MeV/u
KVDetector det("Si",150*KVUnits::um); // silicon detector 150um thick
det.GetELostByParticle(&a) // dE of 20-MeV alpha in 150um of silicon
1.02854420719389914e+01 // in MeV
Base class for detector geometry description.
Definition: KVDetector.h:159
Description of physical materials used to construct detectors & targets; interface to range tables.
Definition: KVMaterial.h:93
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:125
const long double um
Definition: KVUnits.h:68
const long double cm
Definition: KVUnits.h:66
auto * a

In actual fact, these classes do not contain the code required to calculate the range or energy loss of particles in matter. They are just an interface to a class derived from KVIonRangeTable, of which two exist in KaliVeda: KVedaLoss (VEDALOSS) and KVRangeYanez (RANGE). By default the range table is VEDALOSS.

Changing the default range table

The default range table used can be defined/changed in your .kvrootrc file:

# Ion range table used by KVMaterial. You can change this to use a different plugin defined as above.
KVMaterial.IonRangeTable: VEDALOSS

To know which range table is the current default:

"RANGE" // KVRangeYanez table is default
static KVIonRangeTable * GetRangeTable()
Definition: KVMaterial.cpp:166
virtual const char * GetName() const

To change the default range table at any time:

Info in <KVRangeYanez::ReadPredefinedMaterials>: Reading materials in file : rangeyanez_compounds.data
Material : Mylar (Myl) State : solid
Material : Kapton (Kap) State : solid
Material : Octofluoropropane (C3F8) State : gas
Material : Cesium Iodide (CsI) State : solid
Material : Potassium Chloride (KCl) State : solid
Material : Tetrafluoromethane (CF4) State : gas
Material : Isobutane (C4H10) State : gas
Material : NE102/NE110 Scintillator (NE102) State : solid
Material : Air (Air) State : gas
static KVIonRangeTable * ChangeRangeTable(const Char_t *name)
Definition: KVMaterial.cpp:187
Interface to Range dE/dx and range library.
Definition: KVRangeYanez.h:25

Adding new materials to the range tables

New materials can be added to either of the range tables by the user at any time. These new materials will be automatically saved and reloaded the next time that the range table is used. New materials can either be 'elemental' (i.e. composed of a single atomic element), 'compound' or a 'mixture'. An 'elemental' material can either be isotopically pure or composed of a mixture of stable isotopes according to natural abundance. The following 3 methods are defined for all range tables (see KVIonRangeTable class reference for more details):

//
// methods of KVIonRangeTable and derived classes
//
// add isotopically-pure or mixture of naturally-occurring isotopes of one element
AddElementalMaterial(Int_t Z, Int_t A = 0)
// add compound composed of nelem different atoms. give number of atoms of each Z & A in formula, plus density if solid.
AddCompoundMaterial(const Char_t *name, const Char_t *symbol, Int_t nelem, Int_t* z, Int_t* a, Int_t* natoms, Double_t density = -1.0)
// add mixture composed of nelem different atoms. give number of atoms of each Z & A and proportions of mixture, plus density if solid.
AddMixedMaterial(const Char_t *name, const Char_t *symbol, Int_t nelem, Int_t* z, Int_t* a, Int_t* natoms, Double_t* proportion, Double_t density = -1.0)
int Int_t
char Char_t
double Double_t

Adding a new material to the VEDALOSS range tables means generating the range of ions \(Z=1-100\) in the material and fitting them with the VEDALOSS parameterisation. This is handled by the KVedaLossRangeFitter class. We use the RANGE tables to generate any new materials, and in addition you can directly add a material which has already been defined for RANGE to VEDALOSS with method

// import RANGE material in to VEDALOSS
Bool_t AddRANGEMaterial(const Char_t *name) const
If the given material is defined in the RANGE tables, import it into VEDALOSS.
Definition: KVedaLoss.cpp:225

Each new material's definitions will be written in a file [material_name].dat which will be stored in one of two subdirectories (VEDALOSS or RANGE) in your KaliVeda working directory (path returned by KVBase::GetWORKDIRFilePath()), in other words:

# for a 'standard' installation:
${KVROOT}/VEDALOSS
${KVROOT}/RANGE
# GNU-style install (option -Dgnuinstall=yes given to cmake)
${HOME}/.kaliveda/VEDALOSS
${HOME}/.kaliveda/RANGE

Adding such a file to one of these directories from elsewhere will also add the new material to the relevant range table the next time that it is initialised.

Classes

class  KVDetector
 Base class for detector geometry description. More...
 
class  KVedaLoss
 C++ implementation of VEDALOSS stopping power calculation. More...
 
class  KVedaLossInverseRangeFunction
 Dedicated optimised inversion of range-energy function for KVedaLoss. More...
 
class  KVedaLossMaterial
 Description of material in the KVedaLoss range table. More...
 
class  KVedaLossRangeFitter
 Fit a range table using the VEDALOSS functional. More...
 
class  KVIonRangeTable
 Abstract base class for calculation of range & energy loss of charged particles in matter. More...
 
class  KVIonRangeTableMaterial
 Material for use in energy loss & range calculations. More...
 
class  KVMaterial
 Description of physical materials used to construct detectors & targets; interface to range tables. More...
 
class  KVRangeYanez
 Interface to Range dE/dx and range library. More...
 
class  KVRangeYanezMaterial
 Description of absorber for the Range dE/dx and range library. More...
 
class  KVTarget
 Calculation/correction of energy losses of particles through an experimental target. More...