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) :
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) :
247 template<
class ...Args>
250 const Args& ...
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; }
383 return JEvtCategoryMapHelper(*
this, eqpars);
394 return JEvtCategoryMapHelper(*
this, eqpars);
404 std::istream&
read(std::istream& in)
override final
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
461 struct JEvtCategoryMapHelper :
470 template<
class JEvtCategoryMap_type>
478 for (
typename map_type::const_iterator i =
map.cbegin(); i !=
map.cend(); ++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) :
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; }
689 return JEvtCategoryMapHelper(*
this, eqpars);
700 return JEvtCategoryMapHelper(*
this, eqpars);
710 std::istream&
read(std::istream& in)
override final
715 static const JFluxDictionary dictionary(oscProb);
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
775 struct JEvtCategoryMapHelper :
784 template<
class JEvtCategoryMap_type>
792 for (
typename map_type::const_iterator i =
map.cbegin(); i !=
map.cend(); ++i) {
796 const string key =
MAKE_STRING(
"category" << index);
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.
#define MAKE_STRING(A)
Make string.
Utility class to parse parameter values.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
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.
std::map< JEvtCategoryHelper, JEvtWeightFactorProduct > map_type
JEvtCategoryMap(const JOscProbHelper &oscProb)
Constructor.
JEvtCategoryMap_t & join(const JEvtCategoryMap_t &object)
Join this map between event categories and weight factors with a given map between event categories a...
JEvtCategoryMap< JEvtWeightFactorProduct > JEvtCategoryMap_t
JOscProbHelper oscProb
oscillation probability calculator
std::ostream & write(std::ostream &out) const override final
Write event-weight factor to output.
map_type::const_iterator const_iterator
double getFactor(const Evt &evt) const override final
Get weight factor of given event.
std::istream & read(std::istream &in) override final
Read map between event categories and event-weight factors.
map_type::iterator iterator
void insert(const JEvtCategoryHelper &category, const JEvtWeightFactorHelper &factor)
Insert event category.
JEvtCategoryMap()
Default constructor.
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.
void insert(const JEvtCategoryHelper &category, const JEvtWeightFactorHelper &factor, const Args &...args)
Insert pairs of event categories and event-weight factors.
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.
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.
JEvtCategoryMap(const JOscProbHelper &oscProb)
Constructor.
std::map< JEvtCategoryHelper, JFluxHelper > map_type
JOscProbHelper oscProb
oscillation probability calculator
std::istream & read(std::istream &in) override final
Read map between event categories and flux factors.
map_type::const_iterator const_iterator
std::ostream & write(std::ostream &out) const override final
Write event-weight factor to output.
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.
map_type::iterator iterator
JEvtCategoryMap(const JOscProbHelper &oscProb, const JEvtCategoryHelper &category, const JFluxHelper &factor, const Args &...args)
Constructor.
JEvtCategoryMap< JFluxHelper > JEvtCategoryMap_t
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.
map_type::iterator iterator
JEvtCategoryMap()
Default constructor.
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.
std::map< JEvtCategoryHelper, T > map_type
map_type::const_iterator const_iterator
JEvtCategoryMap< T > JEvtCategoryMap_t
Utility class to parse parameter values.
JProperties & join(const JProperties &properties)
Join properties objects.
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.
JProperties & getProperties(T &object, const JEquationParameters ¶meters=JEquationParameters(), const int debug=1)
Get properties of a given object.
bool fail(std::istream &in)
Check for stream state.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
static JStat getFileStatus
Function object for file status.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Helper class for event categories.
JEvtCategoryMapHelper(JEvtCategoryMap_type &map, const JEquationParameters &eqpars)
Constructor.
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.