Jpp  master_rocky
the software that should make you happy
Functions
JSummaryMonitor.cc File Reference

Auxiliary program to monitor summary data. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <set>
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JSupport/JSingleFileScanner.hh"
#include "JSummaryslice/JSummaryslice.hh"
#include "JSupport/JSupport.hh"
#include "JTools/JQuantile.hh"
#include "Jeep/JPrint.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

Auxiliary program to monitor summary data.

Author
mdejong

Definition in file JSummaryMonitor.cc.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 24 of file JSummaryMonitor.cc.

25 {
26  using namespace std;
27  using namespace JPP;
28  using namespace KM3NETDAQ;
29 
31  JLimit_t& numberOfEvents = inputFile.getLimit();
32  int qaqc;
33  int highRateThreshold;
34  int debug;
35 
36  try {
37 
38  JParser<> zap("Auxiliary program to monitor summary data.");
39 
40  zap['f'] = make_field(inputFile);
41  zap['n'] = make_field(numberOfEvents) = JLimit::max();
42  zap['Q'] = make_field(qaqc) = 0;
43  zap['t'] = make_field(highRateThreshold) = 50000;
44  zap['d'] = make_field(debug) = 1;
45 
46  zap(argc, argv);
47  }
48  catch(const exception &error) {
49  FATAL(error.what() << endl);
50  }
51 
52 
53  JQuantile Q1("DAQ ");
54  JQuantile Q2("WR ");
55  JQuantile Q3("High-rate veto");
56  JQuantile Q4("FIFO ");
57  JQuantile Q5("PMT ");
58  JQuantile Q6("Rate [Hz] ");
59 
60  std::set<int> frameIndexCounter;
61  int nbOfHighRateNotFiltered = 0;
62  int nbOfDuplicated = 0;
63 
64  while (inputFile.hasNext()) {
65 
66  STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
67 
68  JDAQSummaryslice* summaryslice = inputFile.next();
69 
70  int frameIndex = summaryslice->getFrameIndex();
71 
72  if (!frameIndexCounter.insert(frameIndex).second) {
73  nbOfDuplicated += 1;
74  }
75 
76 
77  int numberOfPTMs = 0;
78 
79  for (JDAQSummaryslice::const_iterator frame = summaryslice->begin(); frame != summaryslice->end(); ++frame) {
80 
81  Q1.put(frame->testDAQStatus() ? 1.0 : 0.0);
82  Q2.put(frame->testWhiteRabbitStatus() ? 1.0 : 0.0);
83 
84  Q3.put((double) frame->countHighRateVeto() / (double) NUMBER_OF_PMTS);
85  Q4.put((double) frame->countFIFOStatus() / (double) NUMBER_OF_PMTS);
86 
87  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
88 
89  if ((*frame)[pmt].is_valid()) {
90  ++numberOfPTMs;
91  }
92 
93  if (!frame->testHighRateVeto(pmt) &&
94  !frame->testFIFOStatus (pmt)) {
95  Q6.put(frame->getRate(pmt));
96  // Number of PMT/Timeslices with an unfiltered rate > 50 kHz
97  if (frame->getRate(pmt) > highRateThreshold){
98  nbOfHighRateNotFiltered += 1;
99  }
100  }
101  }
102  }
103 
104  Q5.put((double) numberOfPTMs);
105  }
106  STATUS(endl);
107 
108  for (const JQuantile* p : { &Q1, &Q2, &Q3, &Q4, &Q5, &Q6}) {
109  STATUS(*p);
110  }
111 
112  QAQC(""
113  << FIXED(7,5) << Q1.getMean() << ' '
114  << FIXED(7,5) << Q2.getMean() << ' '
115  << FIXED(7,5) << Q3.getMean() << ' '
116  << FIXED(7,5) << Q4.getMean() << ' '
117  << FIXED(8,1) << Q5.getMean() << ' '
118  << FIXED(7,0) << Q6.getMean() << ' '
119  << FIXED(7,0) << Q6.getSTDev() << ' '
120  << FIXED(7,0) << nbOfHighRateNotFiltered << ' '
121  << FIXED(7,0) << nbOfDuplicated << endl);
122 }
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
#define STATUS(A)
Definition: JMessage.hh:63
#define QAQC(A)
QA/QC output macro.
Definition: JMessage.hh:100
int qaqc
QA/QC file descriptor.
#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
Utility class to parse command line options.
Definition: JParser.hh:1698
Object reading from a list of files.
virtual const pointer_type & next() override
Get next element.
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
int getFrameIndex() const
Get frame index.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool is_valid(const json &js)
Check validity of JSon data.
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
Definition: JSTDTypes.hh:14
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:448
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:45
Auxiliary data structure for running average, standard deviation and quantiles.
Definition: JQuantile.hh:46