Commit ea5b6e27 authored by Frank Siegert's avatar Frank Siegert

Merge udpates for D and B decays from hadrons-bachelors branch:

  r27972:28242
  r28243:28335
  r29072:29076
including an updated Decaydata.db (which might still need a few integration updates).
parent 98307eca
......@@ -48,11 +48,13 @@ EXTRA_DIST = \
VA_B_B_ST.C \
VA_P_P_ISGW.C \
VA_P_P_ISGW2.C \
VA_P_P_ISGW3.C \
VA_P_P_HQET.C \
VA_P_P_HQET2.C \
VA_P_P_PoleFit.C \
VA_P_P_Polynomial.C \
VA_P_P_BallZwicky.C \
VA_P_P_BGL.C \
VA_P_T_ISGW.C \
VA_P_T_ISGW2.C \
VA_P_V_ISGW.C \
......@@ -61,4 +63,4 @@ EXTRA_DIST = \
VA_P_V_HQET2.C \
VA_P_V_SumRules3.C \
VA_P_V_PoleFit.C \
VA_P_V_hepph0007169.C
VA_P_V_hepph0007169.C
......@@ -9,19 +9,19 @@ void VA_0_P::SetModelParameters( struct GeneralModel _md )
double fP(1.0), Vxx(1.0);
switch(m_flavs[p_i[0]].Kfcode()) {
case kf_pi_plus:
fP=0.1307;
fP=0.1304;
Vxx=Tools::Vud;
break;
case kf_K_plus:
fP=0.1598;
fP=0.1561;
Vxx=Tools::Vus;
break;
case kf_D_plus:
fP=0.2226;
fP=0.2067;
Vxx=Tools::Vcd;
break;
case kf_D_s_plus:
fP=0.294;
fP=0.260;
Vxx=Tools::Vcs;
break;
case kf_B_plus:
......
......@@ -10,6 +10,8 @@ using namespace ATOOLS;
#include "HADRONS++/Current_Library/VA_P_P_PoleFit.C"
#include "HADRONS++/Current_Library/VA_P_P_Polynomial.C"
#include "HADRONS++/Current_Library/VA_P_P_BallZwicky.C"
#include "HADRONS++/Current_Library/VA_P_P_BGL.C"
#include "HADRONS++/Current_Library/VA_P_P_ISGW3.C"
namespace HADRONS { namespace VA_P_P_FFs {
FormFactor_Base::~FormFactor_Base()
......@@ -100,6 +102,14 @@ void VA_P_P::SetModelParameters( struct GeneralModel model )
p_ff = new VA_P_P_FFs::BallZwicky(model,p_masses,m_flavs,p_i);
msg_Tracking()<<" Using BallZwicky form factor model for "<<m_name<<std::endl;
break;
case 9:
p_ff = new VA_P_P_FFs::BGL(model,p_masses,m_flavs,p_i);
msg_Tracking()<<" Using BGL form factor model for "<<m_name<<std::endl;
break;
case 10:
p_ff = new VA_P_P_FFs::ISGW3(model,p_masses,m_flavs,p_i);
msg_Tracking()<<" Using ISGW3 form factor model for "<<m_name<<std::endl;
break;
default:
msg_Error()<<METHOD<<": You chose a form factor model which does not "
<<"exist for current "<<m_name<<". Aborting."<<std::endl;
......
#include "HADRONS++/Current_Library/VA_P_P.H"
#include <cmath>
// BGL parametrization -> arXiv:hep-ph/9508211
namespace HADRONS {
namespace VA_P_P_FFs {
class BGL : public FormFactor_Base {
int case_number; // case_number selects the used phi- and f_plus function
//Variables used by case 0 arXiv:1208.1253 [hep-ex] and case 2, arXiv:1510.03657 [hep-ex]
// a0 is for m_fplus, a0_0 is for m_f0
double mstar ; double a0; double a1; double a2; double a3; double a0_0; double a1_0; double a2_0; double a3_0; double q02;
double fplus_0; double r1; double r2; // Variables used by case 1
double zCalc(double q2, double t_0, double t_plus, double t_minus);
public:
BGL(GeneralModel model, double* masses, const Flavour_Vector& flavs,
std::vector<int>& indices);
void CalcFFs(ATOOLS::Vec4D p0, ATOOLS::Vec4D p1);
};
BGL::BGL(GeneralModel model, double* masses, const Flavour_Vector& flavs,
std::vector<int>& indices) :
FormFactor_Base(model, masses, flavs, indices)
{
kf_code kf0=m_flavs[p_i[0]].Kfcode();
kf_code kf1=m_flavs[p_i[1]].Kfcode();
// B-Decay:
if (kf0==kf_B) {
if (kf1==kf_pi_plus) {
case_number = 0;
const double mplus = m_m0+m_m1;
const double mminus = m_m0-m_m1;
mstar = 5.32483;
a0 = 0.026;
a1 = -1.15*a0;
a2 = -4.52*a0;
a3 = 0;
q02 = 0.65*mminus*mminus;
}
else if (kf1==kf_D_plus) {
case_number = 2;
a0 = 0.0126;
a1 = -0.094;
a2 = 0.34;
a3 = -0.1;
a0_0 = 0.0115;
a1_0 = -0.057;
a2_0 = 0.12;
a3_0 = 0.4;
}
}
// B+-Decay:
else if (kf0==kf_B_plus) {
if (kf1==kf_pi) {
const double mplus = m_m0+m_m1;
const double mminus = m_m0-m_m1;
case_number = 0;
mstar = 5.32483;
a0 = 0.026;
a1 = -0.63*a0;
a2 = -5.80*a0;
a3 = 0;
q02 = 0.65*mminus*mminus;
}
else if (kf1==kf_eta) {
case_number = 0;
mstar=5.32483;
a0 = 0.0031;
a1 = -0.005301;
q02 = 14.14;
}
else if (kf1==kf_D) {
case_number = 2;
a0 = 0.0126;
a1 = -0.094;
a2 = 0.34;
a3 = -0.1;
a0_0 = 0.0115;
a1_0 = -0.057;
a2_0 = 0.12;
a3_0 = 0.4;
}
}
// D0-Decay:
else if (kf0==kf_D) {
if (kf1==kf_pi_plus) {
case_number = 1;
fplus_0 = 0.6748956576;
r1 = -2.0;
r2 = -1,6;
}
else if (kf1==kf_K_plus) {
case_number = 1;
fplus_0 = 0.7653349496;
r1 = -2.4;
r2 = 15.6;
}
}
// D+-Decay
else if (kf0==kf_D_plus) {
if (kf1==kf_pi) {
case_number = 1;
fplus_0 = 0.6340467099;
r1 = -1.95;
r2 = -0.11;
}
else if (kf1==kf_K) {
case_number = 1;
fplus_0 = 0.738;
r1 = -1.9;
r2 = 16.6;
}
}
mstar = model("mstar",mstar);
a0 = model("a0",a0);
a1 = model("a1",a1);
a2 = model("a2",a2);
a3 = model("a3",a3);
a0_0 = model("a0_0",a0_0);
a1_0 = model("a1_0",a1_0);
a2_0 = model("a2_0",a2_0);
a3_0 = model("a3_0",a3_0);
fplus_0 = model("fplus_0",fplus_0);
r1 = model("r1",r1);
r2 = model("r2",r2);
case_number = model("case_number",case_number);
}
void BGL::CalcFFs( Vec4D p0, Vec4D p1 )
{
if (case_number==0) {
const double mplus = m_m0+m_m1;
const double mminus = m_m0-m_m1;
const double chi = pow(6.889,-4);
double q2 = (p0-p1).Abs2();
double z = (sqrt(mplus*mplus-q2)-sqrt(mplus*mplus-q02))/(sqrt(mplus*mplus-q2)+sqrt(mplus*mplus-q02));
// Blasche factor P
double P = (sqrt(mplus*mplus-q2)-sqrt(mplus*mplus-mstar*mstar ))/(sqrt(mplus*mplus-q2)+sqrt(mplus*mplus-q02));
double phi = sqrt(1/(32*M_PI*chi))*(sqrt(mplus*mplus-q2)+sqrt(mplus*mplus-q02))*pow(sqrt(mplus*mplus-q2)+sqrt(mplus*mplus-(mminus*mminus)),1.5)*pow(sqrt(mplus*mplus-q2)+mplus,-5)*(mplus*mplus-q2)/pow(mplus*mplus-q02,0.25);
m_fplus = 1/(P*phi) * (a0 + a1*z + a2*z*z + a3*z*z*z);
m_f0 = 0.0;
m_calced = true;
}
else if (case_number==1) {
const double m_Dstar_plus = 2.1121;
const double zero = 0.0;
const double m_c = 1.29;
kf_code kf0=m_flavs[p_i[0]].Kfcode();
kf_code kf1=m_flavs[p_i[1]].Kfcode();
double q2 = (p0 - p1).Abs2();
double m2_c = pow(m_c,2);
double t_plus = pow(m_m0 + m_m1,2);
double t_minus = pow(m_m0 - m_m1,2);
double t_0 = t_plus * (1 - sqrt(1 - t_minus/t_plus));
double m2_Dstar_plus = pow(m_Dstar_plus,2);
double c = sqrt(M_PI * m2_c/3);
// c fuer Parameter von Paper: http://arxiv.org/pdf/1412.5502v1.pdf
// double c = sqrt(4 * M_PI * m2_c/9);
double P_q2;
double P_0;
if (kf1==kf_pi || kf1==kf_pi_plus) { P_q2 = 1; }
else if (kf1==kf_K || kf1==kf_K_plus) { P_q2 = zCalc(q2, m2_Dstar_plus, t_plus, t_minus); }
if (kf1==kf_pi || kf1==kf_pi_plus) { P_0 = 1; }
else if (kf1==kf_K || kf1==kf_K_plus) { P_0 = zCalc(zero, m2_Dstar_plus, t_plus, t_minus); }
// Berechnung von Phi:
double phi = c * pow(zCalc(q2, zero, t_plus, t_minus)/(-1 * q2),2.5) *
pow(zCalc(q2, t_0, t_plus, t_minus)/(t_0 - q2),-0.5) *
pow(zCalc(q2, t_minus, t_plus, t_minus)/(t_minus - q2),-0.75) *
(t_plus - q2)/(pow(t_plus - t_0,0.25));
// Berechnung von Phi(0):
double phi_0 = c * pow(zCalc(zero, t_0, t_plus, t_minus)/(t_0 - zero),-0.5) *
pow(zCalc(zero, t_minus, t_plus, t_minus)/(t_minus - zero),-0.75) *
(t_plus - zero)/(pow(t_plus - t_0,0.25));
// Berechnung von z:
double z = zCalc(q2, t_0, t_plus, t_minus);
// Berechnung von z(0)
double z_0 = zCalc(zero, t_0, t_plus, t_minus);
m_fplus = (fplus_0 * P_0 * phi_0 * (1 + r1*z + r2*z*z)) / (P_q2 * phi * (1 + r1*z_0 + r2*z_0*z_0));
m_f0 = 0.0;
m_calced = true;
}
else if (case_number==2) {
double r = m_m1/m_m0;
double q2 = (p0-p1).Abs2();
double w = (m_m0*m_m0+m_m1*m_m1-q2)/(2*m_m0*m_m1);
double z = (sqrt(w+1)-sqrt(2))/(sqrt(w+1)+sqrt(2));
double phi_plus = 1.1213*pow(1+z,2)*pow(1-z,0.5)*pow((1+r)*(1-z)+2*sqrt(r)*(1+z),-5);
double phi_0 = 0.5299*(1+z)*pow(1-z,1.5)*pow((1+r)*(1-z)+2*sqrt(r)*(1+z),-4);
m_fplus = 1/phi_plus*(a0+a1*z+a2*z*z+a3*z*z*z);
m_f0 = 1/phi_0*(a0_0+a1_0*z+a2_0*z*z+a3_0*z*z*z);
m_calced = true;
}
}
double BGL::zCalc(double q2, double t_0, double t_plus, double t_minus)
{
double z = (sqrt(t_plus - q2) - sqrt(t_plus - t_0))/(sqrt(t_plus - q2) + sqrt(t_plus - t_0));
return z;
}
} // namespace VA_P_V
} // namespace HADRONS
......@@ -33,7 +33,12 @@ BallZwicky::BallZwicky(GeneralModel model, double* masses,
m_fplus_m2 = 5.33*5.33;
}
}
else if (kf0==kf_D) {
m_fplus_0 = 0.6100701536;
m_fplus_alpha = 0.68;
m_fplus_r = 0.963;
m_fplus_m2 = 2.45*2.45;
}
m_fplus_0 = model("fplus_0",m_fplus_0);
m_fplus_r = model("fplus_r",m_fplus_r);
......
......@@ -17,8 +17,25 @@ HQET2::HQET2(GeneralModel model, double* masses, const Flavour_Vector& flavs,
std::vector<int>& indices) :
FormFactor_Base(model, masses, flavs, indices)
{
m_rho2 = model("HQET2_rho2",1.19);
m_V1_1 = model("HQET2_V1_1",0.98);
kf_code kf0=m_flavs[p_i[0]].Kfcode();
kf_code kf1=m_flavs[p_i[1]].Kfcode();
// http://arxiv.org/pdf/1510.03657v3.pdf updated parameters for B->D
if (kf0==kf_B || kf0==kf_B_plus) {
if (kf1==kf_D_plus || kf1==kf_D) {
m_rho2 = 1.09;
m_V1_1 = 1.0541;
}
else {
m_rho2 = 1.19;
m_V1_1 = 0.98;
}
}
else {
m_rho2 = 1.19;
m_V1_1 = 0.98;
}
m_rho2 = model("HQET2_rho2",m_rho2);
m_V1_1 = model("HQET2_V1_1",m_V1_1);
}
void HQET2::CalcFFs( Vec4D p0, Vec4D p1 )
......
#include "HADRONS++/Current_Library/VA_P_P.H"
#include <cmath>
namespace HADRONS {
namespace VA_P_P_FFs {
class ISGW3 : public FormFactor_Base {
double f_plus0; double r; double fq2_max;
public:
ISGW3(GeneralModel model, double* masses, const Flavour_Vector& flavs,
std::vector<int>& indices);
void CalcFFs(ATOOLS::Vec4D p0, ATOOLS::Vec4D p1);
};
ISGW3::ISGW3(GeneralModel model, double* masses, const Flavour_Vector& flavs,
std::vector<int>& indices) :
FormFactor_Base(model, masses, flavs, indices)
{
kf_code kf0=m_flavs[p_i[0]].Kfcode();
kf_code kf1=m_flavs[p_i[1]].Kfcode();
//D0-Decay:
if (kf0==kf_D) {
if (kf1==kf_pi_plus) {
f_plus0 = 0.635;
r = 2.0688;
fq2_max = 2.7306;
}
else if (kf1==kf_K_plus) {
f_plus0 = 0.7499255211;
r = 1.56;
fq2_max = 1.560461461;
}
}
//D+-Decay
else if (kf0==kf_D_plus) {
if (kf1==kf_pi) {
f_plus0 = 0.635;
r = 2.01;
fq2_max = 2.0731;
}
else if (kf1==kf_K) {
f_plus0 = 0.7427344545;
r = 1.48;
fq2_max = 1.476223252;
}
}
f_plus0 = model("f_plus0",f_plus0);
r = model("r",r);
fq2_max = model("fq2_max",fq2_max);
}
void ISGW3::CalcFFs( Vec4D p0, Vec4D p1 )
{
double q2_max = pow(m_m0 - m_m1,2);
double q2 = (p0-p1).Abs2();
m_fplus = fq2_max * pow(1+(pow(r,2)/12)*(q2_max - q2),-2);
m_f0 = 0.0;
m_calced = true;
}
} // namespace VA_P_V
} // namespace HADRONS
// taken from http://arxiv.org/pdf/0810.3878.pdf
......@@ -70,14 +70,14 @@ PoleFit::PoleFit(GeneralModel model,double* masses, const Flavour_Vector& flavs,
m_fplus_a0 = -0.48;
m_fplus_b0 = -0.30;
m_fplus_c0 = 0.47;
m_fplus_a0 = -0.99;
m_fplus_d0 = -0.99;
m_fmin_F0 = -1.7*0.24;
m_fmin_m0 = m_m0;
m_fmin_a0 = -0.41;
m_fmin_b0 = -0.42;
m_fmin_c0 = 0.95;
m_fmin_a0 = -1.55;
m_fmin_d0 = -1.55;
}
}
else if (kf0==kf_D_plus) {
......@@ -88,7 +88,33 @@ PoleFit::PoleFit(GeneralModel model,double* masses, const Flavour_Vector& flavs,
m_fplus_a0 = -0.89;
m_fplus_b0 = -0.40;
m_fplus_c0 = -0.18;
m_fplus_a0 = -1.00;
m_fplus_d0 = -1.00;
}
else if (kf1==kf_pi) {
m_fplus_F0 = 0.6704555546;
m_fplus_m0 = 1.99;
m_fplus_a0 = -0.09 - 1;
m_fplus_b0 = 0.09;
}
else if (kf1==kf_K) {
m_fplus_F0 = 0.7530074068;
m_fplus_m0 = 2.02;
m_fplus_a0 = -0.12 - 1;
m_fplus_b0 = 0.12;
}
}
else if (kf0==kf_D) {
if (kf1==kf_pi_plus) {
m_fplus_F0 = 0.6660154516;
m_fplus_m0 = 1.94;
m_fplus_a0 = -0.18 - 1;
m_fplus_b0 = 0.18;
}
else if (kf1==kf_K_plus) {
m_fplus_F0 = 0.738;
m_fplus_m0 = 1.9207;
m_fplus_a0 = -1;
m_fplus_b0 = 0;
}
}
else if (kf0==kf_D_s_plus) {
......@@ -99,7 +125,7 @@ PoleFit::PoleFit(GeneralModel model,double* masses, const Flavour_Vector& flavs,
m_fplus_a0 = -0.87;
m_fplus_b0 = -0.17;
m_fplus_c0 = -0.37;
m_fplus_a0 = 1.46;
m_fplus_d0 = 1.46;
}
}
else if (kf0==kf_B_c) {
......
......@@ -7,7 +7,8 @@ class Polynomial : public FormFactor_Base {
// http://www.slac.stanford.edu/spires/find/hep/www?j=PHLTA,B36,521
double m_fplus_0, m_fplus_lambda, m_fplus_m2;
double m_f0_0, m_f0_lambda, m_f0_m2;
double Fit(double q2, double m2, double f_0, double lambda);
double m_fplus_lambda2;
double Fit(double q2, double m2, double f_0, double lambda, double lambda_2);
public:
Polynomial(GeneralModel model, double* masses, const Flavour_Vector& flavs,
std::vector<int>& indices);
......@@ -20,9 +21,11 @@ Polynomial::Polynomial(GeneralModel model, double* masses,
{
m_fplus_0=0.0; m_fplus_lambda=0.0; m_fplus_m2=0.0;
m_f0_0=0.0; m_f0_lambda=0.0; m_f0_m2=0.0;
m_fplus_lambda2=0.0;
kf_code kf0=m_flavs[p_i[0]].Kfcode();
kf_code kf1=m_flavs[p_i[1]].Kfcode();
// K-Decay:
if (kf0==kf_K || kf0==kf_K_plus || kf0==kf_K_S || kf0==kf_K_L) {
if (kf1==kf_pi || kf1==kf_pi_plus) {
m_fplus_0 = 0.69;
......@@ -34,6 +37,16 @@ Polynomial::Polynomial(GeneralModel model, double* masses,
m_f0_m2 = 0.13957*0.13957;
}
}
// D-Decay:
// http://arxiv.org/pdf/0804.0203v2.pdf
else if (kf0==kf_D || kf0==kf_D_plus) {
if (kf1==kf_K || kf_K_plus) {
m_fplus_0 = 0.7642998; // http://arxiv.org/pdf/0810.3878.pdf
m_fplus_lambda = 0.33;
m_fplus_lambda2 = 0.25;
m_fplus_m2 = pow(2.1121,2);
}
}
m_fplus_0 = model("fplus_0",m_fplus_0);
m_fplus_lambda = model("fplus_lambda",m_fplus_lambda);
......@@ -42,19 +55,32 @@ Polynomial::Polynomial(GeneralModel model, double* masses,
m_f0_0 = model("f0_0",m_f0_0);
m_f0_lambda = model("f0_lambda",m_f0_lambda);
m_f0_m2 = model("f0_m2",m_f0_m2);
m_fplus_lambda2 = model("m_fplus_lambda2",m_fplus_lambda2);
}
void Polynomial::CalcFFs( Vec4D p0, Vec4D p1 )
{
kf_code kf0=m_flavs[p_i[0]].Kfcode();
kf_code kf1=m_flavs[p_i[1]].Kfcode();
double q2=(p0-p1).Abs2();
m_fplus = Fit(q2, m_fplus_m2, m_fplus_0, m_fplus_lambda);
m_f0 = Fit(q2, m_f0_m2, m_f0_0, m_f0_lambda);
if (kf0==kf_D || kf0==kf_D_plus) {
double m_Fplus_0 = m_fplus_0/(1 - q2/m_fplus_m2);
m_fplus = Fit(q2, m_fplus_m2, m_Fplus_0, m_fplus_lambda, m_fplus_lambda2);
m_f0 = Fit(q2, m_f0_m2, m_f0_0, m_f0_lambda, m_fplus_lambda2);
m_calced = true;
}
else {
m_fplus = Fit(q2, m_fplus_m2, m_fplus_0, m_fplus_lambda, m_fplus_lambda2);
m_f0 = Fit(q2, m_f0_m2, m_f0_0, m_f0_lambda, m_fplus_lambda2);
m_calced = true;
}
}
double Polynomial::Fit(double q2, double m2, double f_0, double lambda)
double Polynomial::Fit(double q2, double m2, double f_0, double lambda, double lambda_2)
{
return f_0*(1.0+lambda*q2/m2);
return f_0*(1.0+lambda*q2/m2 + lambda_2 * pow(q2/m2,2));
}
} // namespace VA_P_V
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment