#include <scatteraction.h>
ScatterAction is a special action which takes two incoming particles and performs a scattering, producing one or more final-state particles.
Definition at line 30 of file scatteraction.h.
Classes | |
| class | InvalidScatterAction | 
| Thrown when ScatterAction is called to perform with unknown ProcessType.  More... | |
Public Member Functions | |
| ScatterAction (const ParticleData &in_part1, const ParticleData &in_part2, double time, bool isotropic=false, double string_formation_time=1.0, double box_length=-1.0) | |
| Construct a ScatterAction object.  More... | |
| void | add_collision (CollisionBranchPtr p) | 
| Add a new collision channel.  More... | |
| void | add_collisions (CollisionBranchList pv) | 
| Add several new collision channels at once.  More... | |
| double | transverse_distance_sqr () const | 
| Calculate the transverse distance of the two incoming particles in their local rest frame.  More... | |
| double | cov_transverse_distance_sqr () const | 
| Calculate the transverse distance of the two incoming particles in their local rest frame written in a covariant form.  More... | |
| double | mandelstam_s () const | 
| Determine the Mandelstam s variable,.  More... | |
| double | relative_velocity () const | 
| Get the relative velocity of the two incoming particles.  More... | |
| void | generate_final_state () override | 
| Generate the final-state of the scattering process.  More... | |
| double | get_total_weight () const override | 
| Get the total cross section of scattering particles.  More... | |
| double | get_partial_weight () const override | 
| Get the partial cross section of the chosen channel.  More... | |
| void | sample_angles (std::pair< double, double > masses, double kinetic_energy_cm) override | 
| Sample final-state angles in a 2->2 collision (possibly anisotropic).  More... | |
| void | add_all_scatterings (double elastic_parameter, bool two_to_one, ReactionsBitSet included_2to2, MultiParticleReactionsBitSet included_multi, double low_snn_cut, bool strings_switch, bool use_AQM, bool strings_with_probability, NNbarTreatment nnbar_treatment, double scale_xs, double additional_el_xs) | 
| Add all possible scattering subprocesses for this action object.  More... | |
| const CollisionBranchList & | collision_channels () | 
| Get list of possible collision channels.  More... | |
| void | set_string_interface (StringProcess *str_proc) | 
| Set the StringProcess object to be used.  More... | |
| virtual double | cross_section () const | 
| Get the total cross section of the scattering particles.  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 void | 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 void | 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 | |
| double | cm_momentum () const | 
| Get the momentum of the center of mass of the incoming particles in the calculation frame.  More... | |
| double | cm_momentum_squared () const | 
| Get the squared momentum of the center of mass of the incoming particles in the calculation frame.  More... | |
| ThreeVector | beta_cm () const | 
| Get the velocity of the center of mass of the scattering/incoming particles in the calculation frame.  More... | |
| double | gamma_cm () const | 
| Get the gamma factor corresponding to a boost to the center of mass frame of the colliding particles.  More... | |
| void | elastic_scattering () | 
| Perform an elastic two-body scattering, i.e. just exchange momentum.  More... | |
| void | inelastic_scattering () | 
| Perform an inelastic two-body scattering, i.e. new particles are formed.  More... | |
| void | two_to_three_scattering () | 
| Perform a two-to-three-body scattering.  More... | |
| void | two_to_five_scattering () | 
| Perform a two-to-five-body scattering.  More... | |
| void | create_string_final_state () | 
| Creates the final states for string-processes after they are performed.  More... | |
| void | string_excitation () | 
| Todo(ryu): document better - it is not really UrQMD-based, isn't it? Perform the UrQMD-based string excitation and decay.  More... | |
| void | format_debug_output (std::ostream &out) const override | 
Writes information about this scatter 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... | |
| 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_3body_phasespace () | 
| Sample the full 3-body phase-space (masses, momenta, angles) in the center-of-mass frame for the final state particles.  More... | |
| virtual void | sample_5body_phasespace () | 
| Sample the full 5-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... | |
Protected Attributes | |
| CollisionBranchList | collision_channels_ | 
| List of possible collisions.  More... | |
| double | total_cross_section_ | 
| Total hadronic cross section.  More... | |
| double | partial_cross_section_ | 
| Partial cross-section to the chosen outgoing channel.  More... | |
| bool | isotropic_ = false | 
| Do this collision isotropically?  More... | |
| double | string_formation_time_ = 1.0 | 
| Time fragments take to be fully formed in hard string excitation.  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/c).  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... | |
Private Member Functions | |
| bool | is_elastic () const | 
| Check if the scattering is elastic.  More... | |
| void | resonance_formation () | 
| Perform a 2->1 resonance-formation process.  More... | |
Private Attributes | |
| StringProcess * | string_process_ = nullptr | 
| Pointer to interface class for strings.  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... | |
| smash::ScatterAction::ScatterAction | ( | const ParticleData & | in_part1, | 
| const ParticleData & | in_part2, | ||
| double | time, | ||
| bool | isotropic = false,  | 
        ||
| double | string_formation_time = 1.0,  | 
        ||
| double | box_length = -1.0  | 
        ||
| ) | 
Construct a ScatterAction object.
| [in] | in_part1 | first scattering partner | 
| [in] | in_part2 | second scattering partner | 
| [in] | time | Time at which the action is supposed to take place | 
| [in] | isotropic | if true, do the collision isotropically | 
| [in] | string_formation_time | Time string fragments take to form | 
| [in] | box_length | Passing box length to determine coordinate of the collision, in case it happened through the wall in a box. If negative, then there is no wrapping. | 
Definition at line 29 of file scatteraction.cc.
| void smash::ScatterAction::add_collision | ( | CollisionBranchPtr | p | ) | 
Add a new collision channel.
| [in] | p | Channel to be added. | 
Definition at line 40 of file scatteraction.cc.
| void smash::ScatterAction::add_collisions | ( | CollisionBranchList | pv | ) | 
Add several new collision channels at once.
| [in] | pv | list of channels to be added. | 
Definition at line 44 of file scatteraction.cc.
| double smash::ScatterAction::transverse_distance_sqr | ( | ) | const | 
Calculate the transverse distance of the two incoming particles in their local rest frame.
According to UrQMD criterion position of particle a: x_a 
position of particle b: x_b 
momentum of particle a: p_a 
momentum of particle b: p_b 
 
\[d^2_\mathrm{coll} = (\vec{x_a} - \vec{x_b})^2 - \frac{((\vec{x_a} - \vec{x_b}) \cdot (\vec{p_a} - \vec{p_b}))^2 } {(\vec{p_a} - \vec{p_b})^2}\]
UrQMD squared distance criterion: Bass:1998ca [4] (3.27): in center of momentum frame position of particle a: x_a position of particle b: x_b momentum of particle a: p_a momentum of particle b: p_b d^2_{coll} = (x_a - x_b)^2 - ((x_a - x_b) . (p_a - p_b))^2 / (p_a - p_b)^2
Definition at line 186 of file scatteraction.cc.
| double smash::ScatterAction::cov_transverse_distance_sqr | ( | ) | const | 
Calculate the transverse distance of the two incoming particles in their local rest frame written in a covariant form.
Equivalent to the UrQMD transverse distance. See Hirano:2012yy [23] (5.6)-(5.11).
Definition at line 223 of file scatteraction.cc.
| double smash::ScatterAction::mandelstam_s | ( | ) | const | 
Determine the Mandelstam s variable,.
\[s = (p_a + p_b)^2\]
Equal to the square of CMS energy.
Definition at line 163 of file scatteraction.cc.
| double smash::ScatterAction::relative_velocity | ( | ) | const | 
Get the relative velocity of the two incoming particles.
For a defintion see e.g. Seifert:2017oyb [45], eq. (5)
Definition at line 177 of file scatteraction.cc.
      
  | 
  overridevirtual | 
Generate the final-state of the scattering process.
Performs either elastic or inelastic scattering.
| InvalidScatterAction | 
Implements smash::Action.
Reimplemented in smash::ScatterActionPhoton.
Definition at line 49 of file scatteraction.cc.
      
  | 
  overridevirtual | 
Get the total cross section of scattering particles.
Implements smash::Action.
Reimplemented in smash::ScatterActionPhoton.
Definition at line 145 of file scatteraction.cc.
      
  | 
  overridevirtual | 
Get the partial cross section of the chosen channel.
Implements smash::Action.
Definition at line 150 of file scatteraction.cc.
      
  | 
  overridevirtual | 
Sample final-state angles in a 2->2 collision (possibly anisotropic).
NN → NN: Choose angular distribution according to Cugnon parametrization, see Cugnon:1996kh [15].
NN → NΔ: Sample scattering angles in center-of-mass frame from an anisotropic angular distribution, using the same distribution as for elastic pp scattering, as suggested in Cugnon:1996kh [15].
NN → NR: Fit to HADES data, see Agakishiev:2014wqa [1].
Reimplemented from smash::Action.
Definition at line 295 of file scatteraction.cc.
| void smash::ScatterAction::add_all_scatterings | ( | double | elastic_parameter, | 
| bool | two_to_one, | ||
| ReactionsBitSet | included_2to2, | ||
| MultiParticleReactionsBitSet | included_multi, | ||
| double | low_snn_cut, | ||
| bool | strings_switch, | ||
| bool | use_AQM, | ||
| bool | strings_with_probability, | ||
| NNbarTreatment | nnbar_treatment, | ||
| double | scale_xs, | ||
| double | additional_el_xs | ||
| ) | 
Add all possible scattering subprocesses for this action object.
| [in] | elastic_parameter | If non-zero, given global elastic cross section. | 
| [in] | two_to_one | 2->1 reactions enabled? | 
| [in] | included_2to2 | Which 2->2 reactions are enabled? | 
| [in] | included_multi | Which multi-particle reactions are enabled? | 
| [in] | low_snn_cut | Elastic collisions with CME below are forbidden. | 
| [in] | strings_switch | Are string processes enabled? | 
| [in] | use_AQM | use elastic cross sections via AQM? | 
| [in] | strings_with_probability | Are string processes triggered according to a probability? | 
| [in] | nnbar_treatment | NNbar treatment through resonance, strings or none | 
| [in] | scale_xs | Factor by which all (partial) cross sections are scaled | 
| [in] | additional_el_xs | Additional constant elastic cross section | 
Definition at line 114 of file scatteraction.cc.
      
  | 
  inline | 
Get list of possible collision channels.
Definition at line 165 of file scatteraction.h.
      
  | 
  inline | 
Set the StringProcess object to be used.
The StringProcess object is used to handle string excitation and to generate final state particles.
| [in] | str_proc | String process object to be used. | 
Definition at line 185 of file scatteraction.h.
      
  | 
  inlinevirtual | 
Get the total cross section of the scattering particles.
Definition at line 194 of file scatteraction.h.
      
  | 
  protected | 
Get the momentum of the center of mass of the incoming particles in the calculation frame.
Definition at line 165 of file scatteraction.cc.
      
  | 
  protected | 
Get the squared momentum of the center of mass of the incoming particles in the calculation frame.
Definition at line 171 of file scatteraction.cc.
      
  | 
  protected | 
Get the velocity of the center of mass of the scattering/incoming particles in the calculation frame.
Note: Do not use this function to boost the outgoing particles. Use total_momentum_of_outgoing_particles(), which corrects for the effect of potentials on intial and final state.
Definition at line 155 of file scatteraction.cc.
      
  | 
  protected | 
Get the gamma factor corresponding to a boost to the center of mass frame of the colliding particles.
Definition at line 159 of file scatteraction.cc.
      
  | 
  protected | 
Perform an elastic two-body scattering, i.e. just exchange momentum.
Definition at line 428 of file scatteraction.cc.
      
  | 
  protected | 
Perform an inelastic two-body scattering, i.e. new particles are formed.
Definition at line 438 of file scatteraction.cc.
      
  | 
  protected | 
Perform a two-to-three-body scattering.
Definition at line 444 of file scatteraction.cc.
      
  | 
  protected | 
Perform a two-to-five-body scattering.
Definition at line 451 of file scatteraction.cc.
      
  | 
  protected | 
Creates the final states for string-processes after they are performed.
Definition at line 480 of file scatteraction.cc.
      
  | 
  protected | 
Todo(ryu): document better - it is not really UrQMD-based, isn't it? Perform the UrQMD-based string excitation and decay.
Definition at line 496 of file scatteraction.cc.
      
  | 
  private | 
Check if the scattering is elastic.
      
  | 
  private | 
Perform a 2->1 resonance-formation process.
| InvalidResonanceFormation | 
Definition at line 458 of file scatteraction.cc.
      
  | 
  protected | 
List of possible collisions.
Definition at line 258 of file scatteraction.h.
      
  | 
  protected | 
Total hadronic cross section.
Definition at line 261 of file scatteraction.h.
      
  | 
  protected | 
Partial cross-section to the chosen outgoing channel.
Definition at line 264 of file scatteraction.h.
      
  | 
  protected | 
Do this collision isotropically?
Definition at line 267 of file scatteraction.h.
      
  | 
  protected | 
Time fragments take to be fully formed in hard string excitation.
Definition at line 270 of file scatteraction.h.
      
  | 
  private | 
Pointer to interface class for strings.
Definition at line 287 of file scatteraction.h.