Import Geant4 10.6.0.beta source tree
This commit is contained in:
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
+25
-20
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user