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_ StringProcess * get_process_string_ptr()
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.
The ThreeVector class represents a physical three-vector with the components .
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...
const int testparticles_
Number of test particles.
constexpr double really_small
Numerical error tolerance.
String excitation processes used in SMASH.
const ReactionsBitSet incl_set_
List of included 2<->2 reactions.
const FourVector & position() const
Get the particle's position in Minkowski space.
bool is_constant_elastic_isotropic() const
If there is only one particle sort, no decays (only elastic scatterings are possible), scatterings are isotropic and cross-section fixed to elastic_parameter_ independently on momenta, then maximal cross-section is elastic_parameter_.
const bool two_to_one_
Enable 2->1 processes.
const double low_snn_cut_
Elastic collsions between two nucleons with sqrt_s below low_snn_cut_ are excluded.
const double string_formation_time_
Parameter for formation time.
Collection of useful constants that are known at compile time.
const bool strings_with_probability_
Decide whether to implement string fragmentation based on a probability.
ActionList find_final_actions(const Particles &, bool=false) const override
Find some final collisions at the end of the simulation.
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...
ThreeVector threevec() const
constexpr double fm2_mb
mb <-> fm^2 conversion factor.
const std::vector< bool > & nucleon_has_interacted_
Parameter to record whether the nucleon has experienced a collision or not.
Interface to the SMASH configuration files.
constexpr double maximum_cross_section
The maximal cross section (in mb) for which it is guaranteed that all collisions with this cross sect...
NNbarTreatment
Treatment of N Nbar Annihilation.
std::unique_ptr< StringProcess > string_process_interface_
Class that deals with strings, interfacing Pythia.
const bool strings_switch_
Switch to turn off string excitation.
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...
static const ParticleTypeList & list_all()
CollisionCriterion
Criteria used to check collisions.
HistoryData get_history() const
Get history information.
Particle type contains the static properties of a particle species.
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.
A simple scatter finder: Just loops through all particles and checks each pair for a collision...
const NNbarTreatment nnbar_treatment_
Switch for NNbar reactions.
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...
std::bitset< 10 > ReactionsBitSet
Container for the 2 to 2 reactions in the code.
void dump_reactions() const
Prints out all the 2-> n (n > 1) reactions with non-zero cross-sections between all possible pairs of...
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 use_AQM_
Switch to control whether to use AQM or not.
const int N_proj_
Record the number of the nucleons in the projectile.
const bool isotropic_
Do all collisions isotropically.
const int N_tot_
Record the total number of the nucleons in the two colliding nuclei.
ActionFinderInterface is the abstract base class for all action finders, i.e.
The Particles class abstracts the storage and manipulation of particles.
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.
int32_t id() const
Get the id of the particle.
The FourVector class holds relevant values in Minkowski spacetime with (+, −, −, −) metric signature.
Helper structure for Experiment.
ParticleData contains the dynamic information of a certain particle.
const double elastic_parameter_
Elastic cross section parameter (in mb).
int32_t collisions_per_particle
Collision counter per particle, zero only for initially present particles.
const FourVector & momentum() const
Get the particle's 4-momentum.
const CollisionCriterion coll_crit_
Specifies which collision criterion is used.