#include <scatteractionmulti.h>
ScatterActionMulti is a special action which takes any number of incoming particles and performs a scattering with the use of the stochastic criterion, producing one or more final-state particles.
Definition at line 23 of file scatteractionmulti.h.
Classes | |
class | InvalidScatterActionMulti |
Thrown when ScatterActionMulti is called to perform with unknown combination of incoming and outgoing number of particles or unknown process type. More... | |
Public Member Functions | |
ScatterActionMulti (const ParticleList &in_plist, double time) | |
Construct a ScatterActionMulti object. More... | |
void | generate_final_state () override |
Generate the final-state of the multi-particle scattering process. More... | |
double | get_total_weight () const override |
Get the total probability for the reaction (scaled with the cross section scaling factors of the incoming particles). More... | |
double | get_partial_weight () const override |
Get the partial probability for the chosen channel (scaled with the cross section scaling factors of the incoming particles). More... | |
void | add_possible_reactions (double dt, const double gcell_vol, const MultiParticleReactionsBitSet incl_multi) |
Add all possible multi-particle reactions for the given incoming particles. More... | |
const CollisionBranchList & | reaction_channels () |
Get list of possible reaction channels. More... | |
double | calculate_I3 (const double sqrts) const |
Calculate the integration necessary for the three-body phase space. More... | |
double | parametrizaton_phi4 (const double man_s) const |
Calculate the parametrized 4-body relativistic phase space integral. More... | |
Public Member Functions inherited from smash::Action | |
Action (const ParticleList &in_part, double time) | |
Construct an action object with incoming particles and relative time. More... | |
Action (const ParticleData &in_part, const ParticleData &out_part, double time, ProcessType type) | |
Construct an action object with the incoming particles, relative time, and the already known outgoing particles and type of the process. More... | |
Action (const ParticleList &in_part, const ParticleList &out_part, double absolute_execution_time, ProcessType type) | |
Construct an action object with the incoming particles, absolute time, and the already known outgoing particles and type of the process. More... | |
Action (const Action &)=delete | |
Copying is disabled. Use pointers or create a new Action. More... | |
virtual | ~Action () |
Virtual Destructor. More... | |
bool | operator< (const Action &rhs) const |
Determine whether one action takes place before another in time. More... | |
virtual ProcessType | get_type () const |
Get the process type. More... | |
template<typename Branch > | |
void | add_process (ProcessBranchPtr< Branch > &p, ProcessBranchList< Branch > &subprocesses, double &total_weight) |
Add a new subprocess. More... | |
template<typename Branch > | |
void | add_processes (ProcessBranchList< Branch > pv, ProcessBranchList< Branch > &subprocesses, double &total_weight) |
Add several new subprocesses at once. More... | |
virtual double | perform (Particles *particles, uint32_t id_process) |
Actually perform the action, e.g. More... | |
bool | is_valid (const Particles &particles) const |
Check whether the action still applies. More... | |
bool | is_pauli_blocked (const std::vector< Particles > &ensembles, const PauliBlocker &p_bl) const |
Check if the action is Pauli-blocked. More... | |
const ParticleList & | incoming_particles () const |
Get the list of particles that go into the action. More... | |
void | update_incoming (const Particles &particles) |
Update the incoming particles that are stored in this action to the state they have in the global particle list. More... | |
const ParticleList & | outgoing_particles () const |
Get the list of particles that resulted from the action. More... | |
double | time_of_execution () const |
Get the time at which the action is supposed to be performed. More... | |
virtual double | check_conservation (const uint32_t id_process) const |
Check various conservation laws. More... | |
double | sqrt_s () const |
Determine the total energy in the center-of-mass frame [GeV]. More... | |
FourVector | total_momentum_of_outgoing_particles () const |
Calculate the total kinetic momentum of the outgoing particles. More... | |
FourVector | get_interaction_point () const |
Get the interaction point. More... | |
std::pair< FourVector, FourVector > | get_potential_at_interaction_point () const |
Get the skyrme and asymmetry potential at the interaction point. More... | |
void | set_stochastic_pos_idx () |
Setter function that stores a random incoming particle index latter used to determine the interaction point. More... | |
Protected Member Functions | |
void | format_debug_output (std::ostream &out) const override |
Writes information about this action to the out stream. More... | |
Protected Member Functions inherited from smash::Action | |
FourVector | total_momentum () const |
Sum of 4-momenta of incoming particles. More... | |
template<typename Branch > | |
const Branch * | choose_channel (const ProcessBranchList< Branch > &subprocesses, double total_weight) |
Decide for a particular final-state channel via Monte-Carlo and return it as a ProcessBranch. More... | |
virtual std::pair< double, double > | sample_masses (double kinetic_energy_cm) const |
Sample final-state masses in general X->2 processes (thus also fixing the absolute c.o.m. More... | |
virtual void | sample_angles (std::pair< double, double > masses, double kinetic_energy_cm) |
Sample final-state momenta in general X->2 processes (here: using an isotropical angular distribution). More... | |
void | sample_2body_phasespace () |
Sample the full 2-body phase-space (masses, momenta, angles) in the center-of-mass frame for the final state particles. More... | |
virtual void | sample_manybody_phasespace () |
Sample the full n-body phase-space (masses, momenta, angles) in the center-of-mass frame for the final state particles. More... | |
void | assign_formation_time_to_outgoing_particles () |
Assign the formation time to the outgoing particles. More... | |
Private Member Functions | |
void | add_reaction (CollisionBranchPtr p) |
Add a new reaction channel. More... | |
void | add_reactions (CollisionBranchList pv) |
Add several new reaction channels at once. More... | |
void | annihilation () |
Perform a n->1 annihilation process. More... | |
void | n_to_two () |
Perform a n->2 process. More... | |
double | probability_three_to_one (const ParticleType &type_out, double dt, const double gcell_vol, const int degen_sym_factor=1) const |
Calculate the probability for a 3m-to-1 reaction according to the stochastic collision criterion as given in Staudenmaier:2021lrg [56]. More... | |
double | probability_three_to_two (const ParticleType &type_out1, const ParticleType &type_out2, double dt, const double gcell_vol, const double degen_sym_factor=1.0) const |
Calculate the probability for a 3-to-2 reaction according to the stochastic collision criterion as given in Staudenmaier:2021lrg [56]. More... | |
double | probability_four_to_two (const ParticleType &type_out1, const ParticleType &type_out2, double dt, const double gcell_vol, const double degen_sym_factor=1.0) const |
Calculate the probability for a 4-to-2 reaction according to the stochastic collision criterion as given in Staudenmaier:2021lrg [56]. More... | |
double | probability_five_to_two (const double m_out, double dt, const double gcell_vol, const double degen_sym_factor=1.0) const |
Calculate the probability for a 5-to-2 reaction according to the stochastic collision criterion as given in Garcia-Montero:2021haa [23]. More... | |
double | parametrizaton_phi5_pions (const double man_s) const |
Calculate the parametrized 5-pion phase space. More... | |
double | react_degen_factor (const int spin_factor_inc, const int spin_degen_out1, const int spin_degen_out2) const |
Determine the spin degeneracy factor ( \(D_{spin}\)) for the N->2 reaction. More... | |
bool | three_different_pions (const ParticleData &data_a, const ParticleData &data_b, const ParticleData &data_c) const |
Check wether the three incoming particles are π⁺,π⁻,π⁰ in any order. More... | |
bool | two_pions_eta (const ParticleData &data_a, const ParticleData &data_b, const ParticleData &data_c) const |
Check wether the three incoming particles are π⁺,π⁻,η or π⁰,π⁰,η in any order. More... | |
bool | all_incoming_particles_are_pions_have_zero_charge_only_one_piz () const |
Check if 5 incoming particles match intial pion state for 5-to-2, which is pi+ pi- pi+ pi- pi0 in order to match the NNbar resonance treatment. More... | |
Private Attributes | |
double | total_probability_ |
Total probability of reaction. More... | |
double | partial_probability_ |
Partial probability of the chosen outgoing channel. More... | |
CollisionBranchList | reaction_channels_ |
List of possible collisions. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from smash::Action | |
static double | lambda_tilde (double a, double b, double c) |
Little helper function that calculates the lambda function (sometimes written with a tilde to better distinguish it) that appears e.g. More... | |
static void | sample_manybody_phasespace_impl (double sqrts, const std::vector< double > &m, std::vector< FourVector > &sampled_momenta) |
Implementation of the full n-body phase-space sampling (masses, momenta, angles) in the center-of-mass frame for the final state particles. More... | |
Protected Attributes inherited from smash::Action | |
ParticleList | incoming_particles_ |
List with data of incoming particles. More... | |
ParticleList | outgoing_particles_ |
Initially this stores only the PDG codes of final-state particles. More... | |
const double | time_of_execution_ |
Time at which the action is supposed to be performed (absolute time in the lab frame in fm). More... | |
ProcessType | process_type_ |
type of process More... | |
double | box_length_ = -1.0 |
Box length: needed to determine coordinates of collision correctly in case of collision through the wall. More... | |
int | stochastic_position_idx_ = -1 |
This stores a randomly-chosen index to an incoming particle. More... | |
smash::ScatterActionMulti::ScatterActionMulti | ( | const ParticleList & | in_plist, |
double | time | ||
) |
Construct a ScatterActionMulti object.
[in] | in_plist | List of reaction partners |
[in] | time | Time at which the action is supposed to take place |
Definition at line 25 of file scatteractionmulti.cc.
|
overridevirtual |
Generate the final-state of the multi-particle scattering process.
Assign position and momenta to outgoing particles.
InvalidScatterActionMulti |
Implements smash::Action.
Definition at line 369 of file scatteractionmulti.cc.
|
overridevirtual |
Get the total probability for the reaction (scaled with the cross section scaling factors of the incoming particles).
Implements smash::Action.
Definition at line 38 of file scatteractionmulti.cc.
|
overridevirtual |
Get the partial probability for the chosen channel (scaled with the cross section scaling factors of the incoming particles).
Implements smash::Action.
Definition at line 46 of file scatteractionmulti.cc.
void smash::ScatterActionMulti::add_possible_reactions | ( | double | dt, |
const double | gcell_vol, | ||
const MultiParticleReactionsBitSet | incl_multi | ||
) |
Add all possible multi-particle reactions for the given incoming particles.
[in] | dt | timestep size |
[in] | gcell_vol | gcell_vol grid cell volume |
[in] | incl_multi | Which multi-particle reactions are enabled? |
Definition at line 54 of file scatteractionmulti.cc.
|
inline |
Get list of possible reaction channels.
Definition at line 72 of file scatteractionmulti.h.
double smash::ScatterActionMulti::calculate_I3 | ( | const double | sqrts | ) | const |
Calculate the integration necessary for the three-body phase space.
The defintion for the integral is given by
\[I_3 = \int dm^2_{23}dm^2_{12} = \int^{(M-m_3)^2}_{(m_1+m_2)^2}[m^2_{23, max}- m^2_{23, min}]dm^2_{12}\]
see PDG book (chapter Kinematics) for defintions of variables. The numbered masses reference the incoming particles and \(M\) the mass of the outgoing particles in this case, since we are looking at the backreaction to the 1-to-3 decay.
[in] | sqrts | center of mass energy of incoming particles (= mass of outgoing particle) |
Definition at line 412 of file scatteractionmulti.cc.
double smash::ScatterActionMulti::parametrizaton_phi4 | ( | const double | man_s | ) | const |
Calculate the parametrized 4-body relativistic phase space integral.
The 4-body phase space is a n = 4 case of general integral over
\[d\Phi_n = (2\pi)^4 \prod_{i=1}^n \frac{d^3p_i}{2E_i (2\pi)^3} \times \delta(E_{tot} - \sum E_i) \delta^{(3)}(p_{tot} - \sum p_i)\]
. This is a Lorentz-invariant quantity, so the result of the integration depends only on
\[ s = E_{tot}^2 - p_{tot}^2\]
and masses of the particles
\[ m_i^2 = E_i^2 - p_i^2 \]
. The dimension in general case is
\[\mathrm{GeV}^{2n-4}\]
. The
\[\hbar = c = 1 \]
convention is used here, so when this integral is used in the acceptance probability for collision, one has to restore
\[\hbar\]
to obtain correct dimensionless probability. More on phase space integrals can be found, for example, in CERN-68-15 report. For developers, I (oliiny) have compiled a document with properties and parametrizations of many-body phase space integrals here: github.com/smash-transport/smash-devel/files/7791360/n_body_relativistic_phase_space.pdf
[in] | man_s | mandelstam s of reaction |
Definition at line 510 of file scatteractionmulti.cc.
|
overrideprotectedvirtual |
Writes information about this action to the out
stream.
[out] | out | out stream to be written to |
Implements smash::Action.
Definition at line 657 of file scatteractionmulti.cc.
|
private |
Add a new reaction channel.
[in] | p | Channel to be added. |
Definition at line 29 of file scatteractionmulti.cc.
|
private |
Add several new reaction channels at once.
[in] | pv | list of channels to be added. |
Definition at line 33 of file scatteractionmulti.cc.
|
private |
Perform a n->1 annihilation process.
InvalidScatterActionMulti |
Definition at line 581 of file scatteractionmulti.cc.
|
private |
Perform a n->2 process.
Definition at line 599 of file scatteractionmulti.cc.
|
private |
Calculate the probability for a 3m-to-1 reaction according to the stochastic collision criterion as given in Staudenmaier:2021lrg [56].
The formula for the probablilty is not taken from a reference, but derived following the same idea as specified e.g. in the paper above.
\[ P_{3\rightarrow 1} = \frac{\Delta t}{(\Delta^3x)^2} \frac{\pi}{4E_1E_2E_3}\frac{\Gamma_{1\rightarrow3}}{\Phi_3} \mathcal{A}(\sqrt{s}),\]
where \(\Phi_3\) represents the 3-body phase space:
\[\Phi_3 = \frac{1}{(2\pi)^3)}\frac{1}{16M^2}I_3.\]
The defintion for the integral \(I_3\) is given in the documentation of calculate_I3(). Degeneracy and symmetry factors are neglected in the formula, since they are treated as input for the function.
[in] | type_out | type of outgoing particle |
[in] | dt | timestep size |
[in] | gcell_vol | grid cell volume |
[in] | degen_sym_factor | degeneracy factor for reaction (including symmetry factors) |
Definition at line 443 of file scatteractionmulti.cc.
|
private |
Calculate the probability for a 3-to-2 reaction according to the stochastic collision criterion as given in Staudenmaier:2021lrg [56].
\[ P_{3 \rightarrow 2} = \frac{1}{4E_1E_2E_3} \frac{\Delta t}{(\Delta^3 x)^2} \frac{\tilde{\lambda}}{\Phi_38\pi s}\sigma_{2 \rightarrow 3},\]
where \(\Phi_3\) represents the 3-body phase space:
\[\Phi_3 = \frac{1}{(2\pi)^3)}\frac{1}{16M^2}I_3.\]
The defintion for the integral \(I_3\) is given in the documentation of calculate_I3(). Degeneracy and symmetry factors are neglected in the formula, since they are treated as input for the function.
[in] | type_out1 | type of outgoing particle 1 |
[in] | type_out2 | type of outgoing particle 2 |
[in] | dt | timestep size |
[in] | gcell_vol | grid cell volume |
[in] | degen_sym_factor | degeneracy factor for reaction (including symmetry factors) |
Definition at line 466 of file scatteractionmulti.cc.
|
private |
Calculate the probability for a 4-to-2 reaction according to the stochastic collision criterion as given in Staudenmaier:2021lrg [56].
\[ P_{4 \rightarrow 2} = \frac{1}{16E_1E_2E_3E_4} \frac{\Delta t}{(\Delta^3 x)^3} \frac{\tilde{\lambda}}{\Phi_44\pi s} \sigma_{2 \rightarrow 4},\]
where \(\Phi_4\) represents the 4-body phase space. Degeneracy and symmetry factors are neglected in the formula, since they are treated as input for the function.
[in] | type_out1 | type of outgoing particle 1 |
[in] | type_out2 | type of outgoing particle 2 |
[in] | dt | timestep size |
[in] | gcell_vol | grid cell volume |
[in] | degen_sym_factor | degeneracy factor for reaction (including symmetry factors) |
Definition at line 489 of file scatteractionmulti.cc.
|
private |
Calculate the probability for a 5-to-2 reaction according to the stochastic collision criterion as given in Garcia-Montero:2021haa [23].
\[ P_{5 \rightarrow 2} = \frac{1}{32E_1E_2E_3E_4E_5} \frac{\Delta t}{(\Delta^3 x)^4} \frac{\tilde{\lambda}}{\Phi_54\pi s}\sigma_{2 \rightarrow 5},\]
where the defintion is given without the necessary symmetry and spin degeneracy factors, which are input to the function and \(\Phi_5\) represents the 5-body phase space, which is paramaterized for the relevent 5 pion state here, see documentation of parametrizaton_phi5_pions().
[in] | m_out | mass of outgoing particle types (assumes equal masses) |
[in] | dt | timestep size |
[in] | gcell_vol | grid cell volume |
[in] | degen_sym_factor | degeneracy factor for reaction (including symmetry factors) |
Definition at line 550 of file scatteractionmulti.cc.
|
private |
Calculate the parametrized 5-pion phase space.
The defintion for the paramterization is given by
\[\Phi_5^{param.} = A(s-s_0)^5(1+\frac{s}{s_0})^{-\alpha}\]
with \(s_0 = 25 m_{\pi}^2\). \(A\) and \(\alpha\) are fitted to reproduce the phase space distribution.
[in] | man_s | mandelstam s of reaction |
Definition at line 572 of file scatteractionmulti.cc.
|
inlineprivate |
Determine the spin degeneracy factor ( \(D_{spin}\)) for the N->2 reaction.
\[D_{spin} = \frac{(2J_{out1}+1)(2J_{out2}+1)} {(2J_{in1}+1)(2J_{in2}+1)(2J_{in3}+1)...(2J_{inN}+1)}\]
[in] | spin_factor_inc | product of incoming spin degeneracy (denominator in above expression) |
[in] | spin_degen_out1 | degeneracy factor of outgoing particle 1 |
[in] | spin_degen_out2 | degeneracy factor of outgoing particle 2 |
Definition at line 283 of file scatteractionmulti.h.
|
private |
Check wether the three incoming particles are π⁺,π⁻,π⁰ in any order.
Wrapper for unwieldy if statment.
[in] | data_a | data for first incoming particle |
[in] | data_b | data for second incoming particle |
[in] | data_c | data for third incoming particle |
Definition at line 608 of file scatteractionmulti.cc.
|
private |
Check wether the three incoming particles are π⁺,π⁻,η or π⁰,π⁰,η in any order.
Wrapper for unwieldy if statment.
[in] | data_a | data for first incoming particle |
[in] | data_b | data for second incoming particle |
[in] | data_c | data for third incoming particle |
Definition at line 620 of file scatteractionmulti.cc.
|
private |
Check if 5 incoming particles match intial pion state for 5-to-2, which is pi+ pi- pi+ pi- pi0 in order to match the NNbar resonance treatment.
Definition at line 640 of file scatteractionmulti.cc.
|
private |
Total probability of reaction.
Definition at line 322 of file scatteractionmulti.h.
|
private |
Partial probability of the chosen outgoing channel.
Definition at line 325 of file scatteractionmulti.h.
|
private |
List of possible collisions.
Definition at line 328 of file scatteractionmulti.h.