Belle II Software  release-05-01-25
EvtBCLFF.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2018 Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Markus Prim *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <generators/evtgen/models/EvtBCLFF.h>
11 
12 #include <framework/logging/Logger.h>
13 
14 #include <EvtGenBase/EvtId.hh>
15 #include <EvtGenBase/EvtPDL.hh>
16 
17 #include <cmath>
18 
19 namespace Belle2 {
25  EvtBCLFF::EvtBCLFF(int numarg, double* arglist) : m_numBCLFFCoefficients(numarg)
26  {
27  for (int i = 0; i < m_numBCLFFCoefficients; ++i) {
28  m_BCLFFCoefficients[i] = arglist[i];
29  }
30  }
31 
32  void EvtBCLFF::getscalarff(EvtId parent, EvtId daughter, double t, double, double* fpf, double* f0f)
33  {
34 
35  if (m_numBCLFFCoefficients != 8) {
36  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Wrong number of arguments for EvtBCLFF::getscalarff!\n";
37  }
38 
39  const auto mB = EvtPDL::getMeanMass(parent);
40  const auto mM = EvtPDL::getMeanMass(daughter);
41 
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));
44 
45  const auto mR2 = m_resonance1Minus * m_resonance1Minus;
46  const auto pole = 1 / (1 - t / mR2);
47 
48  const std::vector<double> bplus = {m_BCLFFCoefficients[0], m_BCLFFCoefficients[1], m_BCLFFCoefficients[2], m_BCLFFCoefficients[3]};
49  const std::vector<double> bzero = {m_BCLFFCoefficients[4], m_BCLFFCoefficients[5], m_BCLFFCoefficients[6], m_BCLFFCoefficients[7]};
50 
51  const auto N_fpf = bplus.size();
52  const auto N_f0f = bzero.size();
53 
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);
58  };
59 
60  double sum_fpf = 0;
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));
63  }
64  *fpf = pole * sum_fpf;
65 
66  double sum_f0f = 0;
67  for (unsigned int n = 0; n < N_f0f; ++n) {
68  sum_f0f += bzero[n] * std::pow(z(t), n);
69  }
70  *f0f = sum_f0f;
71  }
72 
73  void EvtBCLFF::getvectorff(EvtId parent, EvtId daughter, double t, double, double* a1f, double* a2f, double* vf, double* a0f)
74  {
75 
76  if (m_numBCLFFCoefficients != 11) {
77  EvtGenReport(EVTGEN_ERROR, "EvtGen") << "Wrong number of arguments for EvtBCLFF::getvectorff!\n";
78  }
79 
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;
84 
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));
88 
89  const auto mR2A0 = m_resonance0Minus * m_resonance0Minus;
90  const auto mR2A1 = m_resonance1Plus * m_resonance1Plus;
91  const auto mR2A12 = m_resonance1Plus * m_resonance1Plus;
92  const auto mR2V = m_resonance1Minus * m_resonance1Minus;
93 
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);
98 
99  const std::vector<double> A0 = {8 * mB* mM / (mB2 - mM2)* m_BCLFFCoefficients[5], m_BCLFFCoefficients[0], m_BCLFFCoefficients[1]};
100  const std::vector<double> A1 = {m_BCLFFCoefficients[2], m_BCLFFCoefficients[3], m_BCLFFCoefficients[4]};
101  const std::vector<double> A12 = {m_BCLFFCoefficients[5], m_BCLFFCoefficients[6], m_BCLFFCoefficients[7]};
102  const std::vector<double> V = {m_BCLFFCoefficients[8], m_BCLFFCoefficients[9], m_BCLFFCoefficients[10]};
103 
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);
108  };
109 
110  auto sum = [&z](decltype(t) q2, std::vector<double> par) {
111  double tot = 0;
112  for (unsigned int n = 0; n < par.size(); ++n) {
113  tot += par[n] * std::pow(z(q2) - z(0), n);
114  }
115  return tot;
116  };
117 
118  auto kaellen = [mB, mM](decltype(t) q2) {
119  return ((mB + mM) * (mB + mM) - q2) * ((mB - mM) * (mB - mM) - q2);
120  };
121 
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);
126 
127  const auto ffA2 = ((mB + mM) * (mB + mM) * (mB2 - mM2 - t) * ffA1 - (16 * mB * mM2 * (mB + mM)) * ffA12) / kaellen(t);
128 
129  *a0f = ffA0;
130  *a1f = ffA1;
131  *a2f = ffA2;
132  *vf = ffV;
133 
134  }
135 
136  void EvtBCLFF::gettensorff(EvtId, EvtId, double, double, double*, double*, double*, double*)
137  {
138  B2FATAL("Not implemented :gettensorff in EvtBCLFF.");
139  }
140 
141  void EvtBCLFF::getbaryonff(EvtId, EvtId, double, double, double*, double*, double*, double*)
142  {
143  B2FATAL("Not implemented :getbaryonff in EvtBCLFF.");
144  }
145 
146  void EvtBCLFF::getdiracff(EvtId, EvtId, double, double, double*, double*, double*, double*, double*, double*)
147  {
148  B2FATAL("Not implemented :getbaryonff in EvtBCLFF.");
149  }
150 
151  void EvtBCLFF::getraritaff(EvtId, EvtId, double, double, double*, double*, double*, double*, double*, double*, double*, double*)
152  {
153  B2FATAL("Not implemented :getbaryonff in EvtBCLFF.");
154  }
156 }
Belle2::EvtBCLFF::m_BCLFFCoefficients
double m_BCLFFCoefficients[19]
Parameters passed to the model; BCL expansion coefficients.
Definition: EvtBCLFF.h:88
Belle2::EvtBCLFF::m_resonance1Plus
static constexpr double m_resonance1Plus
Mass of the 1+ resonance for the parametrization of the vector FF.
Definition: EvtBCLFF.h:95
Belle2::EvtBCLFF::EvtBCLFF
EvtBCLFF(int numarg, double *arglist)
constructor
Definition: EvtBCLFF.cc:33
Belle2::EvtBCLFF::m_resonance0Minus
static constexpr double m_resonance0Minus
Mass of the 0- resonance for the parametrization of the vector FF.
Definition: EvtBCLFF.h:91
Belle2::EvtBCLFF::getraritaff
void getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *)
Not Implemented.
Definition: EvtBCLFF.cc:159
Belle2::EvtBCLFF::getdiracff
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *)
Not Implemented.
Definition: EvtBCLFF.cc:154
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::EvtBCLFF::m_numBCLFFCoefficients
int m_numBCLFFCoefficients
Total number of parameters passed to the model.
Definition: EvtBCLFF.h:86
Belle2::EvtBCLFF::getbaryonff
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *)
Not Implemented.
Definition: EvtBCLFF.cc:149
Belle2::EvtBCLFF::getvectorff
void getvectorff(EvtId parent, EvtId daughter, double t, double, double *a1f, double *a2f, double *vf, double *a0f)
Vector FF's.
Definition: EvtBCLFF.cc:81
Belle2::EvtBCLFF::getscalarff
void getscalarff(EvtId parent, EvtId daughter, double t, double, double *fpf, double *f0f)
Scalar FF's.
Definition: EvtBCLFF.cc:40
Belle2::EvtBCLFF::gettensorff
void gettensorff(EvtId parent, EvtId daughter, double t, double, double *hf, double *kf, double *bp, double *bm)
Not Implemented.
Definition: EvtBCLFF.cc:144
Belle2::EvtBCLFF::m_resonance1Minus
static constexpr double m_resonance1Minus
Mass of the 1- resonance for the parametrization of the vector FF.
Definition: EvtBCLFF.h:93