Jpp
JSupportToolkit.hh
Go to the documentation of this file.
1 #ifndef __JSUPPORT__JSUPPORTTOOLKIT__
2 #define __JSUPPORT__JSUPPORTTOOLKIT__
3 
4 #include <string>
5 
6 #include "TDirectory.h"
7 
9 #include "JDAQ/JDAQEvaluator.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 
31 
32 
33  /**
34  * Type definition for frame index range.
35  */
37 
38  /**
39  * Type definition for DAQ UTC time range.
40  */
42 
43 
44  /**
45  * Get time duration of given UTC time range.
46  *
47  * \param utc UTC time range
48  * \return time duration [s]
49  */
50  inline double getTimeDuration(const JDAQUTCTimeRange& utc)
51  {
52  if (utc.is_valid())
53  return (utc.getUpperLimit().getTimeNanoSecond() -
54  utc.getLowerLimit().getTimeNanoSecond()) * 1.0e-9;
55  else
56  return 0.0;
57  }
58 
59 
60  /**
61  * Get range of frame indices.
62  *
63  * \param in TTree scanner
64  * \return frame index range
65  */
66  template<class T>
68  {
69  if (!in.empty())
70  return JFrameIndexRange(in.begin()->getFrameIndex(), in.rbegin()->getFrameIndex());
71  else
72  return JFrameIndexRange(0,0);
73  }
74 
75 
76  /**
77  * Get range of frame indices for given file name of data taking run.
78  *
79  * \param file_name file name
80  * \return frame index range
81  */
82  template<class T>
83  inline JFrameIndexRange getFrameIndexRange(const std::string& file_name)
84  {
86 
87  TDirectory*& dir = TDirectory::CurrentDirectory();
88 
89  if (isROOTFile(file_name.c_str())) {
90 
92 
93  return getFrameIndexRange(in);
94 
95  } else {
96 
97  JFileScanner<T> in(file_name.c_str());
98 
99  while (in.hasNext()) {
100  result.include(in.next()->getFrameIndex());
101  }
102  }
103 
104  if (dir != NULL) {
105  dir->cd(); // restore current working directory
106  }
107 
108  return result;
109  }
110 
111 
112  /**
113  * Get UTC time range.
114  *
115  * \param in TTree scanner
116  * \return UTC time range
117  */
118  template<class T>
120  {
121  if (!in.empty())
122  return JDAQUTCTimeRange(in.begin()->getTimesliceStart(), in.rbegin()->getTimesliceStart());
123  else
125  }
126 
127 
128  /**
129  * Get UTC time range for given file name of data taking run.
130  *
131  * \param file_name file name
132  * \return UTC time range
133  */
134  template<class T>
135  inline JDAQUTCTimeRange getUTCTimeRange(const std::string& file_name)
136  {
138 
139  TDirectory*& dir = TDirectory::CurrentDirectory();
140 
141  if (isROOTFile(file_name.c_str())) {
142 
144 
145  result = getUTCTimeRange(in);
146 
147  } else {
148 
149  for (JFileScanner<T> in(file_name.c_str()); in.hasNext(); ) {
150  result.include(in.next()->getTimesliceStart());
151  }
152  }
153 
154  if (dir != NULL) {
155  dir->cd(); // restore current working directory
156  }
157 
158  return result;
159  }
160 
161 
162  /**
163  * Get UTC time range for given file name of data taking run.
164  * Get data taking live time.
165  *
166  * \param __begin begin of file list
167  * \param __end end of file list
168  * \return UTC time range
169  */
170  template<class T>
171  inline JDAQUTCTimeRange getUTCTimeRange(T __begin, T __end)
172  {
174 
175  for (T i = __begin; i != __end; ++i) {
176  result.combine(getUTCTimeRange<KM3NETDAQ::JDAQSummaryslice>(*i));
177  }
178 
179  return result;
180  }
181 
182 
183  /**
184  * Get data taking live time.
185  *
186  * \param file_name file name
187  * \return live time [s]
188  */
189  inline double getLivetime(const std::string& file_name)
190  {
191  using namespace KM3NETDAQ;
192  using namespace JTRIGGER;
193 
194  TDirectory*& dir = TDirectory::CurrentDirectory();
195 
196  double livetime = 0.0;
197 
198  const JTriggerParameters parameters = getTriggerParameters(file_name);
199 
200  if (parameters.writeSummary.prescale != 0) {
201 
202  JTreeScanner<JDAQSummaryslice> in(file_name);
203 
204  livetime = in.getEntries() * getFrameTime() * 1.0e-9 / parameters.writeSummary.prescale;
205  }
206 
207  if (dir != NULL) {
208  dir->cd(); // restore current working directory
209  }
210 
211  return livetime;
212  }
213 
214 
215  /**
216  * Get data taking live time.
217  *
218  * \param __begin begin of file list
219  * \param __end end of file list
220  * \return live time [s]
221  */
222  template<class T>
223  inline double getLivetime(T __begin, T __end)
224  {
225  double livetime = 0.0;
226 
227  for (T i = __begin; i != __end; ++i) {
228  livetime += getLivetime(*i);
229  }
230 
231  return livetime;
232  }
233 }
234 
235 #endif
JSUPPORT::JDAQUTCTimeRange
JTOOLS::JRange< JDAQUTCExtended > JDAQUTCTimeRange
Type definition for DAQ UTC time range.
Definition: JSupportToolkit.hh:41
JSUPPORT::getTriggerParameters
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters.
Definition: JTriggerParametersSupportkit.hh:148
JTOOLS::JRange::getLowerLimit
T getLowerLimit() const
Get lower limit.
Definition: JRange.hh:215
JTRIGGER::JPrescaler::prescale
long long int prescale
Definition: JPrescaler.hh:96
JSUPPORT::JFileScanner
Object reading from file.
Definition: JFileScanner.hh:34
JTriggerParameters.hh
JTOOLS::JRange::getUpperLimit
T getUpperLimit() const
Get upper limit.
Definition: JRange.hh:226
KM3NETDAQ::JDAQUTCExtended
Data structure for UTC time.
Definition: JDAQUTCExtended.hh:22
JTRIGGER::JTriggerParameters
Data structure for all trigger parameters.
Definition: JTriggerParameters.hh:116
JSUPPORT::getUTCTimeRange
JDAQUTCTimeRange getUTCTimeRange(T __begin, T __end)
Get UTC time range for given file name of data taking run.
Definition: JSupportToolkit.hh:171
JTOOLS::JRange< int >
JTOOLS::JRange< int >::DEFAULT_RANGE
static const JRange< int, std::less< int > > DEFAULT_RANGE
Default range.
Definition: JRange.hh:558
JLANG::JObjectIterator::hasNext
virtual bool hasNext()=0
Check availability of next element.
JDAQClock.hh
JTreeScanner.hh
KM3NETDAQ::getFrameTime
double getFrameTime()
Get frame time duration.
Definition: JDAQClock.hh:162
JSUPPORT::isROOTFile
bool isROOTFile(const char *file_name)
Check file format.
Definition: JFilenameSupportkit.hh:32
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JRange.hh
JSUPPORT::JTreeScanner
Template definition for direct access of elements in ROOT TChain.
Definition: JTreeScanner.hh:91
JDAQUTCExtendedIO.hh
JTOOLS::result
return result
Definition: JPolint.hh:695
JSUPPORT::getLivetime
double getLivetime(T __begin, T __end)
Get data taking live time.
Definition: JSupportToolkit.hh:223
JTOOLS::JRange::is_valid
bool is_valid() const
Check validity of range.
Definition: JRange.hh:313
JTriggerParametersSupportkit.hh
JTRIGGER::JTriggerParameters::writeSummary
JPrescaler writeSummary
write JDAQSummaryslice
Definition: JTriggerParameters.hh:331
JFilenameSupportkit.hh
JSUPPORT
Support classes and methods for experiment specific I/O.
Definition: JDataWriter.cc:38
KM3NETDAQ
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
JDAQSummarysliceIO.hh
JAANET::livetime
Normalisation of MUPAGE events.
Definition: JHead.hh:594
JFileScanner.hh
JDAQEvaluator.hh
JTRIGGER
Checksum.
Definition: JSupport/JSupport.hh:35
JSUPPORT::JFrameIndexRange
JTOOLS::JRange< int > JFrameIndexRange
Type definition for frame index range.
Definition: JSupportToolkit.hh:36
JSUPPORT::getFrameIndexRange
JFrameIndexRange getFrameIndexRange(const std::string &file_name)
Get range of frame indices for given file name of data taking run.
Definition: JSupportToolkit.hh:83
JSUPPORT::getTimeDuration
double getTimeDuration(const JDAQUTCTimeRange &utc)
Get time duration of given UTC time range.
Definition: JSupportToolkit.hh:50