Jpp  17.0.0-rc.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Static Public Member Functions | Public Attributes | Static Private Member Functions | Friends | List of all members
JAANET::JHead Struct Reference

Monte Carlo run header. More...

#include <JHead.hh>

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

Public Member Functions

 JHead ()
 Default constructor. More...
 
 JHead (const Head &header)
 Copy constructor. More...
 
virtual ~JHead ()
 Virtual destructor. More...
 
const JHeadgetHeader () const
 Get header. More...
 
JHeadgetHeader ()
 Get header. More...
 
void setHeader (const JHead &header)
 Set header. 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...
 
template<class T >
void erase (T JHead::*pd)
 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...
 
JHeadadd (const JHead &header)
 Addition 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, 3)
 
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 coord_origin () const
 Get coordinate origin. More...
 
Vec translate () const
 Get coordinate translation. More...
 
 ClassDef (Head, 2)
 

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 std::map< std::string,
std::vector< std::string > > & 
_hdr_dict ()
 Get internal description of the known lines in header. More...
 

Public Attributes

JAANET::start_run start_run
 
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::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::tgen tgen
 
JAANET::time_interval time_interval
 
JAANET::primary primary
 
std::vector< JAANET::fluxflux
 
JAANET::end_event end_event
 

Static Private Member Functions

template<class T >
static bool less (const T &first, const T &second)
 Comparison. More...
 
template<class T >
static bool match (const T &first, const T &second)
 Test match. More...
 
template<class T >
static bool less (const std::vector< T > &first, const std::vector< T > &second)
 Comparison of containers. 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...
 

Friends

bool operator== (const JHead &first, const JHead &second)
 Equal operator. More...
 
bool operator< (const JHead &first, const JHead &second)
 Less than operator. More...
 

Detailed Description

Monte Carlo run header.

This class extends the Head class so that the data from specific tags can be promoted to concrete data types.

Note that for the copy of new JHead data (e.g. data not obtained via a previous JAANET::copy) to become effective, the key words in the corresponding map of the Head class should be set.
To this end, member method JHead::push can be used.

Definition at line 1165 of file JHead.hh.

Constructor & Destructor Documentation

JAANET::JHead::JHead ( )
inline

Default constructor.

Definition at line 1171 of file JHead.hh.

1172  {}
JAANET::JHead::JHead ( const Head header)
inline

Copy constructor.

Parameters
headerheader

Definition at line 1180 of file JHead.hh.

1181  {
1182  copy(header, *this);
1183  }
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:139
virtual JAANET::JHead::~JHead ( )
inlinevirtual

Virtual destructor.

Definition at line 1189 of file JHead.hh.

1190  {}

Member Function Documentation

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

Get header.

Returns
header

Definition at line 1198 of file JHead.hh.

1199  {
1200  return static_cast<const JHead&>(*this);
1201  }
Monte Carlo run header.
Definition: JHead.hh:1165
JHead& JAANET::JHead::getHeader ( )
inline

Get header.

Returns
header

Definition at line 1209 of file JHead.hh.

1210  {
1211  return static_cast<JHead&>(*this);
1212  }
Monte Carlo run header.
Definition: JHead.hh:1165
void JAANET::JHead::setHeader ( const JHead header)
inline

Set header.

Parameters
headerheader

Definition at line 1220 of file JHead.hh.

1221  {
1222  static_cast<JHead&>(*this) = header;
1223  }
Monte Carlo run header.
Definition: JHead.hh:1165
template<class T >
bool JAANET::JHead::is_valid ( T JHead::*  pd) const
inline

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 1235 of file JHead.hh.

1236  {
1237  return (this->pull(pd) != this->end());
1238  }
const_iterator pull(T JHead::*pd) const
Pull given data member from Head.
Definition: JHead.hh:1265
template<class T >
static bool JAANET::JHead::is_valid ( const T object)
inlinestatic

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 1250 of file JHead.hh.

1251  {
1252  static const T value;
1253 
1254  return (object.less(value) || value.less(object));
1255  }
bool less(const JHead &header) const
Comparison of headers.
Definition: JHead.hh:1383
do set_variable OUTPUT_DIRECTORY $WORKDIR T
template<class T >
const_iterator JAANET::JHead::pull ( T JHead::*  pd) const
inline

Pull given data member from Head.

Parameters
pdpointer to data member
Returns
iterator of Head

Definition at line 1265 of file JHead.hh.

1266  {
1267  return this->find(JROOT::getDataMember(pd)->GetName());
1268  }
const TDataMember * getDataMember(const JRootClass &parent, const JRootClass &member)
Get ROOT data member for given parent and member class.
Definition: JRootClass.hh:637
template<class T >
iterator JAANET::JHead::pull ( T JHead::*  pd)
inline

Pull given data member from Head.

Parameters
pdpointer to data member
Returns
iterator of Head

Definition at line 1278 of file JHead.hh.

1279  {
1280  return this->find(JROOT::getDataMember(pd)->GetName());
1281  }
const TDataMember * getDataMember(const JRootClass &parent, const JRootClass &member)
Get ROOT data member for given parent and member class.
Definition: JRootClass.hh:637
template<class T >
void JAANET::JHead::push ( T JHead::*  pd)
inline

Push given data member to Head.

Parameters
pdpointer to data member

Definition at line 1290 of file JHead.hh.

1291  {
1292  (*this)[JROOT::getDataMember(pd)->GetName()] = "";
1293  }
const TDataMember * getDataMember(const JRootClass &parent, const JRootClass &member)
Get ROOT data member for given parent and member class.
Definition: JRootClass.hh:637
template<class T >
void JAANET::JHead::erase ( T JHead::*  pd)
inline

Remove given data member from Head.

Parameters
pdpointer to data member

Definition at line 1302 of file JHead.hh.

1303  {
1304  iterator p = this->pull(pd);
1305 
1306  if (p != this->end()) {
1307 
1308  this->*pd = T();
1309 
1310  static_cast<Head*>(this)->erase(p);
1311  }
1312  }
void erase(T JHead::*pd)
Remove given data member from Head.
Definition: JHead.hh:1302
do set_variable OUTPUT_DIRECTORY $WORKDIR T
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Definition: Head.hh:67
const_iterator pull(T JHead::*pd) const
Pull given data member from Head.
Definition: JHead.hh:1265
JHead JAANET::JHead::getMatch ( const JHead header) const
inline

Get matching fields.

Parameters
headerheader
Returns
header with matching fields

Definition at line 1321 of file JHead.hh.

1322  {
1323  JHead buffer(*this);
1324 
1325  buffer.clear();
1326 
1327  if (match(*this, header, &JHead::cut_primary)) { buffer.push(&JHead::cut_primary); }
1328  if (match(*this, header, &JHead::cut_seamuon)) { buffer.push(&JHead::cut_seamuon); }
1329  if (match(*this, header, &JHead::cut_in)) { buffer.push(&JHead::cut_in); }
1330  if (match(*this, header, &JHead::cut_nu)) { buffer.push(&JHead::cut_nu); }
1331  if (match(*this, header, &JHead::simul)) { buffer.push(&JHead::simul); }
1332  if (match(*this, header, &JHead::spectrum)) { buffer.push(&JHead::spectrum); }
1333  if (match(*this, header, &JHead::can)) { buffer.push(&JHead::can); }
1334  if (match(*this, header, &JHead::fixedcan)) { buffer.push(&JHead::fixedcan); }
1335  if (match(*this, header, &JHead::genvol)) { buffer.push(&JHead::genvol); }
1336  if (match(*this, header, &JHead::coord_origin)) { buffer.push(&JHead::coord_origin); }
1337  if (match(*this, header, &JHead::norma)) { buffer.push(&JHead::norma); }
1338  if (match(*this, header, &JHead::livetime)) { buffer.push(&JHead::livetime); }
1339  if (match(*this, header, &JHead::seabottom)) { buffer.push(&JHead::seabottom); }
1340  if (match(*this, header, &JHead::depth)) { buffer.push(&JHead::depth); }
1341  if (match(*this, header, &JHead::tgen)) { buffer.push(&JHead::tgen); }
1342  if (match(*this, header, &JHead::time_interval)) { buffer.push(&JHead::time_interval); }
1343  if (match(*this, header, &JHead::primary)) { buffer.push(&JHead::primary); }
1344  if (match(*this, header, &JHead::flux)) { buffer.push(&JHead::flux); }
1345  if (match(*this, header, &JHead::DAQ)) { buffer.push(&JHead::DAQ); }
1346 
1347  return buffer;
1348  }
JAANET::depth depth
Definition: JHead.hh:1496
JAANET::genvol genvol
Definition: JHead.hh:1490
JAANET::norma norma
Definition: JHead.hh:1493
std::vector< JAANET::flux > flux
Definition: JHead.hh:1501
JAANET::cut_primary cut_primary
Definition: JHead.hh:1483
bool match(const JHead &header) const
Test match of headers.
Definition: JHead.hh:1371
std::vector< JAANET::simul > simul
Definition: JHead.hh:1482
JAANET::fixedcan fixedcan
Definition: JHead.hh:1489
JAANET::can can
Definition: JHead.hh:1488
JAANET::cut_seamuon cut_seamuon
Definition: JHead.hh:1484
JAANET::livetime livetime
Definition: JHead.hh:1494
JAANET::seabottom seabottom
Definition: JHead.hh:1495
JAANET::spectrum spectrum
Definition: JHead.hh:1487
JAANET::primary primary
Definition: JHead.hh:1500
Monte Carlo run header.
Definition: JHead.hh:1165
JAANET::time_interval time_interval
Definition: JHead.hh:1499
JAANET::tgen tgen
Definition: JHead.hh:1498
JAANET::cut_in cut_in
Definition: JHead.hh:1485
JAANET::cut_nu cut_nu
Definition: JHead.hh:1486
JAANET::DAQ DAQ
Definition: JHead.hh:1497
Vec coord_origin() const
Get coordinate origin.
Definition: Head.hh:393
size_t JAANET::JHead::getNumberOfMatches ( const JHead header) const
inline

Get number of matching fields.

Parameters
headerheader
Returns
number of matching header fields

Definition at line 1357 of file JHead.hh.

1358  {
1359  const JHead head = getMatch(header);
1360 
1361  return head.size();
1362  }
JHead getMatch(const JHead &header) const
Get matching fields.
Definition: JHead.hh:1321
Monte Carlo run header.
Definition: JHead.hh:1165
bool JAANET::JHead::match ( const JHead header) const
inline

Test match of headers.

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

Definition at line 1371 of file JHead.hh.

1372  {
1373  return getNumberOfMatches(header) == getMaximumNumberOfMatches();
1374  }
static const size_t getMaximumNumberOfMatches()
Get maximum number of matching header fields.
Definition: JHead.hh:1510
size_t getNumberOfMatches(const JHead &header) const
Get number of matching fields.
Definition: JHead.hh:1357
bool JAANET::JHead::less ( const JHead header) const
inline

Comparison of headers.

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

Definition at line 1383 of file JHead.hh.

1384  {
1385 #define RETURN_IF_DIFFERENT(A, B) \
1386  if (less(A,B)) { return true; } \
1387  if (less(B,A)) { return false; }
1388 
1389  // compare physics
1390 
1391  RETURN_IF_DIFFERENT(this->physics, header.physics);
1392 
1393  // compare simulation
1394 
1395  RETURN_IF_DIFFERENT(this->simul, header.simul);
1396 
1397  // compare generation data
1398 
1399  RETURN_IF_DIFFERENT(this->primary, header.primary);
1400  RETURN_IF_DIFFERENT(this->flux, header.flux);
1401  RETURN_IF_DIFFERENT(this->spectrum, header.spectrum);
1404  RETURN_IF_DIFFERENT(this->cut_in, header.cut_in);
1405  RETURN_IF_DIFFERENT(this->cut_nu, header.cut_nu);
1406  RETURN_IF_DIFFERENT(this->genvol, header.genvol);
1407 
1408  // compare compatibility
1409 
1410  if (is_valid(this->livetime) == is_valid(header.livetime) &&
1411  is_valid(this->DAQ) == is_valid(header.DAQ)) {
1412  return false;
1413  }
1414 
1415  THROW(JException, "JHead::less() headers do not compare.");
1416 
1417 #undef RETURN_IF_DIFFERENT
1418  }
Phase space of incident neutrino.
Definition: JHead.hh:444
JAANET::genvol genvol
Definition: JHead.hh:1490
Neutrino vertex volume.
Definition: JHead.hh:634
std::vector< JAANET::flux > flux
Definition: JHead.hh:1501
Livetime of DAQ data.
Definition: JHead.hh:993
#define RETURN_IF_DIFFERENT(A, B)
Phase space of incoming particle.
Definition: JHead.hh:434
Generator for simulation.
Definition: JHead.hh:511
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:696
JAANET::cut_primary cut_primary
Definition: JHead.hh:1483
std::vector< JAANET::physics > physics
Definition: JHead.hh:1481
std::vector< JAANET::simul > simul
Definition: JHead.hh:1482
Physics information.
Definition: JHead.hh:501
JAANET::cut_seamuon cut_seamuon
Definition: JHead.hh:1484
JAANET::livetime livetime
Definition: JHead.hh:1494
Neutrino flux.
Definition: JHead.hh:891
JAANET::spectrum spectrum
Definition: JHead.hh:1487
JAANET::primary primary
Definition: JHead.hh:1500
Normalisation of MUPAGE events.
Definition: JHead.hh:820
JAANET::cut_in cut_in
Definition: JHead.hh:1485
Primary particle.
Definition: JHead.hh:1105
JAANET::cut_nu cut_nu
Definition: JHead.hh:1486
Phase space of atmospheric muon generation.
Definition: JHead.hh:424
Phase space of primary particle.
Definition: JHead.hh:414
bool is_valid(T JHead::*pd) const
Check validity of given data member in JHead.
Definition: JHead.hh:1235
JAANET::DAQ DAQ
Definition: JHead.hh:1497
Neutrino energy spectrum.
Definition: JHead.hh:521
JHead& JAANET::JHead::add ( const JHead header)
inline

Addition of headers.

Parameters
headerheader
Returns
this header

Definition at line 1427 of file JHead.hh.

1428  {
1429  if (match(header)) {
1430 
1431  genvol .add(header.genvol);
1432  norma .add(header.norma);
1433  livetime.add(header.livetime);
1434  DAQ .add(header.DAQ);
1435 
1436  } else {
1437 
1438  THROW(JException, "JHead::add() headers do not match.");
1439  }
1440 
1441  return *this;
1442  }
norma & add(const norma &object)
Addition.
Definition: JHead.hh:803
JAANET::genvol genvol
Definition: JHead.hh:1490
Neutrino vertex volume.
Definition: JHead.hh:634
JAANET::norma norma
Definition: JHead.hh:1493
Livetime of DAQ data.
Definition: JHead.hh:993
livetime & add(const livetime &object)
Addition.
Definition: JHead.hh:858
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:696
Normlisation of CORSIKA events.
Definition: JHead.hh:777
bool match(const JHead &header) const
Test match of headers.
Definition: JHead.hh:1371
DAQ & add(const DAQ &object)
Addition.
Definition: JHead.hh:1031
genvol & add(const genvol &object)
Addition.
Definition: JHead.hh:677
JAANET::livetime livetime
Definition: JHead.hh:1494
Normalisation of MUPAGE events.
Definition: JHead.hh:820
JAANET::DAQ DAQ
Definition: JHead.hh:1497
static const size_t JAANET::JHead::getMaximumNumberOfMatches ( )
inlinestatic

Get maximum number of matching header fields.

Returns
maximum number of matching header fields

Definition at line 1510 of file JHead.hh.

1511  {
1512  static const JHead header;
1513  static const size_t value = header.getNumberOfMatches(header);
1514 
1515  return value;
1516  }
Monte Carlo run header.
Definition: JHead.hh:1165
size_t getNumberOfMatches(const JHead &header) const
Get number of matching fields.
Definition: JHead.hh:1357
static JLANG::JEquationParameters& JAANET::JHead::getEquationParameters ( )
inlinestatic

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

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

Definition at line 1528 of file JHead.hh.

1529  {
1530  static JLANG::JEquationParameters parameters(":", "\n", "", "");
1531 
1532  return parameters;
1533  }
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Definition: diff-Tuna.sh:38
Simple data structure to support I/O of equations (see class JLANG::JEquation).
static void JAANET::JHead::setEquationParameters ( const JLANG::JEquationParameters equation)
inlinestatic

Set equation parameters.

Parameters
equationequation parameters

Definition at line 1541 of file JHead.hh.

1542  {
1543  getEquationParameters() = equation;
1544  }
static JLANG::JEquationParameters & getEquationParameters()
Get equation parameters corresponding to Monte Carlo ASCII format, i.e:
Definition: JHead.hh:1528
std::istream & JAANET::JHead::read ( std::istream &  in)

Read header from input.

Parameters
ininput stream
Returns
input stream

Definition at line 30 of file JHead.cc.

31  {
32  using namespace std;
33  using namespace JPP;
34 
35  JStringStream is(in);
36 
37  if (getFileStatus(is.str().c_str())) {
38  is.load();
39  }
40 
42 
43  JRootReadableClass cls(*this);
44 
45  for (JEquation equation; reader >> equation && equation.getKey() != end_event::Class_Name(); ) {
46 
47  JRedirectString redirect(reader, equation.getValue());
48 
49  const JRootReadableClass abc = cls.find(equation.getKey().c_str());
50 
51  if (abc.is_valid()) {
52  reader.getObject(abc);
53  }
54 
55  (*this)[equation.getKey()] = equation.getValue();
56  }
57 
58  return in;
59  }
is
Definition: JDAQCHSM.chsm:167
T & getInstance(const T &object)
Get static instance from temporary object.
Definition: JObject.hh:75
static JLANG::JEquationParameters & getEquationParameters()
Get equation parameters corresponding to Monte Carlo ASCII format, i.e:
Definition: JHead.hh:1528
static JStat getFileStatus
Function object for file status.
Definition: JStat.hh:173
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:46
std::ostream & JAANET::JHead::write ( std::ostream &  out) const

Write header to output.

Parameters
outoutput stream
Returns
output stream

Definition at line 68 of file JHead.cc.

69  {
70  using namespace std;
71  using namespace JPP;
72 
73  JRootWriter writer(out, JHead::getEquationParameters(), JAAnetDictionary::getInstance());
74 
75  JRootWritableClass cls(*this);
76 
77  TIterator* i = cls.getClass()->GetListOfDataMembers()->MakeIterator();
78 
79  for (const TDataMember* p; (p = (const TDataMember*) i->Next()) != NULL; ) {
80  if (!JRootClass::is_static(*p)) {
81  if (this->find(p->GetName()) != this->end() ||
82  cls.get(*p) == JRootClass(&JHead::start_run) ||
83  cls.get(*p) == JRootClass(&JHead::end_event)) {
84  writer.put(p->GetName(), cls.get(*p), true);
85  }
86  }
87  }
88 
89  return out << flush;
90  }
JAANET::end_event end_event
Definition: JHead.hh:1502
T & getInstance(const T &object)
Get static instance from temporary object.
Definition: JObject.hh:75
static JLANG::JEquationParameters & getEquationParameters()
Get equation parameters corresponding to Monte Carlo ASCII format, i.e:
Definition: JHead.hh:1528
JAANET::start_run start_run
Definition: JHead.hh:1475
std::ostream & JAANET::JHead::print ( std::ostream &  out) const

Print header to output.

Parameters
outoutput stream
Returns
output stream

Definition at line 99 of file JHead.cc.

100  {
101  using namespace std;
102  using namespace JPP;
103 
104  JRootWriter writer(out, JHead::getEquationParameters(), JAAnetDictionary::getInstance());
105 
106  JRootWritableClass cls(*this);
107 
108  TIterator* i = cls.getClass()->GetListOfDataMembers()->MakeIterator();
109 
111 
112  for (const TDataMember* p; (p = (const TDataMember*) i->Next()) != NULL; ) {
113  if (!JRootClass::is_static(*p)) {
114  if (cls.get(*p) != JRootClass(&JHead::end_event))
115  writer.put(p->GetName(), cls.get(*p), true);
116  else
117  end_event = make_pair(p->GetName(), cls.get(*p));
118  }
119  }
120 
121  for (JHead::const_iterator i = this->begin(); i != this->end(); ++i) {
122  if (!cls.find(i->first.c_str()).is_valid()) {
123  writer.put(i->first, i->second);
124  }
125  }
126 
127  writer.put(end_event.first, end_event.second, true);
128 
129  return out << flush;
130  }
JAANET::end_event end_event
Definition: JHead.hh:1502
T & getInstance(const T &object)
Get static instance from temporary object.
Definition: JObject.hh:75
static JLANG::JEquationParameters & getEquationParameters()
Get equation parameters corresponding to Monte Carlo ASCII format, i.e:
Definition: JHead.hh:1528
bool is_valid(T JHead::*pd) const
Check validity of given data member in JHead.
Definition: JHead.hh:1235
JAANET::JHead::ClassDef ( JHead  ,
 
)
template<class T >
static bool JAANET::JHead::less ( const T first,
const T second 
)
inlinestaticprivate

Comparison.

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

Definition at line 1585 of file JHead.hh.

1587  {
1588  return first.less(second);
1589  }
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
template<class T >
static bool JAANET::JHead::match ( const T first,
const T second 
)
inlinestaticprivate

Test match.

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

Definition at line 1600 of file JHead.hh.

1602  {
1603  return first.match(second);
1604  }
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
template<class T >
static bool JAANET::JHead::less ( const std::vector< T > &  first,
const std::vector< T > &  second 
)
inlinestaticprivate

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 1616 of file JHead.hh.

1618  {
1619  if (first.size() == second.size()) {
1620 
1621  for (size_t i = 0; i != first.size(); ++i) {
1622  if (less(first[i], second[i])) {
1623  return true;
1624  }
1625  }
1626 
1627  return false;
1628 
1629  } else {
1630 
1631  return first.size() < second.size();
1632  }
1633  }
bool less(const JHead &header) const
Comparison of headers.
Definition: JHead.hh:1383
template<class T >
static bool JAANET::JHead::match ( const std::vector< T > &  first,
const std::vector< T > &  second 
)
inlinestaticprivate

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 1645 of file JHead.hh.

1647  {
1648  for (size_t i = 0; i != first.size() && i != second.size(); ++i) {
1649  if (!match(first[i], second[i])) {
1650  return false;
1651  }
1652  }
1653 
1654  return first.size() == second.size();
1655  }
bool match(const JHead &header) const
Test match of headers.
Definition: JHead.hh:1371
template<class T >
static bool JAANET::JHead::match ( const JHead first,
const JHead second,
T JHead::*  pd 
)
inlinestaticprivate

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 1667 of file JHead.hh.

1670  {
1671  return match(first.*pd, second.*pd);
1672  }
bool match(const JHead &header) const
Test match of headers.
Definition: JHead.hh:1371
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 76 of file Head.hh.

77  {
78  return count( key ) != 0;
79  }
std::vector< int > count
Definition: JAlgorithm.hh:180
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 88 of file Head.hh.

89  {
90  return this->at(key);
91  }
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 100 of file Head.hh.

101  {
102  return this->at(key);
103  }
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 114 of file Head.hh.

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

154  {
156 
157  for ( auto& key : matching_keys( tag ) ) {
158  r.push_back( get_line( key ) );
159  }
160 
161  return r;
162  }
data_type r[M+1]
Definition: JPolint.hh:758
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 &quot;_n&quot;.
Definition: Head.hh:114
const std::string & get_line(std::string key) const
Get data with the given key.
Definition: Head.hh:88
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 175 of file Head.hh.

176  {
177  std::string k = tag;
178 
179  if (ensure_unique)
180  for (int i = 1; find(k) != end() ; i++)
181  {
182  k = tag + "_" + std::to_string(i);
183  }
184 
186  return k;
187  }
then fatal No hydrophone data file $HYDROPHONE_TXT fi sort gr k
std::string to_string(const T &value)
Convert value to string.
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 197 of file Head.hh.

198  {
199  using namespace std;
200 
202 
203  if ( idx < 0 || idx >= int ( v.size() ) )
204  {
205  THROW(Exception, "Cannot find word number " << idx << " in line " << get_line(key) << " for key: " << key);
206  }
207  return v[idx];
208  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:696
General exception.
Definition: Exception.hh:13
const std::string & get_line(std::string key) const
Get data with the given key.
Definition: Head.hh:88
data_type v[N+1][M+1]
Definition: JPolint.hh:756
std::vector< std::string > splitstring(const std::string &str, char delim= ' ')
Split string at delimiter.
Definition: Head.hh:46
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 237 of file Head.hh.

238  {
239  int idx = get_index_of_field(key, field);
240 
241  if ( idx == -1 )
242  {
243  THROW(Exception, "Failed to find" << key << " " << field);
244  }
245 
246  return get_field( key, idx );
247  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:696
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:219
General exception.
Definition: Exception.hh:13
std::string get_field(std::string key, int idx) const
Get data with the given key at given index.
Definition: Head.hh:197
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 219 of file Head.hh.

220  {
221  auto v = _hdr_dict()[key];
222  auto i = std::find (v.begin(), v.end(), field );
223  if (i == v.end()) return -1;
224  return i - v.begin();
225  }
data_type v[N+1][M+1]
Definition: JPolint.hh:756
static std::map< std::string, std::vector< std::string > > & _hdr_dict()
Get internal description of the known lines in header.
Definition: Head.hh:312
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 260 of file Head.hh.

261  {
262  using namespace std;
263 
264  if ( field == "" ) get_line( key ) = value;
265 
266  int idx = get_index_of_field( key, field );
267 
268  if ( idx < 0 )
269  {
270  THROW(Exception, "GFailed to find field in header line: " << key << " " << field);
271  }
272 
273  vector<string> vals = splitstring( get_line( key ) );
274 
275  // if the fields before do not exist, add padding
276  while ( int( vals.size() ) <= idx ) vals.push_back("0");
277 
278  vals[idx] = value;
279  ostringstream ss;
280 
281  for (unsigned i = 0; i < vals.size() ; i++ )
282  {
283  ss << vals[i];
284  if ( i != vals.size() - 1) ss << " ";
285  }
286  set_line( key, ss.str() );
287 
288  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:696
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:219
std::string set_line(std::string tag, std::string line, bool ensure_unique=true)
Set data with the given tag.
Definition: Head.hh:175
General exception.
Definition: Exception.hh:13
const std::string & get_line(std::string key) const
Get data with the given key.
Definition: Head.hh:88
std::vector< std::string > splitstring(const std::string &str, char delim= ' ')
Split string at delimiter.
Definition: Head.hh:46
static 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 312 of file Head.hh.

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

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

Returns
number of events

Definition at line 362 of file Head.hh.

363  {
364  return stod ( get_field("genvol", "numberOfEvents") );
365  }
std::string get_field(std::string key, int idx) const
Get data with the given key at given index.
Definition: Head.hh:197
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 372 of file Head.hh.

373  {
374  return stod ( get_field("DAQ", "livetime") );
375  }
std::string get_field(std::string key, int idx) const
Get data with the given key at given index.
Definition: Head.hh:197
double Head::mc_livetime ( ) const
inlineinherited

Get the Monte Carlo live time.

Returns
live time [s]

Definition at line 383 of file Head.hh.

384  {
385  return stod ( get_field("livetime", "numberOfSeconds") );
386  }
std::string get_field(std::string key, int idx) const
Get data with the given key at given index.
Definition: Head.hh:197
Vec Head::coord_origin ( ) const
inlineinherited

Get coordinate origin.

Returns
position

Definition at line 393 of file Head.hh.

394  {
395  return Vec( stod( get_field("coord_origin", "x") ),
396  stod( get_field("coord_origin", "y") ),
397  stod( get_field("coord_origin", "z") ));
398  }
The Vec class is a straightforward 3-d vector, which also works in pyroot.
Definition: Vec.hh:12
std::string get_field(std::string key, int idx) const
Get data with the given key at given index.
Definition: Head.hh:197
Vec Head::translate ( ) const
inlineinherited

Get coordinate translation.

Returns
translation

Definition at line 405 of file Head.hh.

406  {
407  return Vec( stod( get_field("translate", "x") ),
408  stod( get_field("translate", "y") ),
409  stod( get_field("translate", "z") ));
410  }
The Vec class is a straightforward 3-d vector, which also works in pyroot.
Definition: Vec.hh:12
std::string get_field(std::string key, int idx) const
Get data with the given key at given index.
Definition: Head.hh:197
Head::ClassDef ( Head  ,
 
)
inherited

Friends And Related Function Documentation

bool operator== ( const JHead first,
const JHead second 
)
friend

Equal operator.

Note that this operator uses the JHead::match method.

Parameters
firstfirst header
secondsecond header
Returns
true if two headers are equal; else false

Definition at line 1454 of file JHead.hh.

1456  {
1457  return first.match(second);
1458  }
bool match(const JHead &header) const
Test match of headers.
Definition: JHead.hh:1371
bool operator< ( const JHead first,
const JHead second 
)
friend

Less than operator.

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

Definition at line 1468 of file JHead.hh.

1470  {
1471  return first.less(second);
1472  }
bool less(const JHead &header) const
Comparison of headers.
Definition: JHead.hh:1383

Member Data Documentation

JAANET::start_run JAANET::JHead::start_run

Definition at line 1475 of file JHead.hh.

JAANET::XSecFile JAANET::JHead::XSecFile

Definition at line 1476 of file JHead.hh.

JAANET::drawing JAANET::JHead::drawing

Definition at line 1477 of file JHead.hh.

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

Definition at line 1478 of file JHead.hh.

JAANET::muon_desc_file JAANET::JHead::muon_desc_file

Definition at line 1479 of file JHead.hh.

JAANET::target JAANET::JHead::target

Definition at line 1480 of file JHead.hh.

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

Definition at line 1481 of file JHead.hh.

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

Definition at line 1482 of file JHead.hh.

JAANET::cut_primary JAANET::JHead::cut_primary

Definition at line 1483 of file JHead.hh.

JAANET::cut_seamuon JAANET::JHead::cut_seamuon

Definition at line 1484 of file JHead.hh.

JAANET::cut_in JAANET::JHead::cut_in

Definition at line 1485 of file JHead.hh.

JAANET::cut_nu JAANET::JHead::cut_nu

Definition at line 1486 of file JHead.hh.

JAANET::spectrum JAANET::JHead::spectrum

Definition at line 1487 of file JHead.hh.

JAANET::can JAANET::JHead::can

Definition at line 1488 of file JHead.hh.

JAANET::fixedcan JAANET::JHead::fixedcan

Definition at line 1489 of file JHead.hh.

JAANET::genvol JAANET::JHead::genvol

Definition at line 1490 of file JHead.hh.

JAANET::coord_origin JAANET::JHead::coord_origin

Definition at line 1491 of file JHead.hh.

JAANET::genhencut JAANET::JHead::genhencut

Definition at line 1492 of file JHead.hh.

JAANET::norma JAANET::JHead::norma

Definition at line 1493 of file JHead.hh.

JAANET::livetime JAANET::JHead::livetime

Definition at line 1494 of file JHead.hh.

JAANET::seabottom JAANET::JHead::seabottom

Definition at line 1495 of file JHead.hh.

JAANET::depth JAANET::JHead::depth

Definition at line 1496 of file JHead.hh.

JAANET::DAQ JAANET::JHead::DAQ

Definition at line 1497 of file JHead.hh.

JAANET::tgen JAANET::JHead::tgen

Definition at line 1498 of file JHead.hh.

JAANET::time_interval JAANET::JHead::time_interval

Definition at line 1499 of file JHead.hh.

JAANET::primary JAANET::JHead::primary

Definition at line 1500 of file JHead.hh.

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

Definition at line 1501 of file JHead.hh.

JAANET::end_event JAANET::JHead::end_event

Definition at line 1502 of file JHead.hh.


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