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::FragmentDiscreteExitChannel Class Reference

Fragment emission ExitChannel that leads to a discrete nuclear level in the final state More...

#include <ExitChannel.hh>

Inheritance diagram for marley::FragmentDiscreteExitChannel:
marley::DiscreteExitChannel marley::FragmentExitChannel marley::ExitChannel marley::ExitChannel

Public Member Functions

 FragmentDiscreteExitChannel (int pdgi, int qi, double Exi, int twoJi, marley::Parity Pi, double rho_i, marley::StructureDatabase &sdb, const marley::Level &flev, const marley::Fragment &frag)
 
virtual void compute_total_width () final override
 
- Public Member Functions inherited from marley::DiscreteExitChannel
 DiscreteExitChannel (const marley::Level &flev)
 
virtual void do_decay (double &Ex, int &two_J, marley::Parity &Pi, 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 final override
 Simulates a nuclear decay into this channel.
 
const marley::Levelget_final_level () const
 Get a const reference to the final-state nuclear level.
 
virtual bool is_continuum () const final override
 Returns true if this channel accesses the particle-unbound continuum of nuclear levels or false otherwise.
 
- Public Member Functions inherited from marley::ExitChannel
 ExitChannel ()=default
 
 ExitChannel (int pdgi, int qi, double Exi, int twoJi, marley::Parity Pi, double rho_i, marley::StructureDatabase &sdb)
 
double width () const
 Get the total decay width into this channel (MeV)
 
- Public Member Functions inherited from marley::FragmentExitChannel
 FragmentExitChannel (const marley::Fragment &fragment)
 
virtual bool emits_fragment () const final override
 Returns true if this channel involves fragment emission or false if it involves gamma-ray emission.
 
virtual int emitted_particle_pdg () const final override
 Returns the PDG code for the particle (gamma-ray or nuclear fragment) emitted by decays into this ExitChannel.
 
virtual int final_nucleus_pdg () const final override
 Returns the PDG code for the final nucleus.
 

Additional Inherited Members

- Static Public Member Functions inherited from marley::ExitChannel
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 inherited from marley::ExitChannel
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 Member Functions inherited from marley::FragmentExitChannel
double max_Exf () const
 Helper function that returns that maximum possible excitation energy for the daughter nucleus after emission of the fragment.
 
- Protected Attributes inherited from marley::DiscreteExitChannel
const marley::Levelfinal_level_
 Reference to the final-state nuclear level.
 
- Protected Attributes inherited from marley::ExitChannel
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)
 
- Protected Attributes inherited from marley::FragmentExitChannel
int fragment_pdg_
 PDG code identifying the emitted fragment.
 

Detailed Description

Fragment emission ExitChannel that leads to a discrete nuclear level in the final state

Definition at line 359 of file ExitChannel.hh.

Constructor & Destructor Documentation

◆ FragmentDiscreteExitChannel()

marley::FragmentDiscreteExitChannel::FragmentDiscreteExitChannel ( int pdgi,
int qi,
double Exi,
int twoJi,
marley::Parity Pi,
double rho_i,
marley::StructureDatabase & sdb,
const marley::Level & flev,
const marley::Fragment & frag )
inline

Note
This line keeps old versions (4.9.3) of GCC happy

Definition at line 367 of file ExitChannel.hh.

370 : ExitChannel( pdgi, qi, Exi, twoJi, Pi, rho_i, sdb ),
372 {
373 this->compute_total_width();
374 }
DiscreteExitChannel(const marley::Level &flev)
virtual void compute_total_width() final override
FragmentExitChannel(const marley::Fragment &fragment)

References marley::DiscreteExitChannel::DiscreteExitChannel(), marley::FragmentExitChannel::FragmentExitChannel(), and compute_total_width().

Member Function Documentation

◆ compute_total_width()

void marley::FragmentDiscreteExitChannel::compute_total_width ( )
finaloverridevirtual

Helper function that initializes the width_ member variable upon construction

Implements marley::ExitChannel.

Definition at line 85 of file ExitChannel.cc.

85 {
86
87 int remnant_pdg = this->final_nucleus_pdg();
88 marley::OpticalModel& om = sdb_->get_optical_model( remnant_pdg );
89
90 // Get information about the emitted fragment
91 const marley::Fragment& f = *sdb_->get_fragment( fragment_pdg_ );
92
93 int two_s = f.get_two_s(); // two times the fragment spin
94 marley::Parity Pa = f.get_parity(); // intrinsic parity
95
96 // Maximum possible excitation energy in the daughter nucleus after the
97 // fragment is emitted
98 double Exf_max = this->max_Exf();
99
100 // Excitation energy of the final nuclear level
101 double Exf = final_level_.energy();
102
103 // Initialize the total decay width to zero, just in case
104 width_ = 0.;
105
106 if ( Exf >= Exf_max ) {
107 issue_Exf_warning( Exf, Exf_max );
108 return;
109 }
110
111 // Total kinetic energy in the CM frame immediately after the binary decay
112 double total_KE_CM_frame = Exf_max - Exf;
113
114 int twoJf = final_level_.twoJ();
115 marley::Parity Pf = final_level_.parity();
116
117 for (int two_j = std::abs(twoJi_ - twoJf); two_j <= twoJi_ + twoJf;
118 two_j += 2)
119 {
120 int j_plus_s = (two_j + two_s) / 2;
121
122 // For each new iteration, increment l and flip the overall final
123 // state parity
124 int l = std::abs(two_j - two_s) / 2;
125 bool l_is_odd = l % 2;
126 marley::Parity P_final_state = Pf * Pa * marley::Parity( !l_is_odd );
127 for ( ; l <= j_plus_s; ++l, !P_final_state )
128 {
129 // The current term in the sum only contributes to the total decay
130 // width if parity is conserved
131 if ( Pi_ == P_final_state ) {
132
133 double Tlj = om.transmission_coefficient( total_KE_CM_frame,
134 fragment_pdg_, two_j, l, two_s );
135
136 double partial_width = one_over_two_pi_rho_i_ * Tlj;
137
138 width_ += partial_width;
139
140 // TODO: cache term indexed by l, two_j
141 }
142 }
143 }
144
145 // Guard against numerical issues by capping the total width at zero
146 width_ = std::max( 0., width_ );
147}
const marley::Level & final_level_
Reference to the final-state nuclear level.
int twoJi_
Two times the initial nuclear spin .
double width_
Total decay width into this channel (MeV)
marley::StructureDatabase * sdb_
StructureDatabase to use in calculations.
marley::Parity Pi_
Initial nuclear parity .
int fragment_pdg_
PDG code identifying the emitted fragment.
virtual int final_nucleus_pdg() const final override
Returns the PDG code for the final nucleus.
double max_Exf() const
Helper function that returns that maximum possible excitation energy for the daughter nucleus after e...
int get_two_s() const
Get two times the spin of this fragment.
Definition Fragment.hh:76
marley::Parity get_parity() const
Get the parity of this fragment.
Definition Fragment.hh:79
virtual double transmission_coefficient(double total_KE_CM, int fragment_pdg, int two_j, int l, int two_s, int target_charge=0)=0
Calculate the transmission coefficient for a nuclear fragment.

References marley::DiscreteExitChannel::final_level_, marley::FragmentExitChannel::final_nucleus_pdg(), marley::FragmentExitChannel::fragment_pdg_, marley::Fragment::get_parity(), marley::Fragment::get_two_s(), marley::FragmentExitChannel::max_Exf(), marley::ExitChannel::one_over_two_pi_rho_i_, marley::ExitChannel::Pi_, marley::ExitChannel::sdb_, marley::OpticalModel::transmission_coefficient(), marley::ExitChannel::twoJi_, and marley::ExitChannel::width_.

Referenced by FragmentDiscreteExitChannel().


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