/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/Mcgpj/Mcgpj-00-01-04/src/code/src/TKcFormFactor.C

Go to the documentation of this file.
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;   // phi->K+ K-
00022   fB_phi[1] = 0.337;   // phi->K_S K_L
00023   fB_phi[2] = 0.155;   // phi->pi+ pi- pi0
00024   fB_phi[3] = 0.01299; // phi->eta pi0
00025   fB_phi[4] = 1.23e-3; // phi->pi0 gamma
00026   fB_phi[5] = 7.3e-5;  // phi->pi+ pi-
00027 
00028   fB_omega[0] = 0.891;  // omega->pi+ pi- pi0
00029   fB_omega[1] = 0.087;  // omega->pi0 gamma
00030   fB_omega[2] = 0.017;  // omega->pi+ pi-
00031   fB_omega[3] = 4.9e-4; // omega->eta gamma
00032 
00033   fB_rho[0] = 0.9987386; // rho->pi+ pi-
00034   fB_rho[1] = 6e-4;      // rho->pi0 gamma
00035   fB_rho[2] = 3e-4;      // rho->eta gamma
00036 
00037   // phase space parametrization of 3pi from A.S.Popov
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   //  std::cout<<phiwidth(fM_phi2)<<" "<<omegawidth(fM_omega2)<<std::endl;
00075   //  std::cout<<atot<<" "<<aphi<<" "<<aomega<<" "<<arho<<std::endl;
00076   //  std::cout<<pow(sqrt(s),5)<<" "<<qkpkm(s)<<" "<<qkpkm(fM_phi2)<<" "<<z(s)<<" "<<z(fM_phi2)<<" "<<cs<<std::endl;
00077   //  std::cout<<0.389379e12/pow(sqrt(s),5)*qkpkm(s)/qkpkm(fM_phi2)*z(s)/z(fM_phi2)/cs<<std::endl;
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     //    std::cout<<arho<<" "<<aomega<<" "<<aphi<<" "<<z(fM_phi2)<<" "<<cs<<" "<<qkpkm(s)<<" "<<z(s)<<std::endl;
00081     //    std::cout<<sqrt(s)/2<<" "<<res*z(fM_phi2)*cs<<std::endl;
00082     //    exit(0);
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     //    std::cout<<arho<<" "<<aomega<<" "<<aphi<<" "<<z(fM_phi2)<<" "<<cs<<" "<<qkpkm(s)<<" "<<z(s)<<std::endl;
00087     //    std::cout<<sqrt(s)/2<<" "<<res*z(fM_phi2)*cs<<std::endl;
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   //  MODE is a type of Pseudo-Scalar meson :
00154   //       = 1 means pi0
00155   //       = 2 means eta
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); // norm to omega
00201 }

Generated on Tue Nov 29 23:12:41 2016 for BOSS_7.0.2 by  doxygen 1.4.7