Version: SMASH-1.5
formfactors.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2018
3  * SMASH Team
4  *
5  * GNU General Public License (GPLv3 or later)
6  */
7 
8 #ifndef SRC_INCLUDE_FORMFACTORS_H_
9 #define SRC_INCLUDE_FORMFACTORS_H_
10 
11 #include <complex>
12 #include <string>
13 
14 #include "constants.h"
15 #include "pdgcode_constants.h"
16 
17 namespace smash {
18 
33 inline double blatt_weisskopf_sqr(const double p_ab, const int L) {
34  if (L == 0) {
35  return 1.;
36  }
37  constexpr double R = 1. / hbarc; /* interaction radius = 1 fm */
38  const double x = p_ab * R;
39  const double x2 = x * x;
40  if (L == 1) {
41  return x2 / (1. + x2);
42  }
43  std::complex<double> g_prevprev(1, 0);
44  std::complex<double> g_prev(1, -x);
45  double numer = x2;
46  for (int l = 1; l < L; l++) {
47  numer *= x2;
48  const auto new_g =
49  static_cast<double>(2 * l + 1) * g_prev - x2 * g_prevprev;
50  g_prevprev = g_prev;
51  g_prev = new_g;
52  }
53  const double denom = std::norm(g_prev);
54  return numer / denom;
55 }
56 
75 inline double post_ff_sqr(double m, double M0, double srts0, double L) {
76  const auto L4 = L * L * L * L;
77  const auto M2 = M0 * M0;
78  const auto s0 = srts0 * srts0;
79  const auto sminus = (s0 - M2) * 0.5;
80  const auto splus = m * m - (s0 + M2) * 0.5;
81  const auto FF = (L4 + sminus * sminus) / (L4 + splus * splus);
82  return FF * FF;
83 }
84 
85 // electromagnetic transition form factors for the dilepton dalitz decays
86 
97 inline double em_form_factor_ps(PdgCode pdg, double mass) {
98  switch (pdg.code()) {
99  case pdg::pi_z:
100  return 1. + 5.5 * mass * mass;
101  case pdg::eta: {
102  const double lambda_eta = 0.716;
103  const double m_over_eta = mass / lambda_eta;
104  return 1. / (1. - m_over_eta * m_over_eta);
105  }
106  default: /* η' etc */
107  return 1.; // use QED approximation
108  }
109 }
110 
120 inline double em_form_factor_sqr_vec(PdgCode pdg, double mass) {
121  switch (pdg.code()) {
122  case pdg::omega: {
123  constexpr double lambda = 0.65;
124  constexpr double gamma = 0.075;
125  constexpr double lambda_sqr = lambda * lambda;
126  constexpr double gamma_sqr = gamma * gamma;
127  const double tmp = lambda_sqr - mass * mass;
128  const double denom = tmp * tmp + lambda_sqr * gamma_sqr;
129  return lambda_sqr * lambda_sqr / denom;
130  }
131  default: /* φ etc */
132  return 1.; // use QED approximation
133  }
134 }
135 
144 inline double form_factor_delta(double m) {
145  SMASH_UNUSED(m);
146  return 3.12;
147 }
148 
149 } // namespace smash
150 
151 #endif // SRC_INCLUDE_FORMFACTORS_H_
#define SMASH_UNUSED(x)
Mark as unused, silencing compiler warnings.
Definition: macros.h:24
constexpr int omega
ω.
Collection of useful constants that are known at compile time.
constexpr int eta
η.
constexpr double hbarc
GeV <-> fm conversion factor.
Definition: constants.h:25
double blatt_weisskopf_sqr(const double p_ab, const int L)
Definition: formfactors.h:33
constexpr int pi_z
π⁰.
double em_form_factor_sqr_vec(PdgCode pdg, double mass)
Definition: formfactors.h:120
PdgCode stores a Particle Data Group Particle Numbering Scheme particle type number.
Definition: pdgcode.h:108
double form_factor_delta(double m)
Definition: formfactors.h:144
double em_form_factor_ps(PdgCode pdg, double mass)
Definition: formfactors.h:97
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:75
std::int32_t code() const
Definition: pdgcode.h:249
Definition: action.h:24