44 #define G4hhElastic_h 1
163 void SetParameters();
167 void SetParametersCMS(
G4double plab);
283 fDelta = 1. - fGamma;
295 fLambda = 0.25*fRA*fRA;
302 fBQ = 1. + fBq - 2*std::sqrt(fBq);
303 fBqQ = std::sqrt(fBq*fBQ);
320 G4double sl, sh, ds, rAl, rAh, drA, rBl, rBh, drB, bql, bqh, dbq, bQl, bQh, dbQ, cIl, cIh, dcI;
322 Tkin = std::sqrt(fMassProj*fMassProj + plab*plab) - fMassProj;
327 fSigmaTot = fHadrNuclXsc->GetHadronNucleonXscNS( theDynamicParticle, fTarget );
329 delete theDynamicParticle;
331 fSpp = fMassProj*fMassProj + fMassTarg*fMassTarg + 2.*fMassTarg*std::sqrt(plab*plab + fMassProj*fMassProj);
332 fPcms = std::sqrt( (fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
336 if( fMassProj > trMass )
341 fDelta = 1. - fGamma;
343 if( sCMS <= theNuclNuclData[0][0]*
CLHEP::GeV )
345 this->SetRA(theNuclNuclData[0][1]/CLHEP::GeV,0.173,0.316);
346 this->SetRB(theNuclNuclData[0][2]/CLHEP::GeV,0.173,0.316);
348 this->SetBq(theNuclNuclData[0][3]);
349 this->SetBQ(theNuclNuclData[0][4]);
350 this->SetImCof(theNuclNuclData[0][5]);
352 this->SetLambda(0.25*this->GetRA()*this->GetRA());
353 this->SetEta(0.25*this->GetRB()*this->GetRB());
355 else if( sCMS >= theNuclNuclData[17][0]*CLHEP::GeV )
357 this->SetRA(theNuclNuclData[17][1]/CLHEP::GeV,0.173,0.316);
358 this->SetRB(theNuclNuclData[17][2]/CLHEP::GeV,0.173,0.316);
360 this->SetBq(theNuclNuclData[17][3]);
361 this->SetBQ(theNuclNuclData[17][4]);
362 this->SetImCof(theNuclNuclData[17][5]);
364 this->SetLambda(0.25*this->GetRA()*this->GetRA());
365 this->SetEta(0.25*this->GetRB()*this->GetRB());
369 for( i = 0; i < 18; i++ )
if( sCMS <= theNuclNuclData[i][0]*CLHEP::GeV )
break;
375 ds = (sCMS - sl)/(sh - sl);
385 bql = theNuclNuclData[i-1][3];
386 bqh = theNuclNuclData[i][3];
389 bQl = theNuclNuclData[i-1][4];
390 bQh = theNuclNuclData[i][4];
393 cIl = theNuclNuclData[i-1][5];
394 cIh = theNuclNuclData[i][5];
397 this->SetRA(rAl+drA*ds,0.173,0.316);
398 this->SetRB(rBl+drB*ds,0.173,0.316);
400 this->SetBq(bql+dbq*ds);
401 this->SetBQ(bQl+dbQ*ds);
402 this->SetImCof(cIl+dcI*ds);
404 this->SetLambda(0.25*this->GetRA()*this->GetRA());
405 this->SetEta(0.25*this->GetRB()*this->GetRB());
413 fDelta = 1. - fGamma;
415 if( sCMS <= thePiKaNuclData[0][0]*
CLHEP::GeV )
417 this->SetRA(thePiKaNuclData[0][1]/CLHEP::GeV,0.173,0.316);
418 this->SetRB(thePiKaNuclData[0][2]/CLHEP::GeV,0.173,0.173);
420 this->SetBq(thePiKaNuclData[0][3]);
421 this->SetBQ(thePiKaNuclData[0][4]);
422 this->SetImCof(thePiKaNuclData[0][5]);
424 this->SetLambda(0.25*this->GetRA()*this->GetRA());
425 this->SetEta(this->GetRB()*this->GetRB()/6.);
427 else if( sCMS >= thePiKaNuclData[7][0]*CLHEP::GeV )
429 this->SetRA(thePiKaNuclData[7][1]/CLHEP::GeV,0.173,0.316);
430 this->SetRB(thePiKaNuclData[7][2]/CLHEP::GeV,0.173,0.173);
432 this->SetBq(thePiKaNuclData[7][3]);
433 this->SetBQ(thePiKaNuclData[7][4]);
434 this->SetImCof(thePiKaNuclData[7][5]);
436 this->SetLambda(0.25*this->GetRA()*this->GetRA());
437 this->SetEta(this->GetRB()*this->GetRB()/6.);
441 for( i = 0; i < 8; i++ )
if( sCMS <= thePiKaNuclData[i][0]*CLHEP::GeV )
break;
447 ds = (sCMS - sl)/(sh - sl);
457 bql = thePiKaNuclData[i-1][3];
458 bqh = thePiKaNuclData[i][3];
461 bQl = thePiKaNuclData[i-1][4];
462 bQh = thePiKaNuclData[i][4];
465 cIl = thePiKaNuclData[i-1][5];
466 cIh = thePiKaNuclData[i][5];
469 this->SetRA(rAl+drA*ds,0.173,0.316);
470 this->SetRB(rBl+drB*ds,0.173,0.173);
472 this->SetBq(bql+dbq*ds);
473 this->SetBQ(bQl+dbQ*ds);
474 this->SetImCof(cIl+dcI*ds);
476 this->SetLambda(0.25*this->GetRA()*this->GetRA());
477 this->SetEta(this->GetRB()*this->GetRB()/6.);
513 re = fAlphaP*std::log(fSpp/fSo);
522 G4double re = (fRq*fRq + fRg*fRg)/16.;
532 G4double re = (fRq*fRq + fRG*fRG)/16.;
542 G4double re = (fRQ*fRQ + fRg*fRg)/16.;
552 G4double re = (fRQ*fRQ + fRG*fRG)/16.;
564 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
567 G4complex exp13 = fBq*std::exp(-(Phi13() + fBeta*fBeta*fLambda + fDelta*fDelta*fEta)*t);
568 G4complex exp14 = fBq*std::exp(-(Phi14() + fBeta*fBeta*fLambda + fGamma*fGamma*fEta)*t);
569 G4complex exp23 = fBQ*std::exp(-(Phi23() + fAlpha*fAlpha*fLambda + fDelta*fDelta*fEta)*t);
570 G4complex exp24 = fBQ*std::exp(-(Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta)*t);
572 G4complex res = exp13 + exp14 + exp23 + exp24;
587 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
590 G4complex exp14 = fBqQ*std::exp(-(Phi14() + fBeta*fBeta*fLambda + fGamma*fGamma*fEta)*t);
591 G4complex exp24 = fBQ*std::exp(-(Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta)*t);
600 G4complex z1424 = -(Phi24() + fAlpha*fLambda)*(Phi24() + fAlpha*fLambda);
601 z1424 /= Phi14() + Phi24() + fLambda;
602 z1424 += Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta;
606 exp1424 /= Phi14() + Phi24() + fLambda;
613 F3 *= fSigmaTot*fSigmaTot/(8.*
CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc);
618 dsdt *= real(F13)*real(F13) + imag(F13)*imag(F13);
630 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
635 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
645 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
648 G4complex z1324 = -(Phi24() + fAlpha*fLambda + fGamma*fEta)*(Phi24() + fAlpha*fLambda + fGamma*fEta);
649 z1324 /= Phi13() + Phi24() + fLambda + fEta;
650 z1324 += Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta;
653 exp1324 /= Phi13() + Phi24() + fLambda + fEta;
655 G4complex z1423 = -(Phi23() + fAlpha*fLambda + fDelta*fEta)*(Phi24() + fAlpha*fLambda + fDelta*fEta);;
656 z1423 /= Phi14() + Phi23() + fLambda + fEta;
657 z1423 += Phi23() + fAlpha*fAlpha*fLambda + fDelta*fDelta*fEta;
660 exp1423 /= Phi14() + Phi23() + fLambda + fEta;
667 res *= fBq*fBQ*fSigmaTot*fSigmaTot/(8.*
CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc);
679 G4double p = std::sqrt((fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
684 dsdt *= real(F12)*real(F12) + imag(F12)*imag(F12);
694 G4double p = std::sqrt( (fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
699 G4complex z1314 = -(Phi14() + fGamma*fEta)*(Phi14() + fGamma*fEta);
700 z1314 /= Phi13() + Phi14() + fEta;
701 z1314 += Phi14() + fBeta*fBeta*fLambda + fGamma*fGamma*fEta;
704 exp1314 /= Phi13() + Phi14() + fEta;
708 G4complex z2324 = -(Phi24() + fGamma*fEta)*(Phi24() + fGamma*fEta);;
709 z2324 /= Phi24() + Phi23() + fEta;
710 z2324 += Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta;
713 exp2324 /= Phi24() + Phi23() + fEta;
717 G4complex z1323 = -(Phi23() + fAlpha*fLambda)*(Phi23() + fAlpha*fLambda);
718 z1323 /= Phi13() + Phi23() + fLambda;
719 z1323 += Phi23() + fAlpha*fAlpha*fLambda + fDelta*fDelta*fEta;
722 exp1323 /= Phi13() + Phi23() + fLambda;
726 G4complex z1424 = -(Phi24() + fAlpha*fLambda)*(Phi24() + fAlpha*fLambda);
727 z1424 /= Phi14() + Phi24() + fLambda;
728 z1424 += Phi24() + fAlpha*fAlpha*fLambda + fGamma*fGamma*fEta;
731 exp1424 /= Phi14() + Phi24() + fLambda;
733 G4complex res = fBq*fBq*exp1314 + fBQ*fBQ*exp2324 + fBq*fBQ*exp1323 + fBq*fBQ*exp1424;
737 res *= fSigmaTot*fSigmaTot/(8.*
CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc);
748 G4double p = std::sqrt( (fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp );
751 F123 -= fCofF2*GetF2qQgG(t);
752 F123 -= fCofF3*GetF3qQgG(t);
755 dsdt *= real(F123)*real(F123) + imag(F123)*imag(F123);
768 z1424 /= Phi14() + Phi24() + fAlpha;
769 G4double c1424 = real(z1424)/(CLHEP::hbarc*CLHEP::hbarc);
772 fBQ /= 1. - fSigmaTot*fBQ*c1424;
774 G4cout<<
"fSigmaTot*fBQ*c1424 = "<<fSigmaTot*fBQ*c1424<<
G4endl;
776 G4double ratio = fBqQ + fBQ - fSigmaTot*fBqQ*fBQ*c1424;
791 z1324 /= Phi13() + Phi24() + fLambda + fEta;
792 G4double c1324 = real(z1324)/(CLHEP::hbarc*CLHEP::hbarc);
795 z1423 /= Phi14() + Phi23() + fLambda + fEta;
796 G4double c1423 = real(z1423)/(CLHEP::hbarc*CLHEP::hbarc);
799 fBQ /= 2. - fSigmaTot*fBq*(c1324+1423);
801 G4double ratio = 2.*(fBq + fBQ) - fSigmaTot*fBq*fBQ*(c1324 + c1423);
817 z1324 /= Phi13() + Phi24() + fLambda + fEta;
818 G4double c1324 = real(z1324)/(CLHEP::hbarc*CLHEP::hbarc);
821 z1423 /= Phi14() + Phi23() + fLambda + fEta;
822 G4double c1423 = real(z1423)/(CLHEP::hbarc*CLHEP::hbarc);
825 z1314 /= Phi13() + Phi14() + fEta;
826 G4double c1314 = real(z1314)/(CLHEP::hbarc*CLHEP::hbarc);
829 z2324 /= Phi23() + Phi24() + fEta;
830 G4double c2324 = real(z2324)/(CLHEP::hbarc*CLHEP::hbarc);
833 z1323 /= Phi13() + Phi23() + fLambda;
834 G4double c1323 = real(z1323)/(CLHEP::hbarc*CLHEP::hbarc);
837 z1424 /= Phi14() + Phi24() + fLambda;
838 G4double c1424 = real(z1424)/(CLHEP::hbarc*CLHEP::hbarc);
841 G4double B = fSigmaTot*fBq*(c1324 + c1423 + c1323 + c1424) - 2.;
842 G4double C = 1. + fSigmaTot*fBq*fBq*c1314 - 2*fBq;
846 G4double x1 = ( -B - std::sqrt(B*B-4.*A*C) )/2./A;
847 G4double x2 = ( -B + std::sqrt(B*B-4.*A*C) )/2./A;
850 if( B*B-4.*A*C < 1.e-6 ) fBQ = std::abs(-B/2./A);
851 else if ( B < 0.) fBQ = std::abs( ( -B - std::sqrt(B*B-4.*A*C) )/2./A);
852 else fBQ = std::abs( ( -B + std::sqrt(B*B-4.*A*C) )/2./A);
854 fOptRatio = 2*(fBq+fBQ) - fSigmaTot*fBq*fBQ*(c1324 + c1423 + c1323 + c1424);
855 fOptRatio -= fSigmaTot*fBq*fBq*c1314 + fSigmaTot*c2324*fBQ*fBQ;
871 re = fRq*fRq/8. + fAlphaP*std::log(fSpp/fSo) + 8.*fLambda/9.;
884 re = fRQ*fRQ/8. + fAlphaP*std::log(fSpp/fSo) + 2.*fLambda/9.;
905 G4complex z = 1./( GetAqQ() + 4.*fLambda/9. );
907 result /= 4.*
CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc;
908 result *= fSigmaTot*fCofF2;
918 G4complex z = 1./( GetAqq() + GetAqQ() - 4.*fLambda/9. );
920 result /= 4.*
CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc;
921 result *= fSigmaTot*fCofF3;
931 G4complex z = 1./( GetAQQ() + GetAqQ() + 2.*fLambda/9. );
933 result /= 4.*
CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc;
934 result *= fSigmaTot*fCofF3;
978 q += 2*b*b*b/a/a/a/27.;
1000 G4cout<<
"re_x1 = "<<real(x1)<<
"; re_x2 = "<<real(x2)<<
"; re_x3 = "<<real(x3)<<
G4endl;
1001 G4cout<<
"im_x1 = "<<imag(x1)<<
"; im_x2 = "<<imag(x2)<<
"; im_x3 = "<<imag(x3)<<
G4endl;
1007 if( r1 <= 1. && r1 >= 0. ) fBQ = r1;
1008 else if( r2 <= 1. && r2 >= 0. ) fBQ = r2;
1009 else if( r3 <= 1. && r3 >= 0. ) fBQ = r3;
1012 G4double sqrtBqBQ = std::sqrt(fBq*fBQ);
1013 fOptRatio = fBq + fBQ + 2.*sqrtBqBQ - 1.;
1014 fOptRatio /= sqrtBqBQ*( GetCofS1()*sqrtBqBQ + GetCofS2()*fBq + GetCofS3()*fBQ );
1026 G4double p = std::sqrt(0.25*fSpp - CLHEP::proton_mass_c2*CLHEP::proton_mass_c2);
1028 G4complex exp1 = fBq*std::exp(-GetAqq()*t);
1029 G4complex exp2 = fBQ*std::exp(-GetAQQ()*t);
1030 G4complex exp3 = 2.*std::sqrt(fBq*fBQ)*std::exp(-GetAqQ()*t);
1045 G4double p = std::sqrt(0.25*spp - CLHEP::proton_mass_c2*CLHEP::proton_mass_c2);
1049 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
1059 G4double p = std::sqrt(0.25*fSpp - CLHEP::proton_mass_c2*CLHEP::proton_mass_c2);
1061 G4complex z1 = GetAqq()*GetAQQ() - 16.*fLambda*fLambda/81.;
1062 z1 /= 2.*(GetAqQ() + 4.*fLambda/9.);
1065 G4complex z2 = 0.5*( GetAqQ() - 4.*fLambda/9.);
1071 G4complex z3 = GetAqQ() + 4.*fLambda/9.;
1076 res *= fBq*fBQ*fSigmaTot*fSigmaTot/(8.*
CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc);
1088 G4double p = std::sqrt(0.25*spp - CLHEP::proton_mass_c2*CLHEP::proton_mass_c2);
1092 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
1102 G4double p = std::sqrt(0.25*fSpp - CLHEP::proton_mass_c2*CLHEP::proton_mass_c2);
1104 G4complex z1 = GetAqq()*GetAqQ() - 4.*fLambda*fLambda/81.;
1105 z1 /= GetAqq() + GetAqQ() - 4.*fLambda/9.;
1107 G4complex exp1 = std::exp(-z1*t)*fBq/(GetAqq() + GetAqQ() - 4.*fLambda/9.);
1109 G4complex z2 = GetAqQ()*GetAQQ() - 1.*fLambda*fLambda/81.;
1110 z2 /= GetAQQ() + GetAqQ() + 2.*fLambda/9.;
1112 G4complex exp2 = std::exp(-z2*t)*fBQ/(GetAQQ() + GetAqQ() + 2.*fLambda/9.);
1119 res *= std::sqrt(fBq*fBQ)*fSigmaTot*fSigmaTot/(4.*
CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc);
1130 G4double p = std::sqrt(0.25*fSpp - CLHEP::proton_mass_c2*CLHEP::proton_mass_c2);
1132 F1 -= fCofF2*GetF2(t);
1133 F1 -= fCofF3*GetF3(t);
1135 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
1146 G4double p = std::sqrt(0.25*spp - CLHEP::proton_mass_c2*CLHEP::proton_mass_c2);
1150 G4complex F1 = GetF1(t) - fCofF2*GetF2(t) - fCofF3*GetF3(t);
1153 dsdt *= real(F1)*real(F1) + imag(F1)*imag(F1);
1157 G4complex F10 = GetF1(0.) - fCofF2*GetF2(0.) - fCofF3*GetF3(0.);
1159 fRhoReIm = real(F10)/imag(F10);
1162 dsdt0 *= real(F10)*real(F10) + imag(F10)*imag(F10);
1164 dsdt0 *= std::exp(-fExpSlope*t);
void SetParametersCMS(G4double plab)
void SetRA(G4double rn, G4double pq, G4double pQ)
G4ParticleDefinition * thePionMinus
void CalculateBQ(G4double b)
void SetSigmaTot(G4double stot)
G4PhysicsLogVector * fEnergyVector
void CalculateBqQ13(G4double b)
G4complex GetF3qQgG(G4double qp)
G4complex GetF2qQgG(G4double qp)
G4double GetExpRatioF123(G4double s, G4double q)
G4double lowEnergyRecoilLimit
void SetSpp(G4double spp)
void SetImCof(G4double a)
G4double lowestEnergyLimit
void CalculateBqQ123(G4double b)
G4ParticleDefinition * theProton
static G4KaonMinus * KaonMinus()
G4complex GetF1qQgG(G4double qp)
G4double GetdsdtF12(G4double s, G4double q)
virtual G4bool IsApplicable(const G4HadProjectile &, G4Nucleus &)
std::vector< G4PhysicsTable * > fBankT
std::complex< G4double > G4complex
G4GLOB_DLL std::ostream G4cout
void SetCofF3(G4double f)
const G4ParticleDefinition * GetDefinition() const
G4double lowEnergyLimitHE
void SetAlphaP(G4double a)
void SetCofF2(G4double f)
G4double GetdsdtF1(G4double s, G4double q)
G4HadronNucleonXsc * fHadrNuclXsc
static G4Proton * Proton()
static G4PionPlus * PionPlus()
G4double GetdsdtF123qQgG(G4double q)
G4double GetdsdtF123(G4double q)
G4ParticleDefinition * fProjectile
static G4Neutron * Neutron()
G4complex GetF2(G4double qp)
static const G4double A[nN]
void SetRB(G4double rn, G4double pq, G4double pQ)
G4double GetdsdtF1qQgG(G4double s, G4double q)
static G4PionMinus * PionMinus()
G4double GetOpticalRatio()
G4complex GetF3(G4double qp)
void CalculateBqQ12(G4double b)
G4double GetdsdtF13qQG(G4double s, G4double q)
G4ParticleDefinition * thePionPlus
G4double GetdsdtF12qQgG(G4double s, G4double q)
static G4KaonPlus * KaonPlus()
void SetLambda(G4double L)
G4ThreeVector G4ParticleMomentum
G4ParticleDefinition * fTarget
G4ParticleDefinition * theNeutron
G4complex GetF1(G4double qp)