Import Geant4 11.2.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2023-06-30 09:09:57 +02:00
parent aef78ca386
commit dd1f179cda
3780 changed files with 212808 additions and 142780 deletions
@@ -91,7 +91,8 @@ public:
// Dump store as html
void DumpHtml(const G4ParticleDefinition&, std::ofstream&) const;
void PrintCrossSectionHtml(const G4VCrossSectionDataSet *cs) const;
void PrintCrossSectionHtml(const G4VCrossSectionDataSet *cs,
const G4String&, const G4String&) const;
void AddDataSet(G4VCrossSectionDataSet*);
void AddDataSet(G4VCrossSectionDataSet*, std::size_t);
@@ -46,13 +46,13 @@ public:
G4ElNeutrinoNucleusTotXsc();
~G4ElNeutrinoNucleusTotXsc();
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int , G4int , const G4Element*, const G4Material*) override { return true; };
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int , G4int , const G4Element*, const G4Material*) override;
G4bool IsElementApplicable(const G4DynamicParticle*, G4int , const G4Material*) override { return false; };
G4bool IsElementApplicable(const G4DynamicParticle*, G4int , const G4Material*) override { return true; };
// virtual G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z, const G4Material*);
// G4double GetElementCrossSection(const G4DynamicParticle* dynPart, G4int Z, const G4Material* mat) override;
G4double GetElementCrossSection(const G4DynamicParticle* dynPart, G4int Z, const G4Material* mat) override;
G4double GetIsoCrossSection(const G4DynamicParticle* aPart, G4int Z, G4int A,
const G4Isotope*,
@@ -34,31 +34,27 @@
// Authors V.Ivantchenko, Geant4, 20 October 2020
// B.Kutsenko, BINP/NSU, 10 August 2021
//
// Modification
//
// Class Description:
// This is a base class for gamma-nuclear cross section based on
// data files from IAEA Evaluated Photonuclear Data Library (IAEA/PD-2019)
// https://www-nds.iaea.org/photonuclear/
// Database review - https://www.sciencedirect.com/science/article/pii/S0090375219300699?via%3Dihub
// Class Description - End
// Database review:
// https://www.sciencedirect.com/science/article/pii/S0090375219300699?via%3Dihub
//
#ifndef G4GammaNuclearXS_h
#define G4GammaNuclearXS_h 1
#include "G4VCrossSectionDataSet.hh"
#include "globals.hh"
#include "G4ElementData.hh"
#include "G4PhysicsVector.hh"
#include "G4Threading.hh"
#include "G4IsotopeList.hh"
#include <vector>
class G4DynamicParticle;
class G4ParticleDefinition;
class G4Element;
class G4VComponentCrossSection;
class G4ElementData;
class G4PhysicsVector;
class G4GammaNuclearXS final : public G4VCrossSectionDataSet
{
@@ -94,6 +90,8 @@ public:
G4double ElementCrossSection(G4double ekin, G4int Z);
G4double LowEnergyCrossSection(G4double ekin, G4int Z);
void CrossSectionDescription(std::ostream&) const final;
G4GammaNuclearXS & operator=(const G4GammaNuclearXS &right) = delete;
@@ -107,44 +105,32 @@ private:
const G4String& FindDirectoryPath();
inline G4PhysicsVector* GetPhysicsVector(G4int Z);
G4PhysicsVector* RetrieveVector(std::ostringstream& in, G4bool isElement, G4int Z);
G4PhysicsVector* RetrieveVector(std::ostringstream& in, G4bool warn, G4int Z);
G4VCrossSectionDataSet* ggXsection = nullptr;
std::vector<G4double> temp;
const G4ParticleDefinition* gamma;
G4bool isMaster = false;
// Cache
G4double fXS = 0.0;
G4double fEkin = 0.0;
G4int fZ = 0;
G4bool isFirst = false;
static const G4int MAXZGAMMAXS = 95;
static const G4int MAXNFREE = 11;
static G4ElementData* data;
// Upper limit of the linear transition between IAEA database and CHIPS model
static const G4int rTransitionBound = 150.*CLHEP::MeV;
static const G4double eTransitionBound;
// The list of elements with non-linear parametrisation for better precision
const G4int freeVectorException[11] = {4, 6, 7, 8, 27, 39, 45, 65, 67, 69, 73};
static const G4int freeVectorException[MAXNFREE];
// CHIPS photonuclear model had a problem with high energy parametrisation
// for isotopes of H and He, coefficient is needed to connect isotope cross
// section with element cross-section on high energies.
static G4double coeff[3][3];
static G4double xs150[MAXZGAMMAXS];
static G4String gDataDirectory;
#ifdef G4MULTITHREADED
static G4Mutex gNuclearXSMutex;
#endif
std::vector<G4double> temp;
};
inline
G4PhysicsVector* G4GammaNuclearXS::GetPhysicsVector(G4int Z)
{
G4PhysicsVector* pv = data->GetElementData(Z);
if(pv == nullptr) {
InitialiseOnFly(Z);
pv = data->GetElementData(Z);
}
return pv;
}
#endif