00001 #include <iostream>
00002
00003 #include "T5piCrossPart.h"
00004 #include "TConstant.h"
00005 #include "TUtil.h"
00006 #include <complex>
00007
00008 typedef std::complex<double> complex_t;
00009 using namespace std;
00010 using namespace rb;
00011
00012 inline complex_t Rrho(double s, bool IsIsospinBreak){
00013 complex_t Drho = complex_t(Mrho2-s, -Mrho*Grho);
00014 complex_t prop_rho = Mrho2/Drho;
00015 return prop_rho;
00016 }
00017
00018 inline complex_t bw_om(double s){
00019 complex_t Domega = complex_t(Momega2-s,-Momega*Gomega);
00020 complex_t bw = Momega2/Domega;
00021 return bw;
00022 }
00023
00024 inline complex_t bw_b1(double s){
00025 complex_t Db1 = complex_t(Mb12-s,-Mb1*Gb1);
00026 complex_t bw = Mb12/Db1;
00027 return bw;
00028 }
00029
00030 T5piCrossPart::T5piCrossPart(double e, double de, double nth0, int mode):
00031 TCrossPart(e,de,nth0),fmode(mode)
00032 {
00033 const double m_0[] = { mpi, mpi, mpi, mpi, mpi0};
00034 const int pid_0[] = { 211, -211, 211, -211, 111};
00035 const double m_1[] = { mpi, mpi, mpi0, mpi0, mpi0};
00036 const int pid_1[] = { 211, -211, 111, 111, 111};
00037 double emax = e;
00038 if(fmode==0) {
00039 emax *= 1 - pow((m_0[0]+m_0[1]+m_0[2]+m_0[3]+m_0[4])/(2*e),2);
00040 SetFinalParticles(5, m_0, pid_0);
00041 std::cout<<"Process -- e^+e^- -> b1^+- pi^-+"<<std::endl;
00042 std::cout<<" |-> omega pi^+-"<<std::endl;
00043 std::cout<<" |-> rho^+-0 pi^-+0"<<std::endl;
00044 std::cout<<" |-> pi pi"<<std::endl;
00045 }else{
00046 emax *= 1 - pow((m_1[0]+m_1[1]+m_1[2]+m_1[3]+m_1[4])/(2*e),2);
00047 SetFinalParticles(5, m_1, pid_1);
00048 std::cout<<"Process -- e^+e^- -> b1^0 pi^0"<<std::endl;
00049 std::cout<<" |-> omega pi^0"<<std::endl;
00050 std::cout<<" |-> rho^+-0 pi^-+0"<<std::endl;
00051 std::cout<<" |-> pi pi"<<std::endl;
00052 }
00053 fphot->SetEnergyRange(de,emax);
00054 }
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 TLorentzVectorC J5pi(const TLorentzVector &q1,
00081 const TLorentzVector &q2,
00082 const TLorentzVector &q3,
00083 const TLorentzVector &q4,
00084 const TLorentzVector &q5){
00085 TLorentzVector qom = q3 + q4 + q5;
00086 TLorentzVector qp = q3 + q5;
00087 TLorentzVector qm = q4 + q5;
00088 TLorentzVector q0 = q3 + q4;
00089 TLorentzVector qb1_0 = qom + q2;
00090 TLorentzVector qb1_1 = qom + q1;
00091 complex_t pom = bw_om(qom.M2());
00092 pom *= Rrho(qp.M2(),false) + Rrho(qm.M2(),false) + Rrho(q0.M2(),true);
00093
00094 TLorentzVector tom = PseudoScalars3(q3,q4,q5);
00095
00096 complex_t pb1_0 = bw_b1(qb1_0.M2());
00097 complex_t pb1_1 = bw_b1(qb1_1.M2());
00098
00099 complex_t prop_0 = pom*pb1_0;
00100 complex_t prop_1 = pom*pb1_1;
00101 double q1q2 = q1*q2;
00102 double q1tom = q1*tom;
00103 double qb1_0qom = qb1_0*qom;
00104 double qb1_0tom = qb1_0*tom;
00105 double qb1_0q2 = qb1_0*q2;
00106 double q1qom = q1*qom;
00107 TLorentzVector res0
00108 = qom*(( q1q2 )*(qb1_0tom) - (qb1_0q2 )*( q1tom))
00109 + q2*((qb1_0qom)*( q1tom) - ( q1qom)*(qb1_0tom))
00110 + tom*(( q1qom)*(qb1_0q2 ) - (qb1_0qom)*( q1q2 ));
00111
00112 double q2tom = q2*tom;
00113 double qb1_1qom = qb1_1*qom;
00114 double qb1_1tom = qb1_1*tom;
00115 double qb1_1q1 = qb1_1*q1;
00116 double q2qom = q2*qom;
00117 TLorentzVector res1
00118 = qom*(( q1q2 )*(qb1_1tom) - (qb1_1q1 )*( q2tom))
00119 + q1*((qb1_1qom)*( q2tom) - ( q2qom)*(qb1_1tom))
00120 + tom*(( q2qom)*(qb1_1q1 ) - (qb1_1qom)*( q1q2 ));
00121
00122 return TLorentzVectorC(res0.X()*prop_0 + res1.X()*prop_1,
00123 res0.Y()*prop_0 + res1.Y()*prop_1,
00124 res0.Z()*prop_0 + res1.Z()*prop_1,
00125 res0.T()*prop_0 + res1.T()*prop_1);
00126 }
00127
00128 void T5piCrossPart::SetJ(){
00129 TLorentzVector &q1 = *fres[0];
00130 TLorentzVector &q2 = *fres[1];
00131 TLorentzVector &q3 = *fres[2];
00132 TLorentzVector &q4 = *fres[3];
00133 TLorentzVector &q5 = *fres[4];
00134
00135 if(fmode == 0){
00136 fJc = J5pi(q1,q2,q3,q4,q5);
00137 fJc += J5pi(q3,q2,q1,q4,q5);
00138 fJc += J5pi(q3,q4,q1,q2,q5);
00139 fJc += J5pi(q1,q4,q3,q2,q5);
00140 } else {
00141 fJc = J5pi(q3,q4,q1,q2,q5);
00142 fJc += J5pi(q5,q3,q1,q2,q4);
00143 fJc += J5pi(q5,q4,q1,q2,q3);
00144 }
00145 double fac3 = 1.45e-19;
00146 fJc *= fac3/fq2;
00147 }
00148
00149 bool T5piCrossPart::Accepted(){
00150
00151 return true;
00152 }