 |
Version: SMASH-1.8
|
|
Go to the documentation of this file.
10 #ifndef SRC_INCLUDE_SCATTERACTIONSFINDER_H_
11 #define SRC_INCLUDE_SCATTERACTIONSFINDER_H_
59 const std::vector<bool> &nucleon_has_interacted,
60 int N_tot,
int N_proj);
80 const std::vector<FourVector> &beam_momentum)
const {
91 if (p1.
id() < 0 || p2.
id() < 0) {
92 throw std::runtime_error(
"Invalid particle ID for Fermi motion");
94 const bool p1_has_no_prior_interactions =
95 (static_cast<uint64_t>(p1.
id()) <
96 static_cast<uint64_t>(beam_momentum.size())) &&
99 const bool p2_has_no_prior_interactions =
100 (static_cast<uint64_t>(p2.
id()) <
101 static_cast<uint64_t>(beam_momentum.size())) &&
104 const FourVector p1_mom = (p1_has_no_prior_interactions)
105 ? beam_momentum[p1.
id()]
107 const FourVector p2_mom = (p2_has_no_prior_interactions)
108 ? beam_momentum[p2.
id()]
122 const double dv_times_e1e2_sqr = dv_times_e1e2.
sqr();
128 return -(dr * dv_times_e1e2) *
129 (p1_mom.
x0() * p2_mom.
x0() / dv_times_e1e2_sqr);
148 const ParticleList &search_list,
double dt,
const double cell_vol,
149 const std::vector<FourVector> &beam_momentum)
const override;
164 const ParticleList &search_list,
const ParticleList &neighbors_list,
165 double dt,
const std::vector<FourVector> &beam_momentum)
const override;
179 const ParticleList &search_list,
const Particles &surrounding_list,
180 double dt,
const std::vector<FourVector> &beam_momentum)
const override;
187 bool =
false)
const override {
219 testparticles *
fm2_mb * M_1_PI;
242 double m_a,
double m_b,
bool final_state,
243 std::vector<double> &plab)
const;
290 const std::vector<FourVector> &beam_momentum = {},
291 const double cell_vol = 0.0)
const;
334 #endif // SRC_INCLUDE_SCATTERACTIONSFINDER_H_
const double low_snn_cut_
Elastic collsions between two nucleons with sqrt_s below low_snn_cut_ are excluded.
constexpr double maximum_cross_section
The maximal cross section (in mb) for which it is guaranteed that all collisions with this cross sect...
const FourVector & momentum() const
Get the particle's 4-momentum.
const double string_formation_time_
Parameter for formation time.
int32_t collisions_per_particle
Collision counter per particle, zero only for initially present particles.
const double elastic_parameter_
Elastic cross section parameter (in mb).
std::unique_ptr< StringProcess > string_process_interface_
Class that deals with strings, interfacing Pythia.
int32_t id() const
Get the id of the particle.
ActionList find_final_actions(const Particles &, bool=false) const override
Find some final collisions at the end of the simulation.
const int testparticles_
Number of test particles.
HistoryData get_history() const
Get history information.
const ReactionsBitSet incl_set_
List of included 2<->2 reactions.
ActionList find_actions_in_cell(const ParticleList &search_list, double dt, const double cell_vol, const std::vector< FourVector > &beam_momentum) const override
Search for all the possible collisions within one cell.
const bool strings_with_probability_
Decide whether to implement string fragmentation based on a probability.
const bool two_to_one_
Enable 2->1 processes.
const std::vector< bool > & nucleon_has_interacted_
Parameter to record whether the nucleon has experienced a collision or not.
void dump_cross_sections(const ParticleType &a, const ParticleType &b, double m_a, double m_b, bool final_state, std::vector< double > &plab) const
Print out partial cross-sections of all processes that can occur in the collision of a(mass = m_a) an...
std::bitset< 10 > ReactionsBitSet
Container for the 2 to 2 reactions in the code.
double max_transverse_distance_sqr(int testparticles) const
The maximal distance over which particles can interact, related to the number of test particles and t...
constexpr double really_small
Numerical error tolerance.
Interface to the SMASH configuration files.
String excitation processes used in SMASH.
double collision_time(const ParticleData &p1, const ParticleData &p2, double dt, const std::vector< FourVector > &beam_momentum) const
Determine the collision time of the two particles.
const NNbarTreatment nnbar_treatment_
Switch for NNbar reactions.
const bool strings_switch_
Switch to turn off string excitation.
const FourVector & position() const
Get the particle's position in Minkowski space.
ScatterActionsFinder(Configuration config, const ExperimentParameters ¶meters, const std::vector< bool > &nucleon_has_interacted, int N_tot, int N_proj)
Constructor of the finder with the given parameters.
bool is_constant_elastic_isotropic() const
If there is only one particle sort, no decays (only elastic scatterings are possible),...
CollisionCriterion
Criteria used to check collisions.
ActionList find_actions_with_neighbors(const ParticleList &search_list, const ParticleList &neighbors_list, double dt, const std::vector< FourVector > &beam_momentum) const override
Search for all the possible collisions among the neighboring cells.
const bool isotropic_
Do all collisions isotropically.
const bool use_AQM_
Switch to control whether to use AQM or not.
constexpr double fm2_mb
mb <-> fm^2 conversion factor.
Helper structure for Experiment.
NNbarTreatment
Treatment of N Nbar Annihilation.
void dump_reactions() const
Prints out all the 2-> n (n > 1) reactions with non-zero cross-sections between all possible pairs of...
const int N_tot_
Record the total number of the nucleons in the two colliding nuclei.
ActionPtr check_collision(const ParticleData &data_a, const ParticleData &data_b, double dt, const std::vector< FourVector > &beam_momentum={}, const double cell_vol=0.0) const
Check for a single pair of particles (id_a, id_b) if a collision will happen in the next timestep and...
const int N_proj_
Record the number of the nucleons in the projectile.
ThreeVector threevec() const
const CollisionCriterion coll_crit_
Specifies which collision criterion is used.
static const ParticleTypeList & list_all()
ActionList find_actions_with_surrounding_particles(const ParticleList &search_list, const Particles &surrounding_list, double dt, const std::vector< FourVector > &beam_momentum) const override
Search for all the possible secondary collisions between the outgoing particles and the rest.
StringProcess * get_process_string_ptr()