Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
Functions
software/JTrigger/JChecksum.cc File Reference

Example program to check KM3NETDAQ::JDAQTimeslice for errors. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <limits>
#include <deque>
#include <map>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "km3net-dataformat/online/JDAQClock.hh"
#include "JDAQ/JDAQTimesliceIO.hh"
#include "JSupport/JSingleFileScanner.hh"
#include "JSupport/JSupportToolkit.hh"
#include "JSupport/JSupport.hh"
#include "JROOT/JROOTClassSelector.hh"
#include "JROOT/JManager.hh"
#include "JLang/JObjectMultiplexer.hh"
#include "JTrigger/JChecksum.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to check KM3NETDAQ::JDAQTimeslice for errors.

Author
mdejong

Definition in file software/JTrigger/JChecksum.cc.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 94 of file software/JTrigger/JChecksum.cc.

95 {
96  using namespace std;
97  using namespace JPP;
98  using namespace KM3NETDAQ;
99 
101  JLimit_t & numberOfEvents = inputFile.getLimit();
102  JROOTClassSelector selector;
103  string outputFile;
104  int N;
105  double rate_Hz;
106  int debug;
107 
108  try {
109 
110  JParser<> zap("Example program to check timeslice data for errors.");
111 
112  zap['f'] = make_field(inputFile);
113  zap['n'] = make_field(numberOfEvents) = JLimit::max();
114  zap['C'] = make_field(selector) = getROOTClassSelection<JDAQTimesliceTypes_t>();
115  zap['o'] = make_field(outputFile) = "checksum.root";
116  zap['N'] = make_field(N, "number of rows to print") = 10;
117  zap['R'] = make_field(rate_Hz, "high-rate veto [Hz]") = 0.0;
118  zap['d'] = make_field(debug) = 3;
119 
120  zap(argc, argv);
121  }
122  catch(const exception& error) {
123  FATAL(error.what() << endl);
124  }
125 
126 
128 
129 
130  if (rate_Hz > 0.0) {
131  MAXIMAL_FRAME_SIZE = (int) (getFrameTime() * 1.0e-9 * rate_Hz * NUMBER_OF_PMTS + 0.5);
132  }
133 
134  map<int, int> errors;
135 
136  JFrameIndexRange frame_index = getFrameIndexRange<JDAQSummaryslice>(inputFile);
137 
138  const Long64_t nx = frame_index.second - frame_index.first + 1;
139  const Double_t xmin = (Double_t) frame_index.first - 0.5;
140  const Double_t xmax = (Double_t) frame_index.second + 0.5;
141 
142  JManager<int, TH1D> H1(new TH1D("[%]", NULL, nx, xmin, xmax));
143 
144  for (counter_type counter = 0; in.hasNext(); ++counter) {
145 
146  STATUS("event: " << setw(10) << counter << '\r'); DEBUG(endl);
147 
148  const JDAQTimeslice* timeslice = in.next();
149 
150  for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
151 
152  const JChecksum::result_type& result = checksum(*frame);
153 
154  for (JChecksum::const_iterator error = result.begin(); error != result.end(); ++error) {
155 
156  errors[error->type] += 1;
157 
158  H1[error->type]->Fill((Double_t) frame->getFrameIndex());
159  }
160 
161  if (debug >= debug_t) {
162 
163  for (JChecksum::const_iterator error = result.begin(); error != result.end(); ++error) {
164 
165  if (error->pos >= 0) {
166 
167  const int pmt = (*frame)[error->pos].getPMT();
168 
169  cout << "Module "
170  << setw(10) << frame->getModuleID() << '.' << setw(2) << setfill('0') << pmt << setfill(' ') << ' '
171  << setw(8) << frame->getFrameIndex() << ' '
172  << setw(6) << error->pos << '/' << setw(8) << frame->size() << ' '
173  << setw(2) << error->type << ' ';
174 
175  if (pmt < NUMBER_OF_PMTS) {
176  cout << setw(1) << frame->testHighRateVeto(pmt)
177  << setw(1) << frame->testFIFOStatus (pmt) << ' ';
178  }
179 
180  cout << setw(4) << frame->getUDPNumberOfReceivedPackets() << '/'
181  << setw(4) << frame->getUDPMaximalSequenceNumber();
182 
183  cout << " ";
184 
185  print(cout, error->type);
186 
187  cout << endl << endl;
188 
189  deque<JDAQHit> buffer;
190 
191  for (int i = error->pos - 1, n = 0; i >= 0 && n <= N; --i) {
192  if ((*frame)[i].getPMT() == (*frame)[error->pos].getPMT()) {
193  buffer.push_front((*frame)[i]);
194  ++n;
195  }
196  }
197 
198  for (deque<JDAQHit>::const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
199  print(cout, *i); cout << endl;
200  }
201 
202  print(cout, (*frame)[error->pos]);
203 
204  cout << " <<< " << endl;
205 
206  for (int i = error->pos + 1, n = 0; i < frame->size() && n <= N; ++i) {
207  if ((*frame)[i].getPMT() == (*frame)[error->pos].getPMT()) {
208  print(cout, (*frame)[i]); cout << endl;
209  ++n;
210  }
211  }
212 
213  } else {
214 
215  cout << "Module "
216  << setw(10) << frame->getModuleID() << ' ' << setw(2) << ' ' << ' '
217  << setw(8) << frame->getFrameIndex() << ' '
218  << setw(6) << error->pos << '/' << setw(8) << frame->size() << ' '
219  << setw(2) << error->type << ' ';
220 
221  cout << setw(1) << ' '
222  << setw(1) << ' ' << ' ';
223 
224  cout << setw(4) << frame->getUDPNumberOfReceivedPackets() << '/'
225  << setw(4) << frame->getUDPMaximalSequenceNumber();
226 
227  cout << " ";
228 
229  print(cout, error->type);
230 
231  cout << endl << endl;
232  }
233  }
234  }
235  }
236  }
237  STATUS(endl);
238 
239  for (map<int, int>::const_iterator i = errors.begin(); i != errors.end(); ++i) {
240 
241  print(cout, i->first);
242 
243  cout << ' ' << setw(8) << i->second << endl;
244  }
245 
246  H1.Write(outputFile.c_str());
247 }
string outputFile
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
#define STATUS(A)
Definition: JMessage.hh:63
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
Definition: JSirene.cc:69
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2142
Auxiliary class for multiplexing object iterators.
Utility class to parse command line options.
Definition: JParser.hh:1698
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys.
Definition: JManager.hh:47
Object reading from a list of files.
JKey_t first
Definition: JPair.hh:128
JValue_t second
Definition: JPair.hh:129
const double xmax
Definition: JQuadrature.cc:24
const double xmin
Definition: JQuadrature.cc:23
std::ostream & print(std::ostream &out, const JTestSummary &summary, const char delimiter=' ', const bool useColors=true)
Print test summary.
@ debug_t
debug
Definition: JMessage.hh:29
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Long64_t counter_type
Type definition for counter.
const int n
Definition: JPolint.hh:786
static const JChecksum checksum
Function object to perform check-sum of raw data.
Definition: JChecksum.hh:200
static int MAXIMAL_FRAME_SIZE
Maximal frame size.
Definition: JChecksum.hh:35
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
double getFrameTime()
Get frame time duration.
Definition: JDAQClock.hh:162
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
Definition: JSTDTypes.hh:14
Auxiliary class to select ROOT class based on class name.
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:45
Auxiliary data structure for result of checksum.
Definition: JChecksum.hh:90
result_type::const_iterator const_iterator
Definition: JChecksum.hh:119