00001 #include "TKKPCrossPart.h"
00002 #include "TConstant.h"
00003 #include "TUtil.h"
00004
00005 #include <iostream>
00006 using namespace rb;
00007
00008 inline complex_t Amp(double s){
00009 const complex_t I(0,1);
00010 const double Apsi = 4*alpha*Gpsi/(3*Geepsi);
00011 const double phipsi = -M_PI/2;
00012 const double Apsip = 2*alpha*Gpsip/(3*Geepsip);
00013 const double phipsip = -M_PI/2;
00014 const double Apsipp = alpha*Gpsipp/(3*Geepsipp);
00015 const double phipsipp = -M_PI/2;
00016 complex_t res = 3*sqrt(s)/alpha*
00017 (
00018 Geepsi*(1 + Apsi*exp(I*phipsi))/(s - Mpsi2 + I*Mpsi*Gpsi) +
00019 Geepsip*(1 + Apsip*exp(I*phipsip))/(s - Mpsip2 + I*Mpsip*Gpsip) +
00020 Geepsipp*(1 + Apsipp*exp(I*phipsipp))/(s - Mpsipp2 + I*Mpsipp*Gpsipp));
00021 return res;
00022 }
00023
00024
00025
00026 complex_t FK0KcPc(double s, double QK0Pi, double QKcPi){
00027 complex_t H =
00028 R(QK0Pi,MKstar2,GKstar,mk02+mpi2,mk02-mpi2) +
00029 R(QKcPi,MKstar2,GKstar,mkc2+mpi2,mkc2-mpi2);
00030 return (5e-3*(1/s))*H;
00031 }
00032
00033
00034
00035 complex_t FKcKcP0(double s, double QKpPi, double QKmPi){
00036 complex_t H =
00037 R(QKpPi,MKstar2,GKstar,mkc2+mpi02,mkc2-mpi02) +
00038 R(QKmPi,MKstar2,GKstar,mkc2+mpi02,mkc2-mpi02);
00039 return (5e-3*(1/s))*H*(1+Amp(s));
00040 }
00041
00042 TKKPCrossPart::TKKPCrossPart(double e, double de, double nth0, int mode):
00043 TCrossPart(e,de,nth0)
00044 {
00045 const double m_0[] = { mk0, mkc, mpi};
00046 const int pid_0[] = { 310, -321, 211};
00047 const double m_1[] = { mkc, mkc, mpi0};
00048 const int pid_1[] = { 321, -321, 111};
00049 fmode = mode;
00050 double emax = e;
00051 if(mode == 0){
00052 SetFinalParticles(3, m_0, pid_0);
00053 emax = e*(1 - pow((m_0[0]+m_0[1]+m_0[2])/(2*e),2));
00054 std::cout<<"Process -- e^+e^- -> K* K -> K_S K^- pi^+"<<std::endl;
00055 } else {
00056 SetFinalParticles(3, m_1, pid_1);
00057 emax = e*(1 - pow((m_1[0]+m_1[1]+m_1[2])/(2*e),2));
00058 std::cout<<"Process -- e^+e^- -> K* K -> K^+ K^- pi^0"<<std::endl;
00059 }
00060
00061
00062 fphot->SetEnergyRange(de,emax);
00063 std::cout<<de<<"MeV <E_gamma< "<<emax<<" MeV"<<std::endl;
00064 }
00065
00066 void TKKPCrossPart::SetJ(){
00067
00068 TLorentzVector &qK1 = *fres[0];
00069 TLorentzVector &qK2 = *fres[1];
00070 TLorentzVector &qPi = *fres[2];
00071
00072 TLorentzVector qK1qPi = qK1 + qPi;
00073 TLorentzVector qK2qPi = qK2 + qPi;
00074
00075
00076 double QK1Pi = qK1qPi.M2();
00077 double QK2Pi = qK2qPi.M2();
00078
00079 complex_t F;
00080 if(fmode == 0){
00081 F = FK0KcPc(fq2,QK1Pi,QK2Pi);
00082 }else {
00083 F = FKcKcP0(fq2,QK1Pi,QK2Pi);
00084 }
00085
00086 J3PseudoScalars();
00087
00088 fJc *= F;
00089 }
00090
00091 bool TKKPCrossPart::Accepted(){
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114 return true;
00115 }
00116