Version: SMASH-3.1
smash::DecayActionDilepton Class Reference

#include <decayactiondilepton.h>

DecayActionDilepton is special action created for particles that can decay into dileptons.

Such actions are never actually performed, but only written into the dilepton output according to our perturbative treatment.

Definition at line 24 of file decayactiondilepton.h.

Inheritance diagram for smash::DecayActionDilepton:
smash::DecayAction smash::Action

Public Member Functions

 DecayActionDilepton (const ParticleData &p, double time_of_execution, double shining_weight)
 Construct a DecayActionDilepton from a particle p. More...
 
double get_total_weight () const override
 Return the total width of the decay process. More...
 
void sample_manybody_phasespace () override
 Generates momenta of outgoing dileptons (for Dalitz dilepton decays only). More...
 
- Public Member Functions inherited from smash::DecayAction
 DecayAction (const ParticleData &p, double time)
 Construct a DecayAction from a particle p. More...
 
void add_decays (DecayBranchList pv)
 Add several new decays at once. More...
 
void add_decay (DecayBranchPtr p)
 Add one new decay. More...
 
void generate_final_state () override
 Generate the final state of the decay process. More...
 
std::pair< double, double > sample_masses (double kinetic_energy_cm) const override
 Sample the masses of the final particles. More...
 
double get_partial_weight () const override
 Get partial width of chosen channel. More...
 
double total_width () const
 Get total decay width. More...
 
- Public Member Functions inherited from smash::Action
 Action (const ParticleList &in_part, double time)
 Construct an action object with incoming particles and relative time. More...
 
 Action (const ParticleData &in_part, const ParticleData &out_part, double time, ProcessType type)
 Construct an action object with the incoming particles, relative time, and the already known outgoing particles and type of the process. More...
 
 Action (const ParticleList &in_part, const ParticleList &out_part, double absolute_execution_time, ProcessType type)
 Construct an action object with the incoming particles, absolute time, and the already known outgoing particles and type of the process. More...
 
 Action (const Action &)=delete
 Copying is disabled. Use pointers or create a new Action. More...
 
virtual ~Action ()
 Virtual Destructor. More...
 
bool operator< (const Action &rhs) const
 Determine whether one action takes place before another in time. More...
 
virtual ProcessType get_type () const
 Get the process type. More...
 
template<typename Branch >
void add_process (ProcessBranchPtr< Branch > &p, ProcessBranchList< Branch > &subprocesses, double &total_weight)
 Add a new subprocess. More...
 
template<typename Branch >
void add_processes (ProcessBranchList< Branch > pv, ProcessBranchList< Branch > &subprocesses, double &total_weight)
 Add several new subprocesses at once. More...
 
virtual double perform (Particles *particles, uint32_t id_process)
 Actually perform the action, e.g. More...
 
bool is_valid (const Particles &particles) const
 Check whether the action still applies. More...
 
bool is_pauli_blocked (const std::vector< Particles > &ensembles, const PauliBlocker &p_bl) const
 Check if the action is Pauli-blocked. More...
 
const ParticleList & incoming_particles () const
 Get the list of particles that go into the action. More...
 
void update_incoming (const Particles &particles)
 Update the incoming particles that are stored in this action to the state they have in the global particle list. More...
 
const ParticleList & outgoing_particles () const
 Get the list of particles that resulted from the action. More...
 
double time_of_execution () const
 Get the time at which the action is supposed to be performed. More...
 
virtual double check_conservation (const uint32_t id_process) const
 Check various conservation laws. More...
 
double sqrt_s () const
 Determine the total energy in the center-of-mass frame [GeV]. More...
 
FourVector total_momentum_of_outgoing_particles () const
 Calculate the total kinetic momentum of the outgoing particles. More...
 
FourVector get_interaction_point () const
 Get the interaction point. More...
 
std::pair< FourVector, FourVectorget_potential_at_interaction_point () const
 Get the skyrme and asymmetry potential at the interaction point. More...
 
void set_stochastic_pos_idx ()
 Setter function that stores a random incoming particle index latter used to determine the interaction point. More...
 

Private Attributes

const double shining_weight_
 The shining weight is a weight you apply to every dilepton decay. More...
 
double branching_ = 1.
 An additional branching factor that is multiplied with the shining weight. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from smash::Action
static double lambda_tilde (double a, double b, double c)
 Little helper function that calculates the lambda function (sometimes written with a tilde to better distinguish it) that appears e.g. More...
 
static void sample_manybody_phasespace_impl (double sqrts, const std::vector< double > &m, std::vector< FourVector > &sampled_momenta)
 Implementation of the full n-body phase-space sampling (masses, momenta, angles) in the center-of-mass frame for the final state particles. More...
 
- Protected Member Functions inherited from smash::DecayAction
void format_debug_output (std::ostream &out) const override
 Writes information about this decay action to the out stream. More...
 
- Protected Member Functions inherited from smash::Action
FourVector total_momentum () const
 Sum of 4-momenta of incoming particles. More...
 
template<typename Branch >
const Branch * choose_channel (const ProcessBranchList< Branch > &subprocesses, double total_weight)
 Decide for a particular final-state channel via Monte-Carlo and return it as a ProcessBranch. More...
 
virtual void sample_angles (std::pair< double, double > masses, double kinetic_energy_cm)
 Sample final-state momenta in general X->2 processes (here: using an isotropical angular distribution). More...
 
void sample_2body_phasespace ()
 Sample the full 2-body phase-space (masses, momenta, angles) in the center-of-mass frame for the final state particles. More...
 
void assign_formation_time_to_outgoing_particles ()
 Assign the formation time to the outgoing particles. More...
 
- Protected Attributes inherited from smash::DecayAction
DecayBranchList decay_channels_
 List of possible decays. More...
 
double total_width_
 total decay width More...
 
double partial_width_
 partial decay width to the chosen outgoing channel More...
 
int L_ = 0
 Angular momentum of the decay. More...
 
- Protected Attributes inherited from smash::Action
ParticleList incoming_particles_
 List with data of incoming particles. More...
 
ParticleList outgoing_particles_
 Initially this stores only the PDG codes of final-state particles. More...
 
const double time_of_execution_
 Time at which the action is supposed to be performed (absolute time in the lab frame in fm). More...
 
ProcessType process_type_
 type of process More...
 
double box_length_ = -1.0
 Box length: needed to determine coordinates of collision correctly in case of collision through the wall. More...
 
int stochastic_position_idx_ = -1
 This stores a randomly-chosen index to an incoming particle. More...
 

Constructor & Destructor Documentation

◆ DecayActionDilepton()

smash::DecayActionDilepton::DecayActionDilepton ( const ParticleData p,
double  time_of_execution,
double  shining_weight 
)

Construct a DecayActionDilepton from a particle p.

It does not initialize the list of possible decay processes. You need to call add_processes after construction.

Parameters
[in]pThe particle that should decay if the action is performed.
[in]time_of_executionTime at which the action is supposed to take place
[in]shining_weightThe weight of the dilepton decay accroding to the shining method.

Definition at line 16 of file decayactiondilepton.cc.

18  : DecayAction({p}, time), shining_weight_(shining_weight) {}
const double shining_weight_
The shining weight is a weight you apply to every dilepton decay.
DecayAction(const ParticleData &p, double time)
Construct a DecayAction from a particle p.
Definition: decayaction.cc:19
constexpr int p
Proton.

Member Function Documentation

◆ get_total_weight()

double smash::DecayActionDilepton::get_total_weight ( ) const
inlineoverridevirtual

Return the total width of the decay process.

Reimplemented from smash::DecayAction.

Definition at line 41 of file decayactiondilepton.h.

41  {
42  return shining_weight_ * branching_;
43  }
double branching_
An additional branching factor that is multiplied with the shining weight.

◆ sample_manybody_phasespace()

void smash::DecayActionDilepton::sample_manybody_phasespace ( )
overridevirtual

Generates momenta of outgoing dileptons (for Dalitz dilepton decays only).

Reimplemented from smash::Action.

Definition at line 20 of file decayactiondilepton.cc.

20  {
21  // Only Dalitz decays implemented
22  if (outgoing_particles_.size() != 3) {
23  throw std::runtime_error(
24  "Error in DecayActionDilepton::sample_manybody_phasespace: Incorrrect "
25  "number of outgoing particles in Dalitz decay");
26  }
27  // find the non-lepton particle position
28  int non_lepton_position = -1;
29  for (int i = 0; i < 3; ++i) {
30  if (!(outgoing_particles_[i].type().is_lepton())) {
31  non_lepton_position = i;
32  break;
33  }
34  }
35 
36  if (non_lepton_position == -1) {
37  throw std::runtime_error(
38  "Error in DecayActionDilepton::sample_3body_phasespace: No "
39  "non-leptonic outgoing particle in dilepton Dalitz decay found.");
40  }
41 
42  ParticleData &nl = outgoing_particles_[non_lepton_position];
43  ParticleData &l1 = outgoing_particles_[(non_lepton_position + 1) % 3];
44  ParticleData &l2 = outgoing_particles_[(non_lepton_position + 2) % 3];
45 
46  const double mass_l1 = l1.type().mass(); // (pole) mass of first lepton
47  const double mass_l2 = l2.type().mass(); // (pole) mass of second lepton
48  const double mass_nl = nl.type().mass(); // (pole) mass of non-lepton
49 
50  const double cms_energy = total_momentum_of_outgoing_particles().abs();
51 
52  // randomly select a dilepton mass
53  const double dil_mass =
54  random::uniform(mass_l1 + mass_l2, cms_energy - mass_nl);
55  const double delta_m = cms_energy - mass_nl - mass_l1 - mass_l2;
56 
57  const double diff_width = ThreeBodyDecayDilepton::diff_width(
58  cms_energy, mass_l1, dil_mass, mass_nl, &nl.type(),
59  &incoming_particles_[0].type());
60 
61  /* Branching factor, which corrects the shining weight for the differential
62  * width at a particular dilepton mass. We do an implicit Monte-Carlo
63  * integration over the dilepton mass here, and delta_m is simply the
64  * integration volume. */
65  branching_ = delta_m * diff_width / decay_channels_[0]->weight();
66 
67  // perform decay into non-lepton and virtual photon (dilepton)
68  const double dil_mom = pCM(cms_energy, dil_mass, mass_nl);
69 
70  // Here we assume an isotropic angular distribution.
71  Angles phitheta;
72  phitheta.distribute_isotropically();
73 
74  FourVector dil_4mom(std::sqrt(dil_mass * dil_mass + dil_mom * dil_mom),
75  phitheta.threevec() * dil_mom);
76  nl.set_4momentum(mass_nl, -phitheta.threevec() * dil_mom);
77 
78  // perform decay of virtual photon into two leptons
79  const double mom_lep = pCM(dil_mass, mass_l1, mass_l2);
80 
81  // Here we assume an isotropic angular distribution.
82  phitheta.distribute_isotropically();
83 
84  l1.set_4momentum(mass_l1, phitheta.threevec() * mom_lep);
85  l2.set_4momentum(mass_l2, -phitheta.threevec() * mom_lep);
86 
87  // Boost Dileptons back in parent particle rest frame
88  ThreeVector velocity_CM = dil_4mom.velocity();
89  l1.boost_momentum(-velocity_CM);
90  l2.boost_momentum(-velocity_CM);
91 }
FourVector total_momentum_of_outgoing_particles() const
Calculate the total kinetic momentum of the outgoing particles.
Definition: action.cc:157
ParticleList outgoing_particles_
Initially this stores only the PDG codes of final-state particles.
Definition: action.h:363
ParticleList incoming_particles_
List with data of incoming particles.
Definition: action.h:355
DecayBranchList decay_channels_
List of possible decays.
Definition: decayaction.h:97
double abs() const
calculate the lorentz invariant absolute value
Definition: fourvector.h:464
static double diff_width(double m_par, double m_l, double m_dil, double m_other, ParticleTypePtr other, ParticleTypePtr t)
Get the mass-differential width for a dilepton Dalitz decay, where is the invariant mass of the lep...
Definition: decaytype.cc:337
T uniform(T min, T max)
Definition: random.h:88
T pCM(const T sqrts, const T mass_a, const T mass_b) noexcept
Definition: kinematics.h:79

Member Data Documentation

◆ shining_weight_

const double smash::DecayActionDilepton::shining_weight_
private

The shining weight is a weight you apply to every dilepton decay.

Because we radiate dileptons at every timestep to increase statistics, we afterwards weight them to correct the dilepton decay yields.

Definition at line 56 of file decayactiondilepton.h.

◆ branching_

double smash::DecayActionDilepton::branching_ = 1.
private

An additional branching factor that is multiplied with the shining weight.

For Dalitz decays, the primary shining weight is based on the integrated width for the channel, and the branching factor corrects for the differential width (evaluated at a particular dilepton mass), relative to the integrated width. It is determined after the dilepton mass is fixed. For direct (2-body) decays, the branching factor equals one.

Definition at line 65 of file decayactiondilepton.h.


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