Jpp
JSummaryFileRouter.hh
Go to the documentation of this file.
1 #ifndef __JSUPPORT__JSUMMARYFILEROUTER__
2 #define __JSUPPORT__JSUMMARYFILEROUTER__
3 
4 #include <string>
5 
6 #include "JTools/JRouter.hh"
9 #include "JDAQ/JDAQEvaluator.hh"
11 #include "JSupport/JTreeScanner.hh"
12 
13 
14 /**
15  * \author mdejong
16  */
17 
18 namespace JSUPPORT {}
19 namespace JPP { using namespace JSUPPORT; }
20 
21 namespace JSUPPORT {
22 
29 
30 
31  /**
32  * File router for fast addressing of summary data.
33  *
34  * The member method JSummaryFileRouter::update should be used to update the internal router for a given event.\n
35  * The member method JSummaryFileRouter::getRate can then be used to obtain the measured singles rate for a given PMT.
36  */
38  public JTreeScanner<JDAQSummaryslice, JDAQEvaluator>
39  {
40  public:
41  /**
42  * Constructor.
43  *
44  * \param file_name file name
45  * \param rate_Hz default singles rate [Hz]
46  */
47  JSummaryFileRouter(const std::string& file_name,
48  const double rate_Hz) :
51  router (-1),
52  summary(NULL)
53  {}
54 
55 
56  /**
57  * Get default rate.
58  *
59  * \return rate [Hz]
60  */
61  double getRate() const
62  {
63  return rate_Hz;
64  }
65 
66 
67  /**
68  * Update router.
69  *
70  * \param header header
71  */
72  void update(const JDAQHeader& header)
73  {
74  static Long64_t previous = -1;
75 
76  const Long64_t index = this->find(header);
77 
78  if (index != -1) {
79 
80  if (index != previous) {
81 
82  previous = index;
83 
84  // reset internal router
85 
86  if (summary != NULL) {
87  for (JDAQSummaryslice::const_iterator i = summary->begin(); i != summary->end(); ++i) {
88  router.put(i->getModuleID(), router.getDefaultAddress());
89  }
90  }
91 
92  summary = this->getEntry(index);
93 
94  if (summary != NULL) {
95 
96  // set internal router
97 
98  for (JDAQSummaryslice::const_iterator i = summary->begin(); i != summary->end(); ++i) {
99  router.put(i->getModuleID(), distance(summary->begin(), i));
100  }
101  }
102  }
103  }
104  }
105 
106 
107  /**
108  * Get address of module.
109  *
110  * \param module module
111  * \return address
112  */
113  const int getAddress(const JDAQModuleIdentifier& module) const
114  {
115  return router.get(module.getModuleID());
116  }
117 
118 
119  /**
120  * Get summary frame.
121  *
122  * \param module module
123  * \return summary frame
124  */
126  {
127  return (*summary)[getAddress(module)];
128  }
129 
130 
131  /**
132  * Has summary frame.
133  *
134  * \param module module
135  * \return true if module present; else false
136  */
137  bool hasSummaryFrame(const JDAQModuleIdentifier& module) const
138  {
139  return router.has(module.getModuleID());
140  }
141 
142 
143  /**
144  * Get rate.
145  *
146  * \param id PMT identifier
147  * \return rate [Hz]
148  */
149  double getRate(const JDAQPMTIdentifier& id) const
150  {
151  if (this->hasSummaryFrame(id.getModuleIdentifier()))
152  return this->getSummaryFrame(id.getModuleIdentifier()).getRate(id.getPMTAddress());
153  else
154  return rate_Hz;
155  }
156 
157  protected:
158  double rate_Hz;
159 
160  private:
163  };
164 }
165 
166 #endif
JSUPPORT::JSummaryFileRouter::update
void update(const JDAQHeader &header)
Update router.
Definition: JSummaryFileRouter.hh:72
JSUPPORT::JSummaryFileRouter::rate_Hz
double rate_Hz
Definition: JSummaryFileRouter.hh:158
JSUPPORT::JSummaryFileRouter::getSummaryFrame
const JDAQSummaryFrame & getSummaryFrame(const JDAQModuleIdentifier &module) const
Get summary frame.
Definition: JSummaryFileRouter.hh:125
KM3NETDAQ::JDAQHeader
DAQ header.
Definition: JDAQHeader.hh:17
JSUPPORT::JSummaryFileRouter::getRate
double getRate(const JDAQPMTIdentifier &id) const
Get rate.
Definition: JSummaryFileRouter.hh:149
KM3NETDAQ::JDAQModuleIdentifier::getModuleID
int getModuleID() const
Get module identifier.
Definition: JDAQModuleIdentifier.hh:72
distance
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Definition: PhysicsEvent.hh:434
JSUPPORT::JSummaryFileRouter::getAddress
const int getAddress(const JDAQModuleIdentifier &module) const
Get address of module.
Definition: JSummaryFileRouter.hh:113
JSUPPORT::JSummaryFileRouter::summary
const JDAQSummaryslice * summary
Definition: JSummaryFileRouter.hh:162
JTreeScanner.hh
JDAQSummaryslice.hh
KM3NETDAQ::JDAQSummaryFrame::getRate
double getRate(const int tdc, const double factor=1.0) const
Get count rate.
Definition: JDAQSummaryFrame.hh:456
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JSUPPORT::JSummaryFileRouter::getRate
double getRate() const
Get default rate.
Definition: JSummaryFileRouter.hh:61
JTOOLS::JRouter< int >
KM3NETDAQ::JDAQSummaryFrame
Data storage class for rate measurements of all PMTs in one module.
Definition: JDAQSummaryFrame.hh:320
JSUPPORT::JTreeScanner
Template definition for direct access of elements in ROOT TChain.
Definition: JTreeScanner.hh:91
JSUPPORT::JSummaryFileRouter::hasSummaryFrame
bool hasSummaryFrame(const JDAQModuleIdentifier &module) const
Has summary frame.
Definition: JSummaryFileRouter.hh:137
KM3NETDAQ::JDAQSummaryslice
Data summary slice.
Definition: JDAQSummaryslice.hh:25
JDAQHeader.hh
KM3NETDAQ::JDAQModuleIdentifier
Module identifier.
Definition: JDAQModuleIdentifier.hh:19
JSUPPORT::JSummaryFileRouter::router
JTOOLS::JRouter< int > router
Definition: JSummaryFileRouter.hh:161
KM3NETDAQ::JDAQPMTIdentifier
PMT identifier.
Definition: JDAQPMTIdentifier.hh:20
JSUPPORT::JSummaryFileRouter::JSummaryFileRouter
JSummaryFileRouter(const std::string &file_name, const double rate_Hz)
Constructor.
Definition: JSummaryFileRouter.hh:47
JSUPPORT
Support classes and methods for experiment specific I/O.
Definition: JDataWriter.cc:38
JRouter.hh
JSUPPORT::JSummaryFileRouter
File router for fast addressing of summary data.
Definition: JSummaryFileRouter.hh:37
JDAQPMTIdentifier.hh
JDAQEvaluator.hh
KM3NETDAQ::JDAQEvaluator
Auxiliary class to determine value of DAQ objects.
Definition: JDAQEvaluator.hh:18