Import Geant4 10.6.0 source tree

This commit is contained in:
Gabriele Cosmo
2019-12-06 15:12:28 +01:00
parent b2a62ae692
commit 5baee230e9
2997 changed files with 141580 additions and 98673 deletions
+1 -2
View File
@@ -23,8 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// class description
//
// Class consists of atomic subshell binding energies for first 100 elements.
@@ -61,6 +59,7 @@ public : //with description
static G4int GetNumberOfShells(G4int Z);
static G4int GetNumberOfElectrons(G4int Z, G4int SubshellNb);
static G4int GetNumberOfFreeElectrons(G4int Z, G4double th);
static G4double GetBindingEnergy(G4int Z, G4int SubshellNb);
static G4double GetTotalBindingEnergy(G4int Z);
@@ -51,6 +51,7 @@ class G4AtomicShells_XDB_EADL
static G4int GetNumberOfShells (G4int Z);
static G4int GetNumberOfElectrons (G4int Z, G4int SubshellNb);
static G4int GetNumberOfFreeElectrons(G4int Z, G4double th);
static G4double GetBindingEnergy (G4int Z, G4int SubshellNb);
static G4double GetTotalBindingEnergy(G4int Z);
@@ -0,0 +1,140 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/*
* Interface to calculation of the Fermi density effect as per the method
* described in:
*
* R. M. Sternheimer, M. J. Berger, and S. M. Seltzer. Density
* effect for the ionization loss of charged particles in various sub-
* stances. Atom. Data Nucl. Data Tabl., 30:261, 1984.
*
* Which (among other Sternheimer references) builds on:
*
* R. M. Sternheimer. The density effect for ionization loss in
* materials. Phys. Rev., 88:851­859, 1952.
*
* The returned values of delta are directly from the Sternheimer calculation,
* and not Sternheimer's popular three-part approximate parameterization
* introduced in the same paper.
*
* Author: Matthew Strait <straitm@umn.edu> 2019
*/
#ifndef G4DensityEffectCalculator_HH
#define G4DensityEffectCalculator_HH
#include "globals.hh"
class G4Material;
class G4DensityEffectCalculator
{
public:
G4DensityEffectCalculator(const G4Material*, G4int);
~G4DensityEffectCalculator();
// The Sternheimer 'x' defined as log10(p/m) == log10(beta*gamma).
G4double ComputeDensityCorrection(G4double x);
private:
/*
* Given a material defined in 'par' with a plasma energy, mean excitation
* energy, and set of atomic energy levels ("oscillator frequencies") with
* occupation fractions ("oscillation strengths"), solve for the Sternheimer
* adjustment factor (Sternheimer 1984 eq 8) and record (into 'par') the values
* of the adjusted oscillator frequencies and Sternheimer constants l_i.
* After doing this, 'par' is ready for a calculation of delta for an
* arbitrary particle energy. Returns true on success, false on failure.
*/
G4double FermiDeltaCalculation(G4double x);
G4double Newton(G4double x0, G4bool first);
G4double DFRho(G4double);
G4double FRho(G4double);
G4double DEll(G4double);
G4double Ell(G4double);
G4double DeltaOnceSolved(G4double);
const G4Material* fMaterial;
G4int fVerbose;
G4int fWarnings;
// Number of energy levels. If a single element, this is the number
// of subshells. If several elements, this is the sum of the number
// of subshells. In principle, could include levels for molecular
// orbitals or other non-atomic states. The last level is always
// the conduction band. If the material is an insulator, set the
// oscillator strength for that level to zero and the energy to
// any value.
const G4int nlev;
G4double fConductivity;
// Current Sternheimer 'x' defined as log10(p/m) == log10(beta*gamma).
G4double sternx;
// The plasma energy of the material in eV, which is simply
// 28.816 sqrt(density Z/A), with density in g/cc.
G4double plasmaE;
// The mean excitation energy of the material in eV, i.e. the 'I' in the
// Bethe energy loss formula.
G4double meanexcite;
// Sternheimer's "oscillator strengths", which are simply the fraction
// of electrons in a given energy level. For a single element, this is
// the fraction of electrons in a subshell. For a compound or mixture,
// it is weighted by the number fraction of electrons contributed by
// each element, e.g. for water, oxygen's electrons are given 8/10 of the
// weight.
G4double * sternf;
// Energy levels. Can be found for free atoms in, e.g., T. A. Carlson.
// Photoelectron and Auger Spectroscopy. Plenum Press, New York and London,
// 1985. Available in a convenient form in G4AtomicShells.cc.
//
// Sternheimer 1984 implies that the energy level for conduction electrons
// (the final element of this array) should be set to zero, although the
// computation could be run with other values.
G4double * levE;
/***** Results of intermediate calculations *****/
// The Sternheimer parameters l_i which appear in Sternheimer 1984 eq(1).
G4double * sternl;
// The adjusted energy levels, as found using Sternheimer 1984 eq(8).
G4double * sternEbar;
};
#endif
@@ -118,7 +118,7 @@ public: // with description
G4VMaterialExtension* RetrieveExtension(const G4String& name);
inline G4int GetNumberOfExtensions() const
{ return fExtensionMap.size(); }
{ return G4int(fExtensionMap.size()); }
// Retrieve iterators, proxyes to c++ methods. These are const for read-only
// access. Use Register/RetreiveExtension to modify map
@@ -58,8 +58,8 @@
class G4IonStoppingData : public G4VIonDEDXTable {
public:
G4IonStoppingData(const G4String& leDirectory);
public:
G4IonStoppingData(const G4String& dir, G4bool icru);
virtual ~G4IonStoppingData();
// Function for checking the availability of stopping power tables
@@ -166,6 +166,8 @@ class G4IonStoppingData : public G4VIonDEDXTable {
G4IonDEDXMapElem dedxMapElements;
G4IonDEDXMapMat dedxMapMaterials;
G4bool fICRU90;
};
#endif // G4IONSTOPPINGDATA_HH
+29 -15
View File
@@ -38,6 +38,7 @@
// 28-10-02: add setMeanExcitationEnergy (V.Ivanchenko)
// 27-09-07: add computation of parameters for ions (V.Ivanchenko)
// 04-03-08: add fBirks constant (mma)
// 16-01-19, add exact computation of the density effect (M. Strait)
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
@@ -50,12 +51,13 @@
#include "G4Exp.hh"
#include "G4Threading.hh"
class G4Material; // forward declaration
class G4Material;
class G4DensityEffectData;
class G4DensityEffectCalculator;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
class G4IonisParamMat // with description
class G4IonisParamMat
{
public:
@@ -100,10 +102,18 @@ public:
// defined density correction parameterisation via base material
void SetDensityEffectParameters(const G4Material* bmat);
void ComputeDensityEffectOnFly(G4bool);
// compute density correction as a function of the kinematic variable
// x = log10(beta*gamma)
inline G4double DensityCorrection(G4double x);
G4double DensityCorrection(G4double x);
inline G4DensityEffectCalculator* GetDensityEffectCalculator()
{ return fDensityEffectCalc; }
// use parameterisation
inline G4double GetDensityCorrection(G4double x);
static G4DensityEffectData* GetDensityEffectData();
@@ -158,7 +168,7 @@ private:
void ComputeMeanParameters();
// Compute parameters for the density effect
void ComputeDensityEffect();
void ComputeDensityEffectParameters();
// Compute parameters for the energy fluctuation model
void ComputeFluctModel();
@@ -167,21 +177,23 @@ private:
void ComputeIonParameters();
// operators
G4IonisParamMat& operator=(const G4IonisParamMat&) = delete;
G4bool operator==(const G4IonisParamMat&) const = delete;
G4bool operator!=(const G4IonisParamMat&) const = delete;
G4IonisParamMat(const G4IonisParamMat&) = delete;
G4IonisParamMat& operator=(const G4IonisParamMat&);
G4bool operator==(const G4IonisParamMat&) const;
G4bool operator!=(const G4IonisParamMat&) const;
G4IonisParamMat(const G4IonisParamMat&);
//
// data members
//
const G4Material* fMaterial; // this material
const G4Material* fMaterial; // this material
G4DensityEffectCalculator* fDensityEffectCalc; // calculator of the density effect
G4double* fShellCorrectionVector; // shell correction coefficients
// parameters for mean energy loss calculation
G4double fMeanExcitationEnergy; //
G4double fLogMeanExcEnergy; //
G4double* fShellCorrectionVector; // shell correction coefficients
G4double fTaul; // lower limit of Bethe-Bloch formula
G4double fMeanExcitationEnergy; //
G4double fLogMeanExcEnergy; //
G4double fTaul; // lower limit of Bethe-Bloch formula
// parameters of the density correction
G4double fCdensity; // mat.constant
@@ -225,7 +237,7 @@ private:
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
inline G4double G4IonisParamMat::DensityCorrection(G4double x)
inline G4double G4IonisParamMat::GetDensityCorrection(G4double x)
{
// x = log10(beta*gamma)
G4double y = 0.0;
@@ -236,4 +248,6 @@ inline G4double G4IonisParamMat::DensityCorrection(G4double x)
return y;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo....
#endif
+59 -54
View File
@@ -23,9 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//
//---------------------------------------------------------------------------
//
// ClassName: G4Material
@@ -167,16 +164,13 @@ public: // with description
void AddMaterial(G4Material* material, //the material
G4double fraction); //fractionOfMass
virtual ~G4Material();
inline void SetChemicalFormula (const G4String& chF) {fChemicalFormula=chF;}
virtual ~G4Material();
//
// retrieval methods
//
inline const G4String& GetName() const {return fName;}
inline const G4String& GetChemicalFormula() const {return fChemicalFormula;}
inline G4double GetFreeElectronDensity() const {return fFreeElecDensity;}
inline G4double GetDensity() const {return fDensity;}
inline G4State GetState() const {return fState;}
inline G4double GetTemperature() const {return fTemp;}
@@ -203,18 +197,18 @@ public: // with description
//vector of nb of atoms per volume of each element in this material:
inline const
G4double* GetVecNbOfAtomsPerVolume() const {return VecNbOfAtomsPerVolume;}
G4double* GetVecNbOfAtomsPerVolume() const {return fVecNbOfAtomsPerVolume;}
//total number of atoms per volume:
inline
G4double GetTotNbOfAtomsPerVolume() const {return TotNbOfAtomsPerVolume;}
G4double GetTotNbOfAtomsPerVolume() const {return fTotNbOfAtomsPerVolume;}
//total number of electrons per volume:
inline
G4double GetTotNbOfElectPerVolume() const {return TotNbOfElectPerVolume;}
G4double GetTotNbOfElectPerVolume() const {return fTotNbOfElectPerVolume;}
//obsolete names (5-10-98) see the 2 functions above
inline const
G4double* GetAtomicNumDensityVector() const {return VecNbOfAtomsPerVolume;}
inline G4double GetElectronDensity() const {return TotNbOfElectPerVolume;}
G4double* GetAtomicNumDensityVector() const {return fVecNbOfAtomsPerVolume;}
inline G4double GetElectronDensity() const {return fTotNbOfElectPerVolume;}
// Radiation length:
inline G4double GetRadlen() const {return fRadlen;}
@@ -224,10 +218,10 @@ public: // with description
// ionisation parameters:
inline G4IonisParamMat* GetIonisation() const {return fIonisation;}
// Sandia table:
inline G4SandiaTable* GetSandiaTable() const {return fSandiaTable;}
// Sandia table:
inline G4SandiaTable* GetSandiaTable() const {return fSandiaTable; }
// Base material:
inline
const G4Material* GetBaseMaterial() const {return fBaseMaterial;}
@@ -238,8 +232,13 @@ public: // with description
{return fMatComponents;}
// for chemical compound
inline
G4double GetMassOfMolecule() const {return fMassOfMolecule;}
inline G4double GetMassOfMolecule() const {return fMassOfMolecule;}
void SetChemicalFormula(const G4String& chF);
void SetFreeElectronDensity(G4double);
void ComputeDensityEffectOnFly(G4bool);
// meaningful only for single material:
G4double GetZ() const;
@@ -251,17 +250,23 @@ public: // with description
inline G4MaterialPropertiesTable* GetMaterialPropertiesTable() const
{return fMaterialPropertiesTable;}
//the index of this material in the Table:
inline size_t GetIndex() const {return fIndexInTable;}
// the static Table of Materials:
//
static G4MaterialTable* GetMaterialTable();
static size_t GetNumberOfMaterials();
//the index of this material in the Table:
inline size_t GetIndex() const {return fIndexInTable;}
//return pointer to a material, given its name:
static G4Material* GetMaterial(const G4String& name, G4bool warning=true);
//return pointer to a simple material, given its propeties:
static G4Material* GetMaterial(G4double z, G4double a, G4double dens);
//return pointer to a composit material, given its propeties:
static G4Material* GetMaterial(size_t nComp, G4double dens);
//
//printing methods
@@ -282,10 +287,10 @@ public: // with description
private:
// operators
G4bool operator==(const G4Material&) const = delete;
G4bool operator!=(const G4Material&) const = delete;
G4Material(const G4Material&) = delete;
const G4Material& operator=(const G4Material&) = delete;
G4bool operator==(const G4Material&) const;
G4bool operator!=(const G4Material&) const;
G4Material(const G4Material&);
const G4Material& operator=(const G4Material&);
void InitializePointers();
@@ -303,53 +308,53 @@ private:
private:
//
// Basic data members ( To define a material)
//
G4String fName; // Material name
G4String fChemicalFormula; // Material chemical formula
G4double fDensity; // Material density
const G4Material* fBaseMaterial; // Pointer to the base material
G4MaterialPropertiesTable* fMaterialPropertiesTable;
G4State fState; // Material state (determined
// internally based on density)
G4double fTemp; // Temperature (defaults: STP)
G4double fPressure; // Pressure (defaults: STP)
G4int maxNbComponents; // totalNbOfComponentsInTheMaterial
G4int fArrayLength; // the length of fAtomsVector
G4int fNumberOfComponents; // Nb of components declared so far
G4int fNumberOfElements; // Nb of Elements in the material
G4ElementVector* theElementVector; // vector of constituent Elements
G4double* fMassFractionVector; // composition by fractional mass
G4int* fAtomsVector; // composition by atom count
G4MaterialPropertiesTable* fMaterialPropertiesTable;
static
G4MaterialTable theMaterialTable; // the material table
size_t fIndexInTable; // the position in the table
//
// Derived data members (computed from the basic data members)
//
// some general atomic properties
G4double* VecNbOfAtomsPerVolume; // vector of nb of atoms per volume
G4double TotNbOfAtomsPerVolume; // total nb of atoms per volume
G4double TotNbOfElectPerVolume; // total nb of electrons per volume
G4double fRadlen; // Radiation length
G4double fNuclInterLen; // Nuclear interaction length
G4double* fVecNbOfAtomsPerVolume; // vector of nb of atoms per volume
G4IonisParamMat* fIonisation; // ionisation parameters
G4SandiaTable* fSandiaTable; // Sandia table
// utilities
//
const G4Material* fBaseMaterial; // Pointer to the base material
G4double fMassOfMolecule; // for materials built by atoms count
G4double fDensity; // Material density
G4double fFreeElecDensity; // Free electron density
G4double fTemp; // Temperature (defaults: STP)
G4double fPressure; // Pressure (defaults: STP)
G4double fTotNbOfAtomsPerVolume; // total nb of atoms per volume
G4double fTotNbOfElectPerVolume; // total nb of electrons per volume
G4double fRadlen; // Radiation length
G4double fNuclInterLen; // Nuclear interaction length
G4double fMassOfMolecule; // for materials built by atoms count
G4State fState; // Material state (determined
// internally based on density)
size_t fIndexInTable; // the position in the material table
G4int maxNbComponents; // totalNbOfComponentsInTheMaterial
G4int fArrayLength; // the length of fAtomsVector
G4int fNumberOfComponents; // Nb of components declared so far
G4int fNumberOfElements; // Nb of Elements in the material
std::map<G4Material*,G4double> fMatComponents; // for composites built via
// AddMaterial()
G4String fName; // Material name
G4String fChemicalFormula; // Material chemical formula
#ifdef G4MULTITHREADED
static G4Mutex materialMutex;
#endif
+23 -16
View File
@@ -194,7 +194,7 @@ public:
const G4String& basename,
G4double density = 0.0,
G4double temp = NTP_Temperature,
G4double pres = CLHEP::STP_Pressure);
G4double pres = CLHEP::STP_Pressure);
// Construct a G4Material from scratch by atome count
// temperature and pressure should be consistent with the density
@@ -239,7 +239,15 @@ public:
G4bool isotopes = true,
G4double temp = NTP_Temperature,
G4double pressure = CLHEP::STP_Pressure);
// enable/disable density effect calculator by material name
//
void SetDensityEffectCalculatorFlag(const G4String&, G4bool);
// enable/disable density effect calculator by material pointer
//
void SetDensityEffectCalculatorFlag(G4Material*, G4bool);
// Get number of G4Materials
//
inline size_t GetNumberOfMaterials() const;
@@ -284,26 +292,25 @@ public:
private:
explicit G4NistManager();
static G4NistManager* instance;
G4Pow* g4pow;
static G4NistManager* instance;
std::vector<G4Element*> elements;
std::vector<G4Material*> materials;
G4ICRU90StoppingData* fICRU90;
G4NistElementBuilder* elmBuilder;
G4NistMaterialBuilder* matBuilder;
G4NistMessenger* messenger;
G4Pow* g4pow;
G4double POWERA27[101];
G4double LOGAZ[101];
std::vector<G4Element*> elements;
std::vector<G4Material*> materials;
size_t nElements;
size_t nMaterials;
size_t nMaterials;
G4int verbose;
G4ICRU90StoppingData* fICRU90;
G4NistElementBuilder* elmBuilder;
G4NistMaterialBuilder* matBuilder;
G4NistMessenger* messenger;
#ifdef G4MULTITHREADED
static G4Mutex nistManagerMutex;
#endif
+3 -2
View File
@@ -24,7 +24,6 @@
// ********************************************************************
//
//
//
// File name: G4NistMessenger
//
// Author: Vladimir Ivanchenko
@@ -101,7 +100,9 @@ private:
G4UIdirectory* g4Dir;
G4UIcmdWithAString* g4ElmCmd;
G4UIcmdWithAString* g4MatCmd;
G4UIcmdWithAString* g4DensCmd;
G4UIcmdWithAString* g4DensCmd;
G4UIcmdWithAString* densCmd;
G4UIcmdWithAString* adensCmd;
};
#endif
+9 -9
View File
@@ -23,8 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// class description
//
// This class is an interface to G4StaticSandiaData.
@@ -66,7 +64,7 @@ class G4SandiaTable
{
public: // with description
G4SandiaTable(G4Material*);
G4SandiaTable(const G4Material*);
~G4SandiaTable();
@@ -118,10 +116,10 @@ private:
static const G4double funitc[5];
// used at initialisation
std::vector<G4double> fSandiaCofPerAtom;
std::vector<G4double> fSandiaCofPerAtom;
// members of the class
G4Material* fMaterial;
const G4Material* fMaterial;
G4int fMatNbOfIntervals;
G4OrderedTable* fMatSandiaMatrix;
G4OrderedTable* fMatSandiaMatrixPAI;
@@ -138,7 +136,7 @@ public: // without description
G4SandiaTable();
void Initialize(G4Material*);
void Initialize(const G4Material*);
G4int SandiaIntervals(G4int Z[], G4int el);
@@ -162,9 +160,11 @@ private:
G4double** GetPointerToCof();
// copy constructor and hide assignment operator
G4SandiaTable(G4SandiaTable &) = delete;
G4SandiaTable & operator=(const G4SandiaTable &right) = delete;
// operators
G4bool operator==(const G4SandiaTable&) const;
G4bool operator!=(const G4SandiaTable&) const;
G4SandiaTable(G4SandiaTable &);
G4SandiaTable & operator=(const G4SandiaTable &right);
static const G4double fSandiaTable[981][5];
static const G4int fNumberOfElements;
@@ -42,9 +42,13 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// 12-05-14, adopted from Stefan Heule (PSI) Thesis by P.Gumplinger
// http://ucn.web.psi.ch/papers/stefanheule_thesis2008.pdf
// reported in F. Atchison et al., Eur. Phys. J. A 44, 2329 (2010)
// DOI: 10.1140/epja/i2010-10926-x
// Thanks to Geza Zsigmond
//
// 02-11-19 Stefan Heule's thesis is available from PSI UCN group pages at
// https://www.psi.ch/en/ltp-ucn-physics/papers-and-theses
// or directly at https://opac.nebis.ch/ediss/20080426_002127549.pdf
#ifndef G4MICROROUGHNESSHELPER_HH
#define G4MICROROUGHNESSHELPER_HH 1