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

Gamma emission exit channel that leads to a discrete nuclear level in the final state More...

#include <ExitChannel.hh>

Inheritance diagram for marley::GammaDiscreteExitChannel:
marley::DiscreteExitChannel marley::GammaExitChannel marley::ExitChannel marley::ExitChannel

Public Member Functions

 GammaDiscreteExitChannel (int pdgi, int qi, double Exi, int twoJi, marley::Parity Pi, double rho_i, marley::StructureDatabase &sdb, const marley::Level &flev)
 
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::GammaExitChannel
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::GammaExitChannel
double gamma_energy (double Exf) const
 
marley::GammaStrengthFunctionModel::TransitionType get_transition_type (int mpol, marley::Parity Pf) const
 
- 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)
 

Detailed Description

Gamma emission exit channel that leads to a discrete nuclear level in the final state

Definition at line 381 of file ExitChannel.hh.

Constructor & Destructor Documentation

◆ GammaDiscreteExitChannel()

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

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

Definition at line 389 of file ExitChannel.hh.

391 : ExitChannel( pdgi, qi, Exi, twoJi, Pi,
392 rho_i, sdb ), DiscreteExitChannel( flev ), GammaExitChannel()
393 {
394 this->compute_total_width();
395 }
DiscreteExitChannel(const marley::Level &flev)
virtual void compute_total_width() final override

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

Member Function Documentation

◆ compute_total_width()

void marley::GammaDiscreteExitChannel::compute_total_width ( )
finaloverridevirtual

Helper function that initializes the width_ member variable upon construction

Implements marley::ExitChannel.

Definition at line 172 of file ExitChannel.cc.

172 {
173
174 // Retrieve the gamma strength function model used to compute transmission
175 // coefficients
176 marley::GammaStrengthFunctionModel& gsfm
177 = sdb_->get_gamma_strength_function_model( pdgi_ );
178
179 // Get properties of the final nuclear level
180 double Exf = final_level_.energy();
181 int twoJf = final_level_.twoJ();
182 marley::Parity Pf = final_level_.parity();
183
184 // Initialize the total width to zero, just in case.
185 width_ = 0.;
186
187 if ( Exf >= Exi_ ) {
188 issue_Exf_warning( Exf, Exi_ );
189 return;
190 }
191
192 // Compute the energy of the emitted gamma-ray
193 double E_gamma = this->gamma_energy( Exf );
194
195 // Initialize the multipolarity for the start of the loop.
196 // There is no monopole radiation, so the minimum allowed value is one.
197 int start_mpol = std::max( 1, std::abs(twoJi_ - twoJf) / 2 );
198 int end_mpol = ( twoJi_ + twoJf ) / 2;
199
200 // Sum contributions to the decay width from different multipolarities
201 for ( int mpol = start_mpol; mpol <= end_mpol; ++mpol ) {
202
203 // Use the multipolarity and final-state nuclear parity to determine
204 // whether the current partial width represents an electric or magnetic
205 // transition
206 TrType type = this->get_transition_type( mpol, Pf );
207
208 double TXl = gsfm.transmission_coefficient( type, mpol, E_gamma );
209
210 double term = one_over_two_pi_rho_i_ * TXl;
211
212 // TODO: add caching of terms by Xl pair
213
214 width_ += term;
215 }
216
217 // Guard against numerical issues by capping the total width at zero
218 width_ = std::max( 0., width_ );
219}
const marley::Level & final_level_
Reference to the final-state nuclear level.
int twoJi_
Two times the initial nuclear spin .
int pdgi_
PDG code for the initial nucleus.
double width_
Total decay width into this channel (MeV)
marley::StructureDatabase * sdb_
StructureDatabase to use in calculations.
double Exi_
Initial nuclear excitation energy (MeV)
virtual double transmission_coefficient(TransitionType type, int l, double e_gamma)=0
Returns the gamma-ray transmission coefficient (dimensionless) for the requested gamma energy and mul...

References marley::ExitChannel::Exi_, marley::DiscreteExitChannel::final_level_, marley::ExitChannel::one_over_two_pi_rho_i_, marley::ExitChannel::pdgi_, marley::ExitChannel::sdb_, marley::GammaStrengthFunctionModel::transmission_coefficient(), marley::ExitChannel::twoJi_, and marley::ExitChannel::width_.

Referenced by GammaDiscreteExitChannel().


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