Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JSupportToolkit.hh
Go to the documentation of this file.
1 #ifndef __JSUPPORT__JSUPPORTTOOLKIT__
2 #define __JSUPPORT__JSUPPORTTOOLKIT__
3 
4 #include <string>
5 #include <vector>
6 
7 #include "TDirectory.h"
8 
9 #include "JDAQ/JDAQClock.hh"
10 #include "JDAQ/JDAQEvaluator.hh"
11 #include "JDAQ/JDAQSummaryslice.hh"
13 #include "JTools/JRange.hh"
15 #include "JSupport/JFileScanner.hh"
16 #include "JSupport/JTreeScanner.hh"
18 
19 
20 /**
21  * \file
22  * Support methods.
23  * \author mdejong
24  */
25 namespace JSUPPORT {}
26 namespace JPP { using namespace JSUPPORT; }
27 
28 namespace JSUPPORT {
29 
30  /**
31  * Type definition for frame index range.
32  */
34 
35 
36  /**
37  * Get range of frame indices for given file name of data taking run.
38  *
39  * \param file_name file name
40  * \return frame index range
41  */
42  template<class T>
43  inline JFrameIndexRange getFrameIndexRange(const std::string& file_name)
44  {
45  using namespace KM3NETDAQ;
46 
48 
49  TDirectory*& dir = TDirectory::CurrentDirectory();
50 
51  if (isROOTFile(file_name.c_str())) {
52 
53  JTreeScanner<T, JDAQEvaluator> in(file_name);
54 
55  result = JFrameIndexRange(in.begin()->getFrameIndex(), in.rbegin()->getFrameIndex());
56 
57  } else {
58 
59  JFileScanner<T> in(file_name.c_str());
60 
61  while (in.hasNext()) {
62  result.include(in.next()->getFrameIndex());
63  }
64  }
65 
66  if (dir != NULL) {
67  dir->cd(); // restore current working directory
68  }
69 
70  return result;
71  }
72 
73 
74  /**
75  * Get data taking live time.
76  *
77  * \param file_name file name
78  * \return live time [s]
79  */
80  inline double getLivetime(const std::string& file_name)
81  {
82  using namespace KM3NETDAQ;
83  using namespace JTRIGGER;
84 
85  TDirectory*& dir = TDirectory::CurrentDirectory();
86 
87  double livetime = 0.0;
88 
89  const JTriggerParameters parameters = getTriggerParameters(file_name);
90 
91  if (parameters.writeSummary.prescale != 0) {
92 
93  JTreeScanner<JDAQSummaryslice> in(file_name);
94 
95  livetime = in.getEntries() * getFrameTime() * 1.0e-9 / parameters.writeSummary.prescale;
96  }
97 
98  if (dir != NULL) {
99  dir->cd(); // restore current working directory
100  }
101 
102  return livetime;
103  }
104 
105 
106  /**
107  * Get data taking live time.
108  *
109  * \param __begin begin of file list
110  * \param __end end of file list
111  * \return live time [s]
112  */
113  template<class T>
114  inline double getLivetime(T __begin, T __end)
115  {
116  double livetime = 0.0;
117 
118  for (T i = __begin; i != __end; ++i) {
119  livetime += getLivetime(*i);
120  }
121 
122  return livetime;
123  }
124 }
125 
126 #endif
JFrameIndexRange getFrameIndexRange(const std::string &file_name)
Get range of frame indices for given file name of data taking run.
static const JRange< int, std::less< int > > DEFAULT_RANGE
Default range.
Definition: JRange.hh:506
JTOOLS::JRange< int > JFrameIndexRange
Type definition for frame index range.
Data structure for all trigger parameters.
range_type include(argument_type x)
Include given value to range.
Definition: JRange.hh:336
Template definition for direct access of elements in ROOT TChain.
Definition: JTreeScanner.hh:89
bool isROOTFile(const char *file_name)
Check file format.
double getFrameTime()
Get frame time duration.
Definition: JDAQClock.hh:162
Auxiliary class to define a range between two values.
double getLivetime(const std::string &file_name)
Get data taking live time.
Object reading from file.
Definition: JFileScanner.hh:34
Specifications of file name extensions.
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters.