42 #ifndef G4NuclNuclDiffuseElastic_h
43 #define G4NuclNuclDiffuseElastic_h 1
404 if( std::fabs(x) < 0.01 )
406 df = 1./(1. + x/f2 + x*x/
f3 + x*x*x/
f4);
424 if( std::fabs(x) < 0.01 )
428 result = 2. - x2 + x2*x2/6.;
447 fBeta = a/std::sqrt(1+a*a);
520 G4double sinHalfTheta = std::sin(0.5*theta);
521 G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
529 G4double xsc = ch2/((sinHalfTheta2+am)*(sinHalfTheta2+am));
540 G4double sinHalfTheta = std::sin(0.5*theta);
541 G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
624 result += 1./z1 - 1./z3 +1./z5 -1./z7;
639 tmp = t*std::exp(-z*z-1.26551223+t*(1.00002368+t*(0.37409196+t*(0.09678418+
640 t*(-0.18628806+t*(0.27886807+t*(-1.13520398+t*(1.48851587+
641 t*(-0.82215223+t*0.17087277)))))))));
643 if( x >= 0.) result = 1. -
tmp;
644 else result = 1. +
tmp;
726 for( n = 1; n <= nMax; n++)
736 sum *= 2.*std::exp(-z*z)/std::sqrt(
CLHEP::pi);
748 result *= std::cos(2.*x*fReZ);
759 result *= std::sin(2.*x*fReZ);
802 G4double sinHalfTheta = std::sin(0.5*theta);
803 G4double sinHalfTheta2 = sinHalfTheta*sinHalfTheta;
804 sinHalfTheta2 +=
fAm;
822 G4double out = ca.real()*ca.real() + ca.imag()*ca.imag();
850 return gammalog.imag();
880 argument = fProfileDelta*dTheta;
914 if(std::abs(dTheta) < 0.001) result = 1.;
919 result /= std::sinh(result);
995 G4double mod2 = out.real()*out.real() + out.imag()*out.imag();
1008 G4double sindTheta = std::sin(dTheta);
1015 G4double out = 0.5*( cosFresnel*cosFresnel + sinFresnel*sinFresnel );
1050 G4double mod2 = out.real()*out.real() + out.imag()*out.imag();
1062 G4double mod2 = out.real()*out.real() + out.imag()*out.imag();
1073 G4double mod2 = out.real()*out.real() + out.imag()*out.imag();
1085 G4double Elab = std::sqrt ( mp * mp + Plab * Plab );
1086 G4double sMand = mp*mp + mt*mt + 2*Elab*mt ;
const G4ParticleDefinition * thePionPlus
G4double CalculateNuclearRad(G4double A)
G4double GetCosHaPit2(G4double t)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4complex GetErfSer(G4complex z, G4int nMax)
G4double GetRatioSim(G4double theta)
G4complex GetErfcInt(G4complex z)
G4double GetDiffElasticProb(G4double theta)
G4complex AmplitudeGG(G4double theta)
G4complex GetErfcComp(G4complex z, G4int nMax)
G4complex GetErfInt(G4complex z)
std::vector< ExP01TrackerHit * > a
G4double A13(G4double A) const
G4double AmplitudeGGMod2(G4double theta)
G4double CalculateParticleBeta(const G4ParticleDefinition *particle, G4double momentum)
G4double GetDiffElasticSumProbA(G4double alpha)
void SetCofFar(G4double pa)
G4ParticleDefinition * theAlpha
G4complex GetErfComp(G4complex z, G4int nMax)
G4complex GammaMore(G4double theta)
void SetQModelLowLimit(G4double value)
void InitialiseOnFly(G4double Z, G4double A)
G4complex TestErfcComp(G4complex z, G4int nMax)
const G4ParticleDefinition * fParticle
G4complex Amplitude(G4double theta)
void SetCofAlpha(G4double pa)
G4complex CoulombAmplitude(G4double theta)
G4double ProfileFar(G4double theta)
static constexpr double hbarc
G4double AmplitudeSimMod2(G4double theta)
G4double Legendre96(T &typeT, F f, G4double a, G4double b)
G4double fRutherfordTheta
G4double GetDiffElasticSumProb(G4double theta)
void SetCofDelta(G4double pa)
G4double GetCoulombTotalXsc(const G4ParticleDefinition *particle, G4double momentum, G4double Z)
G4double lowEnergyLimitHE
G4double GetPDGCharge() const
void SetHEModelLowLimit(G4double value)
G4double BesselJone(G4double z)
G4double GetFresnelDiffuseXsc(G4double theta)
void InitDynParameters(const G4ParticleDefinition *theParticle, G4double partMom)
G4complex GammaLogarithm(G4complex xx)
G4double GetInvCoulombElasticXsc(const G4ParticleDefinition *particle, G4double tMand, G4double momentum, G4double A, G4double Z)
G4ParticleDefinition * theDeuteron
G4complex TestErfcInt(G4complex z)
G4double GetExpCos(G4double x)
G4double GetDiffuseElasticSumXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A, G4double Z)
std::vector< G4PhysicsTable * > fAngleBank
G4double SampleThetaCMS(const G4ParticleDefinition *aParticle, G4double p, G4double A)
G4double CalculateAm(G4double momentum, G4double n, G4double Z)
G4double GetPDGMass() const
void SetRecoilKinEnergyLimit(G4double value)
G4double AmplitudeGlaMod2(G4double theta)
G4double G4Log(G4double x)
std::vector< G4String > fElementNameVector
G4double GetSint(G4double x)
G4double lowEnergyRecoilLimit
G4complex GammaLess(G4double theta)
void SetProfileAlpha(G4double pa)
G4double GetRatioGen(G4double theta)
G4ParticleDefinition * theNeutron
G4PhysicsTable * fAngleTable
virtual G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
static constexpr double fermi
G4double SampleCoulombMuCMS(const G4ParticleDefinition *aParticle, G4double p)
G4double GetHadronNucleonXscNS(G4ParticleDefinition *pParticle, G4double pTkin, G4ParticleDefinition *tParticle)
std::complex< G4double > G4complex
G4double ThetaCMStoThetaLab(const G4DynamicParticle *aParticle, G4double tmass, G4double thetaCMS)
void SetCofAlphaMax(G4double pa)
static G4Pow * GetInstance()
G4NuclNuclDiffuseElastic()
void TestAngleTable(const G4ParticleDefinition *theParticle, G4double partMom, G4double Z, G4double A)
G4double GetCofAlphaMax()
const XML_Char int const XML_Char * value
void InitParametersGla(const G4DynamicParticle *aParticle, G4double partMom, G4double Z, G4double A)
G4double AmplitudeMod2(G4double theta)
G4double CalculateZommerfeld(G4double beta, G4double Z1, G4double Z2)
G4double ThetaLabToThetaCMS(const G4DynamicParticle *aParticle, G4double tmass, G4double thetaLab)
G4double GetFresnelIntegrandXsc(G4double alpha)
G4double SampleTableT(const G4ParticleDefinition *aParticle, G4double p, G4double Z, G4double A)
G4double SampleT(const G4ParticleDefinition *aParticle, G4double p, G4double A)
virtual ~G4NuclNuclDiffuseElastic()
static const G4double alpha
G4ParticleDefinition * theProton
G4complex AmplitudeFar(G4double theta)
double A(double temperature)
G4double DampFactor(G4double z)
G4complex PhaseFar(G4double theta)
G4double CalcMandelstamS(const G4double mp, const G4double mt, const G4double Plab)
G4double GetCofAlphaCoulomb()
void CalculateRutherfordAnglePar()
G4double CalculateCoulombPhase(G4int n)
G4double GetNuclearRadius()
G4double GetErf(G4double x)
G4double G4ParticleHPJENDLHEData::G4double result
G4PhysicsLogVector * fEnergyVector
G4double GetDiffuseElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A)
G4double GetInvElasticSumXsc(const G4ParticleDefinition *particle, G4double tMand, G4double momentum, G4double A, G4double Z)
void CalculateCoulombPhaseZero()
static constexpr double twopi
G4complex AmplitudeNear(G4double theta)
G4complex GammaLogB2n(G4complex xx)
G4complex PhaseNear(G4double theta)
void InitParameters(const G4ParticleDefinition *theParticle, G4double partMom, G4double Z, G4double A)
G4double GetSinHaPit2(G4double t)
G4double GetExpSin(G4double x)
G4double fNuclearRadiusCof
G4complex GetErfcSer(G4complex z, G4int nMax)
G4double IntegralElasticProb(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A)
G4double GetRutherfordXsc(G4double theta)
G4double GetInvElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double A, G4double Z)
void SetEtaRatio(G4double pa)
G4double ProfileNear(G4double theta)
G4double GetCint(G4double x)
G4double lowestEnergyLimit
G4double fCofAlphaCoulomb
G4double BesselJzero(G4double z)
G4GLOB_DLL std::ostream G4cout
G4double fRutherfordRatio
void SetPlabLowLimit(G4double value)
void SetProfileDelta(G4double pd)
std::vector< G4double > fElementNumberVector
G4double fHalfRutThetaTg2
G4double SampleTableThetaCMS(const G4ParticleDefinition *aParticle, G4double p, G4double Z, G4double A)
G4double GetCoulombElasticXsc(const G4ParticleDefinition *particle, G4double theta, G4double momentum, G4double Z)
void SetLowestEnergyLimit(G4double value)
G4complex TestErfcSer(G4complex z, G4int nMax)
void SetCofLambda(G4double pa)
G4double Profile(G4double theta)
G4double GetProfileLambda()
G4double GetCoulombIntegralXsc(const G4ParticleDefinition *particle, G4double momentum, G4double Z, G4double theta1, G4double theta2)
G4double SampleThetaLab(const G4HadProjectile *aParticle, G4double tmass, G4double A)
static constexpr double halfpi
static constexpr double fine_structure_const
Float_t x2[n_points_geant4]
void SetProfileLambda(G4double pl)
const G4ParticleDefinition * thePionMinus
G4double fNuclearRadiusSquare
G4double GetScatteringAngle(G4int iMomentum, G4int iAngle, G4double position)
G4double CoulombAmplitudeMod2(G4double theta)
static constexpr double Bohr_radius
G4double GetIntegrandFunction(G4double theta)
void SetCofPhase(G4double pa)
void SetCofAlphaCoulomb(G4double pa)
static constexpr double pi
G4double BesselOneByArg(G4double z)
G4double GetLegendrePol(G4int n, G4double x)
void SetNuclearRadiusCof(G4double r)
G4complex AmplitudeGla(G4double theta)
G4complex AmplitudeSim(G4double theta)