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)
 
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)