00001 #include <iostream>
00002
00003 #include "T3piEtaCrossPart.h"
00004 #include "TConstant.h"
00005 #include <complex>
00006
00007 using namespace std;
00008 using namespace rb;
00009 typedef complex<double> complex_t;
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 complex_t Amp(double s){
00019 const complex_t I(0,1);
00020 const double Apsi = alpha*Gpsi/(3*Geepsi);
00021 const double phipsi = -M_PI/2;
00022 const double Apsip = alpha*Gpsip/(3*Geepsip);
00023 const double phipsip = -M_PI/2;
00024 const double Apsipp = alpha*Gpsipp/(3*Geepsipp);
00025 const double phipsipp = -M_PI/2;
00026 complex_t res = 3*sqrt(s)/alpha*
00027 (
00028 Geepsi*(1 + Apsi*exp(I*phipsi))/(s - Mpsi2 + I*Mpsi*Gpsi) +
00029 Geepsip*(1 + Apsip*exp(I*phipsip))/(s - Mpsip2 + I*Mpsip*Gpsip) +
00030 Geepsipp*(1 + Apsipp*exp(I*phipsipp))/(s - Mpsipp2 + I*Mpsipp*Gpsipp));
00031 return res;
00032 }
00033
00034 inline complex_t bw_rho(double s){
00035 const double sig = -0.1;
00036 complex_t Drho = complex_t(Mrho*Mrho-s,-Mrho*Grho);
00037 complex_t Drhop = complex_t(Mrhop*Mrhop-s,-Mrhop*Grhop);
00038 complex_t bw = (1./Drho + sig/Drhop);
00039
00040
00041
00042 const double Et2 = (2.2*1e3)*(2.2*1e3);
00043 if(s>Et2){
00044 double r = Et2/s;
00045 bw *= r*r;
00046 }
00047 return bw;
00048 }
00049
00050 inline complex_t bw_om(double s){
00051 complex_t Domega = complex_t(Momega*Momega-s,-Momega*Gomega);
00052 complex_t bw = 1./Domega;
00053 return bw;
00054 }
00055
00056 T3piEtaCrossPart::T3piEtaCrossPart(double e, double de, double nth0):
00057 TCrossPart(e,de,nth0)
00058 {
00059 const double m[] = { mpi, mpi, mpi0, meta};
00060 const int pid[] = { 211, -211, 111, 221};
00061 fphot->SetEnergyRange(de,0.5*e);
00062 SetFinalParticles(4, m, pid);
00063 cout<<"Process -- e^+e^- -> omega eta -> pi^+pi^-pi^0 eta"<<endl;
00064 }
00065
00066 void T3piEtaCrossPart::SetJ(){
00067 TLorentzVector &q3 = *fres[0];
00068 TLorentzVector &q4 = *fres[1];
00069 TLorentzVector &q1 = *fres[2];
00070 TLorentzVector &q2 = *fres[3];
00071
00072 TLorentzVector q134 = q1 + q3 + q4;
00073
00074 double q1_134 = q1*q134;
00075 double q3_134 = q3*q134;
00076 double q4_134 = q4*q134;
00077 double q12 = q1*q2;
00078 double q13 = q1*q3;
00079 double q14 = q1*q4;
00080 double q23 = q2*q3;
00081 double q24 = q2*q4;
00082 double q34 = q3*q4;
00083 double q134_2 = q134*q134;
00084
00085
00086
00087 complex_t bw = bw_om(q134_2);
00088
00089 complex_t f0 = bw*(q3_134*q24 - q4_134*q23);
00090 complex_t f1 = complex_t(0,0);
00091 complex_t f2 = bw*(q4_134*q12 - q1_134*q24);
00092 complex_t f3 = bw*(q1_134*q23 - q3_134*q12);
00093
00094 complex_t Jx = q1.X()*f0 + q2.X()*f1 + q3.X()*f2 + q4.X()*f3;
00095 complex_t Jy = q1.Y()*f0 + q2.Y()*f1 + q3.Y()*f2 + q4.Y()*f3;
00096 complex_t Jz = q1.Z()*f0 + q2.Z()*f1 + q3.Z()*f2 + q4.Z()*f3;
00097 complex_t Jt = q1.T()*f0 + q2.T()*f1 + q3.T()*f2 + q4.T()*f3;
00098
00099 fJc.SetPxPyPzE(Jx,Jy,Jz,Jt);
00100
00101 fJc *= 1e-10*(1+Amp(fq2));
00102 }
00103
00104 bool T3piEtaCrossPart::Accepted(){
00105 if(fq2<0.5*fs) return false;
00106 return true;
00107 }