Version: SMASH-3.0
smash::DecayActionsFinder Class Reference

#include <decayactionsfinder.h>

A simple decay finder: Just loops through all particles and checks if they can decay during the next timestep.

Definition at line 25 of file decayactionsfinder.h.

Inheritance diagram for smash::DecayActionsFinder:
smash::ActionFinderInterface

Public Member Functions

 DecayActionsFinder (double res_lifetime_factor, bool do_weak_decays)
 Initialize the finder. More...
 
ActionList find_actions_in_cell (const ParticleList &search_list, double dt, const double, const std::vector< FourVector > &) const override
 Check the whole particle list for decays. More...
 
ActionList find_actions_with_neighbors (const ParticleList &, const ParticleList &, double, const std::vector< FourVector > &) const override
 Ignore the neighbor searches for decays. More...
 
ActionList find_actions_with_surrounding_particles (const ParticleList &, const Particles &, double, const std::vector< FourVector > &) const override
 Ignore the surrounding searches for decays. More...
 
ActionList find_final_actions (const Particles &search_list, bool only_res=false) const override
 Force all resonances to decay at the end of the simulation. More...
 
- Public Member Functions inherited from smash::ActionFinderInterface
virtual ~ActionFinderInterface ()=default
 

Public Attributes

const double res_lifetime_factor_ = 1.
 Multiplicative factor to be applied to resonance lifetimes. More...
 
const bool do_final_weak_decays_
 Do weak decays at the end? Weak here means all non-strong decays, so electro-magnetic decays are done as well. More...
 

Constructor & Destructor Documentation

◆ DecayActionsFinder()

smash::DecayActionsFinder::DecayActionsFinder ( double  res_lifetime_factor,
bool  do_weak_decays 
)
inlineexplicit

Initialize the finder.

Parameters
[in]res_lifetime_factorThe multiplicative factor to be applied to resonance lifetimes; default is 1
[in]do_weak_decayswhether to perform weak decays at the end

Definition at line 34 of file decayactionsfinder.h.

35  : res_lifetime_factor_(res_lifetime_factor),
36  do_final_weak_decays_(do_weak_decays) {}
const double res_lifetime_factor_
Multiplicative factor to be applied to resonance lifetimes.
const bool do_final_weak_decays_
Do weak decays at the end? Weak here means all non-strong decays, so electro-magnetic decays are done...

Member Function Documentation

◆ find_actions_in_cell()

ActionList smash::DecayActionsFinder::find_actions_in_cell ( const ParticleList &  search_list,
double  dt,
const double  ,
const std::vector< FourVector > &   
) const
overridevirtual

Check the whole particle list for decays.

Parameters
[in]search_listAll particles in grid cell.
[in]dtSize of timestep [fm]
Returns
List with the found (Decay)Action objects.

Implements smash::ActionFinderInterface.

Definition at line 20 of file decayactionsfinder.cc.

22  {
23  ActionList actions;
24  /* for short time steps this seems reasonable to expect
25  * less than 10 decays in most time steps */
26  actions.reserve(10);
27 
28  for (const auto &p : search_list) {
29  if (p.type().is_stable()) {
30  continue; // particle doesn't decay
31  }
32 
33  DecayBranchList processes = p.type().get_partial_widths(
34  p.momentum(), p.position().threevec(), WhichDecaymodes::Hadronic);
35  // total decay width (mass-dependent)
36  const double width = total_weight<DecayBranch>(processes);
37 
38  // check if there are any (hadronic) decays
39  if (!(width > 0.0)) {
40  continue;
41  }
42 
43  constexpr double one_over_hbarc = 1. / hbarc;
44 
45  /* The decay_time is sampled from an exponential distribution.
46  * Even though it may seem suspicious that it is sampled every
47  * timestep, it can be proven that this still overall obeys
48  * the exponential decay law.
49  */
50  double decay_time =
51  res_lifetime_factor_ * random::exponential<double>(
52  /* The clock goes slower in the rest
53  * frame of the resonance */
54  one_over_hbarc * p.inverse_gamma() * width);
55  /* If the particle is not yet formed, shift the decay time by the time it
56  * takes the particle to form */
57  if (p.xsec_scaling_factor() < 1.0) {
58  decay_time += p.formation_time() - p.position().x0();
59  }
60  if (decay_time < dt) {
61  /* => decay_time ∈ [0, dt[
62  * => the particle decays in this timestep. */
63  auto act = std::make_unique<DecayAction>(p, decay_time);
64  act->add_decays(std::move(processes));
65  actions.emplace_back(std::move(act));
66  }
67  }
68  return actions;
69 }
constexpr int p
Proton.
constexpr double hbarc
GeV <-> fm conversion factor.
Definition: constants.h:25
@ Hadronic
Ignore dilepton decay modes widths.

◆ find_actions_with_neighbors()

ActionList smash::DecayActionsFinder::find_actions_with_neighbors ( const ParticleList &  ,
const ParticleList &  ,
double  ,
const std::vector< FourVector > &   
) const
inlineoverridevirtual

Ignore the neighbor searches for decays.

Implements smash::ActionFinderInterface.

Definition at line 50 of file decayactionsfinder.h.

52  {
53  return {};
54  }

◆ find_actions_with_surrounding_particles()

ActionList smash::DecayActionsFinder::find_actions_with_surrounding_particles ( const ParticleList &  ,
const Particles ,
double  ,
const std::vector< FourVector > &   
) const
inlineoverridevirtual

Ignore the surrounding searches for decays.

Implements smash::ActionFinderInterface.

Definition at line 57 of file decayactionsfinder.h.

59  {
60  return {};
61  }

◆ find_final_actions()

ActionList smash::DecayActionsFinder::find_final_actions ( const Particles search_list,
bool  only_res = false 
) const
overridevirtual

Force all resonances to decay at the end of the simulation.

Parameters
[in]search_listAll particles at the end of simulation.
[in]only_resoptional parameter that requests that only actions regarding resonances are considered (disregarding stable particles)
Returns
List with the found (Decay)Action objects.

Implements smash::ActionFinderInterface.

Definition at line 71 of file decayactionsfinder.cc.

72  {
73  ActionList actions;
74 
75  for (const auto &p : search_list) {
76  if (!do_final_weak_decays_ && p.type().is_stable()) {
77  continue; // particle is stable with respect to strong interaction
78  }
79 
80  if (p.type().decay_modes().is_empty()) {
81  continue; // particle cannot decay (not even e.m. or weakly)
82  }
83 
84  auto act = std::make_unique<DecayAction>(p, 0.);
85  act->add_decays(p.type().get_partial_widths(
86  p.momentum(), p.position().threevec(), WhichDecaymodes::All));
87  actions.emplace_back(std::move(act));
88  }
89  return actions;
90 }
@ All
All decay mode widths.

Member Data Documentation

◆ res_lifetime_factor_

const double smash::DecayActionsFinder::res_lifetime_factor_ = 1.

Multiplicative factor to be applied to resonance lifetimes.

Definition at line 76 of file decayactionsfinder.h.

◆ do_final_weak_decays_

const bool smash::DecayActionsFinder::do_final_weak_decays_

Do weak decays at the end? Weak here means all non-strong decays, so electro-magnetic decays are done as well.

Definition at line 82 of file decayactionsfinder.h.


The documentation for this class was generated from the following files: