Version: SMASH-2.0
decayactionsfinderdilepton.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2014-2019
4  * SMASH Team
5  *
6  * GNU General Public License (GPLv3 or later)
7  *
8  */
9 
11 
12 #include "smash/constants.h"
13 #include "smash/cxx14compat.h"
15 #include "smash/decaymodes.h"
16 
17 namespace smash {
18 
20  OutputInterface *output,
21  double dt) const {
22  if (!output->is_dilepton_output()) {
23  return;
24  }
25  for (const auto &p : search_list) {
26  const auto n_all_modes =
27  p.type()
28  .get_partial_widths(p.momentum(), p.position().threevec(),
30  .size();
31  if (n_all_modes == 0) {
32  continue;
33  }
34 
35  const double inv_gamma = p.inverse_gamma();
36  DecayBranchList dil_modes = p.type().get_partial_widths(
37  p.momentum(), p.position().threevec(), WhichDecaymodes::Dileptons);
38 
39  /* If particle can only decay into dileptons or is stable, use shining only
40  * in find_final_actions and ignore them here, also unformed
41  * resonances cannot decay */
42  if (dil_modes.size() == n_all_modes || p.type().is_stable() ||
43  (p.formation_time() > p.position().x0())) {
44  continue;
45  }
46 
47  for (DecayBranchPtr &mode : dil_modes) {
48  // SHINING as described in \iref{Schmidt:2008hm}, chapter 2D
49  const double shining_weight = dt * inv_gamma * mode->weight() / hbarc;
50 
51  if (shining_weight > 0.0) { // decays that can happen
52  DecayActionDilepton act(p, 0., shining_weight);
53  act.add_decay(std::move(mode));
55  output->at_interaction(act, 0.0);
56  }
57  }
58  }
59 }
60 
62  OutputInterface *output,
63  bool only_res) const {
64  if (!output->is_dilepton_output()) {
65  return;
66  }
67  for (const auto &p : search_list) {
68  const ParticleType &t = p.type();
69  if (t.decay_modes().decay_mode_list().empty() ||
70  (only_res && t.is_stable())) {
71  continue;
72  }
73 
74  DecayBranchList dil_modes = t.get_partial_widths(
75  p.momentum(), p.position().threevec(), WhichDecaymodes::Dileptons);
76 
77  // total decay width, also hadronic decays
78  const double width_tot = total_weight<DecayBranch>(t.get_partial_widths(
79  p.momentum(), p.position().threevec(), WhichDecaymodes::All));
80 
81  for (DecayBranchPtr &mode : dil_modes) {
82  const double shining_weight = mode->weight() / width_tot;
83 
84  if (shining_weight > 0.0) { // decays that can happen
85  DecayActionDilepton act(p, 0., shining_weight);
86  act.add_decay(std::move(mode));
88  output->at_interaction(act, 0.0);
89  }
90  }
91  }
92 }
93 
94 } // namespace smash
smash
Definition: action.h:24
smash::DecayActionsFinderDilepton::shine_final
void shine_final(const Particles &search_list, OutputInterface *output, bool only_res=false) const
Shine dileptons from resonances at the end of the simulation.
Definition: decayactionsfinderdilepton.cc:61
smash::DecayModes::decay_mode_list
const DecayBranchList & decay_mode_list() const
Definition: decaymodes.h:63
decayactiondilepton.h
cxx14compat.h
smash::WhichDecaymodes::All
All decay mode widths.
smash::hbarc
constexpr double hbarc
GeV <-> fm conversion factor.
Definition: constants.h:25
smash::ParticleType::decay_modes
const DecayModes & decay_modes() const
Definition: particletype.cc:422
smash::ParticleType::get_partial_widths
DecayBranchList get_partial_widths(const FourVector p, const ThreeVector x, WhichDecaymodes wh) const
Get all the mass-dependent partial decay widths of a particle with mass m.
Definition: particletype.cc:486
smash::OutputInterface::at_interaction
virtual void at_interaction(const Action &action, const double density)
Called whenever an action modified one or more particles.
Definition: outputinterface.h:104
smash::ParticleType::is_stable
bool is_stable() const
Definition: particletype.h:239
smash::DecayActionDilepton
Definition: decayactiondilepton.h:24
smash::DecayAction::generate_final_state
void generate_final_state() override
Generate the final state of the decay process.
Definition: decayaction.cc:30
smash::ParticleType
Definition: particletype.h:97
smash::OutputInterface
Abstraction of generic output.
Definition: outputinterface.h:65
decayactionsfinderdilepton.h
smash::OutputInterface::is_dilepton_output
bool is_dilepton_output() const
Get, whether this is the dilepton output?
Definition: outputinterface.h:171
smash::Particles
Definition: particles.h:33
constants.h
smash::pdg::p
constexpr int p
Proton.
Definition: pdgcode_constants.h:28
smash::WhichDecaymodes::Dileptons
Only return dilepton decays widths.
smash::DecayAction::add_decay
void add_decay(DecayBranchPtr p)
Add one new decay.
Definition: decayaction.cc:26
smash::DecayActionsFinderDilepton::shine
void shine(const Particles &search_list, OutputInterface *output, double dt) const
Check the whole particles list and print out possible dilepton decays.
Definition: decayactionsfinderdilepton.cc:19
decaymodes.h