21#include "marley/marley_utils.hh"
22#include "marley/InterpolationGrid.hh"
57 inline virtual int get_pid()
const;
66 virtual double pdf(
double E)
const = 0;
95 static const std::set<int> pids_;
104 marley_utils::ELECTRON_NEUTRINO,
double E = 10.);
106 inline virtual double get_Emax()
const override;
108 inline virtual double get_Emin()
const override;
110 inline virtual double pdf(
double E)
const override;
134 = marley_utils::ELECTRON_NEUTRINO,
double Emin = 0.,
135 double Emax = 50.,
double temp = 3.5,
double eta = 0.);
137 inline virtual double get_Emin()
const override;
139 inline virtual double get_Emax()
const override;
141 virtual double pdf(
double E)
const override;
172 = marley_utils::ELECTRON_NEUTRINO,
double Emin = 0.,
173 double Emax = 50.,
double Emean = 13.,
double alpha = 2.);
175 inline virtual double get_Emin()
const override;
176 inline virtual double get_Emax()
const override;
178 virtual double pdf(
double E)
const override;
213 = marley_utils::ELECTRON_NEUTRINO,
double Emin = 0.,
214 double Emax = 50.,
double Emean = 13.,
double beta = 4.5);
216 inline virtual double get_Emin()
const override;
217 inline virtual double get_Emax()
const override;
219 virtual double pdf(
double E)
const override;
244 = marley_utils::ELECTRON_NEUTRINO,
double Emin = 0.,
double Emax = 50.,
245 std::function<
double(
double)> prob_dens_func
246 = [](
double) ->
double {
return 1.; });
248 inline virtual double get_Emax()
const override;
250 inline virtual double get_Emin()
const override;
252 inline virtual double pdf(
double E)
const override;
258 std::function<double(
double)> probability_density_;
274 = marley_utils::ELECTRON_NEUTRINO);
276 inline virtual double get_Emax()
const override;
278 inline virtual double get_Emin()
const override;
280 virtual double pdf(
double E)
const override;
284 static constexpr double m_mu_ = marley_utils::m_mu
285 * marley_utils::micro_amu;
286 static constexpr double m_mu_to_the_minus_four_
287 = 1. / (m_mu_ * m_mu_ * m_mu_ * m_mu_);
288 static constexpr double Emin_ = 0.;
289 static constexpr double Emax_ = m_mu_ / 2.;
303 = marley_utils::ELECTRON_NEUTRINO);
312 const std::vector<double>& PDs,
int particle_id
313 = marley_utils::ELECTRON_NEUTRINO, Method method
314 = Method::LinearLinear);
316 inline virtual double get_Emax()
const override;
318 inline virtual double get_Emin()
const override;
320 inline virtual double pdf(
double E)
const override;
328 void check_for_errors();
334 {
return (pids_.count(pdg) > 0); }
341 {
if (
energy_ == E)
return 1.;
else return 0.; }
355 if (E < Emin_ || E > Emax_)
return 0.;
356 else return probability_density_(E);
363 {
return grid_.back().first; }
365 {
return grid_.front().first; }
367 {
return grid_.interpolate(E); }
373 const std::vector<double>& prob_densities,
int particle_id, Method method)
375 { check_for_errors(); }
double C_
dimensionless normalization constant
AlphaFitNeutrinoSource(int particle_id=marley_utils::ELECTRON_NEUTRINO, double Emin=0., double Emax=50., double Emean=13., double alpha=2.)
double Emin_
minimum neutrino energy (MeV)
virtual double pdf(double E) const override
Probability density function describing the incident neutrino energy distribution.
virtual double get_Emax() const override
Get the maximum neutrino energy (MeV) that can be sampled by this source.
double Emean_
mean neutrino energy
virtual double get_Emin() const override
Get the minimum neutrino energy (MeV) that can be sampled by this source.
double alpha_
dimensionless pinching parameter
virtual double pdf(double E) const override
Probability density function describing the incident neutrino energy distribution.
double C_
dimensionless normalization constant
double alpha_
pinching parameter (stored as alpha = beta - 1)
virtual double get_Emax() const override
Get the maximum neutrino energy (MeV) that can be sampled by this source.
double Emean_
mean neutrino energy
virtual double get_Emin() const override
Get the minimum neutrino energy (MeV) that can be sampled by this source.
double Emin_
minimum neutrino energy (MeV)
BetaFitNeutrinoSource(int particle_id=marley_utils::ELECTRON_NEUTRINO, double Emin=0., double Emax=50., double Emean=13., double beta=4.5)
virtual double get_Emax() const override
Get the maximum neutrino energy (MeV) that can be sampled by this source.
DecayAtRestNeutrinoSource(int particle_id=marley_utils::ELECTRON_NEUTRINO)
virtual double pdf(double E) const override
Probability density function describing the incident neutrino energy distribution.
virtual double get_Emin() const override
Get the minimum neutrino energy (MeV) that can be sampled by this source.
FermiDiracNeutrinoSource(int particle_id=marley_utils::ELECTRON_NEUTRINO, double Emin=0., double Emax=50., double temp=3.5, double eta=0.)
double eta_
dimensionless pinching parameter
double Emin_
minimum neutrino energy (MeV)
virtual double get_Emax() const override
Get the maximum neutrino energy (MeV) that can be sampled by this source.
double C_
normalization constant (MeV2)
double Emax_
maximum neutrino energy (MeV)
virtual double pdf(double E) const override
Probability density function describing the incident neutrino energy distribution.
double temperature_
temperature (MeV)
virtual double get_Emin() const override
Get the minimum neutrino energy (MeV) that can be sampled by this source.
virtual double pdf(double E) const override
Probability density function describing the incident neutrino energy distribution.
virtual double get_Emax() const override
Get the maximum neutrino energy (MeV) that can be sampled by this source.
FunctionNeutrinoSource(int particle_id=marley_utils::ELECTRON_NEUTRINO, double Emin=0., double Emax=50., std::function< double(double)> prob_dens_func=[](double) -> double { return 1.;})
virtual double get_Emin() const override
Get the minimum neutrino energy (MeV) that can be sampled by this source.
The MARLEY Event generator.
virtual double pdf(double E) const override
Probability density function describing the incident neutrino energy distribution.
virtual double get_Emin() const override
Get the minimum neutrino energy (MeV) that can be sampled by this source.
virtual double get_Emax() const override
Get the maximum neutrino energy (MeV) that can be sampled by this source.
GridNeutrinoSource(const Grid &g, int particle_id=marley_utils::ELECTRON_NEUTRINO)
One-dimensional function y(x) defined using a grid of ordered pairs (x,y) and an interpolation rule.
double energy_
neutrino energy (MeV)
virtual double pdf(double E) const override
Probability density function describing the incident neutrino energy distribution.
virtual double get_Emax() const override
Get the maximum neutrino energy (MeV) that can be sampled by this source.
virtual double get_Emin() const override
Get the minimum neutrino energy (MeV) that can be sampled by this source.
MonoNeutrinoSource(int particle_id=marley_utils::ELECTRON_NEUTRINO, double E=10.)
virtual double get_Emax() const =0
Get the maximum neutrino energy (MeV) that can be sampled by this source.
NeutrinoSource(int particle_id)
int pid_
PDG particle ID for the neutrinos produced by this source.
virtual double get_Emin() const =0
Get the minimum neutrino energy (MeV) that can be sampled by this source.
virtual double pdf(double E) const =0
Probability density function describing the incident neutrino energy distribution.
virtual double sample_incident_neutrino(int &pdg, marley::Generator &gen) const
Samples an incident neutrino energy and loads pdg with the PDG code of the appropriate neutrino type.
virtual int get_pid() const
Get the PDG particle ID for the neutrino type produced by this source.
static bool pdg_is_allowed(const int pdg)