MARLEY (Model of Argon Reaction Low Energy Yields)
v1.2.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
|
A neutrino-nucleus reaction. More...
#include <NuclearReaction.hh>
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. | |
![]() | |
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 |
![]() | |
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 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 |
![]() | |
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. | |
![]() | |
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 const std::vector< int > & | get_projectiles (ProcessType proc_type) |
A neutrino-nucleus reaction.
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 | ||
) |
pt | Type of scattering process represented by this Reaction |
pdg_a | Projectile PDG code |
pdg_b | Target PDG code |
pdg_c | Ejectile PDG code |
pdg_d | Residue PDG code |
q_d | Charge of the residue after the prompt 2->2 scatter represented by this NuclearReaction object |
mat_els | A vector of MatrixElement objects that should be used to compute cross sections for this NuclearReaction |
|
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.
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
beta_rel_cd | The relative speed of the final particles c and d (dimensionless) |
|
inline |
Return the method used by this reaction for handling Coulomb corrections
|
overridevirtual |
Produces a two-two scattering Event that proceeds via this reaction.
Implements marley::Reaction.
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.
mat_el | MatrixElement object describing the transition to the final nuclear level |
KEa | Lab-frame projectile kinetic energy (MeV) |
cos_theta_c_cm | Ejectile scattering cosine as measured in the CM frame |
|
overridevirtual |
Differential cross section \(d\sigma/d\cos\theta_{c}^{\mathrm{CM}}\) (MeV -2) summed over all kinematically-allowed final nuclear levels.
pdg_a | PDG code for the projectile |
KEa | Lab-frame kinetic energy (MeV) of the projectile |
cos_theta_c_cm | CM frame scattering cosine of the ejectile |
Implements marley::Reaction.
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)
beta_rel_cd | The relative speed of the final particles c and d (dimensionless) | |
[out] | ok | Flag that is set to false if subtracting the Coulomb potential pulls the event below threshold |
modified_ema | If true, the modified EMA correction factor will be returned instead of that specified by the original EMA |
double marley::NuclearReaction::fermi_function | ( | double | beta_c | ) | const |
Compute the Fermi function
beta_c | Dimensionless speed of the ejectile |
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.
KEa | Projectile lab-frame kinetic energy (MeV) |
|
protected |
Samples a polar angle cosine for the ejectile using the relevant portion of the reaction nuclear matrix element.
m_type | Integer representing the type of transition (0 = Fermi, 1 = Gamow-Teller) |
beta_c_cm | Dimensionless speed of the ejectile in the CM frame |
gen | Reference to the Generator to use for random sampling |
|
protected |
Helper function for total_xs and summed_diff_xs()
pdg_a | PDG code for the projectile |
KEa | Lab-frame projectile kinetic energy (MeV) |
cos_theta_c_cm | CM frame scattering cosine for the ejectile |
level_xsecs | If 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(). |
differential | Whether 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 |
|
virtual |
Total cross section (MeV -2) for a given final nuclear level.
me | MatrixElement object describing the transition to the final nuclear level | |
KEa | Lab-frame projectile kinetic energy (MeV) | |
[out] | beta_c_cm | After 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_level | Whether 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. |
|
overridevirtual |
Total reaction cross section (MeV -2), including all kinematically-allowed final nuclear levels.
pdg_a | PDG code for the projectile |
KEa | Lab-frame kinetic energy (MeV) of the projectile |
Implements marley::Reaction.
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.
|
staticprotected |
Helper map used by the methods to convert a CoulombMode value to and from a std::string