26 namespace MD = MultiDimensional;
28 FFBtoD0starBLR::FFBtoD0starBLR() {
30 vector<IndexType> dims = {4};
32 string name{
"FFBtoD0starBLR"};
34 setPrefix(
"BtoD**0*");
35 addProcessSignature(PID::BPLUS, {-PID::DSSD0STAR});
38 addProcessSignature(PID::BZERO, {PID::DSSD0STARMINUS});
41 setPrefix(
"BstoDs**0*");
42 addProcessSignature(PID::BS, {PID::DSSDS0STARMINUS});
48 void FFBtoD0starBLR::defineSettings() {
50 setPath(getFFErrPrefixGroup().
get());
54 addSetting<double>(
"as",0.26);
55 addSetting<double>(
"mb",4.710);
56 addSetting<double>(
"mc",4.710 - 3.400);
57 addSetting<double>(
"zt1", 0.7);
58 addSetting<double>(
"ztp", 0.2);
59 addSetting<double>(
"zeta1", 0.6);
60 addSetting<double>(
"chi1", 0.);
61 addSetting<double>(
"chi2", 0.);
62 addSetting<double>(
"laB", 0.4);
63 addSetting<double>(
"laS", 0.76);
68 void FFBtoD0starBLR::evalAtPSPoint(
const vector<double>& point,
const vector<double>& masses) {
69 Tensor& result = getTensor();
73 MSG_WARNING(
"Warning, Setting have not been defined!");
79 if(masses.size() >= 2) {
85 Mb = this->masses()[0];
86 Mc = this->masses()[1];
88 const double Mb2 = Mb*Mb;
89 const double Mc2 = Mc*Mc;
91 double Sqq = point[0];
94 double w = (Mb2 + Mc2 - Sqq)/(2.*Mb*Mc);
96 if(
isZero(w - 1.0)) w += 1e-6;
99 const double zBC = (*getSetting<double>(
"mc"))/(*getSetting<double>(
"mb"));
100 const double eB = 1./(*getSetting<double>(
"mb")*2.);
101 const double eC = 1./(*getSetting<double>(
"mc")*2.);
102 const double as = (*getSetting<double>(
"as"))/
pi;
103 const double zt1 = (*getSetting<double>(
"zt1"));
104 const double ztp = (*getSetting<double>(
"ztp"));
105 const double zeta1 = (*getSetting<double>(
"zeta1"));
106 const double chi1 = (*getSetting<double>(
"chi1"));
107 const double chi2 = (*getSetting<double>(
"chi2"));
108 const double laB = (*getSetting<double>(
"laB"));
109 const double laS = (*getSetting<double>(
"laS"));
111 const double LambdaD12 = -laB + laS*w;
112 const double Gb = (-(laB*(2 + w)) + laS*(1 + 2*w))/(1 + w) - 2*(w-1)*zeta1;
113 const double LOIWzeta = zt1 + (w-1)*zt1*ztp;
117 const double Cps = CP(w, zBC);
121 const double Ca1 = CA1(w, zBC);
122 const double Ca2 = CA2(w, zBC);
123 const double Ca3 = CA3(w, zBC);
124 const double Ct1 = CT1(w, zBC);
129 const double gps = eC*(3*LambdaD12 - 2*(-1 + w*w)*zeta1 + (w-1)*(6*chi1 - 2*(1 + w)*chi2)) + (w-1)*(1 + as*Cps) - (1 + w)*eB*Gb;
130 const double gp = -(eC*((3*LambdaD12)/(1 + w) - 2*(w-1)*zeta1)) + ((w-1)*as*(Ca2 + Ca3))/2. - eB*Gb;
131 const double gm = 1 + eC*(6*chi1 - 2*(1 + w)*chi2) + as*(Ca1 + ((w-1)*(Ca2 - Ca3))/2.);
132 const double gt = 1 + eC*((3*LambdaD12)/(1 + w) - 2*(w-1)*zeta1 + 6*chi1 - 2*(1 + w)*chi2) + as*Ct1 - eB*Gb;
145 std::unique_ptr<FormFactorBase> FFBtoD0starBLR::clone(
const std::string& label) {
TensorData makeEmptySparse(const IndexList &dimensions, const LabelsList &labels)
std::complex< double > & element(const IndexList &indices={})
access an element given its indices
Tensor indices label definitions.
Sparse tensor data container.
Multidimensional tensor class with complex numbers as elements.
bool isZero(const std::complex< double > val)
void clearData()
sets all the elements to 0
Various numerical constants.
Hammer particle data class.
static constexpr double pi