00001 #include <iostream>
00002
00003 #include "T4piCrossPart.h"
00004 #include "TConstant.h"
00005 #include <complex>
00006
00007 typedef std::complex<double> complex_t;
00008
00009 using namespace std;
00010 using namespace rb;
00011
00012 inline complex_t bw_rho(double s){
00013 const double sig = -0.1;
00014 complex_t Drho = complex_t(Mrho*Mrho-s,-Mrho*Grho);
00015 complex_t Drhop = complex_t(Mrhop*Mrhop-s,-Mrhop*Grhop);
00016 complex_t bw = (1./Drho + sig/Drhop);
00017
00018
00019
00020 const double Et2 = (2.2*1e3)*(2.2*1e3);
00021 if(s>Et2){
00022 double r = Et2/s;
00023 bw *= r*r;
00024 }
00025 return bw;
00026 }
00027
00028 inline complex_t Rrho(double s, bool IsIsospinBreak){
00029 complex_t Drho = complex_t(Mrho2-s, -Mrho*Grho);
00030 complex_t prop_rho = Mrho2/Drho;
00031 return prop_rho;
00032 }
00033
00034 inline complex_t bw_om(double s){
00035 complex_t Domega = complex_t(Momega*Momega-s,-Momega*Gomega);
00036 complex_t bw = 1./Domega;
00037 return bw;
00038 }
00039
00040 T4piCrossPart::T4piCrossPart(double e, double de, double nth0):
00041 TCrossPart(e,de,nth0)
00042 {
00043 const double m[] = { mpi, mpi, mpi0, mpi0};
00044 const int pid[] = { 211, -211, 111, 111};
00045 double emax = e*(1 - pow((m[0]+m[1]+m[2]+m[3])/(2*e),2));
00046 fphot->SetEnergyRange(de,emax);
00047 SetFinalParticles(4, m, pid);
00048 std::cout<<"Process -- e^+e^- -> omega pi^0"<<std::endl;
00049 std::cout<<" |-> rho pi"<<std::endl;
00050 std::cout<<" |-> pi pi"<<std::endl;
00051 }
00052
00053 void T4piCrossPart::SetJ(){
00054 TLorentzVector &q3 = *fres[0];
00055 TLorentzVector &q4 = *fres[1];
00056 TLorentzVector &q1 = *fres[2];
00057 TLorentzVector &q2 = *fres[3];
00058
00059 TLorentzVector q134 = q1 + q3 + q4;
00060 TLorentzVector q234 = q2 + q3 + q4;
00061
00062 double q1_134 = q1*q134;
00063 double q3_134 = q3*q134;
00064 double q4_134 = q4*q134;
00065 double q2_234 = q2*q234;
00066 double q3_234 = q3*q234;
00067 double q4_234 = q4*q234;
00068 double q12 = q1*q2;
00069 double q13 = q1*q3;
00070 double q14 = q1*q4;
00071 double q23 = q2*q3;
00072 double q24 = q2*q4;
00073 double q34 = q3*q4;
00074 double q134_2 = q134*q134;
00075 double q234_2 = q234*q234;
00076
00077
00078
00079 complex_t Rrho34 = Rrho(q34,false);
00080
00081 complex_t H1 = Rrho(q13,false) + Rrho(q14,false) + Rrho34;
00082 complex_t H2 = Rrho(q23,false) + Rrho(q24,false) + Rrho34;
00083 complex_t bwr = 1e-8;
00084 complex_t bw2 = bwr*bw_om(q234_2)*H2;
00085 complex_t bw1 = bwr*bw_om(q134_2)*H1;
00086
00087
00088 complex_t f0 = bw1*(q3_134*q24 - q4_134*q23);
00089 complex_t f1 = bw2*(q3_234*q14 - q4_234*q13);
00090 complex_t f2 = bw1*(q4_134*q12 - q1_134*q24) + bw2*(q4_234*q12 - q2_234*q14);
00091 complex_t f3 = bw1*(q1_134*q23 - q3_134*q12) + bw2*(q2_234*q13 - q3_234*q12);
00092
00093 complex_t Jx = q1.X()*f0 + q2.X()*f1 + q3.X()*f2 + q4.X()*f3;
00094 complex_t Jy = q1.Y()*f0 + q2.Y()*f1 + q3.Y()*f2 + q4.Y()*f3;
00095 complex_t Jz = q1.Z()*f0 + q2.Z()*f1 + q3.Z()*f2 + q4.Z()*f3;
00096 complex_t Jt = q1.T()*f0 + q2.T()*f1 + q3.T()*f2 + q4.T()*f3;
00097
00098 fJc.SetPxPyPzE(Jx,Jy,Jz,Jt);
00099 double fac3 = 5.5e3;
00100 fJc *= fac3/fq2;
00101 }
00102
00103 bool T4piCrossPart::Accepted(){
00104
00105 return true;
00106 }