Import Geant4 10.6.0 source tree

This commit is contained in:
Gabriele Cosmo
2019-12-06 15:12:28 +01:00
parent b2a62ae692
commit 5baee230e9
2997 changed files with 141580 additions and 98673 deletions
@@ -23,15 +23,12 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//
// G4ElasticHadrNucleusHe.hh
// The generator of high energy hadron-nucleus elastic scattering
// The hadron kinetic energy T > 1 GeV
// N. Starkov 2003.
// N.Starkov 2003.
//
// 19.05.04 Variant for G4 6.1: The 'ApplyYourself' was changed
// 19.11.05 The HE elastic scattering on proton is added (N.Starkov)
// 16.11.06 General redesign (N.Starkov)
// 23.11.06 General cleanup, ONQ0=3 (V.Ivanchenko)
@@ -55,43 +52,39 @@
class G4NistManager;
static const G4int NHADRONS = 26; // Number of hadrons
static const G4int ONQ0 = 5; // The initial number of steps on Q2
static const G4int ONQ2 = 100; // The total number of steps on Q2
static const G4int NENERGY = 30;
static const G4int ZMAX = 93;
static const G4int NQTABLE = NENERGY*ONQ2;
static const G4int NHADRONS = 26; // Number of allowed hadrons
static const G4int ONQ2 = 102; // Number of points on Q2
static const G4int NENERGY = 24;
static const G4int ZMAX = 93;
///////////////////////////////////////////////////////////////////////
class G4ElasticData
{
friend class G4ElasticHadrNucleusHE;
public:
G4ElasticData(const G4ParticleDefinition* h, G4int Z, G4int A, G4double* e);
G4ElasticData(const G4ParticleDefinition* h, G4int Z, G4int A,
const G4double* e);
~G4ElasticData(){}
const G4ParticleDefinition* Hadron() {return hadr;}
~G4ElasticData() {}
private:
void DefineNucleusParameters(G4int A);
const G4ParticleDefinition* hadr;
// hide assignment operator
G4ElasticData & operator=(const G4ElasticData &right);
G4ElasticData(const G4ElasticData&);
public:
G4double R1, R2, Pnucl, Aeff;
G4double limitQ2;
G4double dQ2;
G4double massA;
G4double massA2;
G4int dnkE[NENERGY];
G4double maxQ2[NENERGY];
G4double TableQ2[ONQ2];
G4double TableCrossSec[NQTABLE];
std::vector<G4double> fCumProb[NENERGY];
};
/////////////////////////////////////////////////////////////////////
@@ -113,97 +106,81 @@ public:
private:
G4double HadronNucleusQ2_2(G4ElasticData * pElD, G4int Z,
G4double plabGeV, G4double tmax);
G4double HadronNucleusQ2_2(const G4ElasticData *pElD, G4double plabGeV,
G4double tmax);
void DefineHadronValues(G4int Z);
G4int FillFq2(G4int A);
G4double GetLightFq2(G4int Z, G4int A, G4double Q);
G4double GetHeavyFq2(G4int Z, G4int Nucleus, G4double *LineFq2);
G4double GetQ2_2(G4int N, G4double* Q, G4double* F, G4double R);
G4double GetQ2_2(G4int N, G4int Nmax,
const std::vector<G4double>& F, G4double rand);
G4double LineInterpol(G4double p0, G4double p2,
G4double c1, G4double c2,
G4double p);
G4double HadrNucDifferCrSec(G4int Z, G4int Nucleus, G4double Q2);
G4double HadrNucDifferCrSec(G4int A, G4double Q2);
void InterpolateHN(G4int n, const G4double EnP[],
const G4double C0P[], const G4double C1P[],
const G4double B0P[], const G4double B1P[]);
// hide assignment operator
G4ElasticHadrNucleusHE & operator=(const G4ElasticHadrNucleusHE &right);
G4ElasticHadrNucleusHE(const G4ElasticHadrNucleusHE&);
G4double GetBinomCof( G4int n, G4int m );
G4double GetFt(G4double Q2);
G4double GetDistrFun(G4double Q2);
G4double GetQ2(G4double Ran);
G4double HadronProtonQ2(const G4ParticleDefinition * aHadron,
G4double inLabMom);
void GetKinematics(const G4ParticleDefinition * aHadron,
G4double MomentumH);
G4double HadronProtonQ2(G4double plab, G4double tmax);
void Binom();
void FillData(const G4ParticleDefinition* p, G4int idx, G4int Z);
inline G4double LineInterpol(G4double p0, G4double p2,
G4double c1, G4double c2, G4double p);
inline G4double GetBinomCof( G4int n, G4int m );
// hide assignment operator
G4ElasticHadrNucleusHE & operator=(const G4ElasticHadrNucleusHE &right);
G4ElasticHadrNucleusHE(const G4ElasticHadrNucleusHE&);
// fields
G4int iHadrCode;
G4int iHadron;
static const G4int HadronCode[NHADRONS];
static const G4int HadronType[NHADRONS];
static const G4int HadronType1[NHADRONS];
G4int iHadron1;
static const G4int fHadronCode[NHADRONS];
static const G4int fHadronType[NHADRONS];
static const G4int fHadronType1[NHADRONS];
// momemtum limits
G4double plabLowLimit;
G4double dQ2;
// transition between internal and CLHEP units
G4double MbToGeV2;
G4double sqMbToGeV;
G4double Fm2ToGeV2;
G4double GeV2;
G4double protonM; // GeV
G4double protonM2; // GeV^2
// projectile kinematics in GeV
G4double hMass;
G4double hMass2;
G4double hLabMomentum;
G4double hLabMomentum2;
G4double MomentumCM;
G4double HadrEnergy;
// elastic parameters
G4double HadrTot, HadrSlope, HadrReIm, TotP,
DDSect2, DDSect3, ConstU, FmaxT;
G4double HadrTot, HadrSlope, HadrReIm, TotP;
G4double DDSect2, DDSect3, ConstU;
// momentum limits for different models of hadron/nucleon scatetring
G4double BoundaryP[7], BoundaryTL[7], BoundaryTG[7];
// parameterisation of scattering
G4double Slope1, Slope2, Coeff1, Coeff2, MaxTR;
G4double Slope1, Slope2, Coeff1, Coeff2;
G4double Slope0, Coeff0;
G4double aAIm, aDIm, Dtot11;
// nucleaus parameters
G4double R1, R2, Pnucl, Aeff;
G4int NumbN;
G4double R1, R2, Pnucl, Aeff, Q2max;
static G4double Energy[NENERGY];
static G4double LowEdgeEnergy[NENERGY];
static G4double ABinom[240][240];
static G4double fLineF[ONQ2];
static G4double fEnergy[NENERGY];
static G4double fLowEdgeEnergy[NENERGY];
static G4double fBinom[240][240];
static G4ElasticData* SetOfElasticData[NHADRONS][ZMAX];
static G4ElasticData* fElasticData[NHADRONS][ZMAX];
G4NistManager* nistManager;
G4bool isMaster;
@@ -228,15 +205,7 @@ G4double G4ElasticHadrNucleusHE::LineInterpol(G4double p1, G4double p2,
inline
G4double G4ElasticHadrNucleusHE::GetBinomCof(G4int numN, G4int numM)
{
return (numN >= numM && numN < 240) ? ABinom[numN][numM] : 0.0;
}
////////////////////////////////////////////////////////////////
inline
G4double G4ElasticHadrNucleusHE::GetDistrFun(G4double Q2)
{
return GetFt(Q2)/FmaxT;
return (numN >= numM && numN < 240) ? fBinom[numN][numM] : 0.0;
}
////////////////////////////////////////////////////////////////
@@ -60,6 +60,8 @@ public:
// sample momentum transfer using Lab. momentum
G4double SampleInvariantT(const G4ParticleDefinition* p, G4double plab,
G4int Z, G4int A) override;
G4double GetSlopeCof( const G4int pdg );
inline void SetLowestEnergyLimit(G4double value);
@@ -82,6 +84,7 @@ private:
G4ParticleDefinition* theAlpha;
G4double lowestEnergyLimit;
G4int nwarn;
};
inline void G4HadronElastic::SetLowestEnergyLimit(G4double value)
@@ -44,9 +44,6 @@
#include "G4Nucleus.hh"
#include "G4NucleiProperties.hh"
using namespace std;
using namespace CLHEP;
class G4ParticleDefinition;
class G4PhysicsLogVector;
class G4PhysicsTable;
@@ -106,7 +103,7 @@ inline G4double G4NeutronElectronElModel::CalculateAm( G4double Tkin)
fee = (Tkin+fM)*fme/fM;
// G4cout<<"fee = "<<fee<<" MeV"<<G4endl;
fee2 = fee*fee;
G4double momentum = sqrt( fee2 - fme2 );
G4double momentum = std::sqrt( fee2 - fme2 );
G4double k = momentum/CLHEP::hbarc;
G4double ch = 1.13;
G4double zn = 1.77*k*CLHEP::Bohr_radius;