10 #include <generators/evtgen/models/EvtBCLFF.h>
12 #include <framework/logging/Logger.h>
14 #include <EvtGenBase/EvtId.hh>
15 #include <EvtGenBase/EvtPDL.hh>
27 for (
int i = 0; i < m_numBCLFFCoefficients; ++i) {
28 m_BCLFFCoefficients[i] = arglist[i];
36 EvtGenReport(EVTGEN_ERROR,
"EvtGen") <<
"Wrong number of arguments for EvtBCLFF::getscalarff!\n";
39 const auto mB = EvtPDL::getMeanMass(parent);
40 const auto mM = EvtPDL::getMeanMass(daughter);
42 const auto tplus = (mB + mM) * (mB + mM);
43 const auto tzero = (mB + mM) * (std::sqrt(mB) - std::sqrt(mM)) * (std::sqrt(mB) - std::sqrt(mM));
46 const auto pole = 1 / (1 - t / mR2);
51 const auto N_fpf = bplus.size();
52 const auto N_f0f = bzero.size();
54 auto z = [tplus, tzero](decltype(t) q2) {
55 const auto term1 = std::sqrt(tplus - q2);
56 const auto term2 = std::sqrt(tplus - tzero);
57 return (term1 - term2) / (term1 + term2);
61 for (
unsigned int n = 0; n < N_fpf; ++n) {
62 sum_fpf += bplus[n] * (std::pow(z(t), n) - std::pow(-1, n - N_fpf) * n / N_fpf * std::pow(z(t), N_fpf));
64 *fpf = pole * sum_fpf;
67 for (
unsigned int n = 0; n < N_f0f; ++n) {
68 sum_f0f += bzero[n] * std::pow(z(t), n);
73 void EvtBCLFF::getvectorff(EvtId parent, EvtId daughter,
double t,
double,
double* a1f,
double* a2f,
double* vf,
double* a0f)
77 EvtGenReport(EVTGEN_ERROR,
"EvtGen") <<
"Wrong number of arguments for EvtBCLFF::getvectorff!\n";
80 const auto mB = EvtPDL::getMeanMass(parent);
81 const auto mB2 = mB * mB;
82 const auto mM = EvtPDL::getMeanMass(daughter);
83 const auto mM2 = mM * mM;
85 const auto tplus = (mB + mM) * (mB + mM);
86 const auto tminus = (mB - mM) * (mB - mM);
87 const auto tzero = tplus * (1 - std::sqrt(1 - tminus / tplus));
94 const auto poleA0 = 1. / (1 - t / mR2A0);
95 const auto poleA1 = 1. / (1 - t / mR2A1);
96 const auto poleA12 = 1. / (1 - t / mR2A12);
97 const auto poleV = 1. / (1 - t / mR2V);
104 auto z = [tplus, tzero](decltype(t) q2) {
105 const auto term1 = std::sqrt(tplus - q2);
106 const auto term2 = std::sqrt(tplus - tzero);
107 return (term1 - term2) / (term1 + term2);
110 auto sum = [&z](decltype(t) q2, std::vector<double> par) {
112 for (
unsigned int n = 0; n < par.size(); ++n) {
113 tot += par[n] * std::pow(z(q2) - z(0), n);
118 auto kaellen = [mB, mM](decltype(t) q2) {
119 return ((mB + mM) * (mB + mM) - q2) * ((mB - mM) * (mB - mM) - q2);
122 const auto ffA0 = poleA0 * sum(t, A0);
123 const auto ffA1 = poleA1 * sum(t, A1);
124 const auto ffA12 = poleA12 * sum(t, A12);
125 const auto ffV = poleV * sum(t, V);
127 const auto ffA2 = ((mB + mM) * (mB + mM) * (mB2 - mM2 - t) * ffA1 - (16 * mB * mM2 * (mB + mM)) * ffA12) / kaellen(t);
138 B2FATAL(
"Not implemented :gettensorff in EvtBCLFF.");
143 B2FATAL(
"Not implemented :getbaryonff in EvtBCLFF.");
146 void EvtBCLFF::getdiracff(EvtId, EvtId,
double,
double,
double*,
double*,
double*,
double*,
double*,
double*)
148 B2FATAL(
"Not implemented :getbaryonff in EvtBCLFF.");
151 void EvtBCLFF::getraritaff(EvtId, EvtId,
double,
double,
double*,
double*,
double*,
double*,
double*,
double*,
double*,
double*)
153 B2FATAL(
"Not implemented :getbaryonff in EvtBCLFF.");