26 namespace MD = MultiDimensional;
28 FFBtoD1starBLR::FFBtoD1starBLR() {
30 vector<IndexType> dims = {8};
32 string name{
"FFBtoD1starBLR"};
34 setPrefix(
"BtoD**1*");
35 addProcessSignature(PID::BPLUS, {-PID::DSSD1STAR});
38 addProcessSignature(PID::BZERO, {PID::DSSD1STARMINUS});
41 setPrefix(
"BstoDs**1*");
42 addProcessSignature(PID::BS, {PID::DSSDS1STARMINUS});
48 void FFBtoD1starBLR::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 FFBtoD1starBLR::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;
116 const double Cs = CS(w, zBC);
118 const double Cv1 = CV1(w, zBC);
119 const double Cv2 = CV2(w, zBC);
120 const double Cv3 = CV3(w, zBC);
121 const double Ca1 = CA1(w, zBC);
124 const double Ct1 = CT1(w, zBC);
125 const double Ct2 = CT2(w, zBC);
126 const double Ct3 = CT3(w, zBC);
129 const double Gs = 1 - eC*(LambdaD12/(1 + w) - 2*(w-1)*zeta1 + 2*chi1 - 2*(1 + w)*chi2) + as*Cs - eB*Gb;
130 const double Gv1 = eC*(LambdaD12 - 2*(w-1)*chi1) + (w-1)*(1 + as*Cv1) - (1 + w)*eB*Gb;
131 const double Gv2 = eC*(2*zeta1 - 2*chi2) - as*Cv2;
132 const double Gv3 = -1 - eC*(LambdaD12/(1 + w) + 2*zeta1 - 2*chi1 + 2*chi2) - as*(Cv1 + Cv3) + eB*Gb;
133 const double Ga = 1 + eC*(LambdaD12/(1 + w) - 2*chi1) + as*Ca1 - eB*Gb;
134 const double Gt1 = -1 + eC*(LambdaD12/(1 + w) + 2*chi1) - as*(Ct1 + (w-1)*Ct2) + eB*Gb;
135 const double Gt2 = 1 + eC*(LambdaD12/(1 + w) - 2*chi1) + as*(Ct1 - (w-1)*Ct3) + eB*Gb;
136 const double Gt3 = eC*(2*zeta1 + 2*chi2) - as*Ct2;
153 std::unique_ptr<FormFactorBase> FFBtoD1starBLR::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