#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 31 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) | |
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... | |
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, double low_snn_cut, bool strings_switch, bool use_AQM, bool strings_with_probability, NNbarTreatment nnbar_treatment) |
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... | |
![]() | |
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 Particles &particles, 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... | |
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... | |
Protected Member Functions | |
double | mandelstam_s () const |
Determine the Mandelstam s variable,. More... | |
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 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 | 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... | |
![]() | |
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... | |
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... | |
![]() | |
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... | |
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... | |
smash::ScatterAction::ScatterAction | ( | const ParticleData & | in_part1, |
const ParticleData & | in_part2, | ||
double | time, | ||
bool | isotropic = false , |
||
double | string_formation_time = 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 |
Definition at line 32 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 (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 168 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 136 of file scatteraction.cc.
|
overridevirtual |
Get the partial cross section of the chosen channel.
Implements smash::Action.
Definition at line 141 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.
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.
NN → NR: Fit to HADES data, see Agakishiev:2014wqa.
Reimplemented from smash::Action.
Definition at line 250 of file scatteraction.cc.
void smash::ScatterAction::add_all_scatterings | ( | double | elastic_parameter, |
bool | two_to_one, | ||
ReactionsBitSet | included_2to2, | ||
double | low_snn_cut, | ||
bool | strings_switch, | ||
bool | use_AQM, | ||
bool | strings_with_probability, | ||
NNbarTreatment | nnbar_treatment | ||
) |
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] | 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 |
Definition at line 107 of file scatteraction.cc.
|
inline |
Get list of possible collision channels.
Definition at line 132 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 152 of file scatteraction.h.
|
inlinevirtual |
Get the total cross section of the scattering particles.
Definition at line 161 of file scatteraction.h.
|
protected |
Determine the Mandelstam s variable,.
\[s = (p_a + p_b)^2\]
Equal to the square of CMS energy.
Definition at line 154 of file scatteraction.cc.
|
protected |
Get the momentum of the center of mass of the incoming particles in the calculation frame.
Definition at line 156 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 162 of file scatteraction.cc.
|
protected |
Get the velocity of the center of mass of the scattering particles in the calculation frame.
Definition at line 146 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 150 of file scatteraction.cc.
|
protected |
Perform an elastic two-body scattering, i.e. just exchange momentum.
Definition at line 382 of file scatteraction.cc.
|
protected |
Perform an inelastic two-body scattering, i.e. new particles are formed.
Definition at line 392 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 466 of file scatteraction.cc.
|
private |
Check if the scattering is elastic.
|
private |
Perform a 2->1 resonance-formation process.
InvalidResonanceFormation |
Definition at line 425 of file scatteraction.cc.
|
protected |
List of possible collisions.
Definition at line 221 of file scatteraction.h.
|
protected |
Total hadronic cross section.
Definition at line 224 of file scatteraction.h.
|
protected |
Partial cross-section to the chosen outgoing channel.
Definition at line 227 of file scatteraction.h.
|
protected |
Do this collision isotropically?
Definition at line 230 of file scatteraction.h.
|
protected |
Time fragments take to be fully formed in hard string excitation.
Definition at line 233 of file scatteraction.h.
|
private |
Pointer to interface class for strings.
Definition at line 250 of file scatteraction.h.