Version: SMASH-3.1
smash::DecayActionsFinderDilepton Class Reference

#include <decayactionsfinderdilepton.h>

A dilepton decay finder: Loops through all particles and if they can decay into dileptons, it treats the decays with the shining method.

This means in every timestep it stores every possible decay in an extra action and later in the write_dilepton_action routine in experiment.cc these decays are written in the DileptonOutput. Because too many dileptons are produced this way, every decay is weighted with the so called "shining_weight". See Schmidt:2008hm [48], chapter 2D. The finder works with two body dilepton decays as well as with dalitz dilepton decays.

Definition at line 30 of file decayactionsfinderdilepton.h.

Public Member Functions

 DecayActionsFinderDilepton ()
 Initialize the finder. More...
 
void shine (const Particles &search_list, OutputInterface *output, double dt) const
 Check the whole particles list and print out possible dilepton decays. More...
 
void shine_final (const Particles &search_list, OutputInterface *output, bool only_res=false) const
 Shine dileptons from resonances at the end of the simulation. More...
 

Constructor & Destructor Documentation

◆ DecayActionsFinderDilepton()

smash::DecayActionsFinderDilepton::DecayActionsFinderDilepton ( )
inline

Initialize the finder.

Definition at line 33 of file decayactionsfinderdilepton.h.

33 {}

Member Function Documentation

◆ shine()

void smash::DecayActionsFinderDilepton::shine ( const Particles search_list,
OutputInterface output,
double  dt 
) const

Check the whole particles list and print out possible dilepton decays.

Parameters
[in]search_listList of all particles.
[in]outputPointer to the dilepton output.
[in]dtLength of timestep [fm]

Definition at line 18 of file decayactionsfinderdilepton.cc.

20  {
21  if (!output->is_dilepton_output()) {
22  return;
23  }
24  for (const auto &p : search_list) {
25  const auto n_all_modes =
26  p.type()
27  .get_partial_widths(p.momentum(), p.position().threevec(),
29  .size();
30  if (n_all_modes == 0) {
31  continue;
32  }
33 
34  const double inv_gamma = p.inverse_gamma();
35  DecayBranchList dil_modes = p.type().get_partial_widths(
36  p.momentum(), p.position().threevec(), WhichDecaymodes::Dileptons);
37 
38  /* If particle can only decay into dileptons or is stable, use shining only
39  * in find_final_actions and ignore them here, also unformed
40  * resonances cannot decay */
41  if (dil_modes.size() == n_all_modes || p.type().is_stable() ||
42  (p.formation_time() > p.position().x0())) {
43  continue;
44  }
45 
46  for (DecayBranchPtr &mode : dil_modes) {
47  // SHINING as described in \iref{Schmidt:2008hm}, chapter 2D
48  const double shining_weight = dt * inv_gamma * mode->weight() / hbarc;
49 
50  if (shining_weight > 0.0) { // decays that can happen
51  DecayActionDilepton act(p, 0., shining_weight);
52  act.add_decay(std::move(mode));
53  act.generate_final_state();
54  output->at_interaction(act, 0.0);
55  }
56  }
57  }
58 }
constexpr int p
Proton.
constexpr double hbarc
GeV <-> fm conversion factor.
Definition: constants.h:25
@ Dileptons
Only return dilepton decays widths.
@ All
All decay mode widths.

◆ shine_final()

void smash::DecayActionsFinderDilepton::shine_final ( const Particles search_list,
OutputInterface output,
bool  only_res = false 
) const

Shine dileptons from resonances at the end of the simulation.

This is special, because the shining time is now until the resonance would decay and not for some fixed dt interval.

Parameters
[in]search_listList of all particles.
[in]outputPointer to the dilepton output.
[in]only_resoptional parameter that requests that only actions regarding resonances are considered (disregarding stable particles)

Definition at line 60 of file decayactionsfinderdilepton.cc.

62  {
63  if (!output->is_dilepton_output()) {
64  return;
65  }
66  for (const auto &p : search_list) {
67  const ParticleType &t = p.type();
68  if (t.decay_modes().decay_mode_list().empty() ||
69  (only_res && t.is_stable())) {
70  continue;
71  }
72 
73  DecayBranchList dil_modes = t.get_partial_widths(
74  p.momentum(), p.position().threevec(), WhichDecaymodes::Dileptons);
75 
76  // total decay width, also hadronic decays
77  const double width_tot = total_weight<DecayBranch>(t.get_partial_widths(
78  p.momentum(), p.position().threevec(), WhichDecaymodes::All));
79 
80  for (DecayBranchPtr &mode : dil_modes) {
81  const double shining_weight = mode->weight() / width_tot;
82 
83  if (shining_weight > 0.0) { // decays that can happen
84  DecayActionDilepton act(p, 0., shining_weight);
85  act.add_decay(std::move(mode));
86  act.generate_final_state();
87  output->at_interaction(act, 0.0);
88  }
89  }
90  }
91 }

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