17 double shining_weight)
18 :
DecayAction({
p}, time), shining_weight_(shining_weight) {}
23 throw std::runtime_error(
24 "Error in DecayActionDilepton::sample_manybody_phasespace: Incorrrect "
25 "number of outgoing particles in Dalitz decay");
28 int non_lepton_position = -1;
29 for (
int i = 0; i < 3; ++i) {
31 non_lepton_position = i;
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.");
46 const double mass_l1 = l1.
type().
mass();
47 const double mass_l2 = l2.type().mass();
48 const double mass_nl = nl.
type().
mass();
53 const double dil_mass =
55 const double delta_m = cms_energy - mass_nl - mass_l1 - mass_l2;
58 cms_energy, mass_l1, dil_mass, mass_nl, &nl.
type(),
68 const double dil_mom =
pCM(cms_energy, dil_mass, mass_nl);
74 FourVector dil_4mom(std::sqrt(dil_mass * dil_mass + dil_mom * dil_mom),
79 const double mom_lep =
pCM(dil_mass, mass_l1, mass_l2);
85 l2.set_4momentum(mass_l2, -phitheta.
threevec() * mom_lep);
90 l2.boost_momentum(-velocity_CM);
FourVector total_momentum_of_outgoing_particles() const
Calculate the total kinetic momentum of the outgoing particles.
ParticleList outgoing_particles_
Initially this stores only the PDG codes of final-state particles.
ParticleList incoming_particles_
List with data of incoming particles.
Angles provides a common interface for generating directions: i.e., two angles that should be interpr...
ThreeVector threevec() const
void distribute_isotropically()
Populate the object with a new direction.
void sample_manybody_phasespace() override
Generates momenta of outgoing dileptons (for Dalitz dilepton decays only).
double branching_
An additional branching factor that is multiplied with the shining weight.
DecayActionDilepton(const ParticleData &p, double time_of_execution, double shining_weight)
Construct a DecayActionDilepton from a particle p.
DecayAction is a special action which takes one single particle in the initial state and makes it dec...
DecayBranchList decay_channels_
List of possible decays.
The FourVector class holds relevant values in Minkowski spacetime with (+, −, −, −) metric signature.
double abs() const
calculate the lorentz invariant absolute value
ThreeVector velocity() const
Get the velocity (3-vector divided by zero component).
ParticleData contains the dynamic information of a certain particle.
void set_4momentum(const FourVector &momentum_vector)
Set the particle's 4-momentum directly.
const ParticleType & type() const
Get the type of the particle.
void boost_momentum(const ThreeVector &v)
Apply a Lorentz-boost to only the momentum.
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...
The ThreeVector class represents a physical three-vector with the components .
T pCM(const T sqrts, const T mass_a, const T mass_b) noexcept