10 #include <gsl/gsl_sf_coupling.h> 
   19                       const int m_a, 
const int m_b, 
const int m_c) {
 
   20   const double wigner_3j = gsl_sf_coupling_3j(j_a, j_b, j_c, m_a, m_b, -m_c);
 
   24   assert((j_a - j_b + m_c) % 2 == 0);
 
   25   const int j = (j_a - j_b + m_c) / 2;
 
   26   double result = std::sqrt(j_c + 1) * wigner_3j;
 
   27   result *= (j % 2 == 0) * 2 - 1;  
 
   30                           " IR: ", j_c, 
" iz1: ", m_a, 
" iz2: ", m_b,
 
   46                                           const int I_tot, 
const int I_z) {
 
   58   std::vector<int> possible_I_ab(max_I_ab - min_I_ab + 1);
 
   59   std::iota(possible_I_ab.begin(), possible_I_ab.end(), min_I_ab);
 
   60   std::vector<int> allowed_I_ab;
 
   61   allowed_I_ab.reserve(possible_I_ab.size());
 
   62   for (
const auto Iab : possible_I_ab) {
 
   63     const auto min_I = std::abs(Iab - p_c.
isospin());
 
   64     const auto max_I = Iab + p_c.
isospin();
 
   66       allowed_I_ab.push_back(Iab);
 
   69   if (allowed_I_ab.size() != 1) {
 
   70     throw std::runtime_error(
 
   71         "The coupled 3-body isospin state is not uniquely defined for " +
 
   74   const auto I_ab = allowed_I_ab[0];
 
   91   double isospin_factor = 0.;
 
   92   for (
const int I_tot : 
I_tot_range(p_a, p_b, p_c, p_d)) {
 
   93     if (I < 0 || I_tot == I) {
 
   96       isospin_factor = isospin_factor + cg_in * cg_in * cg_out * cg_out;
 
   99   return isospin_factor;
 
Range of total isospin for reaction of particle a with particle b.
 
Particle type contains the static properties of a particle species.
 
const std::string & name() const
 
int isospin() const
Returns twice the isospin vector length .
 
Collection of useful constants that are known at compile time.
 
std::array< einhard::Logger<>, std::tuple_size< LogArea::AreaTuple >::value > logg
An array that stores all pre-configured Logger objects.
 
double isospin_clebsch_gordan_sqr_3to1(const ParticleType &p_a, const ParticleType &p_b, const ParticleType &p_c, const ParticleType &Res)
Calculate the squared isospin Clebsch-Gordan coefficient for three particles p_a, p_b and p_c couplin...
 
double isospin_clebsch_gordan_sqr_2to2(const ParticleType &p_a, const ParticleType &p_b, const ParticleType &p_c, const ParticleType &p_d, const int I=-1)
Calculate the squared isospin Clebsch-Gordan coefficient for a 2-to-2 reaction A + B -> C + D.
 
double clebsch_gordan(const int j_a, const int j_b, const int j_c, const int m_a, const int m_b, const int m_c)
Calculate Clebsch-Gordan coefficient .
 
static constexpr int LResonances
 
constexpr double really_small
Numerical error tolerance.
 
static double isospin_clebsch_gordan_2to1(const ParticleType &p_a, const ParticleType &p_b, const int I_tot, const int I_z)
Calculate isospin Clebsch-Gordan coefficient for two particles p_a and p_b coupling to a total isospi...