MARLEY (Model of Argon Reaction Low Energy Yields)  v1.2.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
Todo List
Member marley::BackshiftedFermiGasModel::BackshiftedFermiGasModel (int Z, int A)
Add other constructors to the BackshiftedFermiGasModel class to allow the user to set the level density parameters based on local fits
Member marley::BackshiftedFermiGasModel::level_density (double Ex) override

Reconsider method used for handling spin cut-off parameter calculation for U <= Ed.

Replace Ed here with database of local fits taken from RIPL-3 or TALYS

Member marley::ChebyshevInterpolatingFunction::chebyshev_point (size_t j) const
If needed for speed, consider caching the std::cos evaluations used here
Member marley::ChebyshevInterpolatingFunction::ChebyshevInterpolatingFunction (const std::function< double(double)> &func, double x_min, double x_max, size_t N=0)
PRINT WARNING MESSAGE
Member marley::DecayAtRestNeutrinoSource::pdf (double E) const override
Refine the approximate decay-at-rest Michel spectra to use more exact expressions.
Member marley::ElectronReaction::diff_xs (int pdg_a, double KEa, double cos_theta_c_cm) const override
Take into account effects of electron binding energy
Member marley::ElectronReaction::total_xs (int pdg_a, double KEa) const override
Take into account effects of electron binding energy
Class marley::Error
Create an MARLEY exception class hierarchy as needed.
Member marley::Event::write_hepevt (size_t event_num, double flux_avg_tot_xsec, std::ostream &out) const
Alter marley::Event::write_hepevt() so that the user can specify a vertex position 4-vector to use.
Member marley::GammaStrengthFunctionModel::check_multipolarity (int l)
Improve error message
Member marley::Generator::inverse_transform_sample (const std::function< double(double)> &f, double xmin, double xmax, double bisection_tolerance=1e-12)
Remove hard-coded number of points here
Member marley::Integrator::Integrator (size_t num=N_DEFAULT_)

add error check for when num is ridiculously large

add error check for when num == 0 or too small

Member marley::InterpolationGrid< FirstNumericType, SecondNumericType >::InterpolationGrid (const Grid &grid, InterpolationMethod interp_method=InterpolationMethod::LinearLinear, ExtrapolationMethod extrap_method=ExtrapolationMethod::Zero)
Add error checks for the supplied grid
Member marley::KoningDelarocheOpticalModel::optical_model_potential (double r, double fragment_KE_lab, int fragment_pdg, int two_j, int l, int two_s, int target_charge=0) override
TODO: find a better way of doing this!
Member marley::KoningDelarocheOpticalModel::total_cross_section (double fragment_KE_lab, int fragment_pdg, int two_s, size_t l_max, int target_charge=0) override
TODO: find a better way of doing this!
Member marley::NuclearReaction::create_event (int particle_id_a, double KEa, marley::Generator &gen) const override

Add more error checks to NuclearReaction::create_event as necessary

Revisit the equipartition assumption made here in favor of something better motivated.

Member marley::NuclearReaction::summed_xs_helper (int pdg_a, double KEa, double cos_theta_c_cm, std::vector< double > *level_xsecs, bool differential) const
Consider whether you should use an exception if pdg_a != pdg_a_
Member marley::NucleusDecayer::process_event (marley::Event &event, marley::Generator &gen) override
Revisit this
Member marley::Parity::operator int () const
See comments for marley::TargetAtom::operator int(). A similar situation occurs for this function.
Member marley::Particle::charge_
Add error handling for cases where a marley::Particle is constructed with a charge that is inappropriate.
Member marley::Reaction::load_from_file (const std::string &filename, marley::StructureDatabase &db)

Consider implementing a sorting procedure rather than strictly enforcing that energies must be given in ascending order.

Add error handling for parsing problems

This can be done more cleanly via iss = std::istringstream( line ); However, GCC 4 does not include the move constructor for string streams. This was fixed for GCC 5. Change this line after MARLEY drops support for GCC < 5. See https://stackoverflow.com/a/27152585 and https://stackoverflow.com/q/7623650 for more details.

Member marley::StructureDatabase::get_optical_model (int nucleus_pid)
add check for invalid nucleus particle ID value
Member marley::TargetAtom::operator int () const
Make this "constexpr" eventually. There is a bug in GCC before version 7.2 that doesn't respect the C++14 standard. Clang 3.6 correctly recognizes use of "constexpr" for this function as valid. See https://stackoverflow.com/a/36489493 for more details. For now, we'll drop "constexpr" to preserve compatibility with old versions of GCC.
Member marley::TextOutputFile::write_flux_avg_tot_xsec (double avg_tot_xsec) override
Consider other ways of handling this
Class marley::Reaction
Add check that projectile kinetic energy KEa >= 0. for all relevant member functions of Reaction and NuclearReaction