MARLEY (Model of Argon Reaction Low Energy Yields) v2.0.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
Loading...
Searching...
No Matches
marley::ExitChannel Class Referenceabstract

Abstract base class for compound nucleus de-excitation channels. More...

#include <ExitChannel.hh>

Inheritance diagram for marley::ExitChannel:
marley::ContinuumExitChannel marley::DiscreteExitChannel marley::FragmentExitChannel marley::GammaExitChannel marley::FragmentContinuumExitChannel marley::GammaContinuumExitChannel marley::FragmentDiscreteExitChannel marley::GammaDiscreteExitChannel marley::FragmentContinuumExitChannel marley::FragmentDiscreteExitChannel marley::GammaContinuumExitChannel marley::GammaDiscreteExitChannel

Public Member Functions

 ExitChannel ()=default
 
 ExitChannel (int pdgi, int qi, double Exi, int twoJi, marley::Parity Pi, double rho_i, marley::StructureDatabase &sdb)
 
virtual void do_decay (double &Exf, int &two_Jf, marley::Parity &Pf, const std::shared_ptr< HepMC3::GenParticle > &compound_nucleus, std::shared_ptr< HepMC3::GenParticle > &emitted_particle, std::shared_ptr< HepMC3::GenParticle > &residual_nucleus, int &qIon, marley::Generator &gen) const =0
 Simulates a nuclear decay into this channel.
 
virtual bool emits_fragment () const =0
 Returns true if this channel involves fragment emission or false if it involves gamma-ray emission.
 
virtual int emitted_particle_pdg () const =0
 Returns the PDG code for the particle (gamma-ray or nuclear fragment) emitted by decays into this ExitChannel.
 
virtual int final_nucleus_pdg () const =0
 Returns the PDG code for the final nucleus.
 
virtual bool is_continuum () const =0
 Returns true if this channel accesses the particle-unbound continuum of nuclear levels or false otherwise.
 
double width () const
 Get the total decay width into this channel (MeV)
 

Static Public Member Functions

template<typename It>
static marley::IteratorToPointerMember< It, double > make_width_iterator (It it)
 Convert an iterator that points to an ExitChannel object into an iterator to the ExitChannel's width_ member variable.
 

Protected Member Functions

virtual void compute_total_width ()=0
 
virtual void prepare_products (const std::shared_ptr< HepMC3::GenParticle > &compound_nucleus, std::shared_ptr< HepMC3::GenParticle > &emitted_particle, std::shared_ptr< HepMC3::GenParticle > &residual_nucleus, double Exf, int &qf, marley::Generator &gen) const
 Helper function that prepares Particle objects representing the products of the two-body decay.
 

Protected Attributes

double Exi_
 Initial nuclear excitation energy \( E_x \) (MeV)
 
double one_over_two_pi_rho_i_
 
int pdgi_
 PDG code for the initial nucleus.
 
marley::Parity Pi_
 Initial nuclear parity \( \Pi \).
 
int qi_
 
marley::StructureDatabasesdb_
 StructureDatabase to use in calculations.
 
int twoJi_
 Two times the initial nuclear spin \( J \).
 
double width_
 Total decay width into this channel (MeV)
 

Detailed Description

Abstract base class for compound nucleus de-excitation channels.

Definition at line 36 of file ExitChannel.hh.

Constructor & Destructor Documentation

◆ ExitChannel() [1/2]

marley::ExitChannel::ExitChannel ( )
default
Note
This line keeps old versions (4.9.3) of GCC happy

◆ ExitChannel() [2/2]

marley::ExitChannel::ExitChannel ( int pdgi,
int qi,
double Exi,
int twoJi,
marley::Parity Pi,
double rho_i,
marley::StructureDatabase & sdb )
inline
Parameters
pdgiPDG code for the initial nucleus
qiNet charge (in units of the elementary charge) of the initial atom or ion
ExiInitial nuclear excitation energy \( E_x \) (MeV)
twoJiTwo times the initial nuclear spin \( J \)
PiInitial nuclear parity \( \Pi \)
rho_iInitial nuclear level density \( \rho(E_x, J, \Pi) \) in the vicinity of the initial level (MeV -1). This value will be used to compute an overall normalization factor for decay widths in this exit channel.
sdbReference to the StructureDatabase that will be used in decay width calculations by this ExitChannel object

Definition at line 55 of file ExitChannel.hh.

56 : pdgi_( pdgi ),
57 qi_( qi ), Exi_( Exi ), twoJi_( twoJi ), Pi_( Pi ), sdb_( &sdb )
58 {
59 one_over_two_pi_rho_i_ = std::pow( 2. * marley_utils::pi * rho_i, -1 );
60 }
int twoJi_
Two times the initial nuclear spin .
int pdgi_
PDG code for the initial nucleus.
marley::StructureDatabase * sdb_
StructureDatabase to use in calculations.
marley::Parity Pi_
Initial nuclear parity .
double Exi_
Initial nuclear excitation energy (MeV)

References Exi_, one_over_two_pi_rho_i_, pdgi_, Pi_, qi_, sdb_, and twoJi_.

Member Function Documentation

◆ compute_total_width()

virtual void marley::ExitChannel::compute_total_width ( )
protectedpure virtual

Helper function that initializes the width_ member variable upon construction

Implemented in marley::ContinuumExitChannel, marley::FragmentDiscreteExitChannel, and marley::GammaDiscreteExitChannel.

◆ do_decay()

virtual void marley::ExitChannel::do_decay ( double & Exf,
int & two_Jf,
marley::Parity & Pf,
const std::shared_ptr< HepMC3::GenParticle > & compound_nucleus,
std::shared_ptr< HepMC3::GenParticle > & emitted_particle,
std::shared_ptr< HepMC3::GenParticle > & residual_nucleus,
int & qIon,
marley::Generator & gen ) const
pure virtual

Simulates a nuclear decay into this channel.

Parameters
[out]ExfThe final nuclear excitation energy
[out]two_JfTwo times the final nuclear spin
[out]PfThe final nuclear parity
[in]compound_nucleusParticle object representing the initial nucleus
[out]emitted_particleParticle emitted in the de-excitation
[out]residual_nucleusFinal-state nucleus after particle emission
[out]qIonCharge (in units of the elementary charge) of the final-state nucleus (ion) after particle emission
genGenerator to use for random sampling

Implemented in marley::ContinuumExitChannel, and marley::DiscreteExitChannel.

◆ emits_fragment()

virtual bool marley::ExitChannel::emits_fragment ( ) const
pure virtual

Returns true if this channel involves fragment emission or false if it involves gamma-ray emission.

Implemented in marley::FragmentExitChannel, and marley::GammaExitChannel.

◆ emitted_particle_pdg()

virtual int marley::ExitChannel::emitted_particle_pdg ( ) const
pure virtual

Returns the PDG code for the particle (gamma-ray or nuclear fragment) emitted by decays into this ExitChannel.

Implemented in marley::FragmentExitChannel, and marley::GammaExitChannel.

Referenced by prepare_products().

◆ final_nucleus_pdg()

virtual int marley::ExitChannel::final_nucleus_pdg ( ) const
pure virtual

Returns the PDG code for the final nucleus.

Implemented in marley::FragmentExitChannel, and marley::GammaExitChannel.

Referenced by prepare_products().

◆ is_continuum()

virtual bool marley::ExitChannel::is_continuum ( ) const
pure virtual

Returns true if this channel accesses the particle-unbound continuum of nuclear levels or false otherwise.

Implemented in marley::ContinuumExitChannel, and marley::DiscreteExitChannel.

Referenced by marley::NucleusDecayer::process_event(), and marley::OMPWeightCalculator::weight().

◆ make_width_iterator()

template<typename It>
static marley::IteratorToPointerMember< It, double > marley::ExitChannel::make_width_iterator ( It it)
inlinestatic

Convert an iterator that points to an ExitChannel object into an iterator to the ExitChannel's width_ member variable.

This is used to load a std::discrete_distribution with decay widths for sampling without redundant storage.

Definition at line 96 of file ExitChannel.hh.

97 {
98 return marley::IteratorToPointerMember< It,
99 double >( it, &marley::ExitChannel::width_ );
100 }
double width_
Total decay width into this channel (MeV)

References width_.

Referenced by marley::HauserFeshbachDecay::sample_exit_channel().

◆ prepare_products()

void marley::ExitChannel::prepare_products ( const std::shared_ptr< HepMC3::GenParticle > & compound_nucleus,
std::shared_ptr< HepMC3::GenParticle > & emitted_particle,
std::shared_ptr< HepMC3::GenParticle > & residual_nucleus,
double Exf,
int & qf,
marley::Generator & gen ) const
protectedvirtual

Helper function that prepares Particle objects representing the products of the two-body decay.

Parameters
[out]compound_nucleusParticle object representing the initial nucleus
[out]emitted_particleParticle emitted in the binary decay
[out]residual_nucleusParticle representing the daughter nucleus
[in]ExfExcitation energy of the daughter nucleus
[out]qfFinal ion charge after particle emission
genGenerator to use for random sampling

Definition at line 405 of file ExitChannel.cc.

410{
411 const auto& mt = marley::MassTable::Instance();
412 int ep_pdg = this->emitted_particle_pdg();
413 double ep_mass = mt.get_particle_mass( ep_pdg );
414
415 emitted_particle = marley_hepmc3::make_particle( ep_pdg,
416 marley_hepmc3::NUHEPMC_FINAL_STATE_STATUS, ep_mass );
417
418 // Proton number of the emitted particle
419 int ep_Z = marley_utils::get_particle_Z( ep_pdg );
420
421 // Final ion charge after particle emission
422 qf = qi_ - ep_Z;
423
424 double me = mt.get_particle_mass( marley_utils::ELECTRON );
425 int remnant_pdg = this->final_nucleus_pdg();
426
427 // Approximate the ground state mass of the ion formed when the fragment is
428 // emitted by subtracting qf electron masses from the atomic mass for the
429 // final nuclide.
430 double Mfgs_ion = mt.get_atomic_mass( remnant_pdg ) - qf*me;
431
432 residual_nucleus = marley_hepmc3::make_particle( remnant_pdg,
433 marley_hepmc3::NUHEPMC_INTERMEDIATE_RESIDUE_STATUS, Mfgs_ion + Exf );
434
435 // Now that the PDG codes, masses, and net charges of the binary decay
436 // products have been set, choose a direction for the emitted particle.
437 // TODO: Consider changing this to a more realistic model instead of
438 // isotropic emissions.
439 double cos_theta_emitted_particle
440 = gen.uniform_random_double( -1., 1., true );
441 double phi_emitted_particle
442 = gen.uniform_random_double( 0., marley_utils::two_pi, false );
443
444 // Handle the kinematics calculations for this decay. Load the
445 // final-state particle objects with their full 4-momenta.
446 marley_kinematics::two_body_decay( compound_nucleus, emitted_particle,
447 residual_nucleus, cos_theta_emitted_particle, phi_emitted_particle );
448}
virtual int emitted_particle_pdg() const =0
Returns the PDG code for the particle (gamma-ray or nuclear fragment) emitted by decays into this Exi...
virtual int final_nucleus_pdg() const =0
Returns the PDG code for the final nucleus.
double uniform_random_double(double min, double max, bool inclusive)
Sample a random number uniformly on either [min, max) or [min, max].
Definition Generator.cc:235
static const MassTable & Instance()
Get a const reference to the singleton instance of the MassTable.
Definition MassTable.cc:69

References emitted_particle_pdg(), final_nucleus_pdg(), marley::MassTable::Instance(), qi_, and marley::Generator::uniform_random_double().

Referenced by marley::ContinuumExitChannel::do_decay(), and marley::DiscreteExitChannel::do_decay().

◆ width()

double marley::ExitChannel::width ( ) const
inline

Get the total decay width into this channel (MeV)

Definition at line 103 of file ExitChannel.hh.

103{ return width_; }

References width_.

Member Data Documentation

◆ Exi_

double marley::ExitChannel::Exi_
protected

◆ one_over_two_pi_rho_i_

double marley::ExitChannel::one_over_two_pi_rho_i_
protected

Normalization factor needed so that the decay widths have correct units

This factor is equal to \( \left[ 2\pi\rho(E_x, J, \Pi) \right]^{-1} \) where \(\rho\) is the initial nuclear level density (MeV -1) in the vicinity of the initial nuclear level. This level has excitation energy \( E_x \), total spin \( J \), and parity \( \Pi \).

Definition at line 157 of file ExitChannel.hh.

Referenced by ExitChannel(), marley::FragmentDiscreteExitChannel::compute_total_width(), and marley::GammaDiscreteExitChannel::compute_total_width().

◆ pdgi_

◆ Pi_

marley::Parity marley::ExitChannel::Pi_
protected

Initial nuclear parity \( \Pi \).

Definition at line 148 of file ExitChannel.hh.

Referenced by ExitChannel(), and marley::FragmentDiscreteExitChannel::compute_total_width().

◆ qi_

int marley::ExitChannel::qi_
protected

Net charge (in units of the elementary charge) of the initial atom or ion

Definition at line 139 of file ExitChannel.hh.

Referenced by ExitChannel(), and prepare_products().

◆ sdb_

◆ twoJi_

int marley::ExitChannel::twoJi_
protected

Two times the initial nuclear spin \( J \).

Definition at line 145 of file ExitChannel.hh.

Referenced by ExitChannel(), marley::FragmentDiscreteExitChannel::compute_total_width(), and marley::GammaDiscreteExitChannel::compute_total_width().

◆ width_

double marley::ExitChannel::width_
protected

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