Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Static Private Member Functions | Private Attributes | List of all members
JAANET::JEvtWeightHelper Struct Reference

Helper class for event weighing. More...

#include <JEvtWeightHelper.hh>

Inheritance diagram for JAANET::JEvtWeightHelper:
JAANET::JHead Head TObject std::map< std::string, std::string > JSUPPORT::JEvtWeightFileScanner< JFileScanner_t >

Public Types

typedef std::shared_ptr< JEvtWeightpointer_type
 

Public Member Functions

 JEvtWeightHelper ()
 Default constructor. More...
 
 JEvtWeightHelper (const JEvtWeight &weighter)
 Constructor. More...
 
const char *const getName () const
 Get name. More...
 
void configure (const JEvtWeight &weighter)
 Configuration. More...
 
bool check (const JHead &header) const
 Check if a given header is consistent with this event weighter. More...
 
JEvtWeightgetEvtWeighter () const
 Get reference to event-weighter. More...
 
void add (const JHead &header)
 Add header. More...
 
double getWeight (const Evt &evt) const
 Get weight of given event. More...
 
double getNormalisation () const
 Get event-weight normalisation. More...
 
double getNormalisation (const Evt &evt) const
 Get event-weight normalisation. More...
 
Vec coord_origin () const
 Get coordinate origin. More...
 
const JHeadgetHeader () const
 Get header. More...
 
JHeadgetHeader ()
 Get header. More...
 
void setHeader (const JHead &header)
 Set header. More...
 
void createUUID ()
 Create UUID if not already set. More...
 
template<class T >
bool is_valid (T JHead::*pd) const
 Check validity of given data member in JHead. More...
 
template<class T >
const_iterator pull (T JHead::*pd) const
 Pull given data member from Head. More...
 
template<class T >
iterator pull (T JHead::*pd)
 Pull given data member from Head. More...
 
template<class T >
void push (T JHead::*pd)
 Push given data member to Head. More...
 
void push ()
 Push all data members to Head. More...
 
template<class T >
void erase (T JHead::*pd)
 Reset and remove given data member from Head. More...
 
JHead getMatch (const JHead &header) const
 Get matching fields. More...
 
size_t getNumberOfMatches (const JHead &header) const
 Get number of matching fields. More...
 
bool match (const JHead &header) const
 Test match of headers. More...
 
bool less (const JHead &header) const
 Comparison of headers. More...
 
std::istream & read (std::istream &in)
 Read header from input. More...
 
std::ostream & write (std::ostream &out) const
 Write header to output. More...
 
std::ostream & print (std::ostream &out) const
 Print header to output. More...
 
 ClassDef (JHead, 5)
 
 ClassDef (Head, 2)
 
bool have_line (std::string key) const
 Check availability of data with the given key. More...
 
const std::string & get_line (std::string key) const
 Get data with the given key. More...
 
std::string & get_line (std::string key)
 Get data with the given key. More...
 
std::vector< std::string > matching_keys (const std::string &tag) const
 In case of duplicate keys, they are internally stored in the map with a suffix "_n". More...
 
std::vector< std::string > get_lines (const std::string &tag) const
 Get all data compatible with the given key. More...
 
std::string set_line (std::string tag, std::string line, bool ensure_unique=true)
 Set data with the given tag. More...
 
std::string get_field (std::string key, int idx) const
 Get data with the given key at given index. More...
 
std::string get_field (std::string key, std::string field) const
 Get data with the given key at given field. More...
 
int get_index_of_field (std::string key, std::string field) const
 Get index of data with the given key at given field. More...
 
void set_field (std::string key, std::string field, std::string value)
 Set data with the given key at given field. More...
 
double ngen () const
 Get the number of generated events needed for computing event rates. More...
 
double daq_livetime () const
 Get the the live time provided by the DAQ sytstem (=number of processed timeslices * frametime). More...
 
double mc_livetime () const
 Get the Monte Carlo live time. More...
 
Vec translate () const
 Get coordinate translation. More...
 

Static Public Member Functions

template<class T >
static bool is_valid (const T &object)
 Check validity of given data member in JHead. More...
 
static const size_t getMaximumNumberOfMatches ()
 Get maximum number of matching header fields. More...
 
static JLANG::JEquationParametersgetEquationParameters ()
 Get equation parameters corresponding to Monte Carlo ASCII format, i.e: More...
 
static void setEquationParameters (const JLANG::JEquationParameters &equation)
 Set equation parameters. More...
 
static const std::map< std::string, std::vector< std::string > > & _hdr_dict ()
 Get internal description of the known lines in header. More...
 
static void actionAtFileOpen (int version)
 Action method at file open. More...
 

Public Attributes

JAANET::start_run start_run
 
JUUID UUID
 
JAANET::XSecFile XSecFile
 
JAANET::drawing drawing
 
std::vector< JAANET::detectordetector
 
JAANET::muon_desc_file muon_desc_file
 
JAANET::target target
 
std::vector< JAANET::physicsphysics
 
std::vector< JAANET::simulsimul
 
JAANET::calibration calibration
 
JAANET::cut_primary cut_primary
 
JAANET::cut_seamuon cut_seamuon
 
JAANET::cut_in cut_in
 
JAANET::cut_nu cut_nu
 
JAANET::spectrum spectrum
 
JAANET::can can
 
JAANET::fixedcan fixedcan
 
JAANET::genvol genvol
 
JAANET::coord_origin coord_origin
 
JAANET::genhencut genhencut
 
JAANET::norma norma
 
JAANET::livetime livetime
 
JAANET::seabottom seabottom
 
JAANET::depth depth
 
JAANET::DAQ DAQ
 
JAANET::K40 K40
 
JAANET::tgen tgen
 
JAANET::time_interval time_interval
 
JAANET::primary primary
 
std::vector< JAANET::fluxflux
 
JAANET::end_event end_event
 

Static Public Attributes

static int ROOT_IO_VERSION = -1
 Streamer version as obtained from ROOT file. More...
 

Static Private Member Functions

template<class T >
static bool match (const T &first, const T &second)
 Test match. More...
 
template<class T >
static bool match (const std::vector< T > &first, const std::vector< T > &second)
 Test is containers match. More...
 
template<class T >
static bool match (const JHead &first, const JHead &second, T JHead::*pd)
 Test match of given data member of headers. More...
 
template<class T >
static bool less (const T &first, const T &second)
 Comparison. More...
 
template<class T >
static bool less (const std::vector< T > &first, const std::vector< T > &second)
 Comparison of containers. More...
 

Private Attributes

int counter
 Counter to check how many headers have been added. More...
 

Detailed Description

Helper class for event weighing.

Definition at line 25 of file JEvtWeightHelper.hh.

Member Typedef Documentation

◆ pointer_type

Definition at line 29 of file JEvtWeightHelper.hh.

Constructor & Destructor Documentation

◆ JEvtWeightHelper() [1/2]

JAANET::JEvtWeightHelper::JEvtWeightHelper ( )
inline

Default constructor.

Definition at line 34 of file JEvtWeightHelper.hh.

34  :
35  counter(0)
36  {}
int counter
Counter to check how many headers have been added.

◆ JEvtWeightHelper() [2/2]

JAANET::JEvtWeightHelper::JEvtWeightHelper ( const JEvtWeight weighter)
inline

Constructor.

Parameters
weighterevent weighter

Definition at line 44 of file JEvtWeightHelper.hh.

44  :
45  counter(0)
46  {
47  this->configure(weighter);
48  }
void configure(const JEvtWeight &weighter)
Configuration.

Member Function Documentation

◆ getName()

const char* const JAANET::JEvtWeightHelper::getName ( ) const
inline

Get name.

Returns
name

Definition at line 56 of file JEvtWeightHelper.hh.

57  {
58  return getEvtWeighter().getName();
59  }
JEvtWeight & getEvtWeighter() const
Get reference to event-weighter.
virtual const char *const getName() const =0
Get name.

◆ configure()

void JAANET::JEvtWeightHelper::configure ( const JEvtWeight weighter)
inline

Configuration.

Parameters
weighterevent weighter

Definition at line 67 of file JEvtWeightHelper.hh.

68  {
69  counter = 0;
70 
71  reset(weighter.clone());
72  }
void reset(T &value)
Reset value.
virtual clone_type clone() const override
Get clone of this object.
Definition: JClonable.hh:69

◆ check()

bool JAANET::JEvtWeightHelper::check ( const JHead header) const
inline

Check if a given header is consistent with this event weighter.

Parameters
headerheader
Returns
true if header is consistent with this event weighter; else false.

Definition at line 81 of file JEvtWeightHelper.hh.

82  {
83  const JEvtWeight& weighter = getEvtWeighter();
84 
85  return weighter.check(header);
86  }
virtual bool check(const JHead &header) const =0
Check whether header is consistent with this event weighter.
Abstract base class for event weighing.
Definition: JEvtWeight.hh:31

◆ getEvtWeighter()

JEvtWeight& JAANET::JEvtWeightHelper::getEvtWeighter ( ) const
inline

Get reference to event-weighter.

Returns
reference to event-weighter

Definition at line 94 of file JEvtWeightHelper.hh.

95  {
96  using namespace JPP;
97 
98  if (static_cast<const JEvtWeightHelper&>(*this)) {
99  return *(this->get());
100  } else {
101  THROW(JNullPointerException, "JEvtWeightHelper::getEvtWeighter(): Event-weighter is not set.");
102  }
103  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:712
Exception for null pointer operation.
Definition: JException.hh:234
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Helper class for event weighing.

◆ add()

void JAANET::JEvtWeightHelper::add ( const JHead header)
inline

Add header.

Parameters
headerheader

Definition at line 111 of file JEvtWeightHelper.hh.

112  {
113  using namespace JPP;
114 
115  JEvtWeight& weighter = getEvtWeighter();
116 
117  if (check(header)) {
118 
119  if (counter == 0) {
120  JHead::setHeader(header);
121  } else {
122  JHead::add(header);
123  }
124 
125  ++counter;
126 
127  weighter.configure(getHeader());
128 
129  } else {
130 
131  THROW(JValueOutOfRange, "JEvtWeightHelper::add(): headers do not match.");
132  }
133  }
JHead & add(const JHead &header)
Addition of headers.
Definition: JHead.hh:1532
const JHead & getHeader() const
Get header.
Definition: JHead.hh:1270
void setHeader(const JHead &header)
Set header.
Definition: JHead.hh:1292
Exception for accessing a value in a collection that is outside of its range.
Definition: JException.hh:180
bool check(const JHead &header) const
Check if a given header is consistent with this event weighter.
virtual void configure(const JHead &header)=0
Configuration.

◆ getWeight()

double JAANET::JEvtWeightHelper::getWeight ( const Evt evt) const
inline

Get weight of given event.

Parameters
evtevent
Returns
weight [Hz]

Definition at line 142 of file JEvtWeightHelper.hh.

143  {
144  const JEvtWeight& weighter = getEvtWeighter();
145 
146  return weighter.getWeight(evt);
147  }
virtual double getWeight(const Evt &evt) const =0
Get weight of given event.

◆ getNormalisation() [1/2]

double JAANET::JEvtWeightHelper::getNormalisation ( ) const
inline

Get event-weight normalisation.

Returns
event-weight normalisation

Definition at line 155 of file JEvtWeightHelper.hh.

156  {
157  const JEvtWeight& weighter = getEvtWeighter();
158 
159  return weighter.getNormalisation();
160  }
virtual double getNormalisation() const override
Get event-weight normalisation.
Definition: JEvtWeight.hh:52

◆ getNormalisation() [2/2]

double JAANET::JEvtWeightHelper::getNormalisation ( const Evt evt) const
inline

Get event-weight normalisation.

Parameters
evtevent
Returns
event-weight normalisation

Definition at line 169 of file JEvtWeightHelper.hh.

170  {
171  const JEvtWeight& weighter = getEvtWeighter();
172 
173  return weighter.getNormalisation(evt);
174  }

◆ coord_origin()

Vec Head::coord_origin ( ) const
inlineinherited

Get coordinate origin.

Returns
position

Definition at line 397 of file Head.hh.

398  {
399  return Vec( stod( get_field("coord_origin", "x") ),
400  stod( get_field("coord_origin", "y") ),
401  stod( get_field("coord_origin", "z") ));
402  }
std::string get_field(std::string key, int idx) const
Get data with the given key at given index.
Definition: Head.hh:198
The Vec class is a straightforward 3-d vector, which also works in pyroot.
Definition: Vec.hh:13

◆ getHeader() [1/2]

const JHead& JAANET::JHead::getHeader ( ) const
inlineinherited

Get header.

Returns
header

Definition at line 1270 of file JHead.hh.

1271  {
1272  return static_cast<const JHead&>(*this);
1273  }
Monte Carlo run header.
Definition: JHead.hh:1236

◆ getHeader() [2/2]

JHead& JAANET::JHead::getHeader ( )
inlineinherited

Get header.

Returns
header

Definition at line 1281 of file JHead.hh.

1282  {
1283  return static_cast<JHead&>(*this);
1284  }

◆ setHeader()

void JAANET::JHead::setHeader ( const JHead header)
inlineinherited

Set header.

Parameters
headerheader

Definition at line 1292 of file JHead.hh.

1293  {
1294  static_cast<JHead&>(*this) = header;
1295  }

◆ createUUID()

void JAANET::JHead::createUUID ( )
inlineinherited

Create UUID if not already set.

Definition at line 1301 of file JHead.hh.

1302  {
1303  if (!is_valid(&JHead::UUID)) {
1304  this->UUID = JUUID::rndm();
1305  this->push(&JHead::UUID);
1306  }
1307  }
void push()
Push all data members to Head.
Definition: JHead.cc:28
JUUID UUID
Definition: JHead.hh:1584
bool is_valid(T JHead::*pd) const
Check validity of given data member in JHead.
Definition: JHead.hh:1319
static const JUUID & rndm()
Generate random UUID.
Definition: JUUID.hh:78

◆ is_valid() [1/2]

template<class T >
bool JAANET::JHead::is_valid ( T JHead::*  pd) const
inlineinherited

Check validity of given data member in JHead.

The validity is defined by the presence of the name of the data member in the underlying map.

Parameters
pdpointer to data member
Returns
true if valid; else false

Definition at line 1319 of file JHead.hh.

1320  {
1321  return (this->pull(pd) != this->end());
1322  }
const_iterator pull(T JHead::*pd) const
Pull given data member from Head.
Definition: JHead.hh:1349

◆ is_valid() [2/2]

template<class T >
static bool JAANET::JHead::is_valid ( const T &  object)
inlinestaticinherited

Check validity of given data member in JHead.

The validity is defined by difference between actual and default value.

Parameters
objectobject
Returns
true if valid; else false

Definition at line 1334 of file JHead.hh.

1335  {
1336  static const T value;
1337 
1338  return (object.less(value) || value.less(object));
1339  }
bool less(const JHead &header) const
Comparison of headers.
Definition: JHead.hh:1486

◆ pull() [1/2]

template<class T >
const_iterator JAANET::JHead::pull ( T JHead::*  pd) const
inlineinherited

Pull given data member from Head.

Parameters
pdpointer to data member
Returns
iterator of Head

Definition at line 1349 of file JHead.hh.

1350  {
1351  return this->find(JROOT::getDataMember(pd)->GetName());
1352  }
const TDataMember * getDataMember(const JRootClass &parent, const JRootClass &member)
Get ROOT data member for given parent and member class.
Definition: JRootClass.hh:650

◆ pull() [2/2]

template<class T >
iterator JAANET::JHead::pull ( T JHead::*  pd)
inlineinherited

Pull given data member from Head.

Parameters
pdpointer to data member
Returns
iterator of Head

Definition at line 1362 of file JHead.hh.

1363  {
1364  return this->find(JROOT::getDataMember(pd)->GetName());
1365  }

◆ push() [1/2]

template<class T >
void JAANET::JHead::push ( T JHead::*  pd)
inlineinherited

Push given data member to Head.

Parameters
pdpointer to data member

Definition at line 1374 of file JHead.hh.

1375  {
1376  (*this)[JROOT::getDataMember(pd)->GetName()] = "";
1377  }

◆ push() [2/2]

void JAANET::JHead::push ( )
inherited

Push all data members to Head.

Definition at line 28 of file JHead.cc.

29  {
30  using namespace std;
31  using namespace JPP;
32 
33  JRootReadableClass cls(*this);
34 
35  unique_ptr<TIterator> i(cls.getClass()->GetListOfDataMembers()->MakeIterator());
36 
37  for (const TDataMember* p; (p = (const TDataMember*) i->Next()) != NULL; ) {
38  if (!JRootClass::is_static(*p)) {
39  if (this->count(p->GetName()) == 0) {
40  (*this)[p->GetName()] = "";
41  }
42  }
43  }
44  }
Definition: JSTDTypes.hh:14
ROOT class for reading object.
Definition: JRootClass.hh:544

◆ erase()

template<class T >
void JAANET::JHead::erase ( T JHead::*  pd)
inlineinherited

Reset and remove given data member from Head.

Parameters
pdpointer to data member

Definition at line 1392 of file JHead.hh.

1393  {
1394  this->*pd = T();
1395 
1396  iterator p = this->pull(pd);
1397 
1398  if (p != this->end()) {
1399  static_cast<Head*>(this)->erase(p);
1400  }
1401  }
void erase(T JHead::*pd)
Reset and remove given data member from Head.
Definition: JHead.hh:1392
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Definition: Head.hh:65

◆ getMatch()

JHead JAANET::JHead::getMatch ( const JHead header) const
inlineinherited

Get matching fields.

Parameters
headerheader
Returns
header with matching fields

Definition at line 1410 of file JHead.hh.

1411  {
1412 #define IF_MATCH(A, B, C, D) \
1413  if (match(B,C,D)) { A.push(D); } \
1414  else { A.erase(D); }
1415 
1416  JHead buffer(*this);
1417 
1418  buffer.clear();
1419 
1420  buffer.createUUID();
1421 
1422  IF_MATCH(buffer, *this, header, &JHead::cut_primary);
1423  IF_MATCH(buffer, *this, header, &JHead::cut_seamuon);
1424  IF_MATCH(buffer, *this, header, &JHead::cut_in);
1425  IF_MATCH(buffer, *this, header, &JHead::cut_nu);
1426  IF_MATCH(buffer, *this, header, &JHead::simul);
1427  IF_MATCH(buffer, *this, header, &JHead::physics);
1428  IF_MATCH(buffer, *this, header, &JHead::spectrum);
1429  IF_MATCH(buffer, *this, header, &JHead::can);
1430  IF_MATCH(buffer, *this, header, &JHead::fixedcan);
1431  IF_MATCH(buffer, *this, header, &JHead::genvol);
1432  IF_MATCH(buffer, *this, header, &JHead::coord_origin);
1433 
1434  IF_MATCH(buffer, *this, header, &JHead::norma);
1435  IF_MATCH(buffer, *this, header, &JHead::livetime);
1436 
1437  IF_MATCH(buffer, *this, header, &JHead::seabottom);
1438  IF_MATCH(buffer, *this, header, &JHead::depth);
1439  IF_MATCH(buffer, *this, header, &JHead::tgen);
1440  //IF_MATCH(buffer, *this, header, &JHead::time_interval);
1441 
1442  IF_MATCH(buffer, *this, header, &JHead::primary);
1443  IF_MATCH(buffer, *this, header, &JHead::flux);
1444  IF_MATCH(buffer, *this, header, &JHead::DAQ);
1445  IF_MATCH(buffer, *this, header, &JHead::K40);
1446  IF_MATCH(buffer, *this, header, &JHead::target);
1447 
1448  return buffer;
1449 
1450 #undef IF_MATCH
1451  }
#define IF_MATCH(A, B, C, D)
JAANET::spectrum spectrum
Definition: JHead.hh:1597
std::vector< JAANET::simul > simul
Definition: JHead.hh:1591
JAANET::seabottom seabottom
Definition: JHead.hh:1605
JAANET::coord_origin coord_origin
Definition: JHead.hh:1601
JAANET::norma norma
Definition: JHead.hh:1603
JAANET::cut_in cut_in
Definition: JHead.hh:1595
JAANET::livetime livetime
Definition: JHead.hh:1604
JAANET::cut_nu cut_nu
Definition: JHead.hh:1596
JAANET::primary primary
Definition: JHead.hh:1611
JAANET::DAQ DAQ
Definition: JHead.hh:1607
JAANET::tgen tgen
Definition: JHead.hh:1609
JAANET::genvol genvol
Definition: JHead.hh:1600
JAANET::depth depth
Definition: JHead.hh:1606
std::vector< JAANET::flux > flux
Definition: JHead.hh:1612
JAANET::target target
Definition: JHead.hh:1589
JAANET::cut_seamuon cut_seamuon
Definition: JHead.hh:1594
JAANET::can can
Definition: JHead.hh:1598
JAANET::fixedcan fixedcan
Definition: JHead.hh:1599
JAANET::K40 K40
Definition: JHead.hh:1608
std::vector< JAANET::physics > physics
Definition: JHead.hh:1590
JAANET::cut_primary cut_primary
Definition: JHead.hh:1593

◆ getNumberOfMatches()

size_t JAANET::JHead::getNumberOfMatches ( const JHead header) const
inlineinherited

Get number of matching fields.

Parameters
headerheader
Returns
number of matching header fields

Definition at line 1460 of file JHead.hh.

1461  {
1462  const JHead head = getMatch(header);
1463 
1464  return head.size();
1465  }
JHead getMatch(const JHead &header) const
Get matching fields.
Definition: JHead.hh:1410

◆ match() [1/4]

bool JAANET::JHead::match ( const JHead header) const
inlineinherited

Test match of headers.

Parameters
headersecond header
Returns
true if all header fields match; else false

Definition at line 1474 of file JHead.hh.

1475  {
1476  return getNumberOfMatches(header) == getNumberOfMatches(*this);
1477  }
size_t getNumberOfMatches(const JHead &header) const
Get number of matching fields.
Definition: JHead.hh:1460

◆ match() [2/4]

template<class T >
static bool JAANET::JHead::match ( const T &  first,
const T &  second 
)
inlinestaticprivateinherited

Test match.

Parameters
firstfirst object
secondsecond object
Returns
true if matches; else false

Definition at line 1714 of file JHead.hh.

1716  {
1717  return first.match(second);
1718  }

◆ match() [3/4]

template<class T >
static bool JAANET::JHead::match ( const std::vector< T > &  first,
const std::vector< T > &  second 
)
inlinestaticprivateinherited

Test is containers match.

It is assumed that the containers are ordered in the same way.

Parameters
firstfirst object
secondsecond object
Returns
true if matches; else false

Definition at line 1759 of file JHead.hh.

1761  {
1762  for (size_t i = 0; i != first.size() && i != second.size(); ++i) {
1763  if (!match(first[i], second[i])) {
1764  return false;
1765  }
1766  }
1767 
1768  return first.size() == second.size();
1769  }
bool match(const JHead &header) const
Test match of headers.
Definition: JHead.hh:1474

◆ match() [4/4]

template<class T >
static bool JAANET::JHead::match ( const JHead first,
const JHead second,
T JHead::*  pd 
)
inlinestaticprivateinherited

Test match of given data member of headers.

Parameters
firstfirst header
secondsecond header
pdpointer to data member
Returns
true if matches; else false

Definition at line 1781 of file JHead.hh.

1784  {
1785  return (first .is_valid(pd) &&
1786  second.is_valid(pd) &&
1787  match(first.*pd, second.*pd));
1788  }

◆ less() [1/3]

bool JAANET::JHead::less ( const JHead header) const
inlineinherited

Comparison of headers.

Parameters
headerheader
Returns
true if this header less than given header; else false

Definition at line 1486 of file JHead.hh.

1487  {
1488 #define RETURN_IF_DIFFERENT(A, B) \
1489  if (less(A,B)) { return true; } \
1490  if (less(B,A)) { return false; }
1491 
1492  // compare physics
1493 
1494  RETURN_IF_DIFFERENT(this->physics, header.physics);
1495 
1496  // compare simulation
1497 
1498  RETURN_IF_DIFFERENT(this->simul, header.simul);
1499 
1500  // compare generation data
1501 
1502  RETURN_IF_DIFFERENT(this->primary, header.primary);
1503  RETURN_IF_DIFFERENT(this->flux, header.flux);
1504  RETURN_IF_DIFFERENT(this->spectrum, header.spectrum);
1507  RETURN_IF_DIFFERENT(this->cut_in, header.cut_in);
1508  RETURN_IF_DIFFERENT(this->cut_nu, header.cut_nu);
1509  RETURN_IF_DIFFERENT(this->genvol, header.genvol);
1510  RETURN_IF_DIFFERENT(this->target, header.target);
1511 
1512  // compare compatibility
1513 
1514  if (is_valid(this->livetime) == is_valid(header.livetime) &&
1515  is_valid(this->DAQ) == is_valid(header.DAQ) &&
1516  is_valid(this->K40) == is_valid(header.K40)) {
1517  return false;
1518  }
1519 
1520  THROW(JException, "JHead::less() headers do not compare.");
1521 
1522 #undef RETURN_IF_DIFFERENT
1523  }
#define RETURN_IF_DIFFERENT(A, B)
General exception.
Definition: JException.hh:24
Livetime of DAQ data.
Definition: JHead.hh:1008
Livetime of noise data.
Definition: JHead.hh:1062
Phase space of incoming particle.
Definition: JHead.hh:451
Phase space of incident neutrino.
Definition: JHead.hh:461
Phase space of primary particle.
Definition: JHead.hh:431
Phase space of atmospheric muon generation.
Definition: JHead.hh:441
Neutrino flux.
Definition: JHead.hh:906
Neutrino vertex volume.
Definition: JHead.hh:649
Normalisation of MUPAGE events.
Definition: JHead.hh:835
Physics information.
Definition: JHead.hh:518
Primary particle.
Definition: JHead.hh:1174
Generator for simulation.
Definition: JHead.hh:528
Neutrino energy spectrum.
Definition: JHead.hh:536
Target.
Definition: JHead.hh:300

◆ less() [2/3]

template<class T >
static bool JAANET::JHead::less ( const T &  first,
const T &  second 
)
inlinestaticprivateinherited

Comparison.

Parameters
firstfirst object
secondsecond object
Returns
true if first less than second; else false

Definition at line 1699 of file JHead.hh.

1701  {
1702  return first.less(second);
1703  }

◆ less() [3/3]

template<class T >
static bool JAANET::JHead::less ( const std::vector< T > &  first,
const std::vector< T > &  second 
)
inlinestaticprivateinherited

Comparison of containers.

It is assumed that the containers are ordered in the same way.

Parameters
firstfirst object
secondsecond object
Returns
true if first is less than second; else false

Definition at line 1730 of file JHead.hh.

1732  {
1733  if (first.size() == second.size()) {
1734 
1735  for (size_t i = 0; i != first.size(); ++i) {
1736  if (less(first[i], second[i])) {
1737  return true;
1738  }
1739  }
1740 
1741  return false;
1742 
1743  } else {
1744 
1745  return first.size() < second.size();
1746  }
1747  }

◆ getMaximumNumberOfMatches()

static const size_t JAANET::JHead::getMaximumNumberOfMatches ( )
inlinestaticinherited

Get maximum number of matching header fields.

Returns
maximum number of matching header fields

Definition at line 1621 of file JHead.hh.

1622  {
1623  static JHead header;
1624 
1625  header.push();
1626 
1627  static const size_t value = header.getNumberOfMatches(header);
1628 
1629  return value;
1630  }
void push(T JHead::*pd)
Push given data member to Head.
Definition: JHead.hh:1374

◆ getEquationParameters()

static JLANG::JEquationParameters& JAANET::JHead::getEquationParameters ( )
inlinestaticinherited

Get equation parameters corresponding to Monte Carlo ASCII format, i.e:

   <key>: <value> [<value>]*
   <key>: <value> [<value>]*
Returns
equation parameters

Definition at line 1642 of file JHead.hh.

1643  {
1644  static JLANG::JEquationParameters parameters(":", "\n", "", "");
1645 
1646  return parameters;
1647  }
Simple data structure to support I/O of equations (see class JLANG::JEquation).

◆ setEquationParameters()

static void JAANET::JHead::setEquationParameters ( const JLANG::JEquationParameters equation)
inlinestaticinherited

Set equation parameters.

Parameters
equationequation parameters

Definition at line 1655 of file JHead.hh.

1656  {
1657  getEquationParameters() = equation;
1658  }
static JLANG::JEquationParameters & getEquationParameters()
Get equation parameters corresponding to Monte Carlo ASCII format, i.e:
Definition: JHead.hh:1642

◆ read()

std::istream & JAANET::JHead::read ( std::istream &  in)
inherited

Read header from input.

Parameters
ininput stream
Returns
input stream

Definition at line 53 of file JHead.cc.

54  {
55  using namespace std;
56  using namespace JPP;
57 
58  JStringStream is(in);
59 
60  if (getFileStatus(is.str().c_str())) {
61  is.load();
62  }
63 
65 
66  JRootReadableClass cls(*this);
67 
68  for (JEquation equation; reader >> equation && equation.getKey() != end_event::Class_Name(); ) {
69 
70  JRedirectString redirect(reader, equation.getValue());
71 
72  const JRootReadableClass abc = cls.find(equation.getKey().c_str());
73 
74  if (abc.is_valid()) {
75  reader.getObject(abc);
76  }
77 
78  (*this)[equation.getKey()] = equation.getValue();
79  }
80 
81  return in;
82  }
General purpose equation class.
Definition: JEquation.hh:47
const std::string & getKey() const
Get key.
Definition: JEquation.hh:163
This class can be used to temporarily redirect an input stream to an input string.
Wrapper class around STL stringstream class to facilitate optional loading of data from file.
Implementation for ASCII input of objects with ROOT dictionary.
T & getInstance(const T &object)
Get static instance from temporary object.
Definition: JObject.hh:75
static JStat getFileStatus
Function object for file status.
Definition: JStat.hh:173
bool is_valid() const
Check validity of this addressable class.
Definition: JRootClass.hh:471
JRootAddressableClass find(const char *const name) const
Find addressable base class or data member with given name within current class.
Definition: JRootClass.hh:483

◆ write()

std::ostream & JAANET::JHead::write ( std::ostream &  out) const
inherited

Write header to output.

Parameters
outoutput stream
Returns
output stream

Definition at line 91 of file JHead.cc.

92  {
93  using namespace std;
94  using namespace JPP;
95 
97 
98  JRootWritableClass cls(*this);
99 
100  unique_ptr<TIterator> i(cls.getClass()->GetListOfDataMembers()->MakeIterator());
101 
102  for (const TDataMember* p; (p = (const TDataMember*) i->Next()) != NULL; ) {
103  if (!JRootClass::is_static(*p)) {
104  if (this->find(p->GetName()) != this->end() ||
105  cls.get(*p) == JRootClass(&JHead::start_run) ||
106  cls.get(*p) == JRootClass(&JHead::end_event)) {
107  writer.put(p->GetName(), cls.get(*p), true);
108  }
109  }
110  }
111 
112  return out << flush;
113  }
JAANET::start_run start_run
Definition: JHead.hh:1583
JAANET::end_event end_event
Definition: JHead.hh:1613
Implementation for ASCII output of objects with ROOT dictionary.
Auxiliary class to manage access to base classes and data members of ROOT class.
Definition: JRootClass.hh:43
JRootClass get(const TDataMember &data_member) const
Get ROOT class of given data member.
Definition: JRootClass.hh:293
ROOT class for writing object.
Definition: JRootClass.hh:604

◆ print()

std::ostream & JAANET::JHead::print ( std::ostream &  out) const
inherited

Print header to output.

Parameters
outoutput stream
Returns
output stream

Definition at line 122 of file JHead.cc.

123  {
124  using namespace std;
125  using namespace JPP;
126 
128 
129  JRootWritableClass cls(*this);
130 
131  unique_ptr<TIterator> i(cls.getClass()->GetListOfDataMembers()->MakeIterator());
132 
134 
135  for (const TDataMember* p; (p = (const TDataMember*) i->Next()) != NULL; ) {
136  if (!JRootClass::is_static(*p)) {
137  if (cls.get(*p) != JRootClass(&JHead::end_event))
138  writer.put(p->GetName(), cls.get(*p), true);
139  else
140  end_event = make_pair(p->GetName(), cls.get(*p));
141  }
142  }
143 
144  for (JHead::const_iterator i = this->begin(); i != this->end(); ++i) {
145  if (!cls.find(i->first.c_str()).is_valid()) {
146  writer.put(i->first, i->second);
147  }
148  }
149 
150  writer.put(end_event.first, end_event.second, true);
151 
152  return out << flush;
153  }
End of event record.
Definition: JHead.hh:1213

◆ ClassDef() [1/2]

JAANET::JHead::ClassDef ( JHead  ,
 
)
inherited

◆ ClassDef() [2/2]

Head::ClassDef ( Head  ,
 
)
inherited

◆ have_line()

bool Head::have_line ( std::string  key) const
inlineinherited

Check availability of data with the given key.

Parameters
keykey
Returns
true if data are available; else false

Definition at line 77 of file Head.hh.

78  {
79  return count( key ) != 0;
80  }

◆ get_line() [1/2]

const std::string& Head::get_line ( std::string  key) const
inlineinherited

Get data with the given key.


This method throws a run-time exception if no data are available.

Parameters
keykey
Returns
data

Definition at line 89 of file Head.hh.

90  {
91  return this->at(key);
92  }

◆ get_line() [2/2]

std::string& Head::get_line ( std::string  key)
inlineinherited

Get data with the given key.


This method throws a run-time exception if no data are available.

Parameters
keykey
Returns
data

Definition at line 101 of file Head.hh.

102  {
103  return this->at(key);
104  }

◆ matching_keys()

std::vector< std::string> Head::matching_keys ( const std::string &  tag) const
inlineinherited

In case of duplicate keys, they are internally stored in the map with a suffix "_n".

This function returns all the keys that start with 'key' and end in "_n", with n an integer

Parameters
tagtag (without suffix)

Definition at line 115 of file Head.hh.

116  {
118 
119  auto match = [&] (const std::string & key) {
120 
121  if (key == tag) return true;
122 
123  if ( key.find( tag ) != 0 ) return false;
124 
125  // what is left should be of the form _d(ddd)
126  std::string left = key.substr( tag.length(), key.length() );
127  if (left.length() < 2 || left[0] != '_' ) return false ;
128  for ( unsigned i = 1; i < left.length(); i++ )
129  {
130  if (!std::isdigit( left[i] )) return false ;
131  }
132  return true;
133  };
134 
135  for ( auto& p : *this )
136  {
137  if ( match( p.first ) ) r.push_back( p.first );
138  }
139 
140  return r;
141  }
data_type r[M+1]
Definition: JPolint.hh:868

◆ get_lines()

std::vector< std::string > Head::get_lines ( const std::string &  tag) const
inlineinherited

Get all data compatible with the given key.

This means all data that is internally stored with "key_n", with n an integer
This method throws a run-time exception if no data are available.

Parameters
tagtag (without suffix)
Returns
data

Definition at line 154 of file Head.hh.

155  {
157 
158  for ( auto& key : matching_keys( tag ) ) {
159  r.push_back( get_line( key ) );
160  }
161 
162  return r;
163  }
std::vector< std::string > matching_keys(const std::string &tag) const
In case of duplicate keys, they are internally stored in the map with a suffix "_n".
Definition: Head.hh:115
const std::string & get_line(std::string key) const
Get data with the given key.
Definition: Head.hh:89

◆ set_line()

std::string Head::set_line ( std::string  tag,
std::string  line,
bool  ensure_unique = true 
)
inlineinherited

Set data with the given tag.

The function will return the actual key that is used internally to store the result, which is equal to the tag with an optional "_n" added to ensure uniqueness.

Parameters
tagtag
linedata
ensure_uniqueadd '_n' (with n an integer) to the tag if it would overwrite an existing key.

Definition at line 176 of file Head.hh.

177  {
178  std::string k = tag;
179 
180  if (ensure_unique)
181  for (int i = 1; find(k) != end() ; i++)
182  {
183  k = tag + "_" + std::to_string(i);
184  }
185 
187  return k;
188  }
std::string to_string(const T &value)
Convert value to string.

◆ get_field() [1/2]

std::string Head::get_field ( std::string  key,
int  idx 
) const
inlineinherited

Get data with the given key at given index.


This method throws a run-time exception if no data are available.

Parameters
keykey
idxindex
Returns
data

Definition at line 198 of file Head.hh.

199  {
200  using namespace std;
201 
203 
204  if ( idx < 0 || idx >= int ( v.size() ) )
205  {
206  THROW(Exception, "Cannot find word number " << idx << " in line " << get_line(key) << " for key: " << key);
207  }
208  return v[idx];
209  }
std::vector< std::string > splitstring(const std::string &str, char delim=' ')
Split string at delimiter.
Definition: Head.hh:43
General exception.
Definition: Exception.hh:13
data_type v[N+1][M+1]
Definition: JPolint.hh:866

◆ get_field() [2/2]

std::string Head::get_field ( std::string  key,
std::string  field 
) const
inlineinherited

Get data with the given key at given field.


This method throws a run-time exception if no field is available.

Note that this method uses the dictionary define in method Head::_hdr_dict.

Parameters
keykey
fieldfield
Returns
data

Definition at line 240 of file Head.hh.

241  {
242  int idx = get_index_of_field(key, field);
243 
244  if ( idx == -1 )
245  {
246  THROW(Exception, "Failed to find" << key << " " << field);
247  }
248 
249  return get_field( key, idx );
250  }
int get_index_of_field(std::string key, std::string field) const
Get index of data with the given key at given field.
Definition: Head.hh:220

◆ get_index_of_field()

int Head::get_index_of_field ( std::string  key,
std::string  field 
) const
inlineinherited

Get index of data with the given key at given field.


Note that this method uses the dictionary define in method Head::_hdr_dict.

Parameters
keykey
fieldfield
Returns
index (-1 if not present)

Definition at line 220 of file Head.hh.

221  {
222  auto& d = _hdr_dict();
223  if ( d.count(key) == 0 ) return -1;
224  auto v = d.at(key);
225  auto i = std::find (v.begin(), v.end(), field );
226  if (i == v.end()) return -1;
227  return i - v.begin();
228  }
static const std::map< std::string, std::vector< std::string > > & _hdr_dict()
Get internal description of the known lines in header.
Definition: Head.hh:315

◆ set_field()

void Head::set_field ( std::string  key,
std::string  field,
std::string  value 
)
inlineinherited

Set data with the given key at given field.


This method throws a run-time exception if no field available.

Note that this method uses the dictionary define in method Head::_hdr_dict.

Parameters
keykey
fieldfield
valuevakue

Definition at line 263 of file Head.hh.

264  {
265  using namespace std;
266 
267  if ( field == "" ) get_line( key ) = value;
268 
269  int idx = get_index_of_field( key, field );
270 
271  if ( idx < 0 )
272  {
273  THROW(Exception, "GFailed to find field in header line: " << key << " " << field);
274  }
275 
276  vector<string> vals = splitstring( get_line( key ) );
277 
278  // if the fields before do not exist, add padding
279  while ( int( vals.size() ) <= idx ) vals.push_back("0");
280 
281  vals[idx] = value;
282  ostringstream ss;
283 
284  for (unsigned i = 0; i < vals.size() ; i++ )
285  {
286  ss << vals[i];
287  if ( i != vals.size() - 1) ss << " ";
288  }
289  set_line( key, ss.str() );
290 
291  }
std::string set_line(std::string tag, std::string line, bool ensure_unique=true)
Set data with the given tag.
Definition: Head.hh:176

◆ _hdr_dict()

static const std::map<std::string, std::vector<std::string> >& Head::_hdr_dict ( )
inlinestaticinherited

Get internal description of the known lines in header.

Returns
internal dictionary

Definition at line 315 of file Head.hh.

316  {
317  using namespace std;
318 
319  // map with, for each tag (key), a vector of field-names
320 
321  static map<string, vector<string> > r;
322  if ( r.size() > 0 ) return r;
323 
324  string desc =
325  "DAQ:livetime\n"
326  "cut_primary cut_seamuon cut_in cut_nu:Emin Emax cosTmin cosTmax\n"
327  "generator physics simul:program version date time\n"
328  "seed:program level iseed\n"
329  "PM1_type_area:type area TTS\n"
330  "PDF:i1 i2\n"
331  "model:interaction muon scattering numberOfEnergyBins\n"
332  "can:zmin zmax r\n"
333  "genvol:zmin zmax r volume numberOfEvents\n"
334  "merge:time gain\n"
335  "coord_origin:x y z\n"
336  "translate:x y z\n"
337  "genhencut:gDir Emin\n"
338  "k40:rate time\n" // note lower-case k
339  "K40:livetime\n" // note capital K
340  "norma:primaryFlux numberOfPrimaries\n"
341  "livetime:numberOfSeconds errorOfSeconds\n"
342  "flux:type key file_1 file_2\n"
343  "spectrum:alpha\n"
344  "fixedcan:xcenter ycenter zmin zmax radius\n"
345  "start_run:run_id";
346 
347  for ( auto line : splitstring(desc, '\n') )
348  {
349  auto v = splitstring( line, ':');
350 
351  vector< string > fields = splitstring( v[1] );
352  for ( auto key : splitstring( v[0] ) )
353  {
354  r[key] = fields;
355  }
356  }
357  return r;
358  }

◆ ngen()

double Head::ngen ( ) const
inlineinherited

Get the number of generated events needed for computing event rates.

Returns
number of events

Definition at line 366 of file Head.hh.

367  {
368  return stod ( get_field("genvol", "numberOfEvents") );
369  }

◆ daq_livetime()

double Head::daq_livetime ( ) const
inlineinherited

Get the the live time provided by the DAQ sytstem (=number of processed timeslices * frametime).

Returns
live time [s]

Definition at line 376 of file Head.hh.

377  {
378  return stod ( get_field("DAQ", "livetime") );
379  }

◆ mc_livetime()

double Head::mc_livetime ( ) const
inlineinherited

Get the Monte Carlo live time.

Returns
live time [s]

Definition at line 387 of file Head.hh.

388  {
389  return stod ( get_field("livetime", "numberOfSeconds") );
390  }

◆ translate()

Vec Head::translate ( ) const
inlineinherited

Get coordinate translation.

Returns
translation

Definition at line 409 of file Head.hh.

410  {
411  return Vec( stod( get_field("translate", "x") ),
412  stod( get_field("translate", "y") ),
413  stod( get_field("translate", "z") ));
414  }

◆ actionAtFileOpen()

static void Head::actionAtFileOpen ( int  version)
inlinestaticinherited

Action method at file open.

Parameters
versionversion

Definition at line 423 of file Head.hh.

424  {
425  ROOT_IO_VERSION = version;
426  }
static int ROOT_IO_VERSION
Streamer version as obtained from ROOT file.
Definition: Head.hh:428

Member Data Documentation

◆ counter

int JAANET::JEvtWeightHelper::counter
private

Counter to check how many headers have been added.

Definition at line 179 of file JEvtWeightHelper.hh.

◆ start_run

JAANET::start_run JAANET::JHead::start_run
inherited

Definition at line 1583 of file JHead.hh.

◆ UUID

JUUID JAANET::JHead::UUID
inherited

Definition at line 1584 of file JHead.hh.

◆ XSecFile

JAANET::XSecFile JAANET::JHead::XSecFile
inherited

Definition at line 1585 of file JHead.hh.

◆ drawing

JAANET::drawing JAANET::JHead::drawing
inherited

Definition at line 1586 of file JHead.hh.

◆ detector

std::vector<JAANET::detector> JAANET::JHead::detector
inherited

Definition at line 1587 of file JHead.hh.

◆ muon_desc_file

JAANET::muon_desc_file JAANET::JHead::muon_desc_file
inherited

Definition at line 1588 of file JHead.hh.

◆ target

JAANET::target JAANET::JHead::target
inherited

Definition at line 1589 of file JHead.hh.

◆ physics

std::vector<JAANET::physics> JAANET::JHead::physics
inherited

Definition at line 1590 of file JHead.hh.

◆ simul

std::vector<JAANET::simul> JAANET::JHead::simul
inherited

Definition at line 1591 of file JHead.hh.

◆ calibration

JAANET::calibration JAANET::JHead::calibration
inherited

Definition at line 1592 of file JHead.hh.

◆ cut_primary

JAANET::cut_primary JAANET::JHead::cut_primary
inherited

Definition at line 1593 of file JHead.hh.

◆ cut_seamuon

JAANET::cut_seamuon JAANET::JHead::cut_seamuon
inherited

Definition at line 1594 of file JHead.hh.

◆ cut_in

JAANET::cut_in JAANET::JHead::cut_in
inherited

Definition at line 1595 of file JHead.hh.

◆ cut_nu

JAANET::cut_nu JAANET::JHead::cut_nu
inherited

Definition at line 1596 of file JHead.hh.

◆ spectrum

JAANET::spectrum JAANET::JHead::spectrum
inherited

Definition at line 1597 of file JHead.hh.

◆ can

JAANET::can JAANET::JHead::can
inherited

Definition at line 1598 of file JHead.hh.

◆ fixedcan

JAANET::fixedcan JAANET::JHead::fixedcan
inherited

Definition at line 1599 of file JHead.hh.

◆ genvol

JAANET::genvol JAANET::JHead::genvol
inherited

Definition at line 1600 of file JHead.hh.

◆ coord_origin

JAANET::coord_origin JAANET::JHead::coord_origin
inherited

Definition at line 1601 of file JHead.hh.

◆ genhencut

JAANET::genhencut JAANET::JHead::genhencut
inherited

Definition at line 1602 of file JHead.hh.

◆ norma

JAANET::norma JAANET::JHead::norma
inherited

Definition at line 1603 of file JHead.hh.

◆ livetime

JAANET::livetime JAANET::JHead::livetime
inherited

Definition at line 1604 of file JHead.hh.

◆ seabottom

JAANET::seabottom JAANET::JHead::seabottom
inherited

Definition at line 1605 of file JHead.hh.

◆ depth

JAANET::depth JAANET::JHead::depth
inherited

Definition at line 1606 of file JHead.hh.

◆ DAQ

JAANET::DAQ JAANET::JHead::DAQ
inherited

Definition at line 1607 of file JHead.hh.

◆ K40

JAANET::K40 JAANET::JHead::K40
inherited

Definition at line 1608 of file JHead.hh.

◆ tgen

JAANET::tgen JAANET::JHead::tgen
inherited

Definition at line 1609 of file JHead.hh.

◆ time_interval

JAANET::time_interval JAANET::JHead::time_interval
inherited

Definition at line 1610 of file JHead.hh.

◆ primary

JAANET::primary JAANET::JHead::primary
inherited

Definition at line 1611 of file JHead.hh.

◆ flux

std::vector<JAANET::flux> JAANET::JHead::flux
inherited

Definition at line 1612 of file JHead.hh.

◆ end_event

JAANET::end_event JAANET::JHead::end_event
inherited

Definition at line 1613 of file JHead.hh.

◆ ROOT_IO_VERSION

int Head::ROOT_IO_VERSION = -1
staticinherited

Streamer version as obtained from ROOT file.

Definition at line 428 of file Head.hh.


The documentation for this struct was generated from the following file: