ListModus: Provides a modus for running SMASH on an external particle list, for example as an afterburner calculation.
To use this modus, choose Modus: List
in the configuration file.
Options for ListModus go in the "Modi"→"List" section of the configuration:
Modi:
List:
# options here
For configuring see List.
Since SMASH is searching for collisions in computational frame time 't', all particles need to be at the same time. If this is not the case in the list provided, the particles will be propagated backwards on straight lines ("anti-freestreaming"). To avoid unphysical interactions of these particles, the back-propagated particles receive a formation_time and zero cross_section_scaling_factor. The cross-sections are set to zero during the time, where the particle will just propagate on a straight line again to appear at the formation_time into the system.
Definition at line 56 of file listmodus.h.
|
| ListModus (Configuration modus_config, const ExperimentParameters ¶meters) |
| Constructor. More...
|
|
| ListModus () |
| Construct an empty list. Useful for convenient JetScape connection. More...
|
|
double | initial_conditions (Particles *particles, const ExperimentParameters ¶meters) |
| Generates initial state of the particles in the system according to a list. More...
|
|
void | backpropagate_to_same_time (Particles &particles) |
| Judge whether formation times are the same for all the particles; Don't do anti-freestreaming if all particles start already at the same time. More...
|
|
void | try_create_particle (Particles &particles, PdgCode pdgcode, double t, double x, double y, double z, double mass, double E, double px, double py, double pz) |
| Tries to add a new particle to particles and performs consistency checks: (i) The PDG code is legal and exists in SMASH. More...
|
|
bool | is_list () const |
|
void | set_file_id (const double file_id_inh) |
| set the file id when ListBoxModus is used More...
|
|
void | set_particle_list_file_directory (std::string particle_list_file_directory_inh) |
| set the particle_list_directory when ListBoxModus is used More...
|
|
void | set_particle_list_file_prefix (std::string particle_list_file_prefix_inh) |
| set the particle_list_prefix when ListBoxModus is used More...
|
|
void | set_event_id (int event_id_inh) |
| set the event_id when ListBoxModus is used More...
|
|
int | impose_boundary_conditions (Particles *, const OutputsList &={}) |
| Enforces sensible positions for the particles. More...
|
|
bool | is_collider () const |
|
bool | is_box () const |
|
bool | is_list () const |
|
bool | is_sphere () const |
|
double | sqrt_s_NN () const |
|
double | impact_parameter () const |
|
void | sample_impact () const |
| sample impact parameter for collider modus More...
|
|
double | velocity_projectile () const |
|
double | velocity_target () const |
|
FermiMotion | fermi_motion () const |
|
double | max_timestep (double) const |
|
double | equilibration_time () const |
|
double | length () const |
|
double | radius () const |
|
bool | calculation_frame_is_fixed_target () const |
|
double | nuclei_passing_time () const |
| Get the passing time of the two nuclei in a collision. More...
|
|
Grid< GridOptions::Normal > | create_grid (const Particles &particles, double min_cell_length, double timestep_duration, CollisionCriterion crit, const bool include_unformed_particles, CellSizeStrategy strategy=CellSizeStrategy::Optimal) const |
| Creates the Grid with normal boundary conditions. More...
|
|
void smash::ListModus::try_create_particle |
( |
Particles & |
particles, |
|
|
PdgCode |
pdgcode, |
|
|
double |
t, |
|
|
double |
x, |
|
|
double |
y, |
|
|
double |
z, |
|
|
double |
mass, |
|
|
double |
E, |
|
|
double |
px, |
|
|
double |
py, |
|
|
double |
pz |
|
) |
| |
Tries to add a new particle to particles and performs consistency checks: (i) The PDG code is legal and exists in SMASH.
If not, a warning is printed and the particle is ignored. (ii) The mass matches the pole mass of pdgcode
in SMASH. If it does not, then a warning is printed, the pole mass of the particle is set equal to the corresponding mass from SMASH particle table and it's energy is recomputed as \( E^2 = p^2 + m^2 \). (iii) Any stable particle is on-shell, i.e. \( E^2 - p^2 = m^2 \). If it is not, then a warning is printed and the energy is set to \( E^2 = p^2 + m^2 \). This very tolerant behaviour is justified by the practical usage of SMASH as afterburner. Usually particles unknown to SMASH are rare resonances, which do not play a large role. Mass mismatch is typically less than 1% and comes from rounding and from SMASH enforcing isospin symmetry (for example the mass of neutral pion is artificially forced to be the same as charged pion). On-shellness violation typically comes from the insufficient number of significant digits in the input file + rounding.
- Parameters
-
[in] | pdgcode | pdg code of added particle |
[in] | t | time of added particle |
[in] | x | x-coordinate of added particle |
[in] | y | y-coordinate of added particle |
[in] | z | z-coordinate of added particle |
[in] | mass | mass of added particle |
[in] | E | energy of added particle |
[in] | px | x-component of momentum of added particle |
[in] | py | y-component of momentum of added particle |
[in] | pz | z-component of momentum of added particle |
[out] | particles | structure, to which the particle is added |
Definition at line 199 of file listmodus.cc.
203 constexpr
int max_warns_precision = 10, max_warn_mass_consistency = 10;
205 ParticleData &particle = particles.create(pdgcode);
207 if (particle.type().is_stable() &&
210 logg[
LList].warn() <<
"Provided mass of " << particle.type().name()
212 <<
" [GeV] is inconsistent with SMASH value = "
213 << particle.pole_mass()
214 <<
". Forcing E = sqrt(p^2 + m^2)"
215 <<
", where m is SMASH mass.";
219 "Further warnings about SMASH mass versus input mass"
220 " inconsistencies will be suppressed.");
223 particle.set_4momentum(mass, ThreeVector(px, py, pz));
225 particle.set_4momentum(FourVector(E, px, py, pz));
227 if (std::abs(particle.momentum().sqr() - mass * mass) >
really_small) {
230 <<
"Provided 4-momentum " << particle.momentum() <<
" and "
231 <<
" mass " << mass <<
" do not satisfy E^2 - p^2 = m^2."
232 <<
" This may originate from the lack of numerical"
233 <<
" precision in the input. Setting E to sqrt(p^2 + m^2).";
237 "Further warnings about E != sqrt(p^2 + m^2) will"
241 particle.set_4momentum(mass, ThreeVector(px, py, pz));
244 particle.set_4position(FourVector(t, x, y, z));
245 particle.set_formation_time(t);
246 particle.set_cross_section_scaling_factor(1.0);
247 }
catch (ParticleType::PdgNotFoundFailure &) {
248 logg[
LList].warn() <<
"SMASH does not recognize pdg code " << pdgcode
249 <<
" loaded from file. This particle will be ignored.\n";
int n_warns_precision_
Counter for mass-check warnings to avoid spamming.
int n_warns_mass_consistency_
Counter for energy-momentum conservation warnings to avoid spamming.