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.