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