00001 #include <iostream>
00002 #include "TKcFormFactor.h"
00003 #include "TConstants.h"
00004
00005 TKcFormFactor::TKcFormFactor():TFormFactor(){
00006 fM_rho = 775.8;
00007 fM_rho2 = fM_rho*fM_rho;
00008 fG_rho = 150.3;
00009 fB_rho_ee = 4.67e-5;
00010
00011 fM_omega = 782.59;
00012 fM_omega2 = fM_omega*fM_omega;
00013 fG_omega = 8.49;
00014 fB_omega_ee = 7.14e-5;
00015
00016 fM_phi = 1019.456;
00017 fM_phi2 = fM_phi*fM_phi;
00018 fG_phi = 4.26;
00019 fB_phi_ee = 2.98e-4;
00020
00021 fB_phi[0] = 0.492;
00022 fB_phi[1] = 0.337;
00023 fB_phi[2] = 0.155;
00024 fB_phi[3] = 0.01299;
00025 fB_phi[4] = 1.23e-3;
00026 fB_phi[5] = 7.3e-5;
00027
00028 fB_omega[0] = 0.891;
00029 fB_omega[1] = 0.087;
00030 fB_omega[2] = 0.017;
00031 fB_omega[3] = 4.9e-4;
00032
00033 fB_rho[0] = 0.9987386;
00034 fB_rho[1] = 6e-4;
00035 fB_rho[2] = 3e-4;
00036
00037
00038 double lm[] = {1.1, 0.875, 0.75, 0.62, 0.52, 0.46};
00039 for(int i=0;i<6;i++)f_range[i] = lm[i];
00040
00041 double b[] = { 5.29354148, -7.90990714, -2.26007613, 5.21453902};
00042 double a[] = {-6.12394622, 25.0341405, -34.1311022, 15.5413717};
00043 double a1[] = {-4.91624401, 19.8655606, -26.9136128, 12.2412286};
00044 double c[] = {-0.56436115, 2.69953793, -4.32966739, 2.33116866};
00045 double d[] = {-0.0548334238, 0.31600391, -0.609523718, 0.393667808};
00046 double d1[] = {-0.00794774189, 0.0522269164, -0.114526409, 0.0838126536};
00047
00048 for(int i=0;i<4;i++){
00049 f_array[0][i] = b[i];
00050 f_array[1][i] = a[i];
00051 f_array[2][i] = a1[i];
00052 f_array[3][i] = c[i];
00053 f_array[4][i] = d[i];
00054 f_array[5][i] = d1[i];
00055 }
00056
00057 for(int i=0;i<5;i++){
00058 double *t = &f_array[5-i][0];
00059 double temp1 = t[0] + (t[1] + (t[2] + t[3]*lm[4-i])*lm[4-i])*lm[4-i];
00060 double *r = &f_array[4-i][0];
00061 double temp2 = (r[1] + (r[2] + r[3]*lm[4-i])*lm[4-i])*lm[4-i];
00062 r[0] = temp1 - temp2;
00063 }
00064
00065 }
00066
00067 std::complex<double> TKcFormFactor::ff(const double &s){
00068 std::complex<double> arho = sqrt(phiwidth(fM_phi2)*rhowidth(fM_rho2)*pow(fM_rho,3)*fM_phi2*6*M_PI*fB_rho_ee*fB_phi[1])/std::complex<double>(fM_rho2-s, -sqrt(s)*rhowidth(s));
00069 std::complex<double> aomega = sqrt(phiwidth(fM_phi2)*omegawidth(fM_omega2)*pow(fM_omega,3)*fM_phi2*6*M_PI*fB_omega_ee*fB_phi[1])/std::complex<double>(fM_omega2-s, -sqrt(s)*omegawidth(s));
00070 double smax = 2043.0;
00071 std::complex<double> aphi = phiwidth(fM_phi2)*pow(fM_phi,3)*sqrt(smax/0.389379292e12*fM_phi)/std::complex<double>(fM_phi2-s,-sqrt(s)*phiwidth(s));
00072 std::complex<double> atot = -aphi - aomega - arho;
00073 double cs = csborn(s);
00074
00075
00076
00077
00078 if(cs>0){
00079 std::complex<double> res = atot*sqrt(0.389379e12/pow(sqrt(s),5)*qkpkm(s)/qkpkm(fM_phi2)*z(s)/z(fM_phi2)/cs);
00080
00081
00082
00083 return res;
00084 } else {
00085 std::complex<double> res = atot*sqrt(0.389379e12/pow(sqrt(s+1),5)*qkpkm(s+1)/qkpkm(fM_phi2)*z(s+1)/z(fM_phi2)/csborn(s+1));
00086
00087
00088 return res;
00089 }
00090 }
00091
00092 double TKcFormFactor::rhowidth(const double& s){
00093 return fG_rho*fM_rho2/s*
00094 fB_rho[0]*pow(sqrt((s/4.0-gConst->Mpi2())/(fM_rho2/4.0-gConst->Mpi2())),3) +
00095 fG_rho*fB_rho[1]*qpgamma(s,1)/qpgamma(fM_rho2,1) +
00096 fG_rho*fB_rho[2]*qpgamma(s,2)/qpgamma(fM_rho2,2) +
00097 0.5*phiwidth(fM_phi2)*fM_phi2*
00098 (
00099 fB_phi[0]*qkpkm(s)/qkpkm(fM_phi2) +
00100 fB_phi[1]*qklks(s)/qklks(fM_phi2)
00101 )/s;
00102 }
00103
00104 double TKcFormFactor::omegawidth(const double& s){
00105
00106 double temp5 = pow(0.5*sqrt(s - 4*gConst->Mpi2()),3);
00107 double temp6 = pow(0.5*sqrt(fM_omega2 - 4*gConst->Mpi2()),3);
00108
00109 return
00110 fG_omega*
00111 (
00112 fB_omega[0]*phase_space_3pi(s)/phase_space_3pi(fM_omega2) +
00113 fB_omega[1]*qpgamma(s,1)/qpgamma(fM_omega2,1) +
00114 fB_omega[2]*temp5/temp6*fM_omega2/s +
00115 fB_omega[3]*qpgamma(s,2)/qpgamma(fM_omega2,2)
00116 ) +
00117 0.5*phiwidth(fM_phi2)*fM_phi2*
00118 (
00119 fB_phi[0]*qkpkm(s)/qkpkm(fM_phi2)/s +
00120 fB_phi[1]*qklks(s)/qklks(fM_phi2)/s
00121 );
00122 }
00123
00124 double TKcFormFactor::phiwidth(const double& s){
00125 double w1 = phase_space_3pi(s);
00126 double w2 = phase_space_3pi(fM_phi2);
00127 return fM_phi2*fG_phi*
00128 (
00129 fB_phi[0]*qkpkm(s)/qkpkm(fM_phi2) +
00130 fB_phi[1]*qklks(s)/qklks(fM_phi2) +
00131 fB_phi[5]*pow(sqrt((s/4-gConst->Mpi2())/(fM_phi2/4 - gConst->Mpi2())),3)
00132 )/s +
00133 fG_phi*
00134 (
00135 fB_phi[2]*w1/w2 +
00136 fB_phi[4]*qpgamma(s,1)/qpgamma(fM_phi2,1) +
00137 fB_phi[3]*qpgamma(s,2)/qpgamma(fM_phi2,2)
00138 );
00139 }
00140
00141 double TKcFormFactor::qklks(const double& s){
00142 double M2 = 4*gConst->MK02();
00143 return (s<M2)?0:pow(0.5*sqrt(s - M2),3);
00144 }
00145
00146 double TKcFormFactor::qkpkm(const double& s){
00147 double M2 = 4*gConst->MKC2();
00148 return (s<M2)?0:pow(0.5*sqrt(s - M2),3);
00149 }
00150
00151 double TKcFormFactor::qpgamma(const double& s, const int& mode){
00152
00153
00154
00155
00156
00157 switch (mode){
00158 case 1:
00159 return (s>gConst->Mpi2())?pow((1-gConst->Mpi2()/s)*sqrt(s)/2,3):0;
00160 break;
00161 case 2:
00162 return (s>gConst->Meta2())?pow((1-gConst->Meta2()/s)*sqrt(s)/2,3):0;
00163 break;
00164 default:
00165 return 0;
00166 break;
00167 }
00168 }
00169
00170 double TKcFormFactor::z(const double& s){
00171 double mkc24 = 4*gConst->MKC2();
00172 double is = 1/s;
00173 return (s<=mkc24)?0:1 + 0.5*gConst->Alpha()*M_PI*(2 - mkc24*is)/sqrt(1 - mkc24*is);
00174 }
00175
00176 double TKcFormFactor::csborn(const double& s){
00177 double beta = sqrt(1 - 4*gConst->MKC2()/s);
00178 return M_PI*gConst->Alpha2()*pow(beta,3)/(3*s)*0.389379e12;
00179 }
00180
00181 double TKcFormFactor::phase_space_3pi(const double& s){
00182 double x = sqrt(s)*1e-3;
00183
00184 int k = 0;
00185 if (f_range[0] <= x ){
00186 k = 0;
00187 } else if( x < f_range[5] ){
00188 k = 5;
00189 } else {
00190 for(int i=0;i<4;i++){
00191 if( f_range[i+1] <= x && x < f_range[i] ){
00192 k = i+1;
00193 break;
00194 }
00195 }
00196 }
00197 double pol = 0;
00198 for(int i=0;i<4;i++)
00199 pol += pow(x,i)*f_array[k][i];
00200 return pol/0.393728*(0.00749/0.0361478);
00201 }