26 namespace MD = MultiDimensional;
28 FFBtoD1starLLSW::FFBtoD1starLLSW() {
30 vector<IndexType> dims = {8};
32 string name{
"FFBtoD1starLLSW"};
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 FFBtoD1starLLSW::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 FFBtoD1starLLSW::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 Gv1 = -1 + w + eC*(LambdaD12 - 2*(w-1)*chi1) - (1 + w)*eB*Gb;
115 const double Gv2 = eC*(2*zeta1 - 2*chi2);
116 const double Gv3 = -1 - eC*(LambdaD12/(1 + w) + 2*zeta1 - 2*chi1 + 2*chi2) + eB*Gb;
117 const double Ga = 1 + eC*(LambdaD12/(1 + w) - 2*chi1) - eB*Gb;
130 std::unique_ptr<FormFactorBase> FFBtoD1starLLSW::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.