26 namespace MD = MultiDimensional;
28 FFBtoD2starBLR::FFBtoD2starBLR() {
30 vector<IndexType> dims = {8};
32 string name{
"FFBtoD2starBLR"};
34 setPrefix(
"BtoD**2*");
35 addProcessSignature(PID::BPLUS, {-PID::DSSD2STAR});
38 addProcessSignature(PID::BZERO, {PID::DSSD2STARMINUS});
41 setPrefix(
"BstoDs**2*");
42 addProcessSignature(PID::BS, {PID::DSSDS2STARMINUS});
48 void FFBtoD2starBLR::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>(
"t1", 0.7);
58 addSetting<double>(
"tp", -1.6);
59 addSetting<double>(
"tau1", -0.5);
60 addSetting<double>(
"tau2", 2.9);
61 addSetting<double>(
"eta1", 0.);
62 addSetting<double>(
"eta2", 0.);
63 addSetting<double>(
"eta3", 0.);
64 addSetting<double>(
"laB", 0.4);
65 addSetting<double>(
"laP", 0.8);
70 void FFBtoD2starBLR::evalAtPSPoint(
const vector<double>& point,
const vector<double>& masses) {
71 Tensor& result = getTensor();
75 MSG_WARNING(
"Warning, Setting have not been defined!");
81 if(masses.size() >= 2) {
87 Mb = this->masses()[0];
88 Mc = this->masses()[1];
90 const double Mb2 = Mb*Mb;
91 const double Mc2 = Mc*Mc;
93 double Sqq = point[0];
96 double w = (Mb2 + Mc2 - Sqq)/(2.*Mb*Mc);
98 if(
isZero(w - 1.0)) w += 1e-6;
101 const double zBC = (*getSetting<double>(
"mc"))/(*getSetting<double>(
"mb"));
102 const double eB = 1./(*getSetting<double>(
"mb")*2.);
103 const double eC = 1./(*getSetting<double>(
"mc")*2.);
104 const double as = (*getSetting<double>(
"as"))/
pi;
105 const double t1 = (*getSetting<double>(
"t1"));
106 const double tp = (*getSetting<double>(
"tp"));
107 const double tau1 = (*getSetting<double>(
"tau1"));
108 const double tau2 = (*getSetting<double>(
"tau2"));
109 const double eta1 = (*getSetting<double>(
"eta1"));
110 const double eta2 = (*getSetting<double>(
"eta2"));
111 const double eta3 = (*getSetting<double>(
"eta3"));
112 const double laB = (*getSetting<double>(
"laB"));
113 const double laP = (*getSetting<double>(
"laP"));
116 const double Fb = laB + laP - tau2 - tau1*(1 + 2*w);
117 const double LOIWtau = t1 + (w-1)*t1*tp;
121 const double Cps = CP(w, zBC);
122 const double Cv1 = CV1(w, zBC);
125 const double Ca1 = CA1(w, zBC);
126 const double Ca2 = CA2(w, zBC);
127 const double Ca3 = CA3(w, zBC);
128 const double Ct1 = CT1(w, zBC);
129 const double Ct2 = CT2(w, zBC);
130 const double Ct3 = CT3(w, zBC);
133 const double Kp = 1 + eC*(-2*eta1 - 2*(w-1)*eta2 + eta3 + (1 + 2*w)*tau1 + tau2) + as*Cps + eB*Fb;
134 const double Ka1 = -(eC*(-((1 + w)*(2*eta1 - eta3)) + (w-1)*(tau1 - tau2))) + (-1 - w)*(1 + as*Ca1) - (w-1)*eB*Fb;
135 const double Ka2 = -2*eC*(eta2 + tau1) + as*Ca2;
136 const double Ka3 = 1 - eC*(2*eta1 - 2*eta2 - eta3 + tau1 + tau2) + as*(Ca1 + Ca3) + eB*Fb;
137 const double Kv = -1 - eC*(-2*eta1 + eta3 + tau1 - tau2) - as*Cv1 - eB*Fb;
138 const double Kt1 = 1 - eC*(2*eta1 - eta3) + as*(Ct1 + ((w-1)*(Ct2 - Ct3))/2.);
139 const double Kt2 = -(eC*(tau1 - tau2)) + ((1 + w)*as*(Ct2 + Ct3))/2. + eB*Fb;
140 const double Kt3 = 2*eC*(-eta2 + tau1) - as*Ct2;
157 std::unique_ptr<FormFactorBase> FFBtoD2starBLR::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