26 namespace MD = MultiDimensional;
28 FFBtoD0starLLSW::FFBtoD0starLLSW() {
30 vector<IndexType> dims = {4};
32 string name{
"FFBtoD0starLLSW"};
34 setPrefix(
"BtoD**0*");
35 addProcessSignature(PID::BPLUS, {-PID::DSSD0STAR});
38 addProcessSignature(PID::BZERO, {PID::DSSD0STARMINUS});
41 setPrefix(
"BstoDs**0*");
42 addProcessSignature(PID::BS, {PID::DSSDS0STARMINUS});
48 void FFBtoD0starLLSW::defineSettings() {
50 setPath(getFFErrPrefixGroup().
get());
54 addSetting<double>(
"mb",4.2);
55 addSetting<double>(
"mc",1.4);
56 addSetting<double>(
"zt1", 0.68);
57 addSetting<double>(
"ztp", -0.2);
58 addSetting<double>(
"zeta1", 0.3);
59 addSetting<double>(
"chi1", 0.);
60 addSetting<double>(
"chi2", 0.);
61 addSetting<double>(
"laB", 0.4);
62 addSetting<double>(
"laS", 0.76);
67 void FFBtoD0starLLSW::evalAtPSPoint(
const vector<double>& point,
const vector<double>& masses) {
68 Tensor& result = getTensor();
72 MSG_WARNING(
"Warning, Setting have not been defined!");
78 if(masses.size() >= 2) {
84 Mb = this->masses()[0];
85 Mc = this->masses()[1];
87 const double Mb2 = Mb*Mb;
88 const double Mc2 = Mc*Mc;
90 double Sqq = point[0];
93 double w = (Mb2 + Mc2 - Sqq)/(2.*Mb*Mc);
95 if(
isZero(w - 1.0)) w += 1e-6;
99 const double eB = 1./(*getSetting<double>(
"mb")*2.);
100 const double eC = 1./(*getSetting<double>(
"mc")*2.);
101 const double zt1 = (*getSetting<double>(
"zt1"));
102 const double ztp = (*getSetting<double>(
"ztp"));
103 const double zeta1 = (*getSetting<double>(
"zeta1"));
104 const double chi1 = (*getSetting<double>(
"chi1"));
105 const double chi2 = (*getSetting<double>(
"chi2"));
106 const double laB = (*getSetting<double>(
"laB"));
107 const double laS = (*getSetting<double>(
"laS"));
109 const double LambdaD12 = -laB + laS*w;
110 const double Gb = (-(laB*(2 + w)) + laS*(1 + 2*w))/(1 + w) - 2*(w-1)*zeta1;
111 const double LOIWzeta = zt1 + (w-1)*ztp;
114 const double gp = -(eC*((3*LambdaD12)/(1 + w) - 2*(w-1)*zeta1)) - eB*Gb;
115 const double gm = 1 + eC*(6*chi1 - 2*(1 + w)*chi2);
126 std::unique_ptr<FormFactorBase> FFBtoD0starLLSW::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.