/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/Mcgpj/Mcgpj-00-01-04/src/code/src/TEPCrossPart.C

Go to the documentation of this file.
00001 #include <iostream>
00002 #include "TEPCrossPart.h"
00003 #include "TRadGlobal.h"
00004 #include "TKinemCut.h"
00005 #include "TEKFun.h"
00006 #include "TLi2.h"
00007 using namespace std;
00008 double maxmtr = -1;
00009 
00010 TEPCrossPart::TEPCrossPart():TVCrossPart(){
00011   fNPart = 18;
00012 
00013   fK     = new TEKFun();
00014   fD     = new TDFun();
00015   fEvent = new TEvent();
00016 
00017   // soft photons 
00018   fPhD1  = new TPhotonD();
00019   fPhD2  = new TPhotonD();
00020   fPhD3  = new TPhotonD();
00021   fPhD4  = new TPhotonD();
00022 
00023   // initial and final hard photons
00024   fPhI1  = new TPhotonI();
00025   fPhI2  = new TPhotonI();
00026   fPhF3  = new TPhotonF();
00027   fPhF4  = new TPhotonF();
00028 
00029   // vacuum polarization
00030   fVPol  = new TVacuumPol();
00031   fVPol->Init(gGlobal->GetDatadir(), gGlobal->GetVpolFname());
00032 
00033   fHardPhoton = true;
00034   fZeroVP     = false;
00035 }
00036 
00037 void TEPCrossPart::SetThetaMin(const double &th){
00038   fCosMin  = cos(th);
00039   fSinMin2 = 1 - fCosMin*fCosMin;
00040   //  fMax     = pow((3 + fCosMin*fCosMin),2);
00041   //  double c = fCosMin;
00042   //  double s2 = fSinMin2;
00043   //  fNorm    = 2*( c*(75 - 26*c*c - c*c*c*c) + 24*s2*log((1-c)/(1+c)) )/(3*s2)* // Theta norm
00044   fNorm = 2*fCosMin/fSinMin2* // Theta norm
00045     2*gConst->Pi(); // Phi norm
00046 }
00047 
00048 double TEPCrossPart::MakeCosTheta(){
00049   //  double s,r[2];
00050   //  do{
00051   //    gRandom->RndmArray(2,r);
00052   //    fCosTheta = 1 - fSinMin2/(1+fCosMin*(2*r[0]-1));
00053   //    s = 3 + fCosTheta*fCosTheta;
00054   //  }while(s*s < fMax*r[1]);
00055   fCosTheta = 1 - fSinMin2/(1+fCosMin*(2*gRandom->Rndm() - 1));
00056   return fCosTheta;
00057 }
00058 
00059 double TEPCrossPart::GetCNorm(){
00060   //  double s = (1 - fCosTheta)/(3 + fCosTheta*fCosTheta); 
00061   double s = 1 - fCosTheta;
00062   double norm = s*s*fNorm;
00063   return norm;
00064 }
00065 
00066 void TEPCrossPart::Init(){
00067   SetThetaMin((gCut->ThetaMinM()<M_PI-gCut->ThetaMaxM())?gCut->ThetaMinM():M_PI-gCut->ThetaMaxM());
00068 
00069   fK->Init();
00070   fD->Init();
00071   fEvent->Init();
00072 
00073   fPhD1->Init();
00074   fPhD2->Init();
00075   fPhD3->Init();
00076   fPhD4->Init();
00077 
00078   fPhI1->Init();
00079   fPhI2->Init();
00080   fPhF3->Init();
00081   fPhF4->Init();
00082 
00083   if(fZeroVP) 
00084     fVPol->SetZeroVP();
00085   else 
00086     fVPol->SetDefaultVP();
00087 }
00088 
00089 TEPCrossPart::~TEPCrossPart(){
00090   delete fK;
00091   delete fD;
00092   delete fEvent;
00093 
00094   delete fPhD1;
00095   delete fPhD2;
00096   delete fPhD3;
00097   delete fPhD4;
00098 
00099   delete fPhI1;
00100   delete fPhI2;
00101   delete fPhF3;
00102   delete fPhF4;
00103 
00104   delete fVPol;  
00105 }
00106 
00107 double TEPCrossPart::BornShift(const double &z1, const double &z2, const double &c){
00108   double Y1 = fEvent->GetY(0);
00109   double sw = gGlobal->Get_s()*z1*z2;
00110   double tw = -0.5*gGlobal->Get_s()*z1*Y1*(1.-c);
00111   double a  = z1+z2-(z1-z2)*c;
00112   double a2 = a*a;
00113   std::complex<double> vptw  = fVPol->Evalt(tw);
00114   std::complex<double> vpsw  = fVPol->Evals(sw);
00115 
00116   double p1 = z1*(1-c);
00117   double p12 = p1*p1;
00118   double p2 = z2*(1+c);
00119   double p22 = p2*p2;
00120   double cs =  
00121     std::abs(vptw*vptw)*(a2+p22)/(2*p12) +
00122     std::abs(vpsw*vpsw)*(p12+p22)/(2*a2) -
00123     std::real(vptw*std::conj(vpsw))*p22/(a*p1);
00124 
00125   cs *= 4/a2;
00126 
00127   return cs;
00128 }
00129 
00130 // define compensator term for initial particles
00131 #define COMP_I(x) AP*((1/x-1+0.5*x)*(-gGlobal->Get_LnD())+0.5*x)
00132 
00133 // define compensator term for final particles
00134 #define COMP_F(x) AP*((1/x-1+0.5*x)*(-gGlobal->Get_LnD()+2*log(1-x))+0.5*x)
00135 
00136 double TEPCrossPart::GetValue(const unsigned int ipart){
00137   bool IsSoftIE, IsSoftIP, IsSoftFE, IsSoftFP;
00138   IsSoftIE = IsSoftIP = IsSoftFE = IsSoftFP = true;
00139 
00140   bool CompSV, CompIE, CompIP, CompFE, CompFP;
00141   CompSV = CompIE = CompIP = CompFE = CompFP = false;
00142 #ifdef OLDSTYLE
00143   double b  = gGlobal->Get_b();
00144 #endif
00145   double AP = gConst->AlphaPi();
00146 
00147 #ifdef FIXP
00148   double c = 0.3;
00149   fCosTheta = c;
00150 #else
00151   double c = MakeCosTheta();
00152 #endif
00153 
00154   switch(ipart){
00155   case 0:
00156     IsSoftIE = IsSoftIP = IsSoftFE = IsSoftFP = true;
00157     CompSV   = true;
00158     break;
00159   case 1:
00160     IsSoftFP = false;
00161     CompFP   = true;
00162     break;
00163   case 2:
00164     IsSoftFE = false;
00165     CompFE   = true;
00166     break;
00167   case 3:
00168     IsSoftFP = IsSoftFE = false;
00169     break;
00170   case 4:
00171     IsSoftIP = false;
00172     CompIP   = true;
00173     break;
00174   case 5:
00175     IsSoftIP = IsSoftFP = false;
00176     break;
00177   case 6:
00178     IsSoftIP = IsSoftFE = false;
00179     break;
00180   case 7:
00181     IsSoftIP = IsSoftFE = IsSoftFP = false;
00182     break;
00183   case 8:
00184     IsSoftIE = false;
00185     CompIE   = true;
00186     break;
00187   case 9:
00188     IsSoftIE = IsSoftFP = false;
00189     break;
00190   case 10:
00191     IsSoftIE = IsSoftFE = false;
00192     break;
00193   case 11:
00194     IsSoftIE = IsSoftFE = IsSoftFP = false;
00195     break;
00196   case 12:
00197     IsSoftIE = IsSoftIP = false;
00198     break;
00199   case 13:
00200     IsSoftIE = IsSoftIP = IsSoftFP = false;
00201     break;
00202   case 14:
00203     IsSoftIE = IsSoftIP = IsSoftFE = false;
00204     break;
00205   case 15:
00206     IsSoftIE = IsSoftIP = IsSoftFE = IsSoftFP = false;
00207     break;
00208   case 16:
00209     // one photon out of the narrow cones with singularity about initial particles
00210     if(fHardPhoton && fEvent->MakeEvent(c,fPhI1,1)){
00211       double t1 = gConst->Alpha()/(2*gConst->Pi2())*RGamma();
00212       double norm = fPhI1->GetENorm()*fPhI1->GetThNorm()*fPhI1->GetPhiNorm()*GetCNorm();
00213       return t1*norm;
00214     }
00215     return 0;
00216     break;
00217   case 17:
00218     // one photon out of the narrow cones with singularity about final particles
00219     if(fHardPhoton && fEvent->MakeEvent(c,fPhF3,0)){
00220       //      fEvent->CosPrint();
00221       double t1 = gConst->Alpha()/(2*gConst->Pi2())*RGamma();
00222       double norm = fPhF3->GetENorm()*fPhF3->GetThNormF()*fPhF3->GetPhiNorm()*GetCNorm();
00223       //      cout<<DB(RGamma())<<DB(GetCNorm())<<DB(fPhF3->GetENorm())<<DB(fPhF3->GetThNorm())<<endl;
00224       /*      
00225       if(t1*norm>maxmtr){
00226         maxmtr = t1*norm;
00227         fEvent->Print();
00228         cout<<maxmtr<<" "<<t1<<" "<<norm<<endl<<flush;
00229       }
00230       */
00231       return t1*norm;
00232     }
00233     return 0;
00234     break;
00235   case 18:
00236     // Soft and virtial part for one photon cross-section (testing purpose only)
00237     if(fEvent->MakeEvent(c,0,0,0,0)){
00238       double lde = gGlobal->Get_LnDelta();
00239       return BornShift(1,1,c)*
00240         (1
00241          + 2*AP*(gGlobal->Get_L()-1)*(2*lde + 1.5)
00242          - 4*AP*log((1+c)/(1-c))*lde 
00243          + AP*fK->Eval(1,1,c)
00244          )*GetCNorm();
00245     }
00246     return 0;
00247     break;
00248   case 19:
00249     // preprint INP 78-82 soft and virtual part
00250     if(fEvent->MakeEvent(c,0,0,0,0)){
00251       double lde = gGlobal->Get_LnDelta();
00252       double rho = gGlobal->Get_L();
00253       double z = c;
00254       double z2 = z*z;
00255       double z3 = z2*z;
00256       double z4 = z3*z;
00257 #define F(x) TLi2::Eval(x)
00258       return BornShift(1,1,c)*
00259         (1
00260          + 2*AP*
00261          (
00262           2*(rho - 1 - log((1+z)/(1-z)))*lde - F(0.5*(1+z)) + F(0.5*(1-z)) - 23./9. + 
00263           11./6.*rho + 
00264           0.5*pow(3+z2,-2)*(
00265                             M_PI*M_PI/3.*(2*z4 - 3*z3 - 15*z) + 
00266                             0.5*(2*z4-3*z3+9*z2+3*z+21)*pow(log(0.5*(1-z)),2)-
00267                             (z4+z2-2*z)*pow(log(0.5*(1+z)),2) - 
00268                             (z3+4*z2+5*z+6)*pow(log((1+z)/(1-z)),2)+
00269                             1./3.*(11*z3+33*z2+21*z+111)*log(0.5*(1-z))+
00270                             (z3-3*z2+7*z-5)*log(0.5*(1+z))
00271                             )
00272           )
00273          )*GetCNorm();
00274 #undef F
00275     }
00276     
00277     return 0;
00278     break;
00279   case 20:
00280     // one photon out of the narrow cones with singularity about initial particles
00281     if(fHardPhoton && fEvent->MakeEvent(c,fPhI1,1)){
00282       double t1 = gConst->Alpha()/(2*gConst->Pi2())*RGamma_kuraev_eidelman();
00283       double norm = fPhI1->GetENorm()*fPhI1->GetThNorm()*fPhI1->GetPhiNorm()*GetCNorm();
00284       return t1*norm;
00285     }
00286     return 0;
00287     break;
00288   case 21:
00289     // one photon out of the narrow cones with singularity about final particles
00290     if(fHardPhoton && fEvent->MakeEvent(c,fPhF3,0)){
00291       double t1 = gConst->Alpha()/(2*gConst->Pi2())*RGamma_kuraev_eidelman();
00292       double norm = fPhF3->GetENorm()*fPhF3->GetThNormF()*fPhF3->GetPhiNorm()*GetCNorm();
00293 
00294       if(t1*norm>maxmtr){
00295         maxmtr = t1*norm;
00296         fEvent->Print();
00297         RGamma_kuraev_eidelman(true);
00298         cout<<maxmtr<<" "<<t1<<" "<<norm<<endl<<flush;
00299       }
00300 
00301       return t1*norm;
00302     }
00303     return 0;
00304     break;
00305   default:
00306     return 0;
00307     break;
00308   }
00309 
00310   if(!fHardPhoton) CompSV = CompIE = CompIP = CompFE = CompFP = false;
00311 
00312   double RedCut = 1e-10;//gGlobal->Get_InfraRedCut();
00313 
00314   double  x1g, x2g, x3g, x4g;
00315   x1g = x2g = x3g = x4g = 0;
00316 
00317   double  z1, z2, z3, z4;
00318   z1 = z2 = z3 = z4 = 1;
00319 
00320   if(IsSoftIE)
00321     x1g = fPhD1->GetEnergy(); 
00322   else
00323     x1g = fPhI1->GetEnergy();
00324   z1 = 1 - x1g;
00325   
00326   if(IsSoftIP)
00327     x2g = fPhD2->GetEnergy(); 
00328   else
00329     x2g = fPhI2->GetEnergy();
00330   z2 = 1 - x2g;
00331   
00332   if(fEvent->MakeEvent(c,x1g,x2g,0,0)){
00333 
00334     double Beta2_m, D0_m;
00335     if(IsSoftFE){
00336       gGlobal->Get_VarPar(1, Beta2_m, D0_m);
00337       //      gGlobal->Get_VarPar(fEvent->GetY(0), Beta2_m, D0_m);
00338       x3g = fPhD3->GetEnergy(gGlobal->Get_XMin(), Beta2_m); 
00339     }else
00340       x3g = fPhF3->GetEnergy();
00341     z3 = 1 - x3g;
00342     
00343     double Beta2_p, D0_p;
00344     if(IsSoftFP){
00345       gGlobal->Get_VarPar(1, Beta2_p, D0_p);
00346       //      gGlobal->Get_VarPar(fEvent->GetY(1), Beta2_p, D0_p);
00347       x4g = fPhD4->GetEnergy(gGlobal->Get_XMin(), Beta2_p);
00348     }else
00349       x4g = fPhF4->GetEnergy();
00350     z4 = 1 - x4g;
00351       
00352     if(fEvent->MakeEventN(x3g,x4g)){
00353 
00354       double D1, D2, D3, D4, t2 = 0;
00355 
00356       if(IsSoftIE){
00357 #ifdef OLDSTYLE
00358         D1 = b;
00359 #else
00360         if(x1g>RedCut)
00361           D1 = fD->EvalSoft(x1g)*fPhD1->GetENorm();
00362         else
00363           D1 = fD->EvalSoft(RedCut)*fPhD1->GetENorm();
00364 #endif
00365       }else{
00366         double norm = fPhI1->GetENorm();
00367         D1 = fD->Eval(z1)*norm;
00368         if(CompIE) t2 = COMP_I(x1g)*norm;
00369       }
00370 
00371       if(IsSoftIP)
00372 #ifdef OLDSTYLE
00373         D2 = b;
00374 #else
00375         if(x2g>RedCut)
00376           D2 = fD->EvalSoft(x2g)*fPhD2->GetENorm();
00377         else
00378           D2 = fD->EvalSoft(RedCut)*fPhD2->GetENorm();
00379 #endif
00380       else{
00381         double norm = fPhI2->GetENorm();
00382         D2 = fD->Eval(z2)*norm;
00383         if(CompIP) t2 = COMP_I(x2g)*norm;
00384       }
00385 
00386       if(IsSoftFE)
00387 #ifdef OLDSTYLE
00388         D3 = b;
00389 #else
00390         if(x3g>RedCut)
00391           D3 = fD->EvalSoft(x3g, Beta2_m, D0_m)*fPhD3->GetENorm();
00392         else
00393           D3 = fD->EvalSoft(RedCut, Beta2_m, D0_m)*fPhD3->GetENorm();
00394 #endif
00395       else{
00396         gGlobal->Get_VarPar(fEvent->GetY(0), Beta2_m, D0_m);
00397         double norm = fPhF3->GetENorm();
00398         D3 = fD->Eval(z3, Beta2_m, D0_m)*norm;
00399         if(CompFE) t2 = COMP_F(x3g)*norm;
00400       }
00401 
00402       if(IsSoftFP){
00403 #ifdef OLDSTYLE
00404         D4 = b;
00405 #else
00406         if(x4g>RedCut)
00407           D4 = fD->EvalSoft(x4g, Beta2_p, D0_p)*fPhD4->GetENorm();
00408         else
00409           D4 = fD->EvalSoft(RedCut, Beta2_p, D0_p)*fPhD4->GetENorm();
00410 #endif
00411       }else{
00412         gGlobal->Get_VarPar(fEvent->GetY(1), Beta2_p, D0_p);
00413         double norm = fPhF4->GetENorm();
00414         D4 = fD->Eval(z4, Beta2_p, D0_p)*norm;
00415         if(CompFP) t2 = COMP_F(x4g)*norm;
00416       }
00417 
00418       if(CompSV)
00419         t2 = -4*AP*log((1+c)/(1-c))*gGlobal->Get_LnDelta();
00420       double Ksv;
00421       if(fHardPhoton)
00422         Ksv = fK->Eval(z1,z2,c);
00423       else
00424         Ksv = 0;
00425       double t1  = (1 + AP*Ksv)*D1*D2*D3*D4;
00426 
00427       return BornShift(z1,z2,c)*(t1+t2)*GetCNorm();
00428     }
00429   }
00430   return 0;
00431 }
00432 
00433 double TEPCrossPart::RGamma(){
00434   double em,pm,cm, ep,pp,cp, eg,pg,cg;
00435   fEvent->GetPPar(0,em,pm,cm);
00436   fEvent->GetPPar(1,ep,pp,cp);
00437   fEvent->GetPPar(2,eg,pg,cg);
00438 
00439   double  s, s1,  t, t1,  u, u1;
00440   s  = 4;
00441   s1 = 4*(1 - eg);
00442 
00443   double BetaI = gGlobal->Get_BetaI();
00444   t  = -2*(em - BetaI*pm*cm);
00445   t1 = -2*(ep + BetaI*pp*cp);
00446 
00447   u  = -2*(ep - BetaI*pp*cp);
00448   u1 = -2*(em + BetaI*pm*cm);
00449 
00450   double is  = 1/s;
00451   double is1 = 1/s1;
00452   double it  = 1/t;
00453   double it1 = 1/t1;
00454 
00455   double s_ev = gGlobal->Get_s()*0.25;
00456   std::complex<double> vpt,vpt1,vps,vps1;
00457   vpt  = fVPol->Evalt(s_ev*t);
00458   vpt1 = fVPol->Evalt(s_ev*t1);
00459   vps  = fVPol->Evals(s_ev*s);
00460   vps1 = fVPol->Evals(s_ev*s1);
00461 
00462   //  cout<<DB(vpt)<<DB(vpt1)<<DB(vps)<<DB(vps1)<<endl;
00463   double vpss, vps1s1, vptt, vpt1t1, vptct1, vpscs1, vptcs, vpt1cs1, vpt1cs, vptcs1;
00464   vpss    = std::real(vps*std::conj(vps));
00465   vps1s1  = std::real(vps1*std::conj(vps1));
00466   vptt    = std::real(vpt*std::conj(vpt));
00467   vpt1t1  = std::real(vpt1*std::conj(vpt1));
00468 
00469   vptct1  = std::real(vpt*std::conj(vpt1));
00470   vpscs1  = std::real(vps*std::conj(vps1));
00471   vptcs   = std::real(vpt*std::conj(vps));
00472   vpt1cs1 = std::real(vpt1*std::conj(vps1));
00473   vpt1cs  = std::real(vpt1*std::conj(vps));
00474   vptcs1  = std::real(vpt*std::conj(vps1));
00475 
00476   double chi_m,chi_p,chi_m_p,chi_p_p;
00477   chi_m   = eg*(1 - BetaI*cg);
00478   chi_p   = eg*(1 + BetaI*cg);
00479   chi_m_p = 2*(1 - ep);
00480   chi_p_p = 2*(1 - em);
00481   //  cout<<DB(chi_m)<<DB(chi_p)<<DB(chi_m_p)<<DB(chi_p_p)<<endl;
00482   double ichi_m   = 1/chi_m;
00483   double ichi_p   = 1/chi_p;
00484   double ichi_m_p = 1/chi_m_p;
00485   double ichi_p_p = 1/chi_p_p;
00486 
00487   double SS,S1S1,SS1,TT,T1T1,TT1,TS,TS1,T1S,T1S1;
00488   SS   = t*t + t1*t1 + u*u + u1*u1;
00489   S1S1 = SS;
00490   SS1  = SS*(t*chi_p*chi_p_p + t1*chi_m*chi_m_p - u*chi_p*chi_m_p - u1*chi_m*chi_p_p);
00491   TT   = s*s + s1*s1 + u*u + u1*u1;
00492   T1T1 = TT;
00493   TT1  = TT*(u*chi_p*chi_m_p + u1*chi_m*chi_p_p + s*chi_m_p*chi_p_p + s1*chi_m*chi_p);
00494   TS   = -0.5*( u*u + u1*u1 )*( s *(t  + s1) + t *(s  + t1) - u*u1 );
00495   TS1  = -0.5*( u*u + u1*u1 )*( t *(s1 + t1) + s1*(s  + t ) - u*u1 );
00496   T1S  =  0.5*( u*u + u1*u1 )*( t1*(s  + t ) + s *(s1 + t1) - u*u1 );
00497   T1S1 =  0.5*( u*u + u1*u1 )*( s1*(s  + t1) + t1*(s1 + t ) - u*u1 );
00498   //  cout<<DB(SS)<<DB(TT)<<DB(TS)<<DB(TS1)<<DB(T1S)<<DB(T1S1)<<endl;
00499   /*
00500   double R = 
00501     vpss*SS/(s*chi_m_p*chi_p_p) + 
00502     vps1s1*S1S1/(s1*chi_m*chi_p) -
00503     vptt*TT/(t*chi_p*chi_p_p) -
00504     vpt1t1*T1T1/(t1*chi_m*chi_m_p) + 
00505     (vptct1*TT1/(t*t1)-vpscs1*SS1/(s*s1))/(chi_m*chi_m_p*chi_p*chi_p_p) +
00506     vptcs*TS/(t*s*chi_m_p*chi_p*chi_p_p) +
00507     vpt1cs1*T1S1/(t1*s1*chi_m*chi_m_p*chi_p) -
00508     vpt1cs*T1S/(t1*s*chi_m*chi_m_p*chi_p_p) -
00509     vptcs1*TS1/(t*s1*chi_m*chi_p*chi_p_p);
00510   cout<<DB(R)<<endl;
00511   */
00512   double R = 
00513     vpss*SS*(is*ichi_m_p*ichi_p_p) + 
00514     vps1s1*S1S1*(is1*ichi_m*ichi_p) -
00515     vptt*TT*(it*ichi_p*ichi_p_p) -
00516     vpt1t1*T1T1*(it1*ichi_m*ichi_m_p) + 
00517     (vptct1*TT1*(it*it1) - vpscs1*SS1*(is*is1))*(ichi_m*ichi_m_p*ichi_p*ichi_p_p) +
00518     vptcs*TS*(it*is*ichi_m_p*ichi_p*ichi_p_p) +
00519     vpt1cs1*T1S1*(it1*is1*ichi_m*ichi_m_p*ichi_p) -
00520     vpt1cs*T1S*(it1*is*ichi_m*ichi_m_p*ichi_p_p) -
00521     vptcs1*TS1*(it*is1*ichi_m*ichi_p*ichi_p_p);
00522   /*
00523   double vptt1   = std::abs(vpt*vpt1);
00524   double vprtt1  = std::real(vpt*vpt1);
00525   double Rss1  = -vptt*TT/(t*chi_p*chi_p_p) - vpt1t1*T1T1/(t1*chi_m*chi_m_p)
00526     + vprtt1*TT/(t*t1)*(u/(chi_m*chi_p_p) + u1/(chi_p*chi_m_p)) 
00527     - vpscs1*SS/(s*s1)*
00528     (t/(chi_m*chi_m_p) + t1/(chi_p*chi_p_p) - 
00529      u/(chi_m*chi_p_p) - u1/(chi_p*chi_m_p)) +
00530     (vptcs*chi_m*TS/(t*s) + vpt1cs1*chi_p_p*T1S1/(t1*s1) - 
00531      vpt1cs*chi_p*T1S/(t1*s) - vptcs1*chi_m_p*TS1/(t*s1))/(chi_p*chi_m*chi_p_p*chi_m_p);
00532   double Rss   = (vpss*SS/s + vptt1*TT*s1/(t*t1))/(chi_p_p*chi_m_p);
00533   double Rs1s1 = (vps1s1*SS/s1 + vptt1*TT*s/(t*t1))/(chi_p*chi_m);
00534   double R1 = Rss + Rss1 + Rs1s1;
00535   */
00536 
00537   double me2 = gGlobal->Get_MI2();
00538   double st2 = (s+t)*(s+t);
00539   double b1 = 0.5*(vptt  *( s*s  +  st2)*it *it  + vpss  *( st2  +  t*t )* is*is ) + vptcs  *st2 *is *it;
00540   double st12 = (s+t1)*(s+t1);
00541   double b2 = 0.5*(vpt1t1*( s*s  + st12)*it1*it1 + vpss  *( st12 + t1*t1)* is*is ) + vptcs  *st12*is *it1;
00542   double s1t2 = (s1+t)*(s1+t);
00543   double b3 = 0.5*(vptt  *(s1*s1 + s1t2)*it *it  + vps1s1*(s1t2  +  t*t )*is1*is1) + vptcs1 *s1t2*is1*it;
00544   double s1t12 = (s1+t)*(s1+t1);
00545   double b4 = 0.5*(vpt1t1*(s1*s1 +s1t12)*it1*it1 + vps1s1*(s1t12 + t1*t1)*is1*is1) + vpt1cs1*s1t12*is1*it1;
00546   R -= 4*me2*(
00547               (ichi_p_p*ichi_p_p)*b1 +
00548               (ichi_m_p*ichi_m_p)*b2 +
00549               (ichi_p  *ichi_p  )*b3 +
00550               (ichi_m  *ichi_m  )*b4
00551               );
00552 
00553   double CosPsi = fEvent->GetCosPsi();
00554   double gamma  = eg*pm/(2 - eg*(1 - em*CosPsi/pm));
00555 
00556   return R*gamma*0.25;
00557 }
00558 
00559 #define DB(x) #x<<"="<<x<<", "
00560 double TEPCrossPart::RGamma_kuraev_eidelman(const bool &print){
00561   // preprint INP 78-82
00562   double em,pm,cm, ep,pp,cp, eg,pg,cg;
00563   fEvent->GetPPar(0,em,pm,cm);
00564   fEvent->GetPPar(1,ep,pp,cp);
00565   fEvent->GetPPar(2,eg,pg,cg);
00566 
00567   double s  = 4;
00568   double s1 = s*(1 - eg);
00569 
00570   double u1 = s*(-1. + 0.5*em*(1.-cm));
00571   double t1 = -0.5*s*em*(1.+cm);
00572   double t  = -0.5*s*em*(1.-cm);
00573   double u  = s*(-1 + eg + 0.5*em*(1+cm));
00574   double utilde  = s*(-1 + 0.5*em*(1+cm));
00575   double t1tilde = s*(-1 + eg +0.5*em*(1-cm));
00576 
00577   double BetaI   = gGlobal->Get_BetaI();
00578   double chi_m   = eg*(1 - BetaI*cg);
00579   double chi_p   = eg*(1 + BetaI*cg);
00580   double chi_m_p = 2*(1 - ep);
00581   double chi_p_p = 2*(1 - em);
00582   double me2  = gGlobal->Get_MI2();
00583   double R_i = 
00584     0.5*(u     *u1*pow(1/t1+1/s1,2) + s*s1/pow(t1     ,2) + 
00585          t*t1     /pow(s1,2))*s*(-me2*(1-eg)/pow(chi_m,2) + (1+pow(1-eg,2))/(eg*chi_m)) +
00586     0.5*(utilde*u1*pow(1/t +1/s1,2) + s*s1/pow(t1tilde,2) + 
00587          t*t1tilde/pow(s1,2))*s*(-me2*(1-eg)/pow(chi_p,2) + (1+pow(1-eg,2))/(eg*chi_p));
00588 
00589   double R_f = pow((3+cm*cm)/(1-cm),2)*s*(-me2/(4*pow(chi_p_p,2))-me2/(4*pow(chi_m_p,2)) + 
00590                                           (1+pow(1-eg,2))/(4*eg)*(1/chi_m_p + 1/chi_p_p));
00591   
00592   double R = R_i + R_f;
00593   
00594   double CosPsi = fEvent->GetCosPsi();
00595   double gamma  = eg*pm/(2 - eg*(1 - em*CosPsi/pm));
00596   if(print)cout<<DB(R_i)<<DB(R_f)<<DB(gamma)<<DB(u)<<DB(u1)<<DB(utilde)<<DB(t)<<DB(t1)<<DB(t1tilde)<<DB(chi_m)<<DB(chi_p)<<DB(chi_m_p)<<DB(chi_p_p)<<endl<<flush;
00597   return R*gamma*0.25;
00598 }

Generated on Tue Nov 29 23:12:41 2016 for BOSS_7.0.2 by  doxygen 1.4.7