44 #define G4hhElastic_h 1
115 std::vector<G4PhysicsTable*> fBankT;
247 static const G4double theNuclNuclData[18][6];
248 static const G4double thePiKaNuclData[8][6];
285 fDelta = 1. - fGamma;
297 fLambda = 0.25*fRA*fRA;
304 fBQ = 1. + fBq - 2*std::sqrt(fBq);
305 fBqQ = std::sqrt(fBq*fBQ);
322 G4double sl, sh, ds, rAl, rAh, drA, rBl, rBh, drB, bql, bqh, dbq, bQl, bQh, dbQ, cIl, cIh, dcI;
324 Tkin = std::sqrt(fMassProj*fMassProj + plab*plab) - fMassProj;
331 delete theDynamicParticle;
333 fSpp = fMassProj*fMassProj + fMassTarg*fMassTarg + 2.*fMassTarg*std::sqrt(plab*plab + fMassProj*fMassProj);
334 fPcms = std::sqrt( (fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
338 if( fMassProj > trMass )
343 fDelta = 1. - fGamma;
345 if( sCMS <= theNuclNuclData[0][0]*
CLHEP::GeV )
347 this->
SetRA(theNuclNuclData[0][1]/CLHEP::GeV,0.173,0.316);
348 this->
SetRB(theNuclNuclData[0][2]/CLHEP::GeV,0.173,0.316);
350 this->
SetBq(theNuclNuclData[0][3]);
351 this->
SetBQ(theNuclNuclData[0][4]);
352 this->
SetImCof(theNuclNuclData[0][5]);
357 else if( sCMS >= theNuclNuclData[17][0]*CLHEP::GeV )
359 this->
SetRA(theNuclNuclData[17][1]/CLHEP::GeV,0.173,0.316);
360 this->
SetRB(theNuclNuclData[17][2]/CLHEP::GeV,0.173,0.316);
362 this->
SetBq(theNuclNuclData[17][3]);
363 this->
SetBQ(theNuclNuclData[17][4]);
364 this->
SetImCof(theNuclNuclData[17][5]);
371 for( i = 0; i < 18; i++ )
if( sCMS <= theNuclNuclData[i][0]*CLHEP::GeV )
break;
377 ds = (sCMS - sl)/(sh - sl);
387 bql = theNuclNuclData[i-1][3];
388 bqh = theNuclNuclData[i][3];
391 bQl = theNuclNuclData[i-1][4];
392 bQh = theNuclNuclData[i][4];
395 cIl = theNuclNuclData[i-1][5];
396 cIh = theNuclNuclData[i][5];
399 this->
SetRA(rAl+drA*ds,0.173,0.316);
400 this->
SetRB(rBl+drB*ds,0.173,0.316);
402 this->
SetBq(bql+dbq*ds);
403 this->
SetBQ(bQl+dbQ*ds);
415 fDelta = 1. - fGamma;
417 if( sCMS <= thePiKaNuclData[0][0]*
CLHEP::GeV )
419 this->
SetRA(thePiKaNuclData[0][1]/CLHEP::GeV,0.173,0.316);
420 this->
SetRB(thePiKaNuclData[0][2]/CLHEP::GeV,0.173,0.173);
422 this->
SetBq(thePiKaNuclData[0][3]);
423 this->
SetBQ(thePiKaNuclData[0][4]);
424 this->
SetImCof(thePiKaNuclData[0][5]);
429 else if( sCMS >= thePiKaNuclData[7][0]*CLHEP::GeV )
431 this->
SetRA(thePiKaNuclData[7][1]/CLHEP::GeV,0.173,0.316);
432 this->
SetRB(thePiKaNuclData[7][2]/CLHEP::GeV,0.173,0.173);
434 this->
SetBq(thePiKaNuclData[7][3]);
435 this->
SetBQ(thePiKaNuclData[7][4]);
436 this->
SetImCof(thePiKaNuclData[7][5]);
443 for( i = 0; i < 8; i++ )
if( sCMS <= thePiKaNuclData[i][0]*CLHEP::GeV )
break;
449 ds = (sCMS - sl)/(sh - sl);
459 bql = thePiKaNuclData[i-1][3];
460 bqh = thePiKaNuclData[i][3];
463 bQl = thePiKaNuclData[i-1][4];
464 bQh = thePiKaNuclData[i][4];
467 cIl = thePiKaNuclData[i-1][5];
468 cIh = thePiKaNuclData[i][5];
471 this->
SetRA(rAl+drA*ds,0.173,0.316);
472 this->
SetRB(rBl+drB*ds,0.173,0.173);
474 this->
SetBq(bql+dbq*ds);
475 this->
SetBQ(bQl+dbQ*ds);
515 re = fAlphaP*
G4Log(fSpp/fSo);
524 G4double re = (fRq*fRq + fRg*fRg)/16.;
534 G4double re = (fRq*fRq + fRG*fRG)/16.;
544 G4double re = (fRQ*fRQ + fRg*fRg)/16.;
554 G4double re = (fRQ*fRQ + fRG*fRG)/16.;
566 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
569 G4complex exp13 = fBq*std::exp(-(
Phi13() + fBeta*fBeta*fLambda + fDelta*fDelta*fEta)*t);
570 G4complex exp14 = fBq*std::exp(-(
Phi14() + fBeta*fBeta*fLambda + fGamma*fGamma*fEta)*t);
571 G4complex exp23 = fBQ*std::exp(-(
Phi23() + fAlpha*fAlpha*fLambda + fDelta*fDelta*fEta)*t);
572 G4complex exp24 = fBQ*std::exp(-(
Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta)*t);
574 G4complex res = exp13 + exp14 + exp23 + exp24;
589 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
592 G4complex exp14 = fBqQ*std::exp(-(
Phi14() + fBeta*fBeta*fLambda + fGamma*fGamma*fEta)*t);
593 G4complex exp24 = fBQ*std::exp(-(
Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta)*t);
604 z1424 +=
Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta;
620 dsdt *= real(F13)*real(F13) + imag(F13)*imag(F13);
632 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
637 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
647 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
650 G4complex z1324 = -(
Phi24() + fAlpha*fLambda + fGamma*fEta)*(
Phi24() + fAlpha*fLambda + fGamma*fEta);
652 z1324 +=
Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta;
655 exp1324 /=
Phi13() +
Phi24() + fLambda + fEta;
657 G4complex z1423 = -(
Phi23() + fAlpha*fLambda + fDelta*fEta)*(
Phi24() + fAlpha*fLambda + fDelta*fEta);;
659 z1423 +=
Phi23() + fAlpha*fAlpha*fLambda + fDelta*fDelta*fEta;
662 exp1423 /=
Phi14() +
Phi23() + fLambda + fEta;
681 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
686 dsdt *= real(F12)*real(F12) + imag(F12)*imag(F12);
696 G4double p = std::sqrt( (fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
703 z1314 +=
Phi14() + fBeta*fBeta*fLambda + fGamma*fGamma*fEta;
712 z2324 +=
Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta;
721 z1323 +=
Phi23() + fAlpha*fAlpha*fLambda + fDelta*fDelta*fEta;
730 z1424 +=
Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta;
735 G4complex res = fBq*fBq*exp1314 + fBQ*fBQ*exp2324 + fBq*fBQ*exp1323 + fBq*fBQ*exp1424;
750 G4double p = std::sqrt( (fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp );
757 dsdt *= real(F123)*real(F123) + imag(F123)*imag(F123);
774 fBQ /= 1. - fSigmaTot*fBQ*c1424;
776 G4cout<<
"fSigmaTot*fBQ*c1424 = "<<fSigmaTot*fBQ*c1424<<
G4endl;
778 G4double ratio = fBqQ + fBQ - fSigmaTot*fBqQ*fBQ*c1424;
801 fBQ /= 2. - fSigmaTot*fBq*(c1324+1423);
803 G4double ratio = 2.*(fBq + fBQ) - fSigmaTot*fBq*fBQ*(c1324 + c1423);
843 G4double B = fSigmaTot*fBq*(c1324 + c1423 + c1323 + c1424) - 2.;
844 G4double C = 1. + fSigmaTot*fBq*fBq*c1314 - 2*fBq;
848 G4double x1 = ( -B - std::sqrt(B*B-4.*A*C) )/2./A;
849 G4double x2 = ( -B + std::sqrt(B*B-4.*A*C) )/2./A;
852 if( B*B-4.*A*C < 1.e-6 ) fBQ = std::abs(-B/2./A);
853 else if ( B < 0.) fBQ = std::abs( ( -B - std::sqrt(B*B-4.*A*C) )/2./A);
854 else fBQ = std::abs( ( -B + std::sqrt(B*B-4.*A*C) )/2./A);
856 fOptRatio = 2*(fBq+fBQ) - fSigmaTot*fBq*fBQ*(c1324 + c1423 + c1323 + c1424);
857 fOptRatio -= fSigmaTot*fBq*fBq*c1314 + fSigmaTot*c2324*fBQ*fBQ;
873 re = fRq*fRq/8. + fAlphaP*
G4Log(fSpp/fSo) + 8.*fLambda/9.;
886 re = fRQ*fRQ/8. + fAlphaP*
G4Log(fSpp/fSo) + 2.*fLambda/9.;
910 result *= fSigmaTot*fCofF2;
923 result *= fSigmaTot*fCofF3;
936 result *= fSigmaTot*fCofF3;
980 q += 2*b*b*b/a/a/a/27.;
1002 G4cout<<
"re_x1 = "<<real(x1)<<
"; re_x2 = "<<real(x2)<<
"; re_x3 = "<<real(x3)<<
G4endl;
1003 G4cout<<
"im_x1 = "<<imag(x1)<<
"; im_x2 = "<<imag(x2)<<
"; im_x3 = "<<imag(x3)<<
G4endl;
1009 if( r1 <= 1. && r1 >= 0. ) fBQ = r1;
1010 else if( r2 <= 1. && r2 >= 0. ) fBQ = r2;
1011 else if( r3 <= 1. && r3 >= 0. ) fBQ = r3;
1014 G4double sqrtBqBQ = std::sqrt(fBq*fBQ);
1015 fOptRatio = fBq + fBQ + 2.*sqrtBqBQ - 1.;
1051 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
1064 z1 /= 2.*(
GetAqQ() + 4.*fLambda/9.);
1094 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
1134 F1 -= fCofF2*
GetF2(t);
1135 F1 -= fCofF3*
GetF3(t);
1137 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
1155 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
1161 fRhoReIm = real(F10)/imag(F10);
1164 dsdt0 *= real(F10)*real(F10) + imag(F10)*imag(F10);
1166 dsdt0 *=
G4Exp(-fExpSlope*t);
G4double G4ParticleHPJENDLHEData::G4double result
void SetParametersCMS(G4double plab)
void SetRA(G4double rn, G4double pq, G4double pQ)
void CalculateBQ(G4double b)
void SetSigmaTot(G4double stot)
void CalculateBqQ13(G4double b)
static constexpr double proton_mass_c2
G4complex GetF3qQgG(G4double qp)
std::vector< ExP01TrackerHit * > a
G4complex GetF2qQgG(G4double qp)
static constexpr double hbarc
G4double GetExpRatioF123(G4double s, G4double q)
double B(double temperature)
void SetSpp(G4double spp)
void SetImCof(G4double a)
void CalculateBqQ123(G4double b)
static G4KaonMinus * KaonMinus()
G4double GetHadronNucleonXscNS(const G4DynamicParticle *, const G4ParticleDefinition *)
G4complex GetF1qQgG(G4double qp)
G4double GetdsdtF12(G4double s, G4double q)
void BuildTableT(G4ParticleDefinition *target, G4ParticleDefinition *projectile)
virtual G4bool IsApplicable(const G4HadProjectile &, G4Nucleus &)
void BuildTableTest(G4ParticleDefinition *target, G4ParticleDefinition *projectile, G4double plab)
std::complex< G4double > G4complex
G4GLOB_DLL std::ostream G4cout
void SetCofF3(G4double f)
double A(double temperature)
const G4ParticleDefinition * GetDefinition() const
G4double GetTransfer(G4int iMomentum, G4int iTransfer, G4double position)
void SetAlphaP(G4double a)
static constexpr double MeV
void SetCofF2(G4double f)
G4double GetdsdtF1(G4double s, G4double q)
static G4Proton * Proton()
static G4PionPlus * PionPlus()
G4double GetdsdtF123qQgG(G4double q)
G4double GetdsdtF123(G4double q)
static G4Neutron * Neutron()
G4complex GetF2(G4double qp)
void SetRB(G4double rn, G4double pq, G4double pQ)
G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int, G4int)
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
static constexpr double GeV
G4double GetdsdtF1qQgG(G4double s, G4double q)
G4double SampleBisectionalT(const G4ParticleDefinition *p, G4double plab)
static G4PionMinus * PionMinus()
G4double GetOpticalRatio()
G4complex GetF3(G4double qp)
void CalculateBqQ12(G4double b)
G4double GetdsdtF13qQG(G4double s, G4double q)
G4double GetdsdtF12qQgG(G4double s, G4double q)
static G4KaonPlus * KaonPlus()
static constexpr double L
void SetLambda(G4double L)
G4ThreeVector G4ParticleMomentum
static constexpr double pi
G4double SampleTest(G4double tMin)
G4complex GetF1(G4double qp)