8#include <generators/evtgen/models/EvtBCLFF.h>
10#include <framework/logging/Logger.h>
12#include <EvtGenBase/EvtId.hh>
13#include <EvtGenBase/EvtPDL.hh>
34 EvtGenReport(EVTGEN_ERROR,
"EvtGen") <<
"Wrong number of arguments for EvtBCLFF::getscalarff!\n";
37 const auto mB = EvtPDL::getMeanMass(parent);
38 const auto mM = EvtPDL::getMeanMass(daughter);
40 const auto tplus = (mB + mM) * (mB + mM);
41 const auto tzero = (mB + mM) * (std::sqrt(mB) - std::sqrt(mM)) * (std::sqrt(mB) - std::sqrt(mM));
44 const auto pole = 1 / (1 - t / mR2);
49 const auto N_fpf = bplus.size();
50 const auto N_f0f = bzero.size();
52 auto z = [tplus, tzero](
decltype(t) q2) {
53 const auto term1 = std::sqrt(tplus - q2);
54 const auto term2 = std::sqrt(tplus - tzero);
55 return (term1 - term2) / (term1 + term2);
59 for (
unsigned int n = 0; n < N_fpf; ++n) {
60 sum_fpf += bplus[n] * (std::pow(z(t), n) - std::pow(-1, n - N_fpf) * n / N_fpf * std::pow(z(t), N_fpf));
62 *fpf = pole * sum_fpf;
65 for (
unsigned int n = 0; n < N_f0f; ++n) {
66 sum_f0f += bzero[n] * std::pow(z(t), n);
71 void EvtBCLFF::getvectorff(EvtId parent, EvtId daughter,
double t,
double,
double* a1f,
double* a2f,
double* vf,
double* a0f)
75 EvtGenReport(EVTGEN_ERROR,
"EvtGen") <<
"Wrong number of arguments for EvtBCLFF::getvectorff!\n";
78 const auto mB = EvtPDL::getMeanMass(parent);
79 const auto mB2 = mB * mB;
80 const auto mM = EvtPDL::getMeanMass(daughter);
81 const auto mM2 = mM * mM;
83 const auto tplus = (mB + mM) * (mB + mM);
84 const auto tminus = (mB - mM) * (mB - mM);
85 const auto tzero = tplus * (1 - std::sqrt(1 - tminus / tplus));
92 const auto poleA0 = 1. / (1 - t / mR2A0);
93 const auto poleA1 = 1. / (1 - t / mR2A1);
94 const auto poleA12 = 1. / (1 - t / mR2A12);
95 const auto poleV = 1. / (1 - t / mR2V);
102 auto z = [tplus, tzero](
decltype(t) q2) {
103 const auto term1 = std::sqrt(tplus - q2);
104 const auto term2 = std::sqrt(tplus - tzero);
105 return (term1 - term2) / (term1 + term2);
108 auto sum = [&z](
decltype(t) q2, std::vector<double> par) {
110 for (
unsigned int n = 0; n < par.size(); ++n) {
111 tot += par[n] * std::pow(z(q2) - z(0), n);
116 auto kaellen = [mB, mM](
decltype(t) q2) {
117 return ((mB + mM) * (mB + mM) - q2) * ((mB - mM) * (mB - mM) - q2);
120 const auto ffA0 = poleA0 * sum(t, A0);
121 const auto ffA1 = poleA1 * sum(t, A1);
122 const auto ffA12 = poleA12 * sum(t, A12);
123 const auto ffV = poleV * sum(t, V);
125 const auto ffA2 = ((mB + mM) * (mB + mM) * (mB2 - mM2 - t) * ffA1 - (16 * mB * mM2 * (mB + mM)) * ffA12) / kaellen(t);
136 B2FATAL(
"Not implemented :gettensorff in EvtBCLFF.");
141 B2FATAL(
"Not implemented :getbaryonff in EvtBCLFF.");
146 B2FATAL(
"Not implemented :getbaryonff in EvtBCLFF.");
149 void EvtBCLFF::getraritaff(EvtId, EvtId,
double,
double,
double*,
double*,
double*,
double*,
double*,
double*,
double*,
double*)
151 B2FATAL(
"Not implemented :getbaryonff in EvtBCLFF.");
static constexpr double m_resonance1Minus
Mass of the 1- resonance for the parametrization of the vector FF.
static constexpr double m_resonance0Minus
Mass of the 0- resonance for the parametrization of the vector FF.
static constexpr double m_resonance1Plus
Mass of the 1+ resonance for the parametrization of the vector FF.
double m_BCLFFCoefficients[19]
Parameters passed to the model; BCL expansion coefficients.
int m_numBCLFFCoefficients
Total number of parameters passed to the model.
EvtBCLFF(int numarg, double *arglist)
constructor
void getscalarff(EvtId parent, EvtId daughter, double t, double, double *fpf, double *f0f)
Scalar FF's.
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *)
Not Implemented.
void getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *)
Not Implemented.
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *)
Not Implemented.
void gettensorff(EvtId parent, EvtId daughter, double t, double, double *hf, double *kf, double *bp, double *bm)
Not Implemented.
void getvectorff(EvtId parent, EvtId daughter, double t, double, double *a1f, double *a2f, double *vf, double *a0f)
Vector FF's.
Abstract base class for different kinds of events.