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)