Version: SMASH-1.5.1
decayactionsfinder.cc
Go to the documentation of this file.
1
/*
2
*
3
* Copyright (c) 2014-2018
4
* SMASH Team
5
*
6
* GNU General Public License (GPLv3 or later)
7
*
8
*/
9
10
#include "
smash/decayactionsfinder.h
"
11
12
#include "
smash/constants.h
"
13
#include "
smash/cxx14compat.h
"
14
#include "
smash/decayaction.h
"
15
#include "
smash/experimentparameters.h
"
16
#include "
smash/fourvector.h
"
17
#include "
smash/particles.h
"
18
#include "
smash/random.h
"
19
20
namespace
smash
{
21
22
ActionList
DecayActionsFinder::find_actions_in_cell
(
23
const
ParticleList &search_list,
double
dt)
const
{
24
ActionList actions;
25
/* for short time steps this seems reasonable to expect
26
* less than 10 decays in most time steps */
27
actions.reserve(10);
28
29
for
(
const
auto
&
p
: search_list) {
30
if
(
p
.type().is_stable()) {
31
continue
;
// particle doesn't decay
32
}
33
34
DecayBranchList processes =
p
.type().get_partial_widths_hadronic(
35
p
.momentum(),
p
.position().threevec());
36
// total decay width (mass-dependent)
37
const
double
width = total_weight<DecayBranch>(processes);
38
39
// check if there are any (hadronic) decays
40
if
(!(width > 0.0)) {
41
continue
;
42
}
43
44
constexpr
double
one_over_hbarc = 1. /
hbarc
;
45
46
/* The decay_time is sampled from an exponential distribution.
47
* Even though it may seem suspicious that it is sampled every
48
* timestep, it can be proven that this still overall obeys
49
* the exponential decay law.
50
*/
51
const
double
decay_time = 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 at the decay time,
56
* it should not be able to decay */
57
if
(decay_time < dt &&
58
(
p
.formation_time() < (
p
.position().x0() + decay_time))) {
59
/* => decay_time ∈ [0, dt[
60
* => the particle decays in this timestep. */
61
auto
act = make_unique<DecayAction>(
p
, decay_time);
62
act->add_decays(std::move(processes));
63
actions.emplace_back(std::move(act));
64
}
65
}
66
return
actions;
67
}
68
69
ActionList
DecayActionsFinder::find_final_actions
(
const
Particles
&search_list,
70
bool
/*only_res*/
)
const
{
71
ActionList actions;
72
73
for
(
const
auto
&
p
: search_list) {
74
if
(
p
.type().is_stable()) {
75
continue
;
// particle doesn't decay
76
}
77
auto
act = make_unique<DecayAction>(
p
, 0.);
78
act->add_decays(
p
.type().get_partial_widths(
p
.effective_mass()));
79
actions.emplace_back(std::move(act));
80
}
81
return
actions;
82
}
83
84
}
// namespace smash
smash::DecayActionsFinder::find_final_actions
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.
Definition:
decayactionsfinder.cc:69
cxx14compat.h
constants.h
Collection of useful constants that are known at compile time.
particles.h
experimentparameters.h
smash::hbarc
constexpr double hbarc
GeV <-> fm conversion factor.
Definition:
constants.h:25
decayactionsfinder.h
decayaction.h
smash::pdg::p
constexpr int p
Proton.
Definition:
pdgcode_constants.h:28
random.h
smash::Particles
The Particles class abstracts the storage and manipulation of particles.
Definition:
particles.h:33
fourvector.h
smash
Definition:
action.h:24
smash::DecayActionsFinder::find_actions_in_cell
ActionList find_actions_in_cell(const ParticleList &search_list, double dt) const override
Check the whole particle list for decays.
Definition:
decayactionsfinder.cc:22
src
decayactionsfinder.cc
Impressum
Data privacy protection
Generated on Wed Dec 12 2018 15:51:04 for SMASH by
Doxygen
1.8.14