1#ifndef __JAANET__JEVTCATEGORYMAP__
2#define __JAANET__JEVTCATEGORYMAP__
31#include "JAAnet/JFluxDictionary.hh"
57 public std::map<JEvtCategoryHelper, T>
99 template<
class ...Args>
102 const Args& ...args) :
105 insert(category, value, args...);
118 map_type::insert(std::make_pair(category, value));
129 template<
class ...Args>
175 public std::map<JEvtCategoryHelper, JEvtWeightFactorProduct>,
176 public JClonable<JEvtWeightFactor, JEvtCategoryMap<JEvtWeightFactorProduct> >
234 template<
class ...Args>
238 const Args& ...args) :
242 insert(category, factor, args...);
269 template<
class ...Args>
272 const Args& ...args) :
276 insert(category, factor, args...);
291 if (i != this->end()) {
292 i->second.join(product);
294 map_type::insert(std::make_pair(category, product));
310 if (i == this->end()) {
314 map_type::insert(std::make_pair(category, product));
318 i->second.push_back(factor);
330 template<
class ...Args>
348 for (
const_iterator i =
object.cbegin(); i !=
object.cend(); ++i) {
352 if (j != this->end()) {
353 j->second.join(i->second);
355 this->
insert(j->first, j->second);
388 this->oscProb = oscProb;
390 for (
iterator i = this->begin(); i != this->end(); ++i) {
391 n += i->second.setOscProb(oscProb);
398 THROW(
JNullPointerException,
"JEvtCategoryMap<JEvtWeightFactorHelper>::setOscProb(): Given oscillation probability function is invalid.");
413 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
414 if (i->first.match(evt)) {
415 return i->second.getFactor(evt);
419 THROW(
JValueOutOfRange,
"JEvtCategoryMap<JEvtWeightFactorHelper>::getFactor(): No event-weight factor for given event.");
430 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
431 if (!i->second.is_valid()) {
return false; }
466 std::istream&
read(std::istream& in)
override final
473 if (getFileStatus(is.str().c_str())) {
477 const streampos pos = is.tellg();
478 const ios_base::iostate state = is.rdstate();
485 istringstream iss(token);
493 for (
JToken<
';'> token1, token2; is >> token1 >> token2; ) {
495 istringstream iss1(token1);
501 istringstream iss2(token2);
509 for (JEvtCategorySet::const_iterator i = categories.cbegin(); i != categories.cend(); ++i) {
510 this->
insert(*i, factors);
525 std::ostream&
write(std::ostream& out)
const override final
545 template<
class JEvtCategoryMap_type>
553 for (
typename map_type::const_iterator i =
map.cbegin(); i !=
map.cend(); ++i) {
555 const int index = 1 + distance(map.cbegin(), i);
557 const string key = MAKE_STRING(
"category" << index);
559 JProperties properties1 = i->first .getProperties(eqpars);
560 JProperties properties2 = i->second.getProperties(eqpars);
562 (*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);
860 if (getFileStatus(is.str().c_str())) {
864 const streampos pos = is.tellg();
865 const ios_base::iostate state = is.rdstate();
872 istringstream iss(token);
880 for (
JToken<
';'> token1, token2; is >> token1 >> token2; ) {
882 istringstream iss1(token1);
888 istringstream iss2(token2);
892 if (iss2 >> fluxID) {
901 for (JEvtCategorySet::const_iterator i = categories.cbegin(); i != categories.cend(); ++i) {
918 std::ostream&
write(std::ostream& out)
const override final
937 template<
class JEvtCategoryMap_type>
945 for (
typename map_type::const_iterator i =
map.cbegin(); i !=
map.cend(); ++i) {
947 const int index = 1 + distance(map.cbegin(), i);
949 const string key = MAKE_STRING(
"category" << index);
951 JProperties sub1 = i->first .getProperties(eqpars);
952 JProperties sub2 = i->second.getProperties(eqpars);
954 (*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 STL stringstream class to facilitate optional loading of data from file.
void load()
Load data from file with name corresponding to current contents.
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.
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.