#include "HADRONS++/Current_Library/VA_P_P.H" namespace HADRONS { namespace VA_P_P_FFs { class ISGW2 : public FormFactor_Base { // hep-ph/ double mb; double md; double betaB2; double mBbar; double Nf; double mXbar; double Nfprime; double mq; double betaX2; bool m_excited; double Getas( double massq, double massx ); public: ISGW2(GeneralModel model, double* masses, const Flavour_Vector& flavs, std::vector& indices); void CalcFFs(ATOOLS::Vec4D p0, ATOOLS::Vec4D p1); }; ISGW2::ISGW2(GeneralModel model, double* masses, const Flavour_Vector& flavs, std::vector& indices) : FormFactor_Base(model, masses, flavs, indices), m_excited(false) { switch(m_flavs[p_i[0]].Kfcode()) { case kf_B_plus: case kf_B: mb=5.2; md=0.33; betaB2=0.431*0.431; mBbar=0.75*5.325+0.25*5.279; Nf=4.0; break; case kf_D_plus: case kf_D: mb=1.82; md=0.33; betaB2=0.45*0.45; mBbar=1.963; Nf=3.0; break; case kf_D_s_plus: mb=1.82; md=0.55; betaB2=0.56*0.56; mBbar=1.968; Nf=3.0; break; case kf_B_s: mb=5.2; md=0.55; betaB2=0.54*0.54; mBbar=5.38; Nf=4.0; break; default: msg_Info()<<"Warning: Initializing ISGW2 form factor for " < "< "<tm ) { q2=0.99*tm; } double muqm = 0.1; double r2 = 3.0/(4.0*mb*mq)+3.0*md*md/(2.0*mBbar*mXbar*betaBX2) + 16.0/(mBbar*mXbar*(33.0-2.0*Nfprime))*log(Getas(muqm,muqm)/Getas(mq,mq)); double fppfm, fpmfm; if(m_excited) { double F5 = sqrt(mX/mB)*pow(sqrt(betaX2*betaB2)/betaBX2,2.5) / (pow((1.0+r2*(tm-q2)/18.0),3.0)); double F5plus = F5*pow(mBbar/mB,-0.5)*pow(mXbar/mX,0.5); double F5minus = F5*pow(mBbar/mB,0.5)*pow(mXbar/mX,-0.5); fppfm = -sqrt(2.0/3.0)*md/sqrt(betaB2)*F5plus; fpmfm = sqrt(2.0/3.0)*md*mB/sqrt(betaB2)/mX*F5minus; } else { double aI = -6.0/(33.0-2.0*Nf); double Cji = pow(Getas(mb,mb)/Getas(mq,mq),aI); double zji = mq/mb; double gammaji = 2.0*zji*log(1.0/zji)/(1.0-zji) - 2.0; double chiji = -1.0-gammaji/(1.0-zji); double betaji_plus = gammaji-2.0/3.0*chiji; double betaji_minus = gammaji+2.0/3.0*chiji; double Rplus = Cji *(1.0 + betaji_plus*Getas( mq,sqrt(mb*mq) )/M_PI); double Rminus = Cji *(1.0 + betaji_minus*Getas( mq,sqrt(mb*mq) )/M_PI); double F3 = sqrt(mX/mB)*pow(sqrt(betaX2*betaB2)/betaBX2,1.5)/ sqr(1.0+r2*(tm-q2)/12.0); double F3plus = F3 * pow(mBbar/mB,-0.5) * pow(mXbar/mX,0.5); double F3minus = F3 * pow(mBbar/mB,0.5) * pow(mXbar/mX,-0.5); fppfm = (2.0-mX/mq*(1.0-md*mq*betaB2/(2.0*muplus*mX*betaBX2)))*F3plus*Rplus; fpmfm = mB/mq*(1.0-md*mq*betaB2/(2.0*muplus*mX*betaBX2))*F3minus*Rminus; } m_fplus = (fppfm + fpmfm)/2.0; double Fminus = (fppfm - fpmfm)/2.0; m_f0 = (Fminus/((m_m0*m_m0-m_m1*m_m1)/q2))+(m_fplus); m_calced = true; } double ISGW2::Getas( double massq, double massx ) { double pi = std::acos(-1.0); double lqcd2 = 0.04; double nflav = 4.0; double temp = 0.6; if ( massx > 0.6 ) { if ( massq < 1.85 ) nflav = 3.0; temp = 12.0*pi / ( 33.0 - 2.0*nflav) / log( massx*massx/lqcd2); } return temp; } } } // namespace HADRONS