MARLEY (Model of Argon Reaction Low Energy Yields)  v1.2.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
marley::NuclearReaction Class Reference

A neutrino-nucleus reaction. More...

#include <NuclearReaction.hh>

Inheritance diagram for marley::NuclearReaction:
marley::Reaction

Public Types

enum class  CoulombMode {
  NO_CORRECTION , FERMI_FUNCTION , EMA , MEMA ,
  FERMI_AND_EMA , FERMI_AND_MEMA
}
 Enumerated type used to set the method for handling Coulomb corrections for CC nuclear reactions.
 
- Public Types inherited from marley::Reaction
enum  ProcessType { NeutrinoCC = 0 , AntiNeutrinoCC = 1 , NC = 2 , NuElectronElastic = 3 }
 Enumerated type describing the kind of scattering process represented by a Reaction. More...
 

Public Member Functions

 NuclearReaction (ProcessType pt, int pdg_a, int pdg_b, int pdg_c, int pdg_d, int q_d, const std::shared_ptr< std::vector< marley::MatrixElement > > &mat_els)
 
virtual marley::TargetAtom atomic_target () const override final
 Returns the target atom involved in this reaction. More...
 
double coulomb_correction_factor (double beta_rel_cd) const
 
CoulombMode coulomb_mode () const
 
virtual marley::Event create_event (int particle_id_a, double KEa, marley::Generator &gen) const override
 Produces a two-two scattering Event that proceeds via this reaction. More...
 
double diff_xs (const marley::MatrixElement &mat_el, double KEa, double cos_theta_c_cm) const
 Differential cross section \(d\sigma/d\cos\theta_{c}^{\mathrm{CM}}\) (MeV -2) evaluated in the center-of-momentum frame for a transition to a particular final nuclear level. More...
 
virtual double diff_xs (int pdg_a, double KEa, double cos_theta_c_cm) const override
 Differential cross section \(d\sigma/d\cos\theta_{c}^{\mathrm{CM}}\) (MeV -2) summed over all kinematically-allowed final nuclear levels. More...
 
double ema_factor (double beta_rel_cd, bool &ok, bool modified_ema) const
 
double fermi_function (double beta_c) const
 Compute the Fermi function More...
 
const std::vector< marley::MatrixElement > & matrix_elements () const
 Allows access to the owned vector of MatrixElement objects.
 
double max_level_energy (double KEa) const
 Get the maximum possible excitation energy (MeV) of the final-state residue that is kinematically allowed. More...
 
void set_coulomb_mode (CoulombMode mode)
 Set the method for handling Coulomb corrections for this reaction.
 
void set_decay_scheme (marley::DecayScheme *scheme)
 Sets the DecayScheme object to use for sampling excited levels in the residue.
 
double threshold_kinetic_energy () const override
 Get the minimum lab-frame kinetic energy (MeV) of the projectile that allows this reaction to proceed via a transition to the residue's ground state.
 
virtual double total_xs (const marley::MatrixElement &me, double KEa, double &beta_c_cm, bool check_max_E_level=true) const
 Total cross section (MeV -2) for a given final nuclear level. More...
 
virtual double total_xs (int pdg_a, double KEa) const override
 Total reaction cross section (MeV -2), including all kinematically-allowed final nuclear levels. More...
 
double weak_nuclear_charge () const
 
- Public Member Functions inherited from marley::Reaction
const std::string & get_description () const
 Get a string that contains the formula for this reaction.
 
int pdg_a () const
 Get the projectile PDG code.
 
int pdg_b () const
 Get the target PDG code.
 
ProcessType process_type () const
 Get the process type for this reaction.
 

Static Public Member Functions

static CoulombMode coulomb_mode_from_string (const std::string &str)
 Convert a string to a CoulombMode value.
 
static std::string string_from_coulomb_mode (CoulombMode mode)
 Convert a CoulombMode value to a string.
 
- Static Public Member Functions inherited from marley::Reaction
static int get_ejectile_pdg (int pdg_a, ProcessType proc_type)
 
static std::vector< std::unique_ptr< Reaction > > load_from_file (const std::string &filename, marley::StructureDatabase &db)
 
static std::string proc_type_to_string (const ProcessType &pt)
 

Protected Member Functions

virtual marley::Event make_event_object (double KEa, double pc_cm, double cos_theta_c_cm, double phi_c_cm, double Ec_cm, double Ed_cm, double E_level, int twoJ, const marley::Parity &P) const override
 Helper function used by NuclearReaction::create_event()
 
double sample_cos_theta_c_cm (const marley::MatrixElement &matrix_el, double beta_c_cm, marley::Generator &gen) const
 Samples a polar angle cosine for the ejectile using the relevant portion of the reaction nuclear matrix element. More...
 
void set_description ()
 Creates the description string based on the PDG code values for the initial and final particles.
 
double summed_xs_helper (int pdg_a, double KEa, double cos_theta_c_cm, std::vector< double > *level_xsecs, bool differential) const
 
- Protected Member Functions inherited from marley::Reaction
void two_two_scatter (double KEa, double &s, double &Ec_cm, double &pc_cm, double &Ed_cm) const
 Helper function that handles CM frame kinematics for the reaction. More...
 

Protected Attributes

int Af_
 Residue mass number.
 
int Ai_
 Target mass number.
 
CoulombMode coulomb_mode_ = CoulombMode::FERMI_AND_MEMA
 The method to use when computing Coulomb corrections (if needed) for this reaction.
 
double KEa_threshold_
 Lab-frame kinetic energy of the projectile at threshold for this reaction (i.e., the residue is produced in its ground state, and all final-state particles are at rest in the CM frame)
 
std::shared_ptr< std::vector< marley::MatrixElement > > matrix_elements_
 Matrix elements representing all of the possible nuclear transitions that may be caused by this reaction.
 
double md_gs_
 Ground state mass (MeV) of the residue.
 
int q_d_
 Net charge of the residue (in units of the proton charge) following this reaction.
 
int Zf_
 Residue atomic number.
 
int Zi_
 Target atomic number.
 
- Protected Attributes inherited from marley::Reaction
std::string description_
 String that contains a formula describing the reaction.
 
double ma_
 Projectile mass (MeV)
 
double mb_
 Target mass (MeV)
 
double mc_
 Ejectile mass (MeV)
 
double md_
 Residue mass (MeV)
 
int pdg_a_
 PDG code for the projectile.
 
int pdg_b_
 PDG code for the target.
 
int pdg_c_
 PDG code for the ejectile.
 
int pdg_d_
 PDG code for the residue.
 
ProcessType process_type_
 Type of scattering process (CC, NC) represented by this reaction.
 

Static Protected Attributes

static std::map< CoulombMode, std::string > coulomb_mode_string_map_
 

Additional Inherited Members

- Static Protected Member Functions inherited from marley::Reaction
static const std::vector< int > & get_projectiles (ProcessType proc_type)
 

Detailed Description

A neutrino-nucleus reaction.

Constructor & Destructor Documentation

◆ NuclearReaction()

marley::NuclearReaction::NuclearReaction ( ProcessType  pt,
int  pdg_a,
int  pdg_b,
int  pdg_c,
int  pdg_d,
int  q_d,
const std::shared_ptr< std::vector< marley::MatrixElement > > &  mat_els 
)
Parameters
ptType of scattering process represented by this Reaction
pdg_aProjectile PDG code
pdg_bTarget PDG code
pdg_cEjectile PDG code
pdg_dResidue PDG code
q_dCharge of the residue after the prompt 2->2 scatter represented by this NuclearReaction object
mat_elsA vector of MatrixElement objects that should be used to compute cross sections for this NuclearReaction

Member Function Documentation

◆ atomic_target()

virtual marley::TargetAtom marley::NuclearReaction::atomic_target ( ) const
inlinefinaloverridevirtual

Returns the target atom involved in this reaction.

For nuclear reactions, this is identical to the pdg_b_ member variable. For electron reactions, it is distinct (since particle b is the initial struck electron).

Implements marley::Reaction.

◆ coulomb_correction_factor()

double marley::NuclearReaction::coulomb_correction_factor ( double  beta_rel_cd) const

Computes an approximate correction factor to account for effects of the Coulomb potential when calculating cross sections

Parameters
beta_rel_cdThe relative speed of the final particles c and d (dimensionless)

◆ coulomb_mode()

CoulombMode marley::NuclearReaction::coulomb_mode ( ) const
inline

Return the method used by this reaction for handling Coulomb corrections

◆ create_event()

marley::Event marley::NuclearReaction::create_event ( int  particle_id_a,
double  KEa,
marley::Generator gen 
) const
overridevirtual

Produces a two-two scattering Event that proceeds via this reaction.

Todo:
Add more error checks to NuclearReaction::create_event as necessary
Todo:
Revisit the equipartition assumption made here in favor of something better motivated.

Implements marley::Reaction.

◆ diff_xs() [1/2]

double marley::NuclearReaction::diff_xs ( const marley::MatrixElement mat_el,
double  KEa,
double  cos_theta_c_cm 
) const

Differential cross section \(d\sigma/d\cos\theta_{c}^{\mathrm{CM}}\) (MeV -2) evaluated in the center-of-momentum frame for a transition to a particular final nuclear level.

Parameters
mat_elMatrixElement object describing the transition to the final nuclear level
KEaLab-frame projectile kinetic energy (MeV)
cos_theta_c_cmEjectile scattering cosine as measured in the CM frame

◆ diff_xs() [2/2]

double marley::NuclearReaction::diff_xs ( int  pdg_a,
double  KEa,
double  cos_theta_c_cm 
) const
overridevirtual

Differential cross section \(d\sigma/d\cos\theta_{c}^{\mathrm{CM}}\) (MeV -2) summed over all kinematically-allowed final nuclear levels.

Parameters
pdg_aPDG code for the projectile
KEaLab-frame kinetic energy (MeV) of the projectile
cos_theta_c_cmCM frame scattering cosine of the ejectile
Note
This function returns 0. if pdg_a != pdg_a_.

Implements marley::Reaction.

◆ ema_factor()

double marley::NuclearReaction::ema_factor ( double  beta_rel_cd,
bool &  ok,
bool  modified_ema 
) const

Computes a Coulomb correction factor according to the effective momentum approximation. See J. Engel, Phys. Rev. C 57, 2004 (1998)

Parameters
beta_rel_cdThe relative speed of the final particles c and d (dimensionless)
[out]okFlag that is set to false if subtracting the Coulomb potential pulls the event below threshold
modified_emaIf true, the modified EMA correction factor will be returned instead of that specified by the original EMA

◆ fermi_function()

double marley::NuclearReaction::fermi_function ( double  beta_c) const

Compute the Fermi function

Parameters
beta_cDimensionless speed of the ejectile

◆ max_level_energy()

double marley::NuclearReaction::max_level_energy ( double  KEa) const

Get the maximum possible excitation energy (MeV) of the final-state residue that is kinematically allowed.

Parameters
KEaProjectile lab-frame kinetic energy (MeV)

◆ sample_cos_theta_c_cm()

double marley::NuclearReaction::sample_cos_theta_c_cm ( const marley::MatrixElement matrix_el,
double  beta_c_cm,
marley::Generator gen 
) const
protected

Samples a polar angle cosine for the ejectile using the relevant portion of the reaction nuclear matrix element.

Parameters
m_typeInteger representing the type of transition (0 = Fermi, 1 = Gamow-Teller)
beta_c_cmDimensionless speed of the ejectile in the CM frame
genReference to the Generator to use for random sampling

◆ summed_xs_helper()

double marley::NuclearReaction::summed_xs_helper ( int  pdg_a,
double  KEa,
double  cos_theta_c_cm,
std::vector< double > *  level_xsecs,
bool  differential 
) const
protected

Helper function for total_xs and summed_diff_xs()

Parameters
pdg_aPDG code for the projectile
KEaLab-frame projectile kinetic energy (MeV)
cos_theta_c_cmCM frame scattering cosine for the ejectile
level_xsecsIf this pointer is not nullptr, then the std::vector<double> that it points to will be cleared and loaded with the partial cross sections to each individual nuclear level included in the sum. This feature is helpful when computing weights for sampling a nuclear transition in create_event().
differentialWhether the total cross section (false) or the differential cross section (true, \(d\sigma/d\cos\theta_{c}^{\mathrm{CM}}\)) should be summed over all kinematically accessible nuclear levels by this function
Returns
The requested cross section (MeV -2)
Todo:
Consider whether you should use an exception if pdg_a != pdg_a_

◆ total_xs() [1/2]

double marley::NuclearReaction::total_xs ( const marley::MatrixElement me,
double  KEa,
double &  beta_c_cm,
bool  check_max_E_level = true 
) const
virtual

Total cross section (MeV -2) for a given final nuclear level.

Parameters
meMatrixElement object describing the transition to the final nuclear level
KEaLab-frame projectile kinetic energy (MeV)
[out]beta_c_cmAfter this function is called, this variable will contain the (dimensionless) speed of the ejectile as measured in the center of momentum frame
check_max_E_levelWhether to check the reaction threshold via a call to max_level_energy(). If this argument is set to false, then the check will be skipped.

◆ total_xs() [2/2]

double marley::NuclearReaction::total_xs ( int  pdg_a,
double  KEa 
) const
overridevirtual

Total reaction cross section (MeV -2), including all kinematically-allowed final nuclear levels.

Parameters
pdg_aPDG code for the projectile
KEaLab-frame kinetic energy (MeV) of the projectile
Returns
Reaction total cross section (MeV -2)
Note
This function returns 0. if pdg_a != pdg_a_.

Implements marley::Reaction.

◆ weak_nuclear_charge()

double marley::NuclearReaction::weak_nuclear_charge ( ) const

Computes the weak nuclear charge \( Q_W = N - (1 - 4\sin^2\theta_W)Z \) for the target nucleus

In the expression above, \( N \) ( \(Z\)) is the neutron (proton) number of the target nucleus and \( \theta_W \) is the weak mixing angle.

Member Data Documentation

◆ coulomb_mode_string_map_

std::map< CMode, std::string > marley::NuclearReaction::coulomb_mode_string_map_
staticprotected
Initial value:
=
{
{ CMode::NO_CORRECTION, "none" },
{ CMode::FERMI_FUNCTION, "Fermi" },
{ CMode::EMA, "EMA" },
{ CMode::MEMA, "MEMA" },
{ CMode::FERMI_AND_EMA, "Fermi-EMA" },
{ CMode::FERMI_AND_MEMA, "Fermi-MEMA" },
}

Helper map used by the methods to convert a CoulombMode value to and from a std::string


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