#ifndef __JOSCPROB__JOSCPROBINTERFACE__ #define __JOSCPROB__JOSCPROBINTERFACE__ #include #include "JLang/JClonable.hh" #include "JLang/JException.hh" #include "JOscProb/JOscChannel.hh" #include "JOscProb/JOscParametersHelper.hh" #include "JOscProb/JBaselineComputerInterface.hh" /** * \author bjung, mdejong */ namespace JOSCPROB {} namespace JPP { using namespace JOSCPROB; } namespace JOSCPROB { using JLANG::JClonable; /** * Low-level interface for oscillation probability calculators. */ class JOscProbInterface : public JBaselineComputerInterface, public JOscParametersHelper, public JClonable { public: typedef JOscParametersHelper JOscParametersHelper_t; typedef typename JOscParametersHelper_t::JOscParameters_t JOscParameters_t; typedef typename JOscParametersHelper_t::JOscParameter_t JOscParameter_t; typedef typename JOscParametersHelper_t::JParameter_t JParameter_t; typedef typename JOscParametersHelper_t::argument_type argument_type; /** * Default constructor. */ JOscProbInterface() {} /** * Virtual destructor. */ virtual ~JOscProbInterface() {} /** * Get oscillation probability for a given oscillation channel. * * \param channel oscillation channel * \param E neutrino energy [GeV] * \param costh cosine zenith angle * \return oscillation probability */ virtual double getP(const JOscChannel& channel, const double E, const double costh) const = 0; /** * Get oscillation probability for a given set of oscillation parameters\n * and a given oscillation channel. * * \param channel oscillation channel * \param parameters oscillation parameters * \param E neutrino energy [GeV] * \param costh cosine zenith angle * \return oscillation probability */ double getP(const JOscParameters_t& parameters, const JOscChannel& channel, const double E, const double costh) const { this->set(parameters); return getP(channel, E, costh); } /** * Get oscillation probability for a given oscillation parameter\n * and a given oscillation channel. * * \param name parameter name * \param value parameter value * \param channel oscillation channel * \param E neutrino energy [GeV] * \param costh cosine zenith angle * \return oscillation probability */ double getP(const std::string& name, const double value, const JOscChannel& channel, const double E, const double costh) const { this->set(name, value); return getP(channel, E, costh); } /** * Get oscillation probability for a given set of oscillation parameters\n * and a given oscillation channel. * * \param name parameter name * \param value parameter value * \param args remaining arguments */ template double getP(const std::string& name, const double value, const Args& ...args) const { this->set(name, value); return getP(args...); } /** * Get oscillation probability for a given oscillation channel. * * \param channel oscillation channel * \param E neutrino energy [GeV] * \param costh cosine zenith angle * \return oscillation probability */ double operator()(const JOscChannel& channel, const double E, const double costh) const { return getP(channel, E, costh); } /** * Get oscillation probability for a given set of oscillation parameters\n * and a given oscillation channel. * * \param channel oscillation channel * \param parameters oscillation parameters * \param E neutrino energy [GeV] * \param costh cosine zenith angle * \return oscillation probability */ double operator()(const JOscParameters_t& parameters, const JOscChannel& channel, const double E, const double costh) const { return getP(parameters, channel, E, costh); } /** * Get oscillation probability for a given oscillation parameter\n * and a given oscillation channel. * * \param name parameter name * \param value parameter value * \param channel oscillation channel * \param E neutrino energy [GeV] * \param costh cosine zenith angle * \return oscillation probability */ double operator()(const std::string& name, const double value, const JOscChannel& channel, const double E, const double costh) const { return getP(name, value, channel, E, costh); } /** * Get oscillation probability for a given set of oscillation parameters\n * and a given oscillation channel. * * \param name parameter name * \param value parameter value * \param args remaining arguments */ template double operator()(const std::string& name, const double value, const Args& ...args) const { return getP(name, value, args...); } }; } #endif