26 namespace MD = MultiDimensional;
28 FFBtoD1LLSW::FFBtoD1LLSW() {
30 vector<IndexType> dims = {8};
32 string name{
"FFBtoD1LLSW"};
35 addProcessSignature(PID::BPLUS, {-PID::DSSD1});
38 addProcessSignature(PID::BZERO, {PID::DSSD1MINUS});
41 setPrefix(
"BstoDs**1");
42 addProcessSignature(PID::BS, {PID::DSSDS1MINUS});
48 void FFBtoD1LLSW::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 FFBtoD1LLSW::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"));
113 const double LambdaD32 = -laB + laP*w;
114 const double Fb = laB + laP - tau2 - tau1*(1 + 2*w);
115 const double LOIWtau = t1 + tp*(w-1);
118 const double Fv1 = (1 - w*w - eC*(4*(1 + w)*LambdaD32 - (-1 + w*w)*(2*eta1 + 3*eta3 + 3*tau1 - 3*tau2)) - (-1 + w*w)*eB*Fb)/sqrt(6.);
119 const double Fv2 = (-3 - eC*(10*eta1 + 4*(w-1)*eta2 - 5*eta3 + (-1 + 4*w)*tau1 + 5*tau2) - 3*eB*Fb)/sqrt(6.);
120 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) + (2 + w)*eB*Fb)/sqrt(6.);
121 const double Fa = (-1 - w - eC*(4*LambdaD32 - (1 + w)*(2*eta1 + 3*eta3) - 3*(w-1)*(tau1 - tau2)) - (w-1)*eB*Fb)/sqrt(6.);
134 std::unique_ptr<FormFactorBase> FFBtoD1LLSW::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.