26 namespace MD = MultiDimensional;
28 FFBtoD1BLR::FFBtoD1BLR() {
30 vector<IndexType> dims = {8};
32 string name{
"FFBtoD1BLR"};
35 addProcessSignature(PID::BPLUS, {-PID::DSSD1});
38 addProcessSignature(PID::BZERO, {PID::DSSD1MINUS});
41 setPrefix(
"BstoDs**1");
42 addProcessSignature(PID::BS, {PID::DSSDS1MINUS});
48 void FFBtoD1BLR::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 FFBtoD1BLR::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"));
115 const double LambdaD32 = -laB + laP*w;
116 const double Fb = laB + laP - tau2 - tau1*(1 + 2*w);
117 const double LOIWtau = t1 + (w-1)*t1*tp;
120 const double Cs = CS(w, zBC);
122 const double Cv1 = CV1(w, zBC);
123 const double Cv2 = CV2(w, zBC);
124 const double Cv3 = CV3(w, zBC);
125 const double Ca1 = CA1(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 Fsc = (-(eC*(4*LambdaD32 + 2*(1 + w)*(6*eta1 + 2*(w-1)*eta2 - eta3) - 2*(w-1)*((1 + 2*w)*tau1 + tau2))) - 2*(1 + w)*(1 + as*Cs) - 2*(w-1)*eB*Fb)/sqrt(6.);
134 const double Fv1 = (-(eC*(4*(1 + w)*LambdaD32 - (-1 + w*w)*(2*eta1 + 3*eta3 + 3*tau1 - 3*tau2))) + (1 - w*w)*(1 + as*Cv1) - (-1 + w*w)*eB*Fb)/sqrt(6.);
135 const double Fv2 = (-3 - eC*(10*eta1 + 4*(w-1)*eta2 - 5*eta3 + (-1 + 4*w)*tau1 + 5*tau2) - as*(3*Cv1 + 2*(1 + w)*Cv2) - 3*eB*Fb)/sqrt(6.);
136 const double Fv3 = (-2 + w + eC*(4*LambdaD32 - 2*(6 + w)*eta1 - 4*(w-1)*eta2 - (-2 + 3*w)*eta3 + (2 + w)*tau1 + (2 + 3*w)*tau2) - as*((2 - w)*Cv1 + 2*(1 + w)*Cv3) + (2 + w)*eB*Fb)/sqrt(6.);
137 const double Fa = (-(eC*(4*LambdaD32 - (1 + w)*(2*eta1 + 3*eta3) - 3*(w-1)*(tau1 - tau2))) + (-1 - w)*(1 + as*Ca1) - (w-1)*eB*Fb)/sqrt(6.);
138 const double Ft1 = (-(eC*(4*LambdaD32 + (1 + w)*(2*eta1 + 3*eta3) - 3*(w-1)*(tau1 - tau2))) + (1 + w)*(1 + as*(Ct1 + (w-1)*Ct2)) + (w-1)*eB*Fb)/sqrt(6.);
139 const double Ft2 = (-(eC*(4*LambdaD32 - (1 + w)*(2*eta1 + 3*eta3) - 3*(w-1)*(tau1 - tau2))) + (-1 - w)*(1 + as*(Ct1 - (w-1)*Ct3)) + (w-1)*eB*Fb)/sqrt(6.);
140 const double Ft3 = (3 - eC*(-10*eta1 - 4*(w-1)*eta2 + 5*eta3 + (-1 + 4*w)*tau1 + 5*tau2) + as*(3*Ct1 - (2 - w)*Ct2 + 3*Ct3) + 3*eB*Fb)/sqrt(6.);
157 std::unique_ptr<FormFactorBase> FFBtoD1BLR::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