00001 #include <iostream>
00002 #include <cmath>
00003 #include "TPiFormFactor.h"
00004 #include "TConstants.h"
00005
00006 TPiFormFactor::TPiFormFactor():TFormFactor(){
00007 fPrm = 0;
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 double par[20]=
00065 {
00066 774.824,
00067 141.335,
00068 1294.08,
00069 472.468,
00070 1732.79,
00071 175.142,
00072 0.0124238,
00073 0.264541,
00074 0.37245,
00075 -2.17681,
00076 0.035182,
00077 -2.17322,
00078 782.57,
00079 8.44,
00080 6.95e-5*8.44,
00081 1019.456,
00082 4.26,
00083 2.96e-4*4.26,
00084 7.3e-5,
00085 M_PI
00086 };
00087 SetFFParameters(par);
00088
00089 }
00090
00091 void TPiFormFactor::SetFFParameters(const double &p0, const double &p1,
00092 const double &p2, const double &p3,
00093 const double &p4, const double &p5,
00094 const double &p6, const double &p7,
00095 const double &p8, const double &p9){
00096 const std::complex<double> One = std::complex<double>(1,0), I = std::complex<double>(0,1);
00097 fPrm = 1;
00098 fM_rho = p0;
00099 fG_rho = p1;
00100
00101 fM_rho_p = p2;
00102 fG_rho_p = p3;
00103
00104 fM_omega = p4;
00105 fG_omega = p5;
00106
00107 fG_omega_ee = p6;
00108 fBr_omega_pipi = p7;
00109 fPhi_rho_omega = p8*gConst->Pi()/180;
00110
00111 fBeta = p9;
00112
00113 fM_omega2 = fM_omega*fM_omega;
00114
00115 std::complex<double> fpi_rho_omega = GS(fM_omega2, fM_rho, fG_rho);
00116 double br_omega = 2*gConst->Alpha2()*pow(ppi(fM_omega2),3)/(9*fM_omega*fG_omega*fG_omega_ee);
00117 fAmp_omega = (One + fBeta)/std::abs(fpi_rho_omega)*sqrt(fBr_omega_pipi/br_omega);
00118 fAmp_omega *= exp(I*fPhi_rho_omega);
00119 }
00120
00121 void TPiFormFactor::SetFFParameters(double *p){
00122 const std::complex<double> One = std::complex<double>(1,0), I = std::complex<double>(0,1);
00123 fPrm = 2;
00124 fM_rho = p[0];
00125 fG_rho = p[1];
00126 fM_rho_p = p[2];
00127 fG_rho_p = p[3];
00128 fM_rho_p2 = p[4];
00129 fG_rho_p2 = p[5];
00130 fBr_omega_pipi = p[6];
00131 fPhi_rho_omega = p[7];
00132 fBeta = p[8]*exp(I*p[9]);
00133 fDelta = p[10]*exp(I*p[11]);
00134 fM_omega = p[12];
00135 fG_omega = p[13];
00136 fG_omega_ee = p[14];
00137 fM_phi = p[15];
00138 fG_phi = p[16];
00139 fG_phi_ee = p[17];
00140 fBr_phi_pipi = p[18];
00141 fPhi_rho_phi = p[19];
00142
00143 fM_omega2 = fM_omega*fM_omega;
00144 fM_phi2 = fM_phi*fM_phi;
00145
00146 std::complex<double> fpi_rho_omega = GS(fM_omega2, fM_rho, fG_rho);
00147 double br_omega = 2*gConst->Alpha2()*pow(ppi(fM_omega2),3)/(9*fM_omega*fG_omega*fG_omega_ee);
00148 double amp_omega = std::abs((One + fBeta + fDelta)/fpi_rho_omega)*sqrt(fBr_omega_pipi/br_omega);
00149 fAmp_omega = amp_omega*exp(I*fPhi_rho_omega);
00150
00151 std::complex<double> fpi_rho_phi = GS(fM_phi2, fM_rho, fG_rho);
00152 double br_phi = 2*gConst->Alpha2()*pow(ppi(fM_phi2),3)/(9*fM_phi*fG_phi*fG_phi_ee);
00153 double amp_phi = std::abs((One + fBeta + fDelta)/fpi_rho_phi)*sqrt(fBr_phi_pipi/br_phi);
00154 fAmp_phi = amp_phi*exp(I*fPhi_rho_phi);
00155
00156 }
00157
00158 std::complex<double> TPiFormFactor::ff(const double &s){
00159 const std::complex<double> One = std::complex<double>(1,0), I = std::complex<double>(0,1);
00160 std::complex<double> cfpi_rho, cfpi_rho_p, cfpi_rho_p2, cfpi_omega, cfpi_phi, Alpha;
00161 if(fPrm==1){
00162
00163 cfpi_rho = GS(s, fM_rho , fG_rho );
00164 cfpi_rho_p = GS(s, fM_rho_p , fG_rho_p );
00165 cfpi_omega = s/(s - fM_omega2 + I*fM_omega*fG_omega);
00166
00167 Alpha = One - fAmp_omega*cfpi_omega;
00168 return (
00169 Alpha*cfpi_rho +
00170 fBeta*cfpi_rho_p
00171 )/(One + fBeta);
00172
00173 }else if(fPrm==2){
00174
00175 cfpi_rho = GS(s, fM_rho , fG_rho );
00176 cfpi_rho_p = GS(s, fM_rho_p , fG_rho_p );
00177 cfpi_rho_p2 = GS(s, fM_rho_p2, fG_rho_p2);
00178 cfpi_omega = s/(s - fM_omega2 + I*fM_omega*fG_omega);
00179 cfpi_phi = s/(s - fM_phi2 + I*fM_phi *fG_phi );
00180
00181 Alpha = One - fAmp_omega*cfpi_omega - fAmp_phi*cfpi_phi;
00182 return (
00183 Alpha *cfpi_rho +
00184 fBeta *cfpi_rho_p +
00185 fDelta*cfpi_rho_p2
00186 )/(One + fBeta + fDelta);
00187
00188 }
00189 return One;
00190 }
00191
00192 std::complex<double> TPiFormFactor::GS(const double &s,
00193 const double &M,
00194 const double &G){
00195 const std::complex<double> I = std::complex<double>(0,1);
00196 double M2 = M*M;
00197 double prho = ppi(M2);
00198 double pi = gConst->Pi();
00199 double mp = gConst->Mpi();
00200 double d = 3/pi*mp*mp/(prho*prho)*log((M+2*prho)/(2*mp)) +
00201 M/(2*pi*prho) - mp*mp*M/(pi*pow(prho,3));
00202 return (1+d*G/M)/((1+(f(s,M,G)-s)/M2) - I*G_rho(s,M,G)/M);
00203 }
00204
00205 double TPiFormFactor::f(const double &s,
00206 const double &M,
00207 const double &G){
00208 double M2 = M*M;
00209 double prho = ppi(M2);
00210 double dhds = h(M2)*(1/(8*pow(prho/M,2))-1./2.) + 1/(2*gConst->Pi());
00211 return G*prho*pow(M/prho,2)*(pow(ppi(s)/prho,2)*(h(s)-h(M2)) + (1-s/M2)*dhds);
00212 }
00213
00214 double TPiFormFactor::G_rho(const double &s,
00215 const double &M,
00216 const double &G){
00217 double M2 = M*M;
00218 double G_rho = G*pow(ppi(s)/ppi(M2),3)*sqrt(M2/s);
00219 return G_rho;
00220 }
00221
00222 double TPiFormFactor::h(const double &s){
00223 return 2/gConst->Pi()*ppi(s)/sqrt(s)*log((sqrt(s)+2*ppi(s))/(2*gConst->Mpi()));
00224 }
00225
00226 double TPiFormFactor::ppi(const double &s){
00227 return 0.5*sqrt(s-4*gConst->Mpi2());
00228 }