1#ifndef __JAANET__JEVTCATEGORYMAP__
2#define __JAANET__JEVTCATEGORYMAP__
30#include "JAAnet/JFluxDictionary.hh"
56 public std::map<JEvtCategoryHelper, T>
98 template<
class ...Args>
101 const Args& ...args) :
104 insert(category, value, args...);
117 map_type::insert(std::make_pair(category, value));
128 template<
class ...Args>
169 public std::map<JEvtCategoryHelper, JEvtWeightFactorProduct>,
170 public JClonable<JEvtWeightFactor, JEvtCategoryMap<JEvtWeightFactorProduct> >
228 template<
class ...Args>
232 const Args& ...args) :
236 insert(category, factor, args...);
263 template<
class ...Args>
266 const Args& ...args) :
270 insert(category, factor, args...);
285 if (i != this->end()) {
286 i->second.join(product);
288 map_type::insert(std::make_pair(category, product));
304 if (i == this->end()) {
308 map_type::insert(std::make_pair(category, product));
312 i->second.push_back(factor);
324 template<
class ...Args>
342 for (
const_iterator i =
object.cbegin(); i !=
object.cend(); ++i) {
346 if (j != this->end()) {
347 j->second.join(i->second);
349 this->
insert(j->first, j->second);
382 this->oscProb = oscProb;
384 for (
iterator i = this->begin(); i != this->end(); ++i) {
385 n += i->second.setOscProb(oscProb);
392 THROW(
JNullPointerException,
"JEvtCategoryMap<JFluxHelper>::setOscProb(): Given oscillation probability function is invalid.");
407 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
408 if (i->first.match(evt)) {
409 return i->second.getFactor(evt);
413 THROW(
JValueOutOfRange,
"JEvtCategoryMap<JEvtWeightFactorHelper>::getFactor(): No event-weight factor for given event.");
424 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
425 if (!i->second.is_valid()) {
return false; }
460 std::istream&
read(std::istream& in)
override final
465 streampos pos = in.tellg();
472 if (getFileStatus(buffer.c_str())) {
474 ifstream ifs(buffer.c_str());
498 for (
JToken<
';'> token1, token2; in >> token1 >> token2; ) {
500 istringstream iss1(token1);
506 istringstream iss2(token2);
514 for (JEvtCategorySet::const_iterator i = categories.cbegin(); i != categories.cend(); ++i) {
515 this->
insert(*i, factors);
530 std::ostream&
write(std::ostream& out)
const override final
550 template<
class JEvtCategoryMap_type>
558 for (
typename map_type::const_iterator i =
map.cbegin(); i !=
map.cend(); ++i) {
560 const int index = 1 + distance(map.cbegin(), i);
562 const string key = MAKE_STRING(
"category" << index);
564 JProperties properties1 = i->first .getProperties(eqpars);
565 JProperties properties2 = i->second.getProperties(eqpars);
567 (*this)[key] = properties1.join(properties2);
608 public std::map<JEvtCategoryHelper, JFluxHelper>,
609 public JClonable<JFlux, JEvtCategoryMap<JFluxHelper> >
667 template<
class ...Args>
671 const Args& ...args) :
675 insert(category, factor, args...);
702 template<
class ...Args>
705 const Args& ...args) :
721 map_type::insert(std::make_pair(category,
flux));
732 template<
class ...Args>
767 this->oscProb = oscProb;
769 for (
iterator i = this->begin(); i != this->end(); ++i) {
783 THROW(
JNullPointerException,
"JEvtCategoryMap<JFluxHelper>::setOscProb(): Given oscillation probability function is invalid.");
798 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
799 if (i->first.match(evt)) {
800 return i->second.getFactor(evt);
804 THROW(
JValueOutOfRange,
"JEvtCategoryMap<JFluxHelper>::getFactor(): No flux factor for given event.");
815 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
816 if (!(i->second.is_valid())) {
return false; }
851 std::istream&
read(std::istream& in)
override final
856 static const JFluxDictionary dictionary(oscProb);
858 streampos pos = in.tellg();
865 if (getFileStatus(buffer.c_str())) {
867 ifstream ifs(buffer.c_str());
891 for (
JToken<
';'> token1, token2; in >> token1 >> token2; ) {
893 istringstream iss1(token1);
899 istringstream iss2(token2);
903 if (iss2 >> fluxID) {
905 JFluxHelper helper(dictionary.at(fluxID).getFlux());
912 for (JEvtCategorySet::const_iterator i = categories.cbegin(); i != categories.cend(); ++i) {
929 std::ostream&
write(std::ostream& out)
const override final
948 template<
class JEvtCategoryMap_type>
956 for (
typename map_type::const_iterator i =
map.cbegin(); i !=
map.cend(); ++i) {
958 const int index = 1 + distance(map.cbegin(), i);
960 const string key = MAKE_STRING(
"category" << index);
962 JProperties sub1 = i->first .getProperties(eqpars);
963 JProperties sub2 = i->second.getProperties(eqpars);
965 (*this)[key] = sub1.join(sub2);
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Classes and methods for defining muon bundle categories.
Classes and methods for defining neutrino interaction categories.
I/O formatting auxiliaries.
Utility class to parse parameter values.
Template specialisation for a map between event categories and event-weight factor products.
JProperties getProperties(const JEquationParameters &eqpars) override final
Get properties of this class.
bool is_valid() const override final
Check whether this event-weight factor is valid.
JProperties getProperties(const JEquationParameters &eqpars) const override final
Get properties of this class.
JEvtCategoryMap(const JOscProbHelper &oscProb, const JEvtCategoryHelper &category, const JEvtWeightFactorHelper &factor)
Constructor.
JEvtCategoryMap(const JOscProbHelper &oscProb)
Constructor.
JEvtCategoryMap< JEvtWeightFactorProduct > JEvtCategoryMap_t
JEvtCategoryMap_t & join(const JEvtCategoryMap_t &object)
Join this map between event categories and weight factors with a given map between event categories a...
JOscProbHelper oscProb
oscillation probability calculator
std::istream & read(std::istream &in) override final
Read map between event categories and event-weight factors.
double getFactor(const Evt &evt) const override final
Get weight factor of given event.
void insert(const JEvtCategoryHelper &category, const JEvtWeightFactorHelper &factor)
Insert event category.
JEvtCategoryMap()
Default constructor.
map_type::iterator iterator
std::ostream & write(std::ostream &out) const override final
Write event-weight factor to output.
JEvtCategoryMap(const JOscProbHelper &oscProb, const JEvtCategoryHelper &category, const JEvtWeightFactorHelper &factor, const Args &...args)
Constructor.
void insert(const JEvtCategoryHelper &category, const JEvtWeightFactorProduct &product)
Insert pair of an event category and a product of event-weight factors.
JEvtCategoryMap(const JEvtCategoryHelper &category, const JEvtWeightFactorHelper &factor, const Args &...args)
Constructor.
size_t setOscProb(const JOscProbHelper &oscProb)
Set oscillation probability calculator for all compatible event weight factors.
map_type::const_iterator const_iterator
const JOscProbHelper & getOscProb() const
Get oscillation probability calculator.
void insert(const JEvtCategoryHelper &category, const JEvtWeightFactorHelper &factor, const Args &...args)
Insert pairs of event categories and event-weight factors.
std::map< JEvtCategoryHelper, JEvtWeightFactorProduct > map_type
JEvtCategoryMap(const JEvtCategoryHelper &category, const JEvtWeightFactorHelper &factor)
Constructor.
Template specialisation for a map between event categories and flux factors.
JProperties getProperties(const JEquationParameters &eqpars=JEvtWeightFactor::getEquationParameters()) const override final
Get properties of this class.
std::ostream & write(std::ostream &out) const override final
Write event-weight factor to output.
std::istream & read(std::istream &in) override final
Read map between event categories and flux factors.
JEvtCategoryMap(const JEvtCategoryHelper &category, const JFluxHelper &flux, const Args &...args)
Constructor.
bool is_valid() const override final
Check whether this flux factor is valid.
size_t setOscProb(const JOscProbHelper &oscProb)
Set oscillation probability calculator for all compatible flux factors.
void insert(const JEvtCategoryHelper &category, const JFluxHelper &flux, const Args &...args)
Insert pairs of event categories and flux functions.
map_type::iterator iterator
JEvtCategoryMap(const JOscProbHelper &oscProb)
Constructor.
JOscProbHelper oscProb
oscillation probability calculator
std::map< JEvtCategoryHelper, JFluxHelper > map_type
map_type::const_iterator const_iterator
JEvtCategoryMap< JFluxHelper > JEvtCategoryMap_t
JProperties getProperties(const JEquationParameters &eqpars=JEvtWeightFactor::getEquationParameters()) override final
Get properties of this class.
void insert(const JEvtCategoryHelper &category, const JFluxHelper &flux)
Insert pair of an event category and a flux function.
JEvtCategoryMap(const JOscProbHelper &oscProb, const JEvtCategoryHelper &category, const JFluxHelper &factor)
Constructor.
JEvtCategoryMap(const JEvtCategoryHelper &category, const JFluxHelper &flux)
Constructor.
JEvtCategoryMap(const JOscProbHelper &oscProb, const JEvtCategoryHelper &category, const JFluxHelper &factor, const Args &...args)
Constructor.
const JOscProbHelper & getOscProb() const
Get oscillation probability calculator.
JEvtCategoryMap()
Default constructor.
double getFactor(const Evt &evt) const override final
Get weight factor of given event.
Auxiliary class for reading a map of event categories.
void insert(const JEvtCategoryHelper &category, const T &value)
Insert pair of event category and value.
JEvtCategoryMap()
Default constructor.
map_type::const_iterator const_iterator
JEvtCategoryMap< T > JEvtCategoryMap_t
JEvtCategoryMap(const JEvtCategoryHelper &category, const T &value, const Args &...args)
Constructor.
void insert(const JEvtCategoryHelper &category, const T &value, const Args &...args)
Insert pairs of event categories and values.
JEvtCategoryMap(const JEvtCategoryHelper &category, const T &value)
Constructor.
map_type::iterator iterator
std::map< JEvtCategoryHelper, T > map_type
Utility class to parse parameter values.
Simple data structure to support I/O of equations (see class JLANG::JEquation).
Exception for null pointer operation.
Wrapper class around string.
Exception for accessing a value in a collection that is outside of its range.
Template definition of a multi-dimensional oscillation probability interpolation table.
bool read(Vec &v, std::istream &is)
Read a Vec(tor) from a stream.
Extensions to Evt data format.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Helper class for event categories.
Auxiliary class for I/O of map of event categories and weight factors.
JEvtCategoryMapHelper(JEvtCategoryMap_type &map, const JEquationParameters &eqpars)
Constructor.
Auxiliary class for I/O of map of event categories and weight factors.
JEvtCategoryMapHelper(JEvtCategoryMap_type &map, const JEquationParameters &eqpars)
Constructor.
Container for a set of event categories.
Helper class for event-weight factor.
Class for product of event-weight factors.
static JEquationParameters & getEquationParameters()
Get equation parameters.
Helper class for flux function.
JFlux & getFlux() const
Get reference to flux function.
Low-level interface for retrieving the flux corresponding to a given event.
Implementation of oscillated neutrino flux.
void setOscProb(const JOscProbHelper oscProb)
Set oscillation probability calculator.
Template class for object cloning.
Helper class for oscillation probability calculators.