/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/Mcgpj/Mcgpj-00-01-04/src/code3pi/src/TRhoEtaCrossPart.C

Go to the documentation of this file.
00001 #include "TRhoEtaCrossPart.h"
00002 #include "TConstant.h"
00003 
00004 #include <complex>
00005 #include <iostream>
00006 
00007 using namespace rb;
00008 typedef std::complex<double> complex_t;
00009 
00010 inline complex_t operator+(const double &x, const complex_t &y) {
00011   return y + x;
00012 }
00013 
00014 inline complex_t operator-(const double &x, const complex_t &y) {
00015   return -(y - x);
00016 }
00017 
00018 inline double Gamma(const double Q2, const double M2, const double G){
00019   double beta2 = (Q2-4*mpi2)/(M2-4*mpi2);
00020   double beta = sqrt(beta2);
00021   return G*M2/Q2*beta2*beta;  
00022 }
00023 
00024 // with rho0omega mixing
00025 inline complex_t Rrho(double Q2, bool IsIsospinBreak){
00026   if(Q2<4*mpi2) return 0;
00027   const complex_t I(0,1);
00028   double Q = sqrt(Q2);
00029   complex_t prop_rho = Mrho2/(Q2 - Mrho2 + I*(Gamma(Q2,Mrho2,Grho)*Q));
00030   complex_t prop_rhop = Mrhop2/(Q2 - Mrhop2 + I*(Gamma(Q2,Mrhop2,Grhop)*Q));
00031   complex_t prop_rhopp = Mrhopp2/(Q2 - Mrhopp2 + I*(Gamma(Q2,Mrhopp2,Grhopp)*Q));
00032   complex_t prop_rhoppp = Mrhoppp2/(Q2 - Mrhoppp2 + I*(Gamma(Q2,Mrhoppp2,Grhoppp)*Q));
00033   // rho(770), rho(1450), rho(1700) in 2-pi inv mass
00034   // beta and gamma from Ph.D. thesis of Fedor Ignatov (ignatov@inp.nsk.su)
00035 
00036   //  const complex_t beta(0.41*cos(-2.02),0.41*sin(-2.02));
00037   const complex_t beta(-0.178042,-0.369325);
00038 
00039   //  const complex_t gamma(0.074*cos(-3.53),0.074*sin(-3.53));
00040   const complex_t gamma(-0.068488,0.0280249);
00041 
00042   const complex_t xi(0.05,0.0);
00043   if(IsIsospinBreak){
00044     // rho-omega mixing
00045     const complex_t delta(0.002,0);
00046     complex_t prop_omega = Momega2/(Q2 - Momega2 + I*(Gomega*Momega));
00047 
00048     return (prop_rho*(1-delta*Q2/Momega2*prop_omega) + beta*prop_rhop  + gamma*prop_rhopp + xi*prop_rhoppp)/(1+beta+gamma+xi);
00049   } else {
00050     return (prop_rho + beta*prop_rhop  + gamma*prop_rhopp + xi*prop_rhoppp)/(1+beta+gamma+xi);
00051   }
00052 }
00053 
00054 inline complex_t Amp(double s){
00055   const complex_t I(0,1);
00056   const double Apsi = 4*alpha*Gpsi/(3*Geepsi);
00057   const double phipsi = -M_PI/2;
00058   const double Apsip = 2*alpha*Gpsip/(3*Geepsip);
00059   const double phipsip = -M_PI/2;
00060   const double Apsipp = alpha*Gpsipp/(3*Geepsipp);
00061   const double phipsipp = -M_PI/2;
00062   complex_t res = 3*sqrt(s)/alpha*
00063     (
00064      Geepsi*(1 + Apsi*exp(I*phipsi))/(s - Mpsi2 + I*Mpsi*Gpsi) +
00065      Geepsip*(1 + Apsip*exp(I*phipsip))/(s - Mpsip2 + I*Mpsip*Gpsip) +
00066      Geepsipp*(1 + Apsipp*exp(I*phipsipp))/(s - Mpsipp2 + I*Mpsipp*Gpsipp));
00067   return res;
00068 }
00069 
00070 complex_t FRhoEta(double s, double Q02, double Qp2, double Qm2){
00071   // Rrho has rho-omega mixing
00072   complex_t H = Rrho(Q02,true);
00073   return (5e-3*(1/s))*H*(1+Amp(s));
00074 }
00075 
00076 TRhoEtaCrossPart::TRhoEtaCrossPart(double e, double de, double nth0):
00077   TCrossPart(e,de,nth0)
00078 {
00079   const double m[] = { mpi, mpi, meta};
00080   const int pid[]  = { 211, -211, 221};
00081   double emax = e*(1 - pow((m[0]+m[1]+m[2])/(2*e),2));
00082   //  emax = e/2.5;
00083   fphot->SetEnergyRange(de,emax);
00084   std::cout<<de<<"MeV <E_gamma< "<<emax<<" MeV"<<std::endl;
00085   //  fphot->SetEnergyRange(de,0.5*e);
00086   SetFinalParticles(3, m, pid);
00087   std::cout<<"Process -- e^+e^- -> rho eta -> pi^+ pi^- eta"<<std::endl;
00088 }
00089 
00090 // The hadronic current 
00091 // here for RhoEta J_\mu=\epsilon_{a b g \mu}q+_{a}q-_{b}q0_{g}
00092 
00093 void TRhoEtaCrossPart::SetJ(){
00094 
00095   TLorentzVector &qp = *fres[0];  //pi^+ momentum
00096   TLorentzVector &qm = *fres[1];  //pi^- momentum
00097   TLorentzVector &q0 = *fres[2];  //pi^0 momentum
00098   
00099   double Jx = qp.Y()*qm.Z()*q0.T()
00100     -    qp.Y()*qm.T()*q0.Z()
00101     +    qp.T()*qm.Y()*q0.Z()
00102     -    qp.T()*qm.Z()*q0.Y()
00103     +    qp.Z()*qm.T()*q0.Y()
00104     -    qp.Z()*qm.Y()*q0.T();
00105   
00106   double Jy = qp.X()*qm.Z()*q0.T()
00107     -    qp.X()*qm.T()*q0.Z()
00108     +    qp.T()*qm.X()*q0.Z()
00109     -    qp.T()*qm.Z()*q0.X()
00110     +    qp.Z()*qm.T()*q0.X()
00111     -    qp.Z()*qm.X()*q0.T();
00112   //  Jy = -Jy;
00113 
00114   double Jz = qp.Y()*qm.X()*q0.T()
00115     -    qp.Y()*qm.T()*q0.X()
00116     +    qp.T()*qm.Y()*q0.X()
00117     -    qp.T()*qm.X()*q0.Y()
00118     +    qp.X()*qm.T()*q0.Y()
00119     -    qp.X()*qm.Y()*q0.T();
00120   //  Jz = -Jz;
00121 
00122   double Jt = qp.Y()*qm.Z()*q0.X()
00123     -    qp.Y()*qm.X()*q0.Z()
00124     +    qp.X()*qm.Y()*q0.Z()
00125     -    qp.X()*qm.Z()*q0.Y()
00126     +    qp.Z()*qm.X()*q0.Y()
00127     -    qp.Z()*qm.Y()*q0.X();
00128 
00129   //  fJ.SetPxPyPzE(Jx,Jy,Jz,Jt);
00130 
00131   double qpqm = qp*qm;
00132   double qpq0 = qp*q0;
00133   double qmq0 = qm*q0;
00134 
00135   // dipion invariant masses
00136   double Q02 = 2*(mpi2 + qpqm);
00137   double Qp2 = mpi2 + mpi02 + 2*qmq0;
00138   double Qm2 = mpi2 + mpi02 + 2*qpq0;
00139 
00140   complex_t F = FRhoEta(fq2,Q02,Qp2,Qm2);
00141 
00142   fJc.SetPxPyPzE(F*Jx,F*Jy,F*Jz,F*Jt);
00143 }
00144 
00145 bool TRhoEtaCrossPart::Accepted(){
00146   // require inv mass of 3-pi within 97% of Ecm
00147 //   if(fq2<0.95*fs) return false;
00148 //   const TLorentzVector &qp = *fres[0];  //pi^+ momentum
00149 //   const TLorentzVector &qm = *fres[1];  //pi^- momentum
00150 //   const TLorentzVector &q0 = *fres[2];  //pi^0 momentum
00151   
00152 //   double qpqm = qp*qm;
00153 //   double qpq0 = qp*q0;
00154 //   double qmq0 = qm*q0;
00155 //   double Qp2 = mpi2 + mpi02 + 2*qmq0;
00156 //   double Qm2 = mpi2 + mpi02 + 2*qpq0;
00157   
00158 //   if(Qp2+Qm2<5e6) return false;
00159 
00160 //   if(fabs(qp.P()-qm.P())>0.04*fe) return false;
00161 
00162 //   double cosqp = qp.CosTheta();
00163 //   if(fabs(cosqp)>0.9)return false;
00164   
00165 //   double cosqm = qm.CosTheta();
00166 //   if(fabs(cosqm)>0.9)return false;
00167   
00168   return true;
00169 }
00170 

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