Version: SMASH-3.4
formfactors.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2018,2020,2022-2023,2026
3  * SMASH Team
4  *
5  * GNU General Public License (GPLv3 or later)
6  */
7 
8 #ifndef SRC_INCLUDE_SMASH_FORMFACTORS_H_
9 #define SRC_INCLUDE_SMASH_FORMFACTORS_H_
10 
11 #include <algorithm>
12 #include <complex>
13 #include <string>
14 
15 #include "constants.h"
16 #include "macros.h"
17 #include "pdgcode.h"
18 #include "pdgcode_constants.h"
19 
20 namespace smash {
21 
22 /**
23  * \return the squared Blatt-Weisskopf functions, which influence the mass
24  * dependence of the decay widths. See e.g. \iref{Effenberger:1999wlg}, page 28
25  * and
26  * https://physique.cuso.ch/fileadmin/physique/document/2015_chung_brfactor1.pdf
27  * where the recursive formula used here is given.
28  *
29  * \param p_ab Momentum of outgoing particles A and B in center-of-mass frame
30  * [GeV] \param L Angular momentum of outgoing particles A and B.
31  *
32  * This is used as a standard form factor for all hadronic decays. Note that all
33  * the Blatt-Weisskopf functions approach one for large p_ab and behave like
34  * p_ab**L for small \p p_ab. They are increasing monotonically with \p p_ab.
35  */
36 inline double blatt_weisskopf_sqr(const double p_ab, const int L) {
37  if (L == 0) {
38  return 1.;
39  }
40  constexpr double R = 1. / hbarc; /* interaction radius = 1 fm */
41  const double x = p_ab * R;
42  const double x2 = x * x;
43  if (L == 1) {
44  return x2 / (1. + x2);
45  }
46  std::complex<double> g_prevprev(1, 0);
47  std::complex<double> g_prev(1, -x);
48  double numer = x2;
49  for (int l = 1; l < L; l++) {
50  numer *= x2;
51  const auto new_g =
52  static_cast<double>(2 * l + 1) * g_prev - x2 * g_prevprev;
53  g_prevprev = g_prev;
54  g_prev = new_g;
55  }
56  const double denom = std::norm(g_prev);
57  return numer / denom;
58 }
59 
60 /**
61  * An additional form factor for unstable final states as used in GiBUU,
62  * according to M. Post, see eq. (174) in \iref{Buss:2011mx} or eq. (13) in
63  * \iref{Post:2003hu}.
64  *
65  * \param m Actual mass of the decaying resonance [GeV].
66  * \param M0 Pole mass of the decaying resonance [GeV].
67  * \param srts0 Threshold of the reaction, i.e. minimum possible sqrt(s) [GeV].
68  * \param L Lambda parameter of the form factor [GeV]. This is a cut-off
69  * parameter that can be different for baryons and mesons.
70  *
71  * \return The squared value of the form factor (dimensionless).
72  *
73  * This form factor is equal to one at m=M0 and m=srts0. For decreasing
74  * values of L, the form factor results in a stronger and stronger suppression
75  * of the high-mass tail (m > M0) and a corresponding enhancement of the
76  * low-mass tail (m < M0).
77  */
78 inline double post_ff_sqr(double m, double M0, double srts0, double L) {
79  const auto L4 = L * L * L * L;
80  const auto M2 = M0 * M0;
81  const auto s0 = srts0 * srts0;
82  const auto sminus = (s0 - M2) * 0.5;
83  const auto splus = m * m - (s0 + M2) * 0.5;
84  const auto FF = (L4 + sminus * sminus) / (L4 + splus * splus);
85  return FF * FF;
86 }
87 
88 // electromagnetic transition form factors for the dilepton dalitz decays
89 
90 /**
91  * \return Electromagnetic transition form factor for P → γ e⁺ e⁻, with a
92  * pseudoscalar meson P = π⁰,η,η', as a function of the dilepton mass.
93  *
94  * For the π⁰ see \iref{Landsberg:1985gaz}. For the η the Lambda parameter is
95  * fitted to NA60 data, see \iref{NA60:2009una}.
96  *
97  * \param pdg PDG code of the decaying meson.
98  * \param mass Invariant dilepton mass [GeV].
99  */
100 inline double em_form_factor_ps(PdgCode pdg, double mass) {
101  switch (pdg.code()) {
102  case pdg::pi_z:
103  return 1. + 5.5 * mass * mass;
104  case pdg::eta: {
105  const double lambda_eta = 0.716;
106  const double m_over_eta = mass / lambda_eta;
107  return 1. / (1. - m_over_eta * m_over_eta);
108  }
109  default: /* η' etc */
110  return 1.; // use QED approximation
111  }
112 }
113 
114 /**
115  * \return Squared electromagnetic transition form factor for V → π⁰ e⁺ e⁻, with
116  * a vector meson V = ω,φ, as a function of the dilepton mass.
117  *
118  * For the ω, see \iref{Bratkovskaya:1996qe}.
119  *
120  * \param pdg PDG code of the decaying meson.
121  * \param mass Invariant dilepton mass [GeV].
122  */
123 inline double em_form_factor_sqr_vec(PdgCode pdg, double mass) {
124  switch (pdg.code()) {
125  case pdg::omega: {
126  constexpr double lambda = 0.65;
127  constexpr double gamma = 0.075;
128  constexpr double lambda_sqr = lambda * lambda;
129  constexpr double gamma_sqr = gamma * gamma;
130  const double tmp = lambda_sqr - mass * mass;
131  const double denom = tmp * tmp + lambda_sqr * gamma_sqr;
132  return lambda_sqr * lambda_sqr / denom;
133  }
134  default: /* φ etc */
135  return 1.; // use QED approximation
136  }
137 }
138 
139 /**
140  * \return Electromagnetic transition form factor for Delta -> N e+ e-
141  * as a function of the dilepton mass \p m.
142  *
143  * \param m Invariant dilepton mass [GeV].
144  *
145  * Currently assumed to be constant, normalized at the real-photon point.
146  */
147 inline double form_factor_delta([[maybe_unused]] double m) { return 3.12; }
148 
149 /**
150  * \return Squared pion electromagnetic form factor \f$|F_\pi(m_{inv}^2)|^2\f$
151  * for the internal pion propagator in \f$ pn \rightarrow pn e^+ e^- \f$
152  * bremsstrahlung.
153  *
154  * FF1: pure vector-meson dominance, direct \f$\rho^0\f$ coupling
155  *
156  * \param m_inv_sqr Invariant dilepton mass squared m_{inv}^2 [GeV²]
157  * \param m_rho \f$\rho^0\f$ pole mass [GeV]
158  * \param gamma_rho Energy-dependent \f$\rho^0\f$ width [GeV]
159  */
160 inline double pion_em_form_factor_sqr_FF1(double m_inv_sqr, double m_rho,
161  double gamma_rho) {
162  assert(gamma_rho >= 0.0);
163  const double m_rho_sq = m_rho * m_rho;
164  const std::complex<double> denom(m_rho_sq - m_inv_sqr, -m_rho * gamma_rho);
165  return std::norm(m_rho_sq / denom);
166 }
167 
168 /**
169  * \return Squared pion electromagnetic form factor \f$|F_\pi(m_{inv}^2)|^2\f$
170  * for the internal pion propagator in \f$ pn \rightarrow pn e^+ e^- \f$
171  * bremsstrahlung.
172  *
173  * FF2: mixed direct-quark + \f$\rho^0\f$ coupling (\iref{Shyam:2010vr}, FF2)
174  *
175  * \param m_inv_sqr Invariant dilepton mass squared m_{inv}^2 [GeV²]
176  * \param m_rho \f$\rho^0\f$ pole mass [GeV]
177  * \param gamma_rho Energy-dependent \f$\rho^0\f$ width [GeV]
178  */
179 inline double pion_em_form_factor_sqr_FF2(double m_inv_sqr, double m_rho,
180  double gamma_rho) {
181  assert(gamma_rho >= 0.0);
182  // Lambda² constant (\iref{Shyam:2010vr}, FF2) in GeV².
183  constexpr double lambda_sq_FF2 = 1.9;
184  const double m_rho_sq = m_rho * m_rho;
185  const std::complex<double> denom(m_rho_sq - m_inv_sqr, -m_rho * gamma_rho);
186  const std::complex<double> F =
187  0.4 / (1.0 - m_inv_sqr / lambda_sq_FF2) +
188  0.6 / (1.0 - m_inv_sqr / (2 * m_rho_sq)) * m_rho_sq / denom;
189  return std::norm(F);
190 }
191 
192 } // namespace smash
193 
194 #endif // SRC_INCLUDE_SMASH_FORMFACTORS_H_
PdgCode stores a Particle Data Group Particle Numbering Scheme particle type number.
Definition: pdgcode.h:108
std::int32_t code() const
Definition: pdgcode.h:319
Collection of useful constants that are known at compile time.
constexpr int omega
ω.
constexpr int eta
η.
constexpr int pi_z
π⁰.
Definition: action.h:24
double em_form_factor_sqr_vec(PdgCode pdg, double mass)
Definition: formfactors.h:123
double pion_em_form_factor_sqr_FF2(double m_inv_sqr, double m_rho, double gamma_rho)
Definition: formfactors.h:179
double form_factor_delta([[maybe_unused]] double m)
Definition: formfactors.h:147
double blatt_weisskopf_sqr(const double p_ab, const int L)
Definition: formfactors.h:36
constexpr double hbarc
GeV <-> fm conversion factor.
Definition: constants.h:29
double post_ff_sqr(double m, double M0, double srts0, double L)
An additional form factor for unstable final states as used in GiBUU, according to M.
Definition: formfactors.h:78
double pion_em_form_factor_sqr_FF1(double m_inv_sqr, double m_rho, double gamma_rho)
Definition: formfactors.h:160
double em_form_factor_ps(PdgCode pdg, double mass)
Definition: formfactors.h:100
#define R(x, n)
Definition: sha256.cc:55