10 #ifndef SRC_INCLUDE_SMASH_CROSSSECTIONS_H_
11 #define SRC_INCLUDE_SMASH_CROSSSECTIONS_H_
41 CrossSections(
const ParticleList& incoming_particles,
double sqrt_s,
42 const std::pair<FourVector, FourVector>
potentials);
77 static double sum_xs_of(
const CollisionBranchList& list) {
79 for (
auto& proc : list) {
80 xs_sum += proc->weight();
138 double cm_momentum_sqr)
const;
229 double scale_xs)
const;
357 double region_upper)
const;
383 double nn_el()
const;
403 double nk_el()
const;
524 CollisionBranchList
npi_yk()
const;
564 double KN_offset)
const;
724 template <
class IntegrationMethod>
726 const ParticleTypePtrList& type_res_1,
727 const ParticleTypePtrList& type_res_2,
728 const IntegrationMethod integrator)
const;
769 template <
typename F>
770 void add_channel(CollisionBranchList& process_list, F&& get_xsection,
773 const double sqrt_s_min =
776 double scale_B = 0.0;
777 double scale_I3 = 0.0;
778 bool is_below_threshold;
782 incoming_momentum +=
p.momentum();
793 is_below_threshold = (incoming_momentum +
potentials_.first * scale_B +
795 .abs() <= sqrt_s_min;
797 is_below_threshold = (sqrts <= sqrt_s_min);
799 if (is_below_threshold) {
802 const auto xsection = get_xsection();
804 process_list.push_back(std::make_unique<CollisionBranch>(
The CrossSections class assembles everything that is needed to calculate cross sections and gathers a...
const double sqrt_s_
Total energy in the center-of-mass frame.
CollisionBranchList two_to_two(const ReactionsBitSet &included_2to2, double KN_offset, CharmRescattering charm_rescattering) const
Find all inelastic 2->2 processes for the given scattering.
double transition_probability_at_sqrts(double region_lower, double region_upper) const
Computes a smooth transition probability as a function of sqrt(s).
CollisionBranchList DK_and_DstarK_xx(const ReactionsBitSet &included_2to2, CharmRescattering charm_rescattering) const
Find all inelastic 2->2 processes for D meson-kaon (DK) and D*-kaon (D*K) scattering.
static double xs_dpi_dprimepi(double sqrts, double cm_mom, ParticleTypePtr produced_nucleus, const ParticleType &type_pi)
Parametrized cross section for πd→ πd' (mockup for πd→ πnp), πd̅→ πd̅' and reverse,...
double DK_and_DstarK_inelastic() const
Determine the inelastic cross section for a D meson-kaon (DK) or a D*-kaon (D*K) collision.
CollisionBranchPtr NNbar_to_5pi(double scale_xs) const
Create collision branch for NNbar annihilation going directly into 5 pions.
std::optional< double > DDelta_elastic() const
Determine the elastic cross section for a D meson-Delta (DΔ) collision, If the center-of-mass energy ...
CollisionBranchList NNbar_creation() const
Determine the cross section for NNbar creation, which is given by detailed balance from the reverse r...
CollisionBranchList dpi_xx(const ReactionsBitSet &included_2to2) const
Find all inelastic 2->2 processes involving Pion and (anti-) Deuteron (dpi), specifically dπ→ NN,...
std::optional< double > Dpi_and_Dstarpi_elastic() const
Determine the elastic cross section for a D meson-pion (Dpi) or a D*-pion (D*pi) collision.
double high_energy(const ScatterActionsFinderParameters &finder_parameters) const
Determine the parametrized total cross section at high energies for the given collision,...
CollisionBranchList bb_xx_except_nn(const ReactionsBitSet &included_2to2) const
Find all inelastic 2->2 processes for Baryon-Baryon (BB) Scattering except the more specific Nucleon-...
CollisionBranchList npi_yk() const
Find all processes for Nucleon-Pion to Hyperon-Kaon Scattering.
CollisionBranchList find_nn_xsection_from_type(const ParticleTypePtrList &type_res_1, const ParticleTypePtrList &type_res_2, const IntegrationMethod integrator) const
Utility function to avoid code replication in nn_xx().
double DDelta_inelastic() const
Determine the inelastic cross section for a D meson-Delta (DΔ) collision.
double cm_momentum() const
Determine the momenta of the incoming particles in the center-of-mass system.
double string_probability(const ScatterActionsFinderParameters &finder_parameters) const
CollisionBranchList deltak_xx(const ReactionsBitSet &included_2to2) const
Find all inelastic 2->2 processes for Delta-Kaon (DeltaK) Scattering.
static double nn_to_resonance_matrix_element(double sqrts, const ParticleType &type_a, const ParticleType &type_b, int twoI)
Scattering matrix amplitude squared (divided by 16π) for resonance production processes like NN → NR ...
double DN_inelastic() const
Determine the inelastic cross section for a D meson-nucleon (DN) collision.
std::optional< double > DK_and_DstarK_elastic() const
Determine the elastic cross section for a D meson-kaon (DK) or a D*-kaon (D*K) collision.
double Dpi_and_Dstarpi_inelastic() const
Determine the inelastic cross section for a D meson-pion (Dpi) or a D*-pion (D*pi) collision.
CrossSections(const ParticleList &incoming_particles, double sqrt_s, const std::pair< FourVector, FourVector > potentials)
Construct CrossSections instance.
CollisionBranchList Dpi_and_Dstarpi_xx(const ReactionsBitSet &included_2to2, CharmRescattering charm_rescattering) const
Find all inelastic 2->2 processes for D meson-pion (Dpi) and D*-pion (D*pi) scattering.
static double xs_dn_dprimen(double sqrts, double cm_mom, ParticleTypePtr produced_nucleus, const ParticleType &type_nucleus, const ParticleType &type_N)
Parametrized cross section for Nd → Nd', N̅d → N̅d', N̅d̅→ N̅d̅', Nd̅→ Nd̅' and reverse (e....
double elastic_parametrization(const ScatterActionsFinderParameters &finder_parameters) const
Choose the appropriate parametrizations for given incoming particles and return the (parametrized) el...
CollisionBranchList DN_xx(const ReactionsBitSet &included_2to2, CharmRescattering charm_rescattering) const
Find all inelastic 2->2 processes for D meson-nucleon (DN) scatterings.
CollisionBranchList two_to_four() const
Find all 2->4 processes for the given scattering.
CollisionBranchPtr elastic(const ScatterActionsFinderParameters &finder_parameters) const
Determine the elastic cross section for this collision.
double formation(const ParticleType &type_resonance, double cm_momentum_sqr) const
Calculates the 2-to-1 resonance production cross section for a given resonance using the Breit-Wigner...
void add_channel(CollisionBranchList &process_list, F &&get_xsection, double sqrts, const ParticleType &type_a, const ParticleType &type_b) const
Helper function: Add a 2-to-2 channel to a collision branch list given a cross section.
double string_hard_cross_section() const
Determine the (parametrized) hard non-diffractive string cross section for this collision.
const std::pair< FourVector, FourVector > potentials_
Potentials at the interacting point.
static double two_to_three_xs(const ParticleType &type_in1, const ParticleType &type_in2, double sqrts)
Determine 2->3 cross section for the scattering of the given particle types.
double nk_el() const
Determine the elastic cross section for a nucleon-kaon (NK) collision.
CollisionBranchList nk_xx(const ReactionsBitSet &included_2to2, double KN_offset) const
Find all inelastic 2->2 background processes for Nucleon-Kaon (NK) Scattering.
const ParticleList incoming_particles_
List with data of scattering particles.
double npi_el() const
Determine the elastic cross section for a nucleon-pion (Npi) collision.
double nn_el() const
Determine the (parametrized) elastic cross section for a nucleon-nucleon (NN) collision.
const bool is_BBbar_pair_
Whether incoming particles are a pair of a baryon and an antibaryon (could be different baryon types)
CollisionBranchList dn_xx(const ReactionsBitSet &included_2to2) const
Find all inelastic 2->2 processes involving Nucleon and (anti-) Deuteron (dN), specifically Nd → Nd',...
static double two_to_four_xs(const ParticleType &type_in1, const ParticleType &type_in2, double sqrts)
Determine 2->4 cross section for the scattering of the given particle types.
CollisionBranchList ypi_xx(const ReactionsBitSet &included_2to2) const
Find all inelastic 2->2 processes for Hyperon-Pion (Ypi) Scattering.
CollisionBranchList DDelta_xx(const ReactionsBitSet &included_2to2, CharmRescattering charm_rescattering) const
Find all inelastic 2->2 processes for D meson-Delta (DΔ) scatterings.
CollisionBranchList string_excitation(double total_string_xs, StringProcess *string_process, const ScatterActionsFinderParameters &finder_parameters) const
Determine the cross section for string excitations, which is given by the difference between the para...
CollisionBranchList two_to_one(CharmRescattering charm_rescattering) const
Find all resonances that can be produced in a 2->1 collision of the two input particles and the produ...
double parametrized_total(const ScatterActionsFinderParameters &finder_parameters) const
Select the parametrization for the total cross section, given the types of incoming particles.
const bool is_NNbar_pair_
Whether incoming particles are a nulecon-antinucleon pair (same isospin)
CollisionBranchList rare_two_to_two() const
Find all 2->2 processes which are suppressed at high energies when strings are turned on with probabi...
static double sum_xs_of(const CollisionBranchList &list)
Helper function: Sum all cross sections of the given process list.
CollisionBranchList two_to_three() const
Find all 2->3 processes for the given scattering.
CollisionBranchList bar_bar_to_nuc_nuc(bool is_anti_particles) const
Calculate cross sections for 2 → 2 resonance absorption (i.e.
CollisionBranchPtr NNbar_annihilation(double current_xs, double scale_xs) const
Determine the cross section for NNbar annihilation, which is given by the difference between the para...
CollisionBranchList generate_collision_list(const ScatterActionsFinderParameters &finder_parameters, StringProcess *string_process) const
Generate a list of all possible collisions between the incoming particles with the given c....
std::optional< double > DN_elastic() const
Determine the elastic cross section for a D meson-nucleon (DN) collision, If the center-of-mass energ...
std::optional< double > Deta_and_Dstareta_elastic() const
Determine the elastic cross section for a D meson-eta (Deta) or a D*-eta (D*eta) collision.
CollisionBranchList nn_xx(const ReactionsBitSet &included_2to2) const
Find all inelastic 2->2 processes for Nucelon-Nucelon Scattering.
The FourVector class holds relevant values in Minkowski spacetime with (+, −, −, −) metric signature.
A pointer-like interface to global references to ParticleType objects.
Particle type contains the static properties of a particle species.
double min_mass_spectral() const
The minimum mass of the resonance, where the spectral function is non-zero.
double isospin3_rel() const
static std::pair< double, int > force_scale(const ParticleType &data)
Evaluates the scaling factor of the forces acting on the particles.
Helper class for ScatterActionsFinder.
String excitation processes used in SMASH.
CharmRescattering
Possible charm scattering options.
std::bitset< 11 > ReactionsBitSet
Container for the 2 to 2 reactions in the code.
T pCM(const T sqrts, const T mass_a, const T mass_b) noexcept
@ TwoToTwo
See here for a short description.
Potentials * pot_pointer
Pointer to a Potential class.
constexpr double really_small
Numerical error tolerance.