The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred to as "tags") and values.  
 More...
#include <Head.hh>
 | 
| bool  | have_line (std::string key) const | 
|   | Check availability of data with the given key.  
  | 
|   | 
| const std::string &  | get_line (std::string key) const | 
|   | Get data with the given key.  
  | 
|   | 
| std::string &  | get_line (std::string key) | 
|   | Get data with the given key.  
  | 
|   | 
| 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".  
  | 
|   | 
| std::vector< std::string >  | get_lines (const std::string &tag) const | 
|   | Get all data compatible with the given key.  
  | 
|   | 
| std::string  | set_line (std::string tag, std::string line, bool ensure_unique=true) | 
|   | Set data with the given tag.  
  | 
|   | 
| std::string  | get_field (std::string key, int idx) const | 
|   | Get data with the given key at given index.  
  | 
|   | 
| int  | get_index_of_field (std::string key, std::string field) const | 
|   | Get index of data with the given key at given field.  
  | 
|   | 
| std::string  | get_field (std::string key, std::string field) const | 
|   | Get data with the given key at given field.  
  | 
|   | 
| void  | set_field (std::string key, std::string field, std::string value) | 
|   | Set data with the given key at given field.  
  | 
|   | 
| void  | print (std::ostream &out=std::cout) const | 
|   | Print header.  
  | 
|   | 
| double  | ngen () const | 
|   | Get the number of generated events needed for computing event rates.  
  | 
|   | 
| double  | daq_livetime () const | 
|   | Get the the live time provided by the DAQ sytstem (=number of processed timeslices * frametime).  
  | 
|   | 
| double  | mc_livetime () const | 
|   | Get the Monte Carlo live time.  
  | 
|   | 
| Vec  | coord_origin () const | 
|   | Get coordinate origin.  
  | 
|   | 
| Vec  | translate () const | 
|   | Get coordinate translation.  
  | 
|   | 
| virtual  | ~Head () | 
|   | 
|   | ClassDef (Head, 2) | 
|   | 
 | 
| static int  | ROOT_IO_VERSION = -1 | 
|   | Streamer version as obtained from ROOT file.  
  | 
|   | 
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred to as "tags") and values. 
Definition at line 64 of file Head.hh.
 
◆ ~Head()
◆ have_line()
  
  
      
        
          | bool Head::have_line  | 
          ( | 
          std::string |           key | ) | 
           const | 
         
       
   | 
  
inline   | 
  
 
Check availability of data with the given key. 
- Parameters
 - 
  
  
 
- 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 | 
         
       
   | 
  
inline   | 
  
 
Get data with the given key. 
This method throws a run-time exception if no data are available.
- Parameters
 - 
  
  
 
- 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 | ) | 
           | 
         
       
   | 
  
inline   | 
  
 
Get data with the given key. 
This method throws a run-time exception if no data are available.
- Parameters
 - 
  
  
 
- 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 | 
         
       
   | 
  
inline   | 
  
 
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
 - 
  
  
 
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      
  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 
  141  }
 
 
 
◆ get_lines()
  
  
      
        
          | std::vector< std::string > Head::get_lines  | 
          ( | 
          const std::string & |           tag | ) | 
           const | 
         
       
   | 
  
inline   | 
  
 
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
 - 
  
  
 
- Returns
 - data 
 
Definition at line 154 of file Head.hh.
  155  {
  157 
  160    }
  161 
  163  }
const std::string & get_line(std::string key) const
Get data with the given key.
 
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".
 
 
 
 
◆ set_line()
  
  
      
        
          | std::string Head::set_line  | 
          ( | 
          std::string |           tag,  | 
         
        
           | 
           | 
          std::string |           line,  | 
         
        
           | 
           | 
          bool |           ensure_unique = true ) | 
         
       
   | 
  
inline   | 
  
 
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
 - 
  
    | tag | tag  | 
    | line | data  | 
    | ensure_unique | add '_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  }
 
 
 
◆ get_field() [1/2]
  
  
      
        
          | std::string Head::get_field  | 
          ( | 
          std::string |           key,  | 
         
        
           | 
           | 
          int |           idx ) const | 
         
       
   | 
  
inline   | 
  
 
Get data with the given key at given index. 
This method throws a run-time exception if no data are available.
- Parameters
 - 
  
  
 
- Returns
 - data 
 
Definition at line 198 of file Head.hh.
  199  {
  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    }
  209  }
std::vector< std::string > splitstring(const std::string &str, char delim=' ')
Split string at delimiter.
 
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
 
 
 
 
◆ get_index_of_field()
  
  
      
        
          | int Head::get_index_of_field  | 
          ( | 
          std::string |           key,  | 
         
        
           | 
           | 
          std::string |           field ) const | 
         
       
   | 
  
inline   | 
  
 
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
 - 
  
  
 
- Returns
 - index (-1 if not present) 
 
Definition at line 220 of file Head.hh.
  221  {
  223    if ( d.count(key) == 0 ) return -1;
  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.
 
 
 
 
◆ get_field() [2/2]
  
  
      
        
          | std::string Head::get_field  | 
          ( | 
          std::string |           key,  | 
         
        
           | 
           | 
          std::string |           field ) const | 
         
       
   | 
  
inline   | 
  
 
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
 - 
  
  
 
- Returns
 - data 
 
Definition at line 240 of file Head.hh.
  241  {
  243 
  244    if ( idx == -1 )
  245    {
  247    }
  248 
  250  }
int get_index_of_field(std::string key, std::string field) const
Get index of data with the given key at given field.
 
std::string get_field(std::string key, int idx) const
Get data with the given key at given index.
 
 
 
 
◆ set_field()
  
  
      
        
          | void Head::set_field  | 
          ( | 
          std::string |           key,  | 
         
        
           | 
           | 
          std::string |           field,  | 
         
        
           | 
           | 
          std::string |           value ) | 
         
       
   | 
  
inline   | 
  
 
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
 - 
  
    | key | key  | 
    | field | field  | 
    | value | vakue  | 
  
   
Definition at line 263 of file Head.hh.
  264  {
  266 
  267    if ( field == 
"" ) 
get_line( key ) = value;
 
  268 
  270 
  271    if ( idx < 0 )
  272    {
  273      THROW(
Exception, 
"GFailed to find field in header line: " << key << 
" " << field);
 
  274    }
  275 
  277 
  278    
  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    }
  290 
  291  }
std::string set_line(std::string tag, std::string line, bool ensure_unique=true)
Set data with the given tag.
 
 
 
 
◆ print()
  
  
      
        
          | void Head::print  | 
          ( | 
          std::ostream & |           out = std::cout | ) | 
           const | 
         
       
   | 
  
inline   | 
  
 
Print header. 
- Parameters
 - 
  
  
 
Definition at line 298 of file Head.hh.
  299  {
  300    if (count("start_run")) out << "start_run: " << at("start_run") << std::endl;
  301 
  302    for ( auto& p : *this )
  303    {
  304      if ( p.first == "start_run" || p.first == "end_event" ) continue;
  305      out << p.first << ": " << p.second << std::endl ;
  306    }
  307    out << "end_event:" << std::endl;
  308  }
 
 
 
◆ _hdr_dict()
Get internal description of the known lines in header. 
- Returns
 - internal dictionary 
 
Definition at line 315 of file Head.hh.
  316  {
  318 
  319    
  320 
  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"               
  339      "K40:livetime\n"                
  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 
  348    {
  350 
  353      {
  355      }
  356    }
  358  }
 
 
 
◆ ngen()
  
  
      
        
          | double Head::ngen  | 
          ( | 
           | ) | 
           const | 
         
       
   | 
  
inline   | 
  
 
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 | 
         
       
   | 
  
inline   | 
  
 
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 | 
         
       
   | 
  
inline   | 
  
 
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  }
 
 
 
◆ coord_origin()
  
  
      
        
          | Vec Head::coord_origin  | 
          ( | 
           | ) | 
           const | 
         
       
   | 
  
inline   | 
  
 
Get coordinate origin. 
- Returns
 - position 
 
Definition at line 397 of file Head.hh.
  398  {
  402  }
The Vec class is a straightforward 3-d vector, which also works in pyroot.
 
 
 
 
◆ translate()
  
  
      
        
          | Vec Head::translate  | 
          ( | 
           | ) | 
           const | 
         
       
   | 
  
inline   | 
  
 
Get coordinate translation. 
- Returns
 - translation 
 
Definition at line 409 of file Head.hh.
 
 
◆ actionAtFileOpen()
  
  
      
        
          | static void Head::actionAtFileOpen  | 
          ( | 
          int |           version | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Action method at file open. 
- Parameters
 - 
  
  
 
Definition at line 423 of file Head.hh.
  424  {
  426  }
static int ROOT_IO_VERSION
Streamer version as obtained from ROOT file.
 
 
 
 
◆ ClassDef()
      
        
          | Head::ClassDef  | 
          ( | 
          Head |           ,  | 
        
        
           | 
           | 
          2 |            ) | 
        
      
 
 
◆ ROOT_IO_VERSION
  
  
      
        
          | int Head::ROOT_IO_VERSION = -1 | 
         
       
   | 
  
static   | 
  
 
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 files: