27 namespace MD = MultiDimensional;
29 FFBtoDstarCLN::FFBtoDstarCLN() {
31 vector<IndexType> dims = {8};
32 string name{
"FFBtoDstarCLN"};
35 addProcessSignature(PID::BPLUS, {-PID::DSTAR});
38 addProcessSignature(PID::BZERO, {PID::DSTARMINUS});
42 addProcessSignature(PID::BS, {PID::DSSTARMINUS});
48 void FFBtoDstarCLN::defineSettings() {
50 setPath(getFFErrPrefixGroup().
get());
53 addSetting<double>(
"a",1.0);
54 addSetting<double>(
"RhoSq",1.207);
55 addSetting<double>(
"F1",0.908);
56 addSetting<double>(
"R1",1.401);
57 addSetting<double>(
"R2",0.854);
58 addSetting<double>(
"R0",1.15);
59 addSetting<double>(
"as",0.26);
60 addSetting<double>(
"la",0.48);
61 addSetting<double>(
"mcOnmb",0.29);
65 void FFBtoDstarCLN::evalAtPSPoint(
const vector<double>& point,
const vector<double>& masses) {
66 Tensor& result = getTensor();
70 MSG_WARNING(
"Warning, Setting have not been defined!");
76 if(masses.size() >= 2) {
82 Mb = this->masses()[0];
83 Mc = this->masses()[1];
85 const double Mb2 = Mb*Mb;
86 const double Mc2 = Mc*Mc;
88 double Sqq = point[0];
91 double w = (Mb2 + Mc2 - Sqq)/(2.*Mb*Mc);
93 if(
isZero(w - 1.0)) w += 1e-6;
94 const double a = *getSetting<double>(
"a");
95 const double zCon = (sqrt(w+1) -
sqrt2*a)/(sqrt(w+1) +
sqrt2*a);
97 const double RhoSq=*getSetting<double>(
"RhoSq");
98 const double R0par=*getSetting<double>(
"R0");
99 const double R1par=*getSetting<double>(
"R1");
100 const double R2par=*getSetting<double>(
"R2");
101 const double F1par=*getSetting<double>(
"F1");
102 const double as = *getSetting<double>(
"as")/
pi;
103 const double LambdaBar = *getSetting<double>(
"la");
104 const double zR = *getSetting<double>(
"mcOnmb");
106 const double rC=Mc/Mb;
107 const double rC2 = rC*rC;
110 const double mbMu = Mb - unitres*LambdaBar - Mb*as*(4./3. + log(zR));
111 const double mcMu = Mc - unitres*LambdaBar - Mc*as*(4./3. - log(zR));
114 const double Ha1= F1par*(1. - 8.* RhoSq * zCon +
115 (53. * RhoSq - 15.) * pow(zCon, 2.)
116 - (231. * RhoSq - 91.) * pow(zCon, 3.));
117 const double R0 = R0par - 0.11 * (w - 1.) + 0.01 * pow(w - 1., 2.);
118 const double R1 = R1par - 0.12 * (w - 1.) + 0.05 * pow(w - 1., 2.);
119 const double R2 = R2par + 0.11 * (w - 1.) - 0.06 * pow(w - 1., 2.);
121 const double Ff = (Ha1*(Mb2*pow(1 + rC,2) - Sqq))/(2.*Mb*sqrt(rC));
122 const double Fg = (Ha1*R1)/(2.*Mb*sqrt(rC));
123 const double Fm = -(Ha1*(R2*(-1 + rC2) - 2*rC*(-1 + R0 + R0*rC - w)))/(2.*Mb*sqrt(rC)*(1 + rC2 - 2*rC*w));
124 const double Fp = -(Ha1*R2)/(2.*Mb*sqrt(rC));
126 const double Fps = -(Ff + Mb2*(Fp*(1-rC2) + Fm*(1 + rC2 - 2*rC*w)))/(mbMu + mcMu);
148 std::unique_ptr<FormFactorBase> FFBtoDstarCLN::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.
static constexpr double sqrt2
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