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

Go to the documentation of this file.
00001 #include <iostream>
00002 #define DB(x) #x<<"="<<x<<", "
00003 #include "TPiCrossPart.h"
00004 #include "TPiFormFactor.h"
00005 #include "TRadGlobal.h"
00006 
00007 TPiCrossPart::TPiCrossPart():TVCrossPart(){
00008   fNPart = 5;
00009 
00010   fK     = new TPiKFun();
00011   fD     = new TDFun();
00012   fEvent = new TEvent();
00013 
00014   // soft photons 
00015   fPhD1  = new TPhotonD();
00016   fPhD2  = new TPhotonD();
00017 
00018   // initial hard photons
00019   fPhI1  = new TPhotonI();
00020   fPhI2  = new TPhotonI();
00021   
00022   // final hard photons with spherical angle distribution
00023   fPhFS  = new TPhotonFS();
00024 
00025   // Pion Formfactor
00026   fFpi   = new TPiFormFactor();
00027   
00028   fBetaPi = gGlobal->Get_BetaF();
00029 
00030   fCompPiSV = (1+fBetaPi*fBetaPi)/(2*fBetaPi)*log((1+fBetaPi)/(1-fBetaPi))-1;
00031 
00032   fHardPhoton = true;
00033   fZeroVP     = false;
00034   fNoFSR      = false;
00035   /*
00036   for(int i=0;i<=1000;i++){
00037     double c = -1 + 2.*i/1000.;
00038     std::cout<<"FPI "<<c<<" "<<fK->Eval_odd(gGlobal->Get_s(),c)<<std::endl;
00039   }
00040   */
00041 }
00042 
00043 void TPiCrossPart::SetThetaMin(const double &th){
00044   fCosMin  = cos(th);
00045   // integral of sin^2(theta)dcos(theta) from -fCosMin to fCosMin
00046   fNorm    = 2*fCosMin*(1 - fCosMin*fCosMin/3)* // Theta norm
00047     2*gConst->Pi();                           // Phi norm  
00048 }
00049 
00050 double TPiCrossPart::MakeCosTheta(){
00051   // generate distribution sin^2(theta)dcos(theta)
00052   double c;
00053   do{
00054     c = (2*gRandom->Rndm()-1)*fCosMin;
00055   }while(1 - c*c < gRandom->Rndm());
00056   fSinTheta2 = 1 - c*c;
00057   return c;
00058 }
00059 
00060 double TPiCrossPart::GetCNorm(){
00061   return fNorm/fSinTheta2;
00062 }
00063 
00064 void TPiCrossPart::Init(){
00065   SetThetaMin(gGlobal->Get_ThetaMin());
00066 
00067   fD->Init();
00068   fEvent->Init();
00069 
00070   fPhD1->Init();
00071   fPhD2->Init();
00072 
00073   fPhI1->Init();
00074   fPhI2->Init();
00075 
00076   fPhFS->Init();
00077 
00078   fFpi->Init();
00079 
00080   if(fZeroVP)
00081     fFpi->SetUnitFF();
00082   else 
00083     fFpi->SetDefaultFF();  
00084 }
00085 
00086 TPiCrossPart::~TPiCrossPart(){
00087   delete fK;
00088   delete fD;
00089   delete fEvent;
00090 
00091   delete fPhD1;
00092   delete fPhD2;
00093 
00094   delete fPhI1;
00095   delete fPhI2;
00096   
00097   delete fPhFS;
00098   
00099   delete fFpi;
00100 }
00101 
00102 double r_abs_max = 0, r_rel_max = 0;
00103 double TPiCrossPart::BornShift(const double &z1, const double &z2, const double &c){
00104   double Y1, y1, c1;
00105   fEvent->GetPPar(0,Y1,y1,c1);
00106   std::complex<double> Fpi = fFpi->Eval(gGlobal->Get_s()*z1*z2);
00107   double Fpi2 = std::abs(Fpi*std::conj(Fpi));
00108   double cs = Fpi2*y1*y1*y1*(1-c*c)/(z1*z1*z2*z2*(z1+z2+(z2-z1)*c*Y1/y1));
00109   return cs*0.25;
00110 }
00111 
00112 // define compensator term for initial particles
00113 #define COMP_I(x) AP*(-(1/x-1+0.5*x)*gGlobal->Get_LnD()+0.5*x)
00114 
00115 double TPiCrossPart::GetValue(const unsigned int ipart){
00116   bool IsSoftIE, IsSoftIP;
00117   IsSoftIE = IsSoftIP = true;
00118 
00119   bool CompSV, CompIE, CompIP;
00120   CompSV = CompIE = CompIP = false;
00121   double AP = gConst->AlphaPi();
00122 
00123   double c  = MakeCosTheta();
00124 
00125   switch(ipart){
00126   case 0:
00127     IsSoftIE = IsSoftIP = true;
00128     CompSV   = true;
00129     break;
00130   case 1:
00131     IsSoftIP = false;
00132     CompIP   = true;
00133     break;
00134   case 2:
00135     IsSoftIE = false;
00136     CompIE   = true;
00137     break;
00138   case 3:
00139     IsSoftIE = IsSoftIP = false;
00140     break;
00141   case 4:
00142     // one photon out of the narrow cones with singularity about initial particles
00143     if(fHardPhoton && fEvent->MakeEvent(c,fPhI1,2)){
00144       //#define TEST
00145 #ifdef TEST
00146       double r0 = R_Gamma();
00147       //      double r1 = R_Gamma_t();
00148       double r1 = R_Gamma_kuraev_eidelman();
00149       if(r_abs_max<fabs(r1-r0)||r_rel_max<fabs((r1-r0)/r0)){
00150         std::cout<<DB(r0)<<DB(r1)<<DB(r1-r0)<<DB((r1-r0)/r0)<<std::endl;
00151         if(r_abs_max<fabs(r1-r0))r_abs_max = fabs(r1-r0);
00152         if(r_rel_max<fabs((r1-r0)/r0))r_rel_max = fabs((r1-r0)/r0);
00153       }
00154       double t1 = gConst->Alpha()/(2*gConst->Pi2())*r1;
00155 #else
00156       double t1 = gConst->Alpha()/(2*gConst->Pi2())*R_Gamma();
00157 #endif
00158       double norm = fPhI1->GetENorm()*fPhI1->GetThNorm()*fPhI1->GetPhiNorm()*GetCNorm();
00159       return t1*norm;
00160     }
00161     return 0;
00162     break;
00163   case 5:
00164     // Soft and virtial part for one photon cross-section (testing purpose only)
00165     if(fEvent->MakeEvent(c,(double)0.,(double)0.)){
00166       double lde = gGlobal->Get_LnDelta();
00167       double Ae = (gGlobal->Get_L()-1)*(lde + 3./4.); 
00168       // + (M_PI*M_PI/6 - 1) -- this part in Api
00169       double Api = (fCompPiSV + 2*log((1 - fBetaPi*c)/(1 + fBetaPi*c)))*lde
00170         + fK->Eval(gGlobal->Get_s(),c); // fK contains charge-(even+odd) part
00171       //      std::cout<<DB(lde)<<DB(Ae)<<DB(Api)<<std::endl;
00172       return BornShift(1,1,c)*(1 + 2*AP*(Ae + Api))*GetCNorm();
00173     }
00174     return 0;
00175     break;
00176   case 6:
00177     // Soft and virtial part for one photon cross-section (testing purpose only)
00178     if(fEvent->MakeEvent(c,(double)0.,(double)0.)){
00179       double lde = gGlobal->Get_LnDelta();
00180       double rho_e = gGlobal->Get_L();
00181       return BornShift(1,1,c)*
00182         (1 + 2*AP*((rho_e-1)*lde+13./12.*rho_e - 14./9. + M_PI*M_PI/6.))*GetCNorm();
00183     }
00184     return 0;
00185     break;
00186   case 7:
00187     // one photon out of the narrow cones with singularity about initial particles
00188     if(fHardPhoton && fEvent->MakeEvent(c,fPhI1,2)){
00189       double t1 = gConst->Alpha()/(2*gConst->Pi2())*R_Gamma_kuraev_eidelman();
00190       double norm = fPhI1->GetENorm()*fPhI1->GetThNorm()*fPhI1->GetPhiNorm()*GetCNorm();
00191       return t1*norm;
00192     }
00193     return 0;
00194     break;
00195   default:
00196     return 0;
00197     break;
00198   }
00199 
00200   if(!fHardPhoton) CompSV = CompIE = CompIP  = false;
00201 
00202   double  x1g, x2g;
00203   x1g = x2g = 0;
00204 
00205   double  z1, z2;
00206   z1 = z2 = 1;
00207 
00208   if(IsSoftIE)
00209     x1g = fPhD1->GetEnergy(); 
00210   else
00211     x1g = fPhI1->GetEnergy();
00212   z1 = 1 - x1g;
00213   
00214   if(IsSoftIP)
00215     x2g = fPhD2->GetEnergy(); 
00216   else
00217     x2g = fPhI2->GetEnergy();
00218   z2 = 1 - x2g;
00219   
00220   if(fEvent->MakeEvent(c, x1g, x2g)){
00221     
00222     double D1, D2, t2 = 0;
00223 
00224     if(IsSoftIE)
00225       D1 = fD->EvalSoft(x1g)*fPhD1->GetENorm();
00226     else{
00227       double norm = fPhI1->GetENorm();
00228       D1 = fD->Eval(z1)*norm;
00229       if(CompIE) t2 = COMP_I(x1g)*norm;
00230     }
00231     
00232     if(IsSoftIP)
00233       D2 = fD->EvalSoft(x2g)*fPhD2->GetENorm();
00234     else{
00235       double norm = fPhI2->GetENorm();
00236       D2 = fD->Eval(z2)*norm;
00237       if(CompIP) t2 = COMP_I(x2g)*norm;
00238     }
00239     
00240     if(CompSV && !fNoFSR) t2 = 2*AP*gGlobal->Get_LnDelta()*
00241                  (fCompPiSV + 2*log((1 - fBetaPi*c)/(1 + fBetaPi*c)));
00242 
00243     double Ksv = 0;
00244     if(fNoFSR)
00245       Ksv = fK->Eval_a();
00246     else
00247       Ksv = fK->Eval(z1*z2*gGlobal->Get_s(),c);
00248 
00249     double t1 = (1 + 2*AP*Ksv)*D1*D2;
00250     
00251     return BornShift(z1,z2,c)*(t1+t2)*GetCNorm();
00252     
00253   }
00254   return 0;
00255 }
00256 
00257 double TPiCrossPart::R_Gamma(){
00258   double em,pm,cm, ep,pp,cp, eg,pg,cg;
00259   fEvent->GetPPar(0,em,pm,cm);
00260   fEvent->GetPPar(1,ep,pp,cp);
00261   fEvent->GetPPar(2,eg,pg,cg);
00262   //  cout<<DB(eg)<<DB(cg)<<endl;
00263   double s, s1,  t, t1,  u, u1;
00264   s  = 4;
00265   s1 = 4*(1-eg);
00266 
00267   double BetaI = gGlobal->Get_BetaI();
00268   t  = -2*(em-BetaI*pm*cm);
00269   t1 = -2*(ep+BetaI*pp*cp);
00270 
00271   u  = -2*(ep-BetaI*pp*cp);
00272   u1 = -2*(em+BetaI*pm*cm);
00273       
00274   double chi_m,chi_p,chi_m_p,chi_p_p;
00275   chi_m   = eg*(1-BetaI*cg);
00276   chi_p   = eg*(1+BetaI*cg);
00277   chi_m_p = 2*(1-ep);
00278   chi_p_p = 2*(1-em);
00279 
00280   double ichi_m   = 1/chi_m;
00281   double ichi_p   = 1/chi_p;
00282   double ichi_m_p = 1/chi_m_p;
00283   double ichi_p_p = 1/chi_p_p;
00284   double is       = 1/s;
00285   double is1      = 1/s1;
00286   
00287   //  cout<<DB(eg)<<DB(ichi_m)<<DB(ichi_p)<<endl;
00288 
00289   double mpi2 = gGlobal->Get_MF2();
00290   double me2  = gGlobal->Get_MI2();
00291 
00292   double D_s1_s1, D_s_s, D_s_s1;
00293   D_s1_s1 = D_s_s = D_s_s1 = 0;
00294   double R_s1_s1, R_s_s, R_s_s1;
00295   R_s1_s1 = R_s_s = R_s_s1 = 0;
00296 
00297   double A = (t*u + t1*u1)*(is*is1);
00298   D_s1_s1 =-4*( (t+u)*(t+u) + (t1+u1)*(t1+u1) )*(is1*is1*ichi_m*ichi_p);
00299   R_s1_s1 = 4*s*A*(ichi_m*ichi_p) + mpi2*D_s1_s1
00300     -8*me2*(is1*is1)*( t1*u1*(ichi_m*ichi_m) + t*u*(ichi_p*ichi_p))
00301     +8*mpi2*me2*is1*((ichi_m*ichi_m) + (ichi_p*ichi_p));
00302   //    +4*me2*is*is1*is1*(s*s1-(t-u)*(t1-u1))*((t1+u1)*(ichi_m*ichi_m)+(t+u)*(ichi_p*ichi_p))
00303   //    -8*mpi2*me2*(is1*is1)*((t1+u1)*(ichi_m*ichi_m)+(t+u)*(ichi_p*ichi_p));
00304   //    - 8*me2*(is1*is1)*( t1*u1*(ichi_m*ichi_m) + t*u*(ichi_p*ichi_p) );
00305   //  R_s1_s1 = 4*(ichi_m*ichi_p*is1*is1)*
00306   //    (s1*(t*u + t1*u1) - mpi2*( (t+u)*(t+u) + (t1+u1)*(t1+u1)) 
00307   //     -2*me2*( t1*u1*(ichi_m*chi_p) + t*u*(ichi_p*chi_m)));
00308 
00309   if(!fNoFSR){
00310     D_s_s = 2*mpi2*(s-s1)*(s-s1)*is*(ichi_m_p*ichi_m_p*ichi_p_p*ichi_p_p)+
00311       8*is*is*(t*t1+u*u1-s*s-s*s1)*(ichi_m_p*ichi_p_p);
00312     R_s_s = 4*s1*A*(ichi_m_p*ichi_p_p) + mpi2*D_s_s
00313       -8*mpi2*(is*is)*( t*u1*(ichi_p_p*ichi_p_p) + t1*u*(ichi_m_p*ichi_m_p) );
00314     
00315     double C = 
00316       t*ichi_m*ichi_m_p + t1*ichi_p*ichi_p_p - 
00317       u*ichi_m*ichi_p_p - u1*ichi_p*ichi_m_p;
00318     D_s_s1 = 8*is*is1*((2*(t1 - u) + u1 - t)*chi_m_p + (2*(t - u1) + u - t1)*ichi_p_p +
00319                        0.5*(u1 + t1 - s)*ichi_m*( u*ichi_p_p -  t*ichi_m_p) +
00320                        0.5*(u  + t  - s)*ichi_p*(u1*ichi_m_p - t1*ichi_p_p));
00321     R_s_s1 = -4*A*C + mpi2*D_s_s1;
00322   }
00323 
00324   double CosPsi = fEvent->GetCosPsi();
00325   double gamma = eg*pm/( 2 - eg*(1 - em*CosPsi/pm) );
00326 
00327   std::complex<double> Fpi_s1 = fFpi->Eval(gGlobal->Get_s()*(1-eg));
00328   double Fpi_s1_s1 = std::abs(Fpi_s1*Fpi_s1);
00329 
00330   double Fpi_s_s, Fpi_s_cs1;
00331   Fpi_s_s = Fpi_s_cs1 = 0;
00332   if(!fNoFSR){
00333     std::complex<double> Fpi_s  = fFpi->Eval(gGlobal->Get_s());
00334     Fpi_s_s  = std::abs(Fpi_s*Fpi_s);
00335     Fpi_s_cs1= std::real(Fpi_s*std::conj(Fpi_s1));
00336   }
00337   //  Fpi_s1_s1 = 0; Fpi_s_s = 0;  Fpi_s_cs1 = 1;
00338 
00339   return (Fpi_s1_s1*R_s1_s1 + Fpi_s_s*R_s_s + Fpi_s_cs1*R_s_s1)*gamma/16;
00340 }
00341 
00342 #define Prod(a,b,c,d)  ( (a##b)*(c##d) + (a##d)*(b##c) - (a##c)*(b##d) )
00343 #define Dot(a,b) double a##b = a*b; double b##a = a##b
00344 double TPiCrossPart::R_Gamma_t(){
00345   // RGamma for testing purpose only
00346   TLorentzVector pm(0,0,gGlobal->Get_BetaI(),1.);
00347   TLorentzVector pp(0,0,-gGlobal->Get_BetaI(),1.);
00348   TLorentzVector qm = fEvent->Get4Vector(0);
00349   TLorentzVector qp = fEvent->Get4Vector(1);
00350   TLorentzVector k  = fEvent->Get4Vector(2);
00351 
00352   double s  = (pp + pm)*(pp + pm);
00353   double s1 = (qp + qm)*(qp + qm);
00354 
00355   double chi_p   = pp*k;
00356   double chi_m   = pm*k;
00357   double chi_p_p = qp*k;
00358   double chi_m_p = qm*k;
00359   
00360   double ichi_m   = 1/chi_m;
00361   double ichi_p   = 1/chi_p;
00362   double ichi_m_p = 1/chi_m_p;
00363   double ichi_p_p = 1/chi_p_p;
00364 
00365   //  cout<<DB(ichi_m)<<DB(ichi_p)<<endl;
00366   Dot(pp,pm);
00367   double ipppm = 1/pppm;
00368 
00369   Dot(qp,qm);
00370 
00371   TLorentzVector Q  = 0.5*(qp - qm);
00372   TLorentzVector kp = k - pp*chi_m*ipppm;
00373   TLorentzVector km = k - pm*chi_p*ipppm;
00374 
00375   double QQ = Q*Q;
00376   double kk = k*k;
00377   Dot(k,Q);
00378 
00379   Dot(pp,Q);
00380   Dot(pm,Q);
00381   
00382   Dot(kp,Q);
00383   Dot(km,Q);
00384 
00385   Dot(qp,Q);
00386   Dot(qm,Q);
00387 
00388   Dot(qp,k);
00389   Dot(qm,k);
00390 
00391   Dot(pp,k);
00392   Dot(pm,k);
00393 
00394   Dot(pp,km);
00395   Dot(pm,kp);
00396 
00397   Dot(pm,qp);
00398   Dot(pp,qp);
00399 
00400   Dot(pm,qm);
00401   Dot(pp,qm);
00402 
00403   double mpi2 = gGlobal->Get_MF2();
00404   double me2  = gGlobal->Get_MI2();
00405   double is  = 1/s;
00406   double is1 = 1/s1;
00407 
00408   std::complex<double> Fpi_s1 = fFpi->Eval(gGlobal->Get_s()*s1*0.25);
00409   double Fpi_s1_s1 = std::abs(Fpi_s1*Fpi_s1);
00410   double Fpi_s_s, Fpi_s_cs1;
00411   Fpi_s_s = Fpi_s_cs1 = 0;
00412   if(!fNoFSR){
00413     std::complex<double> Fpi_s  = fFpi->Eval(gGlobal->Get_s());
00414     Fpi_s_s  = std::abs(Fpi_s*Fpi_s);
00415     Fpi_s_cs1= std::real(Fpi_s*std::conj(Fpi_s1));
00416   }
00417 
00418   //  Fpi_s1_s1 = 0; Fpi_s_s = 0;  Fpi_s_cs1 = 1;
00419   /* //from article in JHEP
00420   double R_1 = s*(is1*is1)*Fpi_s1_s1*Prod(pp,Q,pm,Q)*
00421     (
00422      (pppm*ichi_p*ichi_m - 2*ichi_m - me2*(ichi_m*ichi_m) + chi_p*ipppm*ichi_m*(1 + me2*ichi_m)) +
00423      (pppm*ichi_p*ichi_m - 2*ichi_p - me2*(ichi_p*ichi_p) + chi_m*ipppm*ichi_p*(1 + me2*ichi_p))
00424      );
00425 
00426   */
00427   double R_1 = s*(is1*is1)*Fpi_s1_s1*
00428     ( (Prod(pp,Q,pm,Q)*(pppm*ichi_p*ichi_m - 2*ichi_m + 2*chi_p*is*ichi_m) + Prod(pp,Q,k,Q)*me2*ichi_m*ichi_m) + 
00429       (Prod(pm,Q,pp,Q)*(pppm*ichi_p*ichi_m - 2*ichi_p + 2*chi_m*is*ichi_p) + Prod(pm,Q,k,Q)*me2*ichi_p*ichi_p)
00430       );
00431 
00432   double R_2 = Prod(pp,Q,pm,Q)*
00433     (
00434      is*Fpi_s_s*
00435      (
00436       (qpqm*(ichi_p_p*ichi_m_p) - mpi2*(ichi_p_p*ichi_p_p)) +
00437       (qpqm*(ichi_p_p*ichi_m_p) - mpi2*(ichi_m_p*ichi_m_p))
00438       ) 
00439      
00440      + 
00441      
00442      2*is1*Fpi_s_cs1*(pp*ichi_p - pm*ichi_m) * (qp*ichi_p_p - qm*ichi_m_p)
00443      );
00444   
00445   double R_3 = 
00446     s*is1*is1*Fpi_s1_s1*
00447     (Prod(pp,Q,km,Q)*ichi_m + Prod(pm,Q,kp,Q)*ichi_p + 2*Qk*(ichi_m*ichi_p)*Prod(pp,Q,pm,k))
00448 
00449     +
00450     
00451     is*Fpi_s_s*
00452     (
00453      -0.5*chi_p*chi_m*(ichi_p_p*ichi_m_p)*qpqm - 0.25*mpi2*(ichi_p_p*ichi_p_p)*
00454      (Prod(pp,k,pm,k) + 2*Prod(pp,Q,pm,k) + 2*Prod(pp,k,pm,Q)) + 
00455      ichi_p_p*(chi_p*pmqp + chi_m*ppqp + 2*Prod(pm,Q,pp,qp))
00456      
00457      +
00458      
00459      -0.5*chi_p*chi_m*(ichi_p_p*ichi_m_p)*qpqm - 0.25*mpi2*(ichi_m_p*ichi_m_p)*
00460      (Prod(pp,k,pm,k) - 2*Prod(pp,Q,pm,k) - 2*Prod(pp,k,pm,Q)) + 
00461      ichi_m_p*(chi_p*pmqm + chi_m*ppqm - 2*Prod(pm,Q,pp,qm))
00462      )
00463     
00464     +
00465     
00466     is1*Fpi_s_cs1*
00467     (
00468      (
00469       Prod(pp,Q,pm,k)*ichi_p_p*(qppp*ichi_p - qppm*ichi_m) + 2*(ppQ - pmQ) 
00470       - ichi_p_p*(Prod(pp,Q,qp,k)-Prod(pm,Q,qp,k)) 
00471       + 2*Qk*Qpp*pmqp*(ichi_p_p*ichi_m) -  2*Qpm*Qk*ppqp*(ichi_p_p*ichi_p)
00472       - QQ*chi_p*qppm*(ichi_p_p*ichi_m) + QQ*ppqm*ichi_p_p + QQ*chi_m*ppqp*(ichi_p_p*ichi_p) 
00473       - QQ*pmqm*ichi_p_p
00474       )
00475      
00476      -
00477      
00478      (
00479       -Prod(pp,Q,pm,k)*ichi_m_p*(qmpp*ichi_p - qmpm*ichi_m) - 2*(ppQ - pmQ) 
00480       + ichi_m_p*(Prod(pp,Q,qm,k)-Prod(pm,Q,qm,k)) 
00481       + 2*Qk*Qpp*pmqm*(ichi_m_p*ichi_m) -  2*Qpm*Qk*ppqm*(ichi_m_p*ichi_p)
00482       - QQ*chi_p*qmpm*(ichi_m_p*ichi_m) + QQ*ppqp*ichi_m_p + QQ*chi_m*ppqm*(ichi_m_p*ichi_p) 
00483       - QQ*pmqp*ichi_m_p
00484       )
00485      )
00486     ;
00487 
00488   double CosPsi = fEvent->GetCosPsi();
00489   double gamma = k.E()*qm.P()/(2-k.E()*(1-qm.E()*CosPsi/qm.P()));
00490 
00491   return gamma*(R_1 + R_2 + R_3 )*0.25;
00492 }
00493 
00494 #ifdef Dot
00495 #  undef Dot
00496 #endif
00497 
00498 double TPiCrossPart::R_Gamma_kuraev_eidelman(){
00499   // RGamma from preprint INP 78-82 
00500   // equation (30) page 13
00501   TLorentzVector pm(0,0, gGlobal->Get_BetaI(),1.);
00502   TLorentzVector pp(0,0,-gGlobal->Get_BetaI(),1.);
00503   TLorentzVector qm = fEvent->Get4Vector(0);
00504   TLorentzVector k  = fEvent->Get4Vector(2);
00505   double x = k.E();
00506 
00507   double s  = (pp + pm)*(pp + pm);
00508   double s1 = s*(1-x);
00509   double is1 = 1/s1;
00510 
00511   double ichi_m   = 1/(pp*k);
00512   double ichi_p   = 1/(pm*k);
00513 
00514   double mpi2 = gGlobal->Get_MF2();
00515   double me2  = gGlobal->Get_MI2();
00516 
00517   double z      = pm.Vect().Dot(qm.Vect())/(pm.P()*qm.P());
00518   double xm     = qm.E();
00519   double betam  = qm.P();
00520   double t      = mpi2 - s*(1 - x - xm*0.5*(1+betam*z));
00521   double u      = mpi2 - s*(1     - xm*0.5*(1-betam*z));
00522   double t1     =  mpi2 - s*xm*0.5*(1-betam*z);
00523   double u1     =  mpi2 - s*xm*0.5*(1+betam*z);
00524   double utilde = u + s*x;
00525   double ttilde = t - s*x;
00526 
00527   std::complex<double> Fpi_s1 = fFpi->Eval(gGlobal->Get_s()*s1*0.25);
00528   double Fpi_s1_s1 = std::abs(Fpi_s1*Fpi_s1);
00529 
00530   double R_pi = Fpi_s1_s1*0.125*is1*is1*
00531     ((s*(s1-4*mpi2)-(u1-t)*(u-t1))*
00532      (-me2*s*(1-x)*ichi_m*ichi_m + s*ichi_m*(1 + pow(1 - x, 2))/x) +
00533      (s*(s1-4*mpi2)-(u1-ttilde)*(utilde-t1))*
00534      (-me2*s*(1-x)*ichi_p*ichi_p + s*ichi_p*(1 + pow(1 - x, 2))/x));
00535 
00536   double CosPsi = fEvent->GetCosPsi();
00537   double gamma = k.E()*qm.P()/(2-k.E()*(1-qm.E()*CosPsi/qm.P()));
00538 
00539   return gamma*R_pi*0.25;
00540 }

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