1#ifndef __JAANET__JEVTCATEGORYMAP__
2#define __JAANET__JEVTCATEGORYMAP__
29#include "JAAnet/JFluxDictionary.hh"
53 public std::map<JEvtCategoryHelper, T>
95 template<
class ...Args>
98 const Args& ...args) :
101 insert(category, value, args...);
114 map_type::insert(std::make_pair(category, value));
125 template<
class ...Args>
154 public std::map<JEvtCategoryHelper, JEvtWeightFactorProduct>,
155 public JClonable<JEvtWeightFactor, JEvtCategoryMap<JEvtWeightFactorProduct> >
212 template<
class ...Args>
216 const Args& ...args) :
220 insert(category, factor, args...);
247 template<
class ...Args>
250 const Args& ...args) :
254 insert(category, factor, args...);
269 if (i != this->end()) {
270 i->second.join(product);
272 map_type::insert(std::make_pair(category, product));
288 if (i == this->end()) {
292 map_type::insert(std::make_pair(category, product));
296 i->second.push_back(factor);
308 template<
class ...Args>
326 for (
const_iterator i =
object.cbegin(); i !=
object.cend(); ++i) {
330 if (j != this->end()) {
331 j->second.join(i->second);
333 this->
insert(j->first, j->second);
351 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
352 if (i->first.match(evt)) {
353 return i->second.getFactor(evt);
357 THROW(
JValueOutOfRange,
"JEvtCategoryMap<JEvtWeightFactorHelper>::getFactor(): No event-weight factor for given event.");
368 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
369 if (!i->second.is_valid()) {
return false; }
404 std::istream&
read(std::istream& in)
override final
411 if (getFileStatus(is.str().c_str())) {
415 for (
JToken<
';'> token1, token2; is >> token1 >> token2; ) {
417 istringstream iss1(token1);
423 istringstream iss2(token2);
431 for (JEvtCategorySet::const_iterator i = categories.cbegin(); i != categories.cend(); ++i) {
432 this->
insert(*i, factors);
447 std::ostream&
write(std::ostream& out)
const override final
470 template<
class JEvtCategoryMap_type>
478 for (
typename map_type::const_iterator i =
map.cbegin(); i !=
map.cend(); ++i) {
480 const int index = 1 + distance(map.cbegin(), i);
482 const string key = MAKE_STRING(
"category" << index);
484 JProperties properties1 = i->first .getProperties();
485 JProperties properties2 = i->second.getProperties();
487 (*this)[key] = properties1.join(properties2);
513 public std::map<JEvtCategoryHelper, JFluxHelper>,
514 public JClonable<JFlux, JEvtCategoryMap<JFluxHelper> >
572 template<
class ...Args>
576 const Args& ...args) :
580 insert(category, factor, args...);
607 template<
class ...Args>
610 const Args& ...args) :
626 map_type::insert(std::make_pair(category,
flux));
637 template<
class ...Args>
657 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
658 if (i->first.match(evt)) {
659 return i->second.getFactor(evt);
663 THROW(
JValueOutOfRange,
"JEvtCategoryMap<JFluxHelper>::getFactor(): No flux factor for given event.");
674 for (
typename map_type::const_iterator i = this->cbegin(); i != this->cend(); ++i) {
675 if (!(i->second.is_valid())) {
return false; }
710 std::istream&
read(std::istream& in)
override final
715 static const JFluxDictionary dictionary(oscProb);
719 if (getFileStatus(is.str().c_str())) {
723 for (
JToken<
';'> token1, token2; is >> token1 >> token2; ) {
725 istringstream iss1(token1);
731 istringstream iss2(token2);
735 if (iss2 >> fluxID) {
737 JFluxHelper helper(dictionary.at(fluxID).getFlux());
744 for (JEvtCategorySet::const_iterator i = categories.cbegin(); i != categories.cend(); ++i) {
761 std::ostream&
write(std::ostream& out)
const override final
784 template<
class JEvtCategoryMap_type>
792 for (
typename map_type::const_iterator i =
map.cbegin(); i !=
map.cend(); ++i) {
794 const int index = 1 + distance(map.cbegin(), i);
796 const string key = MAKE_STRING(
"category" << index);
798 JProperties sub1 = i->first .getProperties();
799 JProperties sub2 = i->second.getProperties();
801 (*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.
map_type::const_iterator const_iterator
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.
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.
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).
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.
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.
Template class for object cloning.
Helper class for oscillation probabilities.