Import Geant4 10.6.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2019-06-28 11:59:04 +02:00
parent 28a70706e0
commit d0f911957d
1056 changed files with 95168 additions and 78160 deletions
@@ -51,12 +51,11 @@
#include "globals.hh"
#include "G4VCrossSectionDataSet.hh"
#include "G4ParticleDefinition.hh"
#include "G4Element.hh"
#include "G4Threading.hh"
class G4ComponentGGHadronNucleusXsc;
class G4NucleonNuclearCrossSection;
class G4HadronNucleonXsc;
class G4ComponentSAIDTotalXS;
class G4Material;
class G4Element;
class G4Isotope;
@@ -65,36 +64,29 @@ class G4BGGNucleonElasticXS : public G4VCrossSectionDataSet
{
public:
G4BGGNucleonElasticXS (const G4ParticleDefinition*);
explicit G4BGGNucleonElasticXS (const G4ParticleDefinition*);
virtual ~G4BGGNucleonElasticXS();
~G4BGGNucleonElasticXS() final;
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z,
const G4Material* mat = 0);
const G4Material* mat) final;
virtual
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,
const G4Element* elm = 0,
const G4Material* mat = 0);
const G4Element* elm,
const G4Material* mat) final;
virtual
G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z,
const G4Material* mat = 0);
const G4Material* mat) final;
virtual
G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,
const G4Isotope* iso = 0,
const G4Element* elm = 0,
const G4Material* mat = 0);
const G4Isotope* iso=nullptr,
const G4Element* elm=nullptr,
const G4Material* mat=nullptr) final;
virtual
void BuildPhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void CrossSectionDescription(std::ostream&) const;
void CrossSectionDescription(std::ostream&) const final;
inline void SetLowestCrossSection(G4double val);
private:
G4double CoulombFactor(G4double kinEnergy, G4int Z);
@@ -103,28 +95,23 @@ private:
G4BGGNucleonElasticXS(const G4BGGNucleonElasticXS&);
G4double fGlauberEnergy;
G4double fPDGEnergy;
G4double fLowEnergy;
G4double fSAIDLowEnergyLimit;
G4double fSAIDHighEnergyLimit;
G4double fLowestXSection;
G4double theGlauberFac[93];
G4double theCoulombFac[93];
G4int theA[93];
static G4double theGlauberFac[93];
static G4double theCoulombFac[93];
static G4int theA[93];
const G4ParticleDefinition* particle;
const G4ParticleDefinition* theProton;
G4ComponentGGHadronNucleusXsc* fGlauber;
G4NucleonNuclearCrossSection* fNucleon;
G4HadronNucleonXsc* fHadron;
G4ComponentSAIDTotalXS* fSAID;
G4bool isProton;
G4bool isInitialized;
G4bool isMaster;
#ifdef G4MULTITHREADED
static G4Mutex nucleonElasticXSMutex;
#endif
};
inline void G4BGGNucleonElasticXS::SetLowestCrossSection(G4double val)
{
fLowestXSection = val;
}
#endif
@@ -51,11 +51,11 @@
#include "globals.hh"
#include "G4VCrossSectionDataSet.hh"
#include "G4ParticleDefinition.hh"
#include "G4Threading.hh"
class G4ComponentGGHadronNucleusXsc;
class G4NucleonNuclearCrossSection;
class G4HadronNucleonXsc;
class G4ComponentSAIDTotalXS;
class G4Material;
class G4Element;
class G4Isotope;
@@ -64,35 +64,28 @@ class G4BGGNucleonInelasticXS : public G4VCrossSectionDataSet
{
public:
G4BGGNucleonInelasticXS (const G4ParticleDefinition*);
explicit G4BGGNucleonInelasticXS (const G4ParticleDefinition*);
virtual ~G4BGGNucleonInelasticXS();
~G4BGGNucleonInelasticXS() override;
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z,
const G4Material* mat = 0);
const G4Material* mat) override;
virtual
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,
const G4Element* elm = 0,
const G4Material* mat = 0);
const G4Element* elm,
const G4Material* mat) override;
virtual
G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z,
const G4Material* mat = 0);
const G4Material* mat) override;
virtual
G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,
const G4Isotope* iso = 0,
const G4Element* elm = 0,
const G4Material* mat = 0);
const G4Isotope* iso = nullptr,
const G4Element* elm = nullptr,
const G4Material* mat = nullptr) override;
virtual
void BuildPhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&) override;
virtual void CrossSectionDescription(std::ostream&) const;
inline void SetLowestCrossSection(G4double val);
void CrossSectionDescription(std::ostream&) const override;
private:
@@ -104,11 +97,10 @@ private:
G4double fGlauberEnergy;
G4double fLowEnergy;
G4double fHighEnergy;
G4double fSAIDHighEnergyLimit;
G4double fLowestXSection;
G4double theGlauberFac[93];
G4double theCoulombFac[93];
G4int theA[93];
static G4double theGlauberFac[93];
static G4double theCoulombFac[93];
static G4int theA[93];
const G4ParticleDefinition* particle;
const G4ParticleDefinition* theProton;
@@ -116,14 +108,12 @@ private:
G4ComponentGGHadronNucleusXsc* fGlauber;
G4NucleonNuclearCrossSection* fNucleon;
G4HadronNucleonXsc* fHadron;
G4ComponentSAIDTotalXS* fSAID;
G4bool isProton;
G4bool isInitialized;
G4bool isMaster;
#ifdef G4MULTITHREADED
static G4Mutex nucleonInelasticXSMutex;
#endif
};
inline void G4BGGNucleonInelasticXS::SetLowestCrossSection(G4double val)
{
fLowestXSection = val;
}
#endif
@@ -51,11 +51,11 @@
#include "globals.hh"
#include "G4VCrossSectionDataSet.hh"
#include "G4ParticleDefinition.hh"
#include "G4Threading.hh"
class G4ComponentGGHadronNucleusXsc;
class G4UPiNuclearCrossSection;
class G4HadronNucleonXsc;
class G4ComponentSAIDTotalXS;
class G4Material;
class G4Element;
class G4Isotope;
@@ -64,33 +64,28 @@ class G4BGGPionElasticXS : public G4VCrossSectionDataSet
{
public:
G4BGGPionElasticXS (const G4ParticleDefinition*);
explicit G4BGGPionElasticXS (const G4ParticleDefinition*);
virtual ~G4BGGPionElasticXS();
~G4BGGPionElasticXS() final;
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z,
const G4Material*);
const G4Material*) final;
virtual
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,
const G4Element* elm = 0,
const G4Material* mat = 0);
const G4Element* elm,
const G4Material* mat) final;
virtual
G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z,
const G4Material* mat = 0);
const G4Material* mat) final;
virtual
G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,
const G4Isotope* iso = 0,
const G4Element* elm = 0,
const G4Material* mat = 0);
const G4Isotope* iso=nullptr,
const G4Element* elm=nullptr,
const G4Material* mat=nullptr) final;
virtual
void BuildPhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void CrossSectionDescription(std::ostream&) const;
void CrossSectionDescription(std::ostream&) const final;
private:
@@ -98,20 +93,25 @@ private:
G4BGGPionElasticXS(const G4BGGPionElasticXS&);
G4double fGlauberEnergy;
G4double fLowEnergy;
G4double fSAIDHighEnergyLimit;
G4double theGlauberFac[93];
G4double theCoulombFac[93];
G4int theA[93];
G4double fLowEnergy;
static G4double theGlauberFacPiPlus[93];
static G4double theCoulombFacPiPlus[93];
static G4double theGlauberFacPiMinus[93];
static G4double theCoulombFacPiMinus[93];
static G4int theA[93];
const G4ParticleDefinition* particle;
const G4ParticleDefinition* theProton;
G4ComponentGGHadronNucleusXsc* fGlauber;
G4UPiNuclearCrossSection* fPion;
G4HadronNucleonXsc* fHadron;
G4ComponentSAIDTotalXS* fSAID;
G4bool isPiplus;
G4bool isInitialized;
G4bool isMaster;
#ifdef G4MULTITHREADED
static G4Mutex pionElasticXSMutex;
#endif
};
#endif
@@ -52,14 +52,12 @@
#include "G4VCrossSectionDataSet.hh"
#include "G4ParticleDefinition.hh"
#include "G4Element.hh"
#include "G4HadTmpUtil.hh"
#include "G4Threading.hh"
class G4ComponentGGHadronNucleusXsc;
class G4UPiNuclearCrossSection;
class G4HadronNucleonXsc;
class G4Pow;
class G4ComponentSAIDTotalXS;
class G4Material;
class G4Element;
class G4Isotope;
@@ -68,33 +66,28 @@ class G4BGGPionInelasticXS : public G4VCrossSectionDataSet
{
public:
G4BGGPionInelasticXS (const G4ParticleDefinition*);
explicit G4BGGPionInelasticXS (const G4ParticleDefinition*);
virtual ~G4BGGPionInelasticXS();
~G4BGGPionInelasticXS() final;
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z,
const G4Material* mat = 0);
const G4Material* mat) final;
virtual
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,
const G4Element* elm = 0,
const G4Material* mat = 0);
const G4Element* elm,
const G4Material* mat) final;
virtual
G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z,
const G4Material* mat = 0);
const G4Material* mat) final;
virtual
G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,
const G4Isotope* iso = 0,
const G4Element* elm = 0,
const G4Material* mat = 0);
const G4Isotope* iso=nullptr,
const G4Element* elm=nullptr,
const G4Material* mat=nullptr) final;
virtual
void BuildPhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void CrossSectionDescription(std::ostream&) const;
void CrossSectionDescription(std::ostream&) const final;
private:
@@ -105,10 +98,12 @@ private:
G4double fGlauberEnergy;
G4double fLowEnergy;
G4double fSAIDHighEnergyLimit;
G4double theGlauberFac[93];
G4double theCoulombFac[93];
G4int theA[93];
static G4double theGlauberFacPiPlus[93];
static G4double theGlauberFacPiMinus[93];
static G4double theLowEPiPlus[93];
static G4double theLowEPiMinus[93];
static G4int theA[93];
const G4ParticleDefinition* particle;
const G4ParticleDefinition* theProton;
@@ -118,9 +113,13 @@ private:
G4ComponentGGHadronNucleusXsc* fGlauber;
G4UPiNuclearCrossSection* fPion;
G4HadronNucleonXsc* fHadron;
G4ComponentSAIDTotalXS* fSAID;
G4bool isPiplus;
G4bool isInitialized;
G4bool isMaster;
#ifdef G4MULTITHREADED
static G4Mutex pionInelasticXSMutex;
#endif
};
#endif
@@ -52,81 +52,48 @@
#include "G4VComponentCrossSection.hh"
class G4ParticleDefinition;
class G4ComponentAntiNuclNuclearXS : public G4VComponentCrossSection
{
public:
G4ComponentAntiNuclNuclearXS ();
virtual ~G4ComponentAntiNuclNuclearXS ();
virtual
G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4int A);
class G4ComponentAntiNuclNuclearXS : public G4VComponentCrossSection {
virtual
G4double GetTotalElementCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4double A);
public:
G4ComponentAntiNuclNuclearXS ();
virtual ~G4ComponentAntiNuclNuclearXS ();
virtual G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy, G4int Z, G4int A);
virtual G4double GetTotalElementCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy, G4int Z, G4double A);
virtual G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy, G4int Z, G4int A);
virtual G4double GetInelasticElementCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy, G4int Z, G4double A);
virtual G4double GetElasticElementCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy, G4int Z, G4double A);
virtual G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy, G4int Z, G4int A);
virtual void BuildPhysicsTable(const G4ParticleDefinition&) {}
virtual void DumpPhysicsTable(const G4ParticleDefinition&) {}
virtual void CrossSectionDescription(std::ostream&) const;
// Method for calculation of Anti-Hadron Nucleon Total Cross-section
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition* aParticle, G4double kinEnergy);
// Method for calculation of Anti-Hadron Nucleon Elastic Cross-section
G4double GetAntiHadronNucleonElCrSc(const G4ParticleDefinition* aParticle, G4double kinEnergy);
virtual
G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4int A);
virtual
G4double GetInelasticElementCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4double A);
virtual
G4double GetElasticElementCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4double A);
virtual
G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4int A);
virtual
void BuildPhysicsTable(const G4ParticleDefinition&)
{}
virtual
void DumpPhysicsTable(const G4ParticleDefinition&)
{}
virtual void CrossSectionDescription(std::ostream&) const;
// Method for calculation of Anti-Hadron Nucleon Total Cross-section
G4double GetAntiHadronNucleonTotCrSc(const G4ParticleDefinition* aParticle, G4double kinEnergy);
// Method for calculation of Anti-Hadron Nucleon Elastic Cross-section
G4double GetAntiHadronNucleonElCrSc(const G4ParticleDefinition* aParticle, G4double kinEnergy);
private:
// const G4double fUpperLimit;
// const G4double fLowerLimit;
G4double fRadiusEff; // Effective Radius for AntiNucleus
G4double fRadiusNN2; // Sqr of radius of NN collision
G4double fTotalXsc, fElasticXsc, fInelasticXsc;
G4double fAntiHadronNucleonTotXsc, fAntiHadronNucleonElXsc;
G4double Elab, S, SqrtS ;
G4double Mn, b0, b2, SqrtS0, S0, R0; //parameters for AntiHadron-Nucleon Xsc
G4ParticleDefinition* theAProton;
G4ParticleDefinition* theANeutron;
G4ParticleDefinition* theADeuteron;
G4ParticleDefinition* theATriton;
G4ParticleDefinition* theAAlpha;
G4ParticleDefinition* theAHe3;
private:
G4double fRadiusEff; // Effective Radius for AntiNucleus
G4double fRadiusNN2; // Sqr of radius of NN collision
G4double fTotalXsc, fElasticXsc, fInelasticXsc;
G4double fAntiHadronNucleonTotXsc, fAntiHadronNucleonElXsc;
G4double Elab, S, SqrtS ;
G4double Mn, b0, b2, SqrtS0, S0, R0; // Parameters for AntiHadron-Nucleon Xsc
G4ParticleDefinition* theAProton;
G4ParticleDefinition* theANeutron;
G4ParticleDefinition* theADeuteron;
G4ParticleDefinition* theATriton;
G4ParticleDefinition* theAAlpha;
G4ParticleDefinition* theAHe3;
};
@@ -43,51 +43,47 @@
#include "globals.hh"
#include "G4PiData.hh"
#include "G4Threading.hh"
#include <vector>
class G4ComponentBarNucleonNucleusXsc : public G4VComponentCrossSection
{
public:
G4ComponentBarNucleonNucleusXsc();
virtual ~G4ComponentBarNucleonNucleusXsc();
explicit G4ComponentBarNucleonNucleusXsc();
~G4ComponentBarNucleonNucleusXsc() override;
virtual
G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4int );
G4int Z, G4int ) final;
virtual
G4double GetTotalElementCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4double );
G4int Z, G4double ) final;
virtual
G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4int );
G4int Z, G4int ) final;
virtual
G4double GetInelasticElementCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4double );
G4int Z, G4double ) final;
virtual
G4double GetElasticElementCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4double );
G4int Z, G4double ) final;
virtual
G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4int );
G4int Z, G4int ) final;
void ComputeCrossSections(const G4ParticleDefinition* aParticle,
G4double kinEnergy, G4int Z);
G4bool IsElementApplicable(const G4DynamicParticle* aParticle, G4int Z);
void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void CrossSectionDescription(std::ostream&) const;
void Description(std::ostream&) const final;
inline G4double GetElementCrossSection(const G4DynamicParticle* aParticle, G4int Z);
inline G4double GetElasticCrossSection(const G4DynamicParticle* aParticle, G4int Z);
@@ -98,11 +94,9 @@ public:
private:
G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2);
G4double Interpolate(G4int Z1, G4int Z2, G4int Z, G4double x1, G4double x2) const;
std::vector< G4int > theZ;
std::vector< G4PiData* > thePipData;
std::vector< G4PiData* > thePimData;
void LoadData();
// cross sections
G4double fTotalXsc;
@@ -113,9 +107,20 @@ private:
const G4ParticleDefinition* theProton;
const G4ParticleDefinition* theNeutron;
G4bool isMaster;
static G4double theA[93];
static G4double A75[93];
static const G4int NZ = 17;
static G4int theZ[NZ];
static std::vector<G4PiData*>* thePData;
static std::vector<G4PiData*>* theNData;
#ifdef G4MULTITHREADED
static G4Mutex barNNXSMutex;
#endif
};
inline
@@ -33,6 +33,7 @@
//
// 04.09.18 V. Ivantchenko Major revision of interfaces and implementation
// 01.10.18 V. Grichine strange hyperon xsc
// 27.05.19 V. Ivantchenko Removed obsolete methods and members
#ifndef G4ComponentGGHadronNucleusXsc_h
#define G4ComponentGGHadronNucleusXsc_h 1
@@ -51,8 +52,8 @@ class G4ComponentGGHadronNucleusXsc : public G4VComponentCrossSection
{
public:
G4ComponentGGHadronNucleusXsc();
virtual ~G4ComponentGGHadronNucleusXsc();
explicit G4ComponentGGHadronNucleusXsc();
~G4ComponentGGHadronNucleusXsc() final;
static const char* Default_Name() { return "Glauber-Gribov"; }
@@ -97,10 +98,6 @@ public:
G4double GetProductionIsotopeCrossSection(const G4ParticleDefinition* aParticle,
G4double kinEnergy,
G4int Z, G4int A);
G4bool IsIsoApplicable(const G4DynamicParticle* aDP, G4int Z, G4int A,
const G4Element* elm = nullptr,
const G4Material* mat = nullptr);
G4double GetRatioSD(const G4DynamicParticle*, G4int At, G4int Zt);
G4double GetRatioQE(const G4DynamicParticle*, G4int At, G4int Zt);
@@ -117,12 +114,6 @@ public:
G4double GetHNinelasticXsc(const G4DynamicParticle*, G4int At, G4int Zt);
G4double GetHNinelasticXscVU(const G4DynamicParticle*, G4int At, G4int Zt);
G4double CalculateEcmValue (G4double , G4double, G4double);
G4double CalcMandelstamS(G4double , G4double , G4double);
G4double GetNucleusRadius(const G4DynamicParticle*, const G4Element*);
G4double GetNucleusRadius(G4int At);
void Description(std::ostream&) const final;
inline G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,
@@ -140,17 +131,12 @@ public:
inline G4double GetInelasticGlauberGribovXsc() const { return fInelasticXsc; };
inline G4double GetProductionGlauberGribovXsc() const { return fProductionXsc; };
inline G4double GetDiffractionGlauberGribovXsc() const { return fDiffractionXsc; };
inline G4double GetRadiusConst() const { return fRadiusConst; };
inline void SetEnergyLowerLimit(G4double E) { fLowerLimit=E; };
inline G4double GetParticleBarCorTot(const G4ParticleDefinition* theParticle, G4int Z);
inline G4double GetParticleBarCorIn(const G4ParticleDefinition* theParticle, G4int Z);
private:
G4double fLowerLimit;
G4double fRadiusConst;
static const G4double fNeutronBarCorrectionTot[93];
static const G4double fNeutronBarCorrectionIn[93];
@@ -165,6 +151,7 @@ private:
G4double fTotalXsc, fElasticXsc, fInelasticXsc, fProductionXsc, fDiffractionXsc;
G4double fAxsc2piR2, fModelInLog;
G4double fEnergy; //Cache
const G4ParticleDefinition* theGamma;
const G4ParticleDefinition* theProton;
@@ -177,28 +164,11 @@ private:
const G4ParticleDefinition* theKMinus;
const G4ParticleDefinition* theK0S;
const G4ParticleDefinition* theK0L;
// strange hyperons
const G4ParticleDefinition* theL;
const G4ParticleDefinition* theAntiL;
const G4ParticleDefinition* theSPlus;
const G4ParticleDefinition* theASPlus;
const G4ParticleDefinition* theSMinus;
const G4ParticleDefinition* theASMinus;
const G4ParticleDefinition* theS0;
const G4ParticleDefinition* theAS0;
const G4ParticleDefinition* theXiMinus;
const G4ParticleDefinition* theXi0;
const G4ParticleDefinition* theAXiMinus;
const G4ParticleDefinition* theAXi0;
const G4ParticleDefinition* theOmega;
const G4ParticleDefinition* theAOmega;
G4HadronNucleonXsc* hnXsc;
G4Pow* g4calc;
// Cache
const G4ParticleDefinition* fParticle;
G4double fEnergy;
G4int fZ, fA;
};
@@ -34,22 +34,20 @@
// G4GlauberGribovCrossSection
//
// 04.09.18 V. Ivantchenko Major revision of interfaces and implementation
// 27.05.19 V. Ivantchenko Removed obsolete methods and members
//
#ifndef G4ComponentGGNuclNuclXsc_h
#define G4ComponentGGNuclNuclXsc_h
#include "globals.hh"
#include "G4Proton.hh"
#include "G4Nucleus.hh"
#include "G4NistManager.hh"
#include "G4ParticleInelasticXS.hh"
#include "G4VComponentCrossSection.hh"
#include "G4DynamicParticle.hh"
class G4ParticleDefinition;
class G4HadronNucleonXsc;
class G4Pow;
class G4ComponentGGHadronNucleusXsc;
class G4Material;
class G4ComponentGGNuclNuclXsc : public G4VComponentCrossSection
{
@@ -93,16 +91,9 @@ public:
void Description(std::ostream&) const final;
// Glauber-Gribov cross section
void ComputeCrossSections(const G4ParticleDefinition* aParticle,
G4double kinEnergy, G4int Z, G4int A);
// Extra methods
G4bool IsElementApplicable(const G4DynamicParticle*,
G4int Z, const G4Material*);
inline G4double GetElementCrossSection(const G4DynamicParticle*,
G4int Z, const G4Material*);
// inline G4double GetElementCrossSection(const G4DynamicParticle*,
// G4int Z, const G4Material*);
inline G4double GetZandACrossSection(const G4DynamicParticle*,
G4int Z, G4int A);
@@ -118,18 +109,6 @@ public:
G4double GetRatioSD(const G4DynamicParticle*, G4double At, G4double Zt);
G4double GetRatioQE(const G4DynamicParticle*, G4double At, G4double Zt);
G4double GetHadronNucleonXsc(const G4DynamicParticle*, const G4Element*);
G4double GetHadronNucleonXsc(const G4DynamicParticle*, G4int At, G4int Zt);
G4double GetHadronNucleonXscPDG(const G4ParticleDefinition*,
G4double pTkin, const G4ParticleDefinition*);
G4double GetHadronNucleonXscNS(const G4ParticleDefinition*,
G4double pTkin, const G4ParticleDefinition*);
G4double GetHNinelasticXscVU(const G4DynamicParticle*, G4int At, G4int Zt);
G4double CalculateEcmValue(G4double, G4double, G4double);
G4double CalcMandelstamS(G4double, G4double, G4double);
inline G4double GetElasticGlauberGribov(const G4DynamicParticle*,G4int Z, G4int A);
inline G4double GetInelasticGlauberGribov(const G4DynamicParticle*,G4int Z, G4int A);
@@ -138,33 +117,26 @@ public:
inline G4double GetInelasticGlauberGribovXsc() const { return fInelasticXsc; };
inline G4double GetProductionGlauberGribovXsc() const { return fProductionXsc; };
inline G4double GetDiffractionGlauberGribovXsc() const { return fDiffractionXsc; };
inline G4double GetRadiusConst() const { return fRadiusConst; };
inline void SetEnergyLowerLimit(G4double) {}; // obsolete
G4double GetNucleusRadius(const G4DynamicParticle*, const G4Element*);
G4double GetNucleusRadius(G4int Zt, G4int At);
G4double GetNucleusRadiusGG(G4int At);
G4double GetNucleusRadiusDE(G4int Zt, G4int At);
G4double GetNucleusRadiusRMS(G4int Zt, G4int At);
private:
G4double fRadiusConst;
G4double fTotalXsc, fElasticXsc, fInelasticXsc, fProductionXsc, fDiffractionXsc;
// Glauber-Gribov cross section
void ComputeCrossSections(const G4ParticleDefinition* aParticle,
G4double kinEnergy, G4int Z, G4int A);
G4double fTotalXsc, fElasticXsc, fInelasticXsc;
G4double fProductionXsc, fDiffractionXsc;
// Cache
G4double fEnergy;
const G4ParticleDefinition* theProton;
const G4ParticleDefinition* theNeutron;
G4ComponentGGHadronNucleusXsc* fHadrNucl;
G4HadronNucleonXsc* fHNXsc;
G4Pow* fCalc;
G4NistManager* fNist;
// Cache
const G4ParticleDefinition* fParticle;
G4double fEnergy;
G4int fZ, fA;
};
@@ -184,6 +156,7 @@ G4ComponentGGNuclNuclXsc::GetInelasticGlauberGribov(const G4DynamicParticle* dp,
return fInelasticXsc;
}
/*
inline G4double
G4ComponentGGNuclNuclXsc::GetElementCrossSection(const G4DynamicParticle* dp,
G4int Z, const G4Material*)
@@ -192,7 +165,7 @@ G4ComponentGGNuclNuclXsc::GetElementCrossSection(const G4DynamicParticle* dp,
ComputeCrossSections(dp->GetDefinition(), dp->GetKineticEnergy(), Z, A);
return fInelasticXsc;
}
*/
inline G4double
G4ComponentGGNuclNuclXsc::GetZandACrossSection(const G4DynamicParticle* dp,
G4int Z, G4int A)
@@ -210,5 +183,4 @@ G4ComponentGGNuclNuclXsc::GetCoulombBarier(const G4DynamicParticle* dp,
G4lrint(Z), G4lrint(A), pR, tR);
}
#endif
@@ -33,6 +33,8 @@
// 21.02.12 V. Grichine - update for pion-(p,n) xsc, NS fit++, vector spline
// 30.07.18 V. Ivanchenko - general clean-up
// 30.09.18 V. Grichine hyperon-nucleon xsc first implementation
// 09.04.19 V. Grichine hyperon-nucleon xsc for c- and b- hyperons (and s-)
// 12.04.19 V. Grichine meson-nucleon xsc for c- and b- hyperons (and s-)
#ifndef G4HadronNucleonXsc_h
@@ -49,13 +51,10 @@ class G4HadronNucleonXsc
{
public:
G4HadronNucleonXsc ();
explicit G4HadronNucleonXsc ();
~G4HadronNucleonXsc ();
// Xsc parametrisations return total x-section
G4double HadronNucleonXscPDG2005(const G4ParticleDefinition* theParticle,
const G4ParticleDefinition* nucleon, G4double ekin);
G4double HadronNucleonXscPDG(const G4ParticleDefinition* theParticle,
const G4ParticleDefinition* nucleon, G4double ekin);
@@ -71,6 +70,12 @@ public:
G4double KaonNucleonXscVG(const G4ParticleDefinition* theParticle,
const G4ParticleDefinition* nucleon, G4double ekin);
G4double HyperonNucleonXscNS(const G4ParticleDefinition* theParticle,
const G4ParticleDefinition* nucleon, G4double ekin);
G4double SCBMesonNucleonXscNS( const G4ParticleDefinition* theParticle,
const G4ParticleDefinition* nucleon, G4double ekin );
G4double HadronNucleonXscVU(const G4ParticleDefinition* theParticle,
const G4ParticleDefinition* nucleon, G4double ekin);
@@ -97,6 +102,10 @@ public:
const G4ParticleDefinition* p)
{ return KaonNucleonXscGG(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
inline G4double GetHyperonNucleonXscNS(const G4DynamicParticle* dp,
const G4ParticleDefinition* p)
{ return HyperonNucleonXscNS(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
inline G4double GetHadronNucleonXscVU(const G4DynamicParticle* dp,
const G4ParticleDefinition* p)
{ return HadronNucleonXscVU(dp->GetDefinition(), p, dp->GetKineticEnergy()); }
@@ -110,29 +119,16 @@ public:
inline G4double GetElasticHadronNucleonXsc() const { return fElasticXsc; };
inline G4double GetInelasticHadronNucleonXsc() const { return fInelasticXsc; };
// obsolete methods
G4bool IsApplicable(const G4DynamicParticle* aDP, const G4Element*);
G4bool IsIsoApplicable(const G4DynamicParticle* aDP, G4int Z);
void DumpPhysicsTable(const G4ParticleDefinition&)
{G4cout << "G4HadronNucleonXsc: uses parametrisation"<<G4endl;}
void CrossSectionDescription(std::ostream&) const;
private:
G4double ComputeKaonNucleonXsc(const G4ParticleDefinition* theParticle,
const G4ParticleDefinition* nucleon, G4double ekin);
inline G4double CalcMandelstamS(G4double ekin1, G4double mass1, G4double mass2)
{ return mass1*mass1 + mass2*mass2 + 2*mass2*(ekin1 + mass1); }
inline G4double CalculateEcmValue(G4double ekin1, G4double mass1, G4double mass2)
{ return std::sqrt(CalcMandelstamS(ekin1, mass1, mass2)); };
G4double fLowerLimit;
G4double fTotalXsc, fElasticXsc, fInelasticXsc;
G4double fHypTotXscCof;
G4Pow* g4calc;
@@ -145,6 +141,11 @@ private:
const G4ParticleDefinition* thePiPlus;
const G4ParticleDefinition* thePiMinus;
const G4ParticleDefinition* thePiZero;
const G4ParticleDefinition* theD;
const G4ParticleDefinition* theT;
const G4ParticleDefinition* theA;
const G4ParticleDefinition* theHe3;
// strange
const G4ParticleDefinition* theKPlus;
const G4ParticleDefinition* theKMinus;
const G4ParticleDefinition* theK0S;
@@ -163,10 +164,55 @@ private:
const G4ParticleDefinition* theAXi0;
const G4ParticleDefinition* theOmega;
const G4ParticleDefinition* theAOmega;
const G4ParticleDefinition* theD;
const G4ParticleDefinition* theT;
const G4ParticleDefinition* theA;
const G4ParticleDefinition* theHe3;
// c- and b- hyperons
const G4ParticleDefinition* theLambdaCPlus;
const G4ParticleDefinition* theALambdaCPlus;
const G4ParticleDefinition* theOmegaC0;
const G4ParticleDefinition* theAOmegaC0;
const G4ParticleDefinition* theSigmaCPlus;
const G4ParticleDefinition* theASigmaCPlus;
const G4ParticleDefinition* theSigmacPP;
const G4ParticleDefinition* theASigmacPP;
const G4ParticleDefinition* theSigmaC0;
const G4ParticleDefinition* theASigmaC0;
const G4ParticleDefinition* theXiCPlus;
const G4ParticleDefinition* theAXiCPlus;
const G4ParticleDefinition* theXiC0;
const G4ParticleDefinition* theAXiC0;
const G4ParticleDefinition* theLambdaB;
const G4ParticleDefinition* theALambdaB;
const G4ParticleDefinition* theOmegaBMinus;
const G4ParticleDefinition* theAOmegaBMinus;
const G4ParticleDefinition* theSigmaBMinus;
const G4ParticleDefinition* theASigmaBMinus;
const G4ParticleDefinition* theSigmaBPlus;
const G4ParticleDefinition* theASigmaBPlus;
const G4ParticleDefinition* theSigmaB0;
const G4ParticleDefinition* theASigmaB0;
const G4ParticleDefinition* theXiBMinus;
const G4ParticleDefinition* theAXiBMinus;
const G4ParticleDefinition* theXiB0;
const G4ParticleDefinition* theAXiB0;
// c- and b- mesons
const G4ParticleDefinition* theBMeson0;
const G4ParticleDefinition* theABMeson0;
const G4ParticleDefinition* theDMeson0;
const G4ParticleDefinition* theADMeson0;
const G4ParticleDefinition* theBsMeson0;
const G4ParticleDefinition* theABsMeson0;
const G4ParticleDefinition* theBcMesonPlus;
const G4ParticleDefinition* theBcMesonMinus;
const G4ParticleDefinition* theDsMesonPlus;
const G4ParticleDefinition* theDsMesonMinus;
const G4ParticleDefinition* theDMesonPlus;
const G4ParticleDefinition* theDMesonMinus;
const G4ParticleDefinition* theBMesonPlus;
const G4ParticleDefinition* theBMesonMinus;
const G4ParticleDefinition* theEta;
const G4ParticleDefinition* theEtaPrime;
const G4ParticleDefinition* theEtaC;
const G4ParticleDefinition* theJPsi;
const G4ParticleDefinition* theUpsilon;
};
@@ -47,11 +47,16 @@ public:
~G4MuNeutrinoNucleusTotXsc();
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z, const G4Material*);
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A, const G4Element*, const G4Material*);
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int , const G4Material*){ return true; };
// virtual G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z, const G4Material*);
virtual G4double GetElementCrossSection(const G4DynamicParticle* dynPart,
G4int Z,
const G4Material* mat);
virtual
G4double GetIsoCrossSection(const G4DynamicParticle* aPart, G4int Z, G4int A,
const G4Isotope*,
@@ -71,6 +76,9 @@ public:
void SetBiasingFactor(G4double bf){fBiasingFactor=bf;};
G4double GetBiasingFactor(){return fBiasingFactor;};
G4double GetTotXsc(){return fTotXsc;};
G4double GetCcTotRatio(){return fCcTotRatio;};
protected:
G4double fCofXsc; // 2*Gf*Gf*MeC2/pi
@@ -78,6 +86,7 @@ protected:
G4double fCofS, fCofL;
G4double fCutEnergy; // minimal recoil electron energy detected
G4double fBiasingFactor; // biasing xsc up
G4double fTotXsc, fCcTotRatio, fCcFactor, fNcFactor;
G4int fIndex;
@@ -64,34 +64,30 @@ public:
explicit G4NeutronCaptureXS();
virtual ~G4NeutronCaptureXS();
~G4NeutronCaptureXS() final;
static const char* Default_Name() {return "G4NeutronCaptureXS";}
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z,
const G4Material*);
const G4Material*) final;
virtual
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,
const G4Element*, const G4Material*);
const G4Element*, const G4Material*) final;
virtual
G4double GetElementCrossSection(const G4DynamicParticle*,
G4int Z, const G4Material* mat=nullptr);
G4int Z, const G4Material*) final;
virtual
G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,
const G4Isotope* iso,
const G4Element* elm,
const G4Material* mat);
const G4Material* mat) final;
virtual const G4Isotope* SelectIsotope(const G4Element*, G4double kinEnergy);
const G4Isotope* SelectIsotope(const G4Element*, G4double kinEnergy,
G4double logE) final;
virtual
void BuildPhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void CrossSectionDescription(std::ostream&) const;
void CrossSectionDescription(std::ostream&) const final;
private:
@@ -99,14 +95,16 @@ private:
G4PhysicsVector* RetrieveVector(std::ostringstream& in, G4bool warn);
G4double IsoCrossSection(G4double ekin, G4int Z, G4int A);
G4double IsoCrossSection(G4double ekin, G4double logekin, G4int Z, G4int A);
G4NeutronCaptureXS & operator=(const G4NeutronCaptureXS &right);
G4NeutronCaptureXS(const G4NeutronCaptureXS&);
G4double emax;
G4double elimit;
G4double logElimit;
size_t fIdxXSTable;
G4bool isMaster;
static G4ElementData* data;
@@ -33,8 +33,6 @@
//
// Author Ivantchenko, Geant4, 3-AUG-09
//
// Modifications:
//
// Class Description:
// This is a base class for neutron elastic hadronic cross section based on
@@ -57,7 +55,7 @@ class G4ParticleDefinition;
class G4Element;
class G4PhysicsVector;
class G4ComponentGGHadronNucleusXsc;
class G4HadronNucleonXsc;
class G4NistManager;
class G4NeutronElasticXS : public G4VCrossSectionDataSet
{
@@ -65,38 +63,35 @@ public:
explicit G4NeutronElasticXS();
virtual ~G4NeutronElasticXS();
~G4NeutronElasticXS() final;
static const char* Default_Name() {return "G4NeutronElasticXS";}
virtual
G4bool IsElementApplicable(const G4DynamicParticle*,
G4int Z, const G4Material*);
G4int Z, const G4Material*) final;
virtual
G4double GetElementCrossSection(const G4DynamicParticle*,
G4int Z, const G4Material* mat=nullptr);
G4int Z, const G4Material*) final;
virtual
void BuildPhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void CrossSectionDescription(std::ostream&) const;
void CrossSectionDescription(std::ostream&) const final;
private:
void Initialise(G4int Z, G4DynamicParticle* dp, const char*);
void Initialise(G4int Z, const char*);
G4NeutronElasticXS & operator=(const G4NeutronElasticXS &right);
G4NeutronElasticXS(const G4NeutronElasticXS&);
G4NistManager* nist;
G4ComponentGGHadronNucleusXsc* ggXsection;
G4HadronNucleonXsc* fNucleon;
const G4ParticleDefinition* proton;
const G4ParticleDefinition* neutron;
static G4PhysicsVector* data[MAXZEL];
static G4double coeff[MAXZEL];
static G4double coeff[MAXZEL];
size_t fIdxXSTable;
G4bool isMaster;
#ifdef G4MULTITHREADED
@@ -33,8 +33,6 @@
//
// Author Ivantchenko, Geant4, 3-AUG-09
//
// Modifications:
//
// Class Description:
// This is a base class for neutron inelastic hadronic cross section based on
@@ -58,64 +56,62 @@ class G4ParticleDefinition;
class G4Element;
class G4PhysicsVector;
class G4ComponentGGHadronNucleusXsc;
class G4HadronNucleonXsc;
class G4NistManager;
class G4NeutronInelasticXS : public G4VCrossSectionDataSet
{
public:
G4NeutronInelasticXS();
explicit G4NeutronInelasticXS();
virtual ~G4NeutronInelasticXS();
~G4NeutronInelasticXS() final;
static const char* Default_Name() {return "G4NeutronInelasticXS";}
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z,
const G4Material*);
const G4Material*) final;
virtual
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,
const G4Element*, const G4Material*);
const G4Element*, const G4Material*) final;
virtual
G4double GetElementCrossSection(const G4DynamicParticle*,
G4int Z, const G4Material* mat=nullptr);
G4int Z,
const G4Material* mat=nullptr) final;
virtual
G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,
const G4Isotope* iso,
const G4Element* elm,
const G4Material* mat);
const G4Material* mat) final;
virtual const G4Isotope* SelectIsotope(const G4Element*, G4double kinEnergy);
const G4Isotope* SelectIsotope(const G4Element*,
G4double kinEnergy, G4double logE) final;
virtual
void BuildPhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void CrossSectionDescription(std::ostream&) const;
void CrossSectionDescription(std::ostream&) const final;
private:
void Initialise(G4int Z, G4DynamicParticle* dp, const char*);
void Initialise(G4int Z, const char*);
G4PhysicsVector* RetrieveVector(std::ostringstream& in, G4bool warn);
G4double IsoCrossSection(G4double ekin, G4int Z, G4int A);
G4double IsoCrossSection(G4double ekin, G4double logekin, G4int Z, G4int A);
G4NeutronInelasticXS & operator=(const G4NeutronInelasticXS &right);
G4NeutronInelasticXS(const G4NeutronInelasticXS&);
G4ComponentGGHadronNucleusXsc* ggXsection;
G4HadronNucleonXsc* fNucleon;
G4NistManager* nist;
const G4ParticleDefinition* proton;
G4bool isMaster;
const G4ParticleDefinition* neutron;
G4double emax;
std::vector<G4double> temp;
size_t fIdxXSTable;
G4bool isMaster;
static G4ElementData* data;
static G4double coeff[MAXZINEL];
@@ -40,25 +40,26 @@
#include "globals.hh"
class G4ComponentBarNucleonNucleusXsc;
class G4ParticleDefinition;
class G4NucleonNuclearCrossSection : public G4VCrossSectionDataSet
{
public:
G4NucleonNuclearCrossSection();
virtual ~G4NucleonNuclearCrossSection();
explicit G4NucleonNuclearCrossSection();
~G4NucleonNuclearCrossSection() override;
static const char* Default_Name() {return "G4NucleonNuclearCrossSection";}
static const char* Default_Name() {return "BarashenkovNucleonXS";}
virtual G4bool IsElementApplicable(const G4DynamicParticle* aParticle,
G4int Z,
const G4Material* mat = nullptr);
G4bool IsElementApplicable(const G4DynamicParticle* aParticle,
G4int Z, const G4Material* mat) final;
virtual G4double GetElementCrossSection(const G4DynamicParticle* aParticle,
G4int Z,
const G4Material* mat = nullptr);
G4double GetElementCrossSection(const G4DynamicParticle* aParticle,
G4int Z, const G4Material* mat=nullptr) final;
virtual void CrossSectionDescription(std::ostream&) const;
void BuildPhysicsTable(const G4ParticleDefinition&) final;
void CrossSectionDescription(std::ostream&) const final;
inline G4double GetElasticCrossSection(const G4DynamicParticle* aParticle,
G4int Z);
@@ -33,8 +33,6 @@
//
// Author Ivantchenko, Geant4, 24 May 2018
//
// Modifications:
//
// Class Description:
// This is a base class for n,p,d,t,he3,he4 inelastic hadronic cross
@@ -50,7 +48,6 @@
#include "G4ElementData.hh"
#include "G4Threading.hh"
#include <vector>
#include <iostream>
const G4int MAXZINELP = 93;
@@ -60,7 +57,6 @@ class G4Element;
class G4PhysicsVector;
class G4ComponentGGHadronNucleusXsc;
class G4ComponentGGNuclNuclXsc;
class G4HadronNucleonXsc;
class G4NistManager;
class G4ParticleInelasticXS : public G4VCrossSectionDataSet
@@ -69,38 +65,34 @@ public:
explicit G4ParticleInelasticXS(const G4ParticleDefinition*);
virtual ~G4ParticleInelasticXS();
~G4ParticleInelasticXS() final;
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z,
const G4Material*);
const G4Material*) final;
virtual
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,
const G4Element*, const G4Material*);
const G4Element*, const G4Material*) final;
virtual
G4double GetElementCrossSection(const G4DynamicParticle*,
G4int Z, const G4Material* mat=nullptr);
G4int Z, const G4Material* mat) final;
virtual
G4double GetIsoCrossSection(const G4DynamicParticle*, G4int Z, G4int A,
const G4Isotope* iso,
const G4Element* elm,
const G4Material* mat);
const G4Material* mat) final;
virtual const G4Isotope* SelectIsotope(const G4Element*, G4double kinEnergy);
const G4Isotope* SelectIsotope(const G4Element*,
G4double kinEnergy, G4double logE) final;
virtual
void BuildPhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void CrossSectionDescription(std::ostream&) const;
void CrossSectionDescription(std::ostream&) const final;
G4double IsoCrossSection(G4double ekin, G4int Z, G4int A);
G4double IsoCrossSection(G4double ekin, G4double logE, G4int Z, G4int A);
private:
void Initialise(G4int Z, G4DynamicParticle* dp, const char*);
void Initialise(G4int Z, const char*);
G4PhysicsVector* RetrieveVector(std::ostringstream& in, G4bool warn);
@@ -109,26 +101,24 @@ private:
G4ComponentGGHadronNucleusXsc* ggXsection;
G4ComponentGGNuclNuclXsc* nnXsection;
G4HadronNucleonXsc* fNucleon;
G4NistManager* fNist;
const G4ParticleDefinition* particle;
const G4ParticleDefinition* proton;
G4String particleName;
G4bool isMaster;
G4double emax;
std::vector<G4double> temp;
static G4ElementData* data;
size_t fIdxXSTable;
G4bool isMaster;
static G4double coeff[MAXZINELP];
static const G4int amin[MAXZINELP];
static const G4int amax[MAXZINELP];
static G4ElementData* data;
#ifdef G4MULTITHREADED
static G4Mutex particleInelasticXSMutex;
#endif
@@ -37,9 +37,8 @@
#include "G4VCrossSectionDataSet.hh"
#include "G4DynamicParticle.hh"
#include "G4DataVector.hh"
#include "globals.hh"
#include <vector>
#include "G4Threading.hh"
class G4PhysicsTable;
@@ -47,50 +46,57 @@ class G4UPiNuclearCrossSection : public G4VCrossSectionDataSet
{
public:
G4UPiNuclearCrossSection();
explicit G4UPiNuclearCrossSection();
virtual ~G4UPiNuclearCrossSection();
~G4UPiNuclearCrossSection() override;
virtual
G4bool IsElementApplicable(const G4DynamicParticle* aParticle,
G4int Z, const G4Material*);
G4int Z, const G4Material*) final;
G4double GetElasticCrossSection(const G4DynamicParticle* aParticle,
G4int Z, G4int A);
G4int Z, G4int A) const;
G4double GetInelasticCrossSection(const G4DynamicParticle* aParticle,
G4int Z, G4int A);
G4int Z, G4int A) const;
void BuildPhysicsTable(const G4ParticleDefinition&);
void BuildPhysicsTable(const G4ParticleDefinition&) final;
void DumpPhysicsTable(const G4ParticleDefinition&);
void DumpPhysicsTable(const G4ParticleDefinition&) final;
virtual void CrossSectionDescription(std::ostream&) const;
void CrossSectionDescription(std::ostream&) const final;
private:
G4double Interpolate(G4int Z, G4int A, G4double ekin, G4PhysicsTable*) const;
void AddDataSet(const G4String& p, const G4double* tot,
const G4double* in, const G4double* e, G4int n);
G4double Interpolate(G4int Z, G4int A, G4double ekin,
G4PhysicsTable*);
G4int NZ;
std::vector<G4int> theZ;
G4DataVector theA;
G4PhysicsTable* piPlusElastic;
G4PhysicsTable* piPlusInelastic;
G4PhysicsTable* piMinusElastic;
G4PhysicsTable* piMinusInelastic;
G4double aPower;
G4double elow;
G4double elowest;
G4double APower[93];
void LoadData();
const G4ParticleDefinition* piPlus;
const G4ParticleDefinition* piMinus;
G4bool isInitialized;
static const G4int NZ = 16;
static G4int theZ[NZ];
static G4double theA[NZ];
static G4double APower[93];
static G4PhysicsTable* piPlusElastic;
static G4PhysicsTable* piPlusInelastic;
static G4PhysicsTable* piMinusElastic;
static G4PhysicsTable* piMinusInelastic;
G4double aPower;
G4double elow;
G4double elowest;
G4bool isMaster;
#ifdef G4MULTITHREADED
static G4Mutex pionUXSMutex;
#endif
};
#endif
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
// -------------------------------------------------------------------
//
// GEANT4 Class header file
@@ -82,15 +81,15 @@ public: //with description
// Element-wise cross section
virtual
G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z,
const G4Material* mat = 0);
const G4Material* mat = nullptr);
// Derived classes should implement this method if they provide isotope-wise
// cross sections. Default arguments G4Element and G4Material are needed to
// access low-energy neutron cross sections, but are not required for others.
virtual
G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A,
const G4Element* elm = 0,
const G4Material* mat = 0);
const G4Element* elm = nullptr,
const G4Material* mat = nullptr);
//============== GetCrossSection methods ===============================
@@ -107,7 +106,7 @@ public: //with description
const G4Material* mat = nullptr);
// The following two methods have default implementations which throw
// G4HadronicException. Derived classes should implement only needed
// G4Exception. Derived classes should implement only needed
// methods, which are assumed to be called at run time.
// Implement this method for element-wise cross section
@@ -129,7 +128,8 @@ public: //with description
// Implement this method if needed
// This method is called for element-wise cross section
// Default implementation assumes equal cross sections for all isotopes
virtual const G4Isotope* SelectIsotope(const G4Element*, G4double kinEnergy);
virtual const G4Isotope* SelectIsotope(const G4Element*, G4double kinEnergy,
G4double logE);
// Implement this method if needed
virtual