26 namespace MD = MultiDimensional;
28 FFBtoD2starLLSW::FFBtoD2starLLSW() {
30 vector<IndexType> dims = {8};
32 string name{
"FFBtoD2starLLSW"};
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 FFBtoD2starLLSW::defineSettings() {
50 setPath(getFFErrPrefixGroup().
get());
54 addSetting<double>(
"mb",4.2);
55 addSetting<double>(
"mc",1.4);
56 addSetting<double>(
"t1", 0.71);
57 addSetting<double>(
"tp", -1.6);
58 addSetting<double>(
"tau1", -0.5);
59 addSetting<double>(
"tau2", 2.9);
60 addSetting<double>(
"eta1", 0.);
61 addSetting<double>(
"eta2", 0.);
62 addSetting<double>(
"eta3", 0.);
63 addSetting<double>(
"laB", 0.4);
64 addSetting<double>(
"laP", 0.8);
69 void FFBtoD2starLLSW::evalAtPSPoint(
const vector<double>& point,
const vector<double>& masses) {
70 Tensor& result = getTensor();
74 MSG_WARNING(
"Warning, Setting have not been defined!");
80 if(masses.size() >= 2) {
86 Mb = this->masses()[0];
87 Mc = this->masses()[1];
89 const double Mb2 = Mb*Mb;
90 const double Mc2 = Mc*Mc;
92 double Sqq = point[0];
95 double w = (Mb2 + Mc2 - Sqq)/(2.*Mb*Mc);
97 if(
isZero(w - 1.0)) w += 1e-6;
101 const double eB = 1./(*getSetting<double>(
"mb")*2.);
102 const double eC = 1./(*getSetting<double>(
"mc")*2.);
103 const double t1 = (*getSetting<double>(
"t1"));
104 const double tp = (*getSetting<double>(
"tp"));
105 const double tau1 = (*getSetting<double>(
"tau1"));
106 const double tau2 = (*getSetting<double>(
"tau2"));
107 const double eta1 = (*getSetting<double>(
"eta1"));
108 const double eta2 = (*getSetting<double>(
"eta2"));
109 const double eta3 = (*getSetting<double>(
"eta3"));
110 const double laB = (*getSetting<double>(
"laB"));
111 const double laP = (*getSetting<double>(
"laP"));
114 const double Fb = laB + laP - tau2 - tau1*(1 + 2*w);
115 const double LOIWtau = t1 + tp*(w-1);
118 const double Ka1 = -1 - w - eC*(-((1 + w)*(2*eta1 - eta3)) + (w-1)*(tau1 - tau2)) - (w-1)*eB*Fb;
119 const double Ka2 = -2*eC*(eta2 + tau1);
120 const double Ka3 = 1 - eC*(2*eta1 - 2*eta2 - eta3 + tau1 + tau2) + eB*Fb;
121 const double Kv = -1 - eC*(-2*eta1 + eta3 + tau1 - tau2) - eB*Fb;
134 std::unique_ptr<FormFactorBase> FFBtoD2starLLSW::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.