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

Go to the documentation of this file.
00001 #include "T3piCrossPart.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   return prop_rho;
00031   complex_t prop_rhop = Mrhop2/(Q2 - Mrhop2 + I*(Gamma(Q2,Mrhop2,Grhop)*Q));
00032   complex_t prop_rhopp = Mrhopp2/(Q2 - Mrhopp2 + I*(Gamma(Q2,Mrhopp2,Grhopp)*Q));
00033   complex_t prop_rhoppp = Mrhoppp2/(Q2 - Mrhoppp2 + I*(Gamma(Q2,Mrhoppp2,Grhoppp)*Q));
00034   // rho(770), rho(1450), rho(1700) in 2-pi inv mass
00035   // beta and gamma from Ph.D. thesis of Fedor Ignatov (ignatov@inp.nsk.su)
00036 
00037   //  const complex_t beta(0.41*cos(-2.02),0.41*sin(-2.02));
00038   const complex_t beta(-0.178042,-0.369325);
00039 
00040   //  const complex_t gamma(0.074*cos(-3.53),0.074*sin(-3.53));
00041   const complex_t gamma(-0.068488,0.0280249);
00042 
00043   const complex_t xi(0.05,0.0);
00044   if(IsIsospinBreak){
00045     // rho-omega mixing
00046     const complex_t delta(0.002,0);
00047     complex_t prop_omega = Momega2/(Q2 - Momega2 + I*(Gomega*Momega));
00048 
00049     return (prop_rho*(1-delta*Q2/Momega2*prop_omega) + beta*prop_rhop  + gamma*prop_rhopp + xi*prop_rhoppp)/(1+beta+gamma+xi);
00050   } else {
00051     return (prop_rho + beta*prop_rhop  + gamma*prop_rhopp + xi*prop_rhoppp)/(1+beta+gamma+xi);
00052   }
00053 }
00054 
00055 inline complex_t Amp(double s){
00056   const complex_t I(0,1);
00057   const double Apsi = 4*alpha*Gpsi/(3*Geepsi);
00058   const double phipsi = -M_PI/2;
00059   const double Apsip = alpha*Gpsip/(3*Geepsip);
00060   const double phipsip = -M_PI/2;
00061   const double Apsipp = alpha*Gpsipp/(3*Geepsipp);
00062   const double phipsipp = -M_PI/2;
00063   complex_t res = 3*sqrt(s)/alpha*
00064     (
00065      Geepsi*(1 + Apsi*exp(I*phipsi))/(s - Mpsi2 + I*Mpsi*Gpsi) +
00066      Geepsip*(1 + Apsip*exp(I*phipsip))/(s - Mpsip2 + I*Mpsip*Gpsip) +
00067      Geepsipp*(1 + Apsipp*exp(I*phipsipp))/(s - Mpsipp2 + I*Mpsipp*Gpsipp));
00068   return res;
00069 }
00070 
00071 inline complex_t AmpOmegaPhi(double s){
00072   //  const double eta = 3.4*M_PI/180;
00073   //  const double theta = eta + asin(1/sqrt(3));
00074   //  const double comega = sin(theta)*cos(eta);
00075   //  const double cphi = -cos(theta)*sin(eta);
00076   const double comega = 6.23657803940740774e-01;
00077   const double cphi = -4.63075347511148622e-02;
00078   complex_t Romega = Momega2/complex_t(s-Momega2,Gomega*Momega);
00079   complex_t Rphi = Mphi2/complex_t(s-Mphi2,Gphi*Mphi);
00080   return (comega*Romega + cphi*Rphi);
00081 }
00082 
00083 complex_t F3pi(double s, double Q02, double Qp2, double Qm2){
00084   // Rrho has rho-omega mixing otherwise use Rrho
00085   complex_t H = Rrho(Q02,true) + Rrho(Qm2,false) + Rrho(Qp2,false);
00086   return (5e-3*(1/s))*H*(1+Amp(s));
00087   //  const double f_pi3 = 93*93*93;// [MeV^3]
00088   //  return complex_t(1000/(s*sqrt(s)),0);
00089   //  const double alphaK = 0.5;
00090   //  return 2e5/(s*s)*(1+Amp(s))*(1-3*alphaK-alphaK*H);
00091   //  return 0.325*1e-9*Amp(s)*H;
00092   //  return sqrt(3)/(4*M_PI*M_PI*f_pi3)*(AmpOmegaPhi(s)+Amp(s))*(1-3*alphaK-alphaK*H);
00093   //  return sqrt(3)/(4*M_PI*M_PI*f_pi3)*(1)/(s)*(1-3*alphaK-alphaK*H);
00094 }
00095 
00096 T3piCrossPart::T3piCrossPart(double e, double de, double nth0):
00097   TCrossPart(e,de,nth0)
00098 {
00099   const double m[] = { mpi, mpi, mpi0};
00100   const int pid[]  = { 211, -211, 111};
00101   double emax = e*(1 - pow((m[0]+m[1]+m[2])/(2*e),2));
00102   //  emax = e/2.5;
00103   fphot->SetEnergyRange(de,emax);
00104   std::cout<<de<<"MeV <E_gamma< "<<emax<<" MeV"<<std::endl;
00105   //  fphot->SetEnergyRange(de,0.5*e);
00106   SetFinalParticles(3, m, pid);
00107   std::cout<<"Process -- e^+e^- -> rho pi -> pi^+pi^-pi^0"<<std::endl;
00108 }
00109 
00110 void T3piCrossPart::SetJ(){
00111 
00112   TLorentzVector &qp = *fres[0];  //pi^+ momentum
00113   TLorentzVector &qm = *fres[1];  //pi^- momentum
00114   TLorentzVector &q0 = *fres[2];  //pi^0 momentum
00115 
00116   double qpqm = qp*qm;
00117   double qpq0 = qp*q0;
00118   double qmq0 = qm*q0;
00119 
00120   // dipion invariant masses
00121   double Q02 = 2*(mpi2 + qpqm);
00122   double Qp2 = mpi2 + mpi02 + 2*qmq0;
00123   double Qm2 = mpi2 + mpi02 + 2*qpq0;
00124 
00125   complex_t F = F3pi(fq2,Q02,Qp2,Qm2);
00126 
00127   J3PseudoScalars();
00128 
00129   fJc *= F;
00130 }
00131 
00132 bool T3piCrossPart::Accepted(){
00133   // require inv mass of 3-pi within 97% of Ecm
00134 //   if(fq2<0.95*fs) return false;
00135 //   const TLorentzVector &qp = *fres[0];  //pi^+ momentum
00136 //   const TLorentzVector &qm = *fres[1];  //pi^- momentum
00137 //   const TLorentzVector &q0 = *fres[2];  //pi^0 momentum
00138   
00139 //   double qpqm = qp*qm;
00140 //   double qpq0 = qp*q0;
00141 //   double qmq0 = qm*q0;
00142 //   double Qp2 = mpi2 + mpi02 + 2*qmq0;
00143 //   double Qm2 = mpi2 + mpi02 + 2*qpq0;
00144   
00145 //   if(Qp2+Qm2<5e6) return false;
00146 
00147 //   if(fabs(qp.P()-qm.P())>0.04*fe) return false;
00148 
00149 //   double cosqp = qp.CosTheta();
00150 //   if(fabs(cosqp)>0.9)return false;
00151   
00152 //   double cosqm = qm.CosTheta();
00153 //   if(fabs(cosqm)>0.9)return false;
00154   
00155   return true;
00156 }
00157 

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