Jpp test-rotations-old-57-g407471f53
the software that should make you happy
Loading...
Searching...
No Matches
JDAQSummaryslice.cc File Reference

Example program to histogram KM3NETDAQ::JDAQSummaryslice. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <limits>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "TH2D.h"
#include "TProfile.h"
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JDetector/JDetectorSupportkit.hh"
#include "JTrigger/JTriggerToolkit.hh"
#include "JSupport/JMultipleFileScanner.hh"
#include "JSupport/JSupport.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 histogram KM3NETDAQ::JDAQSummaryslice.

Author
mdejong

Definition in file JDAQSummaryslice.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 30 of file JDAQSummaryslice.cc.

31{
32 using namespace std;
33 using namespace JPP;
34 using namespace KM3NETDAQ;
35
37 JLimit_t& numberOfEvents = inputFile.getLimit();
38 string outputFile;
39 bool correct;
40 int debug;
41
42 try {
43
44 JParser<> zap("Example program to histogram summary data.");
45
46 zap['f'] = make_field(inputFile);
47 zap['o'] = make_field(outputFile) = "summaryslice.root";
48 zap['n'] = make_field(numberOfEvents) = JLimit::max();
49 zap['c'] = make_field(correct);
50 zap['d'] = make_field(debug) = 2;
51
52 zap(argc, argv);
53 }
54 catch(const exception& error) {
55 FATAL(error.what() << endl);
56 }
57
58
59 const double factor = 1.0e-3; // [kHz]
60
61
62 TFile out(outputFile.c_str(), "recreate");
63
64 TH1D h0("h0", NULL, JDAQRate::getN(), JDAQRate::getData(factor));
65 TProfile h1("h1", NULL, 32,-0.5, 31.5);
66 TProfile h2("h2", NULL, 32,-0.5, 31.5);
67
68 TH2D hu("hu", NULL, 201, -0.5, +200.5, 201, -0.5, +200.5);
69
70 TH2D hv("hv", NULL, 51, -0.5, +50.5, 200, 0.0, 50.0);
71 TH2D hw("hw", NULL, 51, -0.5, +50.5, 200, 0.0, 50.0);
72
73 TH2D hx("hx", NULL, NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5, 200, 0.0, 50.0);
74 TH2D hy("hy", NULL, NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS - 0.5, 200, 0.0, 50.0);
75
76 size_t udp[] = { 0, 0, 0, 0 };
77
78 while (inputFile.hasNext()) {
79
80 STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
81
82 JDAQSummaryslice* summaryslice = inputFile.next();
83
84 DEBUG("Summary: "
85 << setw(8) << inputFile.getCounter() << ' '
86 << setw(8) << summaryslice->getRunNumber() << ' '
87 << setw(8) << summaryslice->getFrameIndex() << ' '
88 << setw(6) << summaryslice->size() << endl);
89
90 const JDetectorAddressMap& demo = getDetectorAddressMap(summaryslice->getDetectorID());
91
92 for (JDAQSummaryslice::const_iterator frame = summaryslice->begin(); frame != summaryslice->end(); ++frame) {
93
94 const JModuleAddressMap& memo = demo.get(frame->getModuleID());
95
96 int N[2] = { 0 };
97 double R[2] = { 0.0 };
98
99 int lower[2] = { 0 };
100 int upper[2] = { 0 };
101
102 for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
103
104 const int index = (!frame->testHighRateVeto(pmt) && !frame->testFIFOStatus(pmt) ? 0 : 1);
105
106 N[index] += 1;
107 R[index] += correct ? getRate(*frame, pmt, factor) : frame->getRate(pmt, factor);
108
109 if (memo.getAddressTranslator(pmt).ring <= 'D')
110 lower[index] += 1;
111 else
112 upper[index] += 1;
113
114 h0.Fill(correct ? getRate(*frame, pmt, factor) : frame->getRate(pmt, factor), frame->getWeight(pmt, factor));
115
116 h1.Fill((Double_t) pmt, (frame->testHighRateVeto(pmt) ? 1.0 : 0.0));
117 h2.Fill((Double_t) pmt, (frame->testFIFOStatus (pmt) ? 1.0 : 0.0));
118 }
119
120 hu.Fill((double) frame->getUDPMaximalSequenceNumber(),
121 (double) frame->getUDPNumberOfReceivedPackets());
122
123 if (N[0] != 0) { hv.Fill((double) frame->getUDPMaximalSequenceNumber(), R[0] / N[0]); }
124 if (N[1] != 0) { hw.Fill((double) frame->getUDPMaximalSequenceNumber(), R[1] / N[1]); }
125
126 if (N[0] != 0) {
127
128 hx.Fill((double) N[1], R[0] / N[0]);
129
130 if (lower[0] != 0 && upper[0] != 0) {
131 hy.Fill((double) N[1], R[0] / N[0]);
132 }
133 }
134
135 const bool status = (frame->getUDPNumberOfReceivedPackets() == frame->getUDPMaximalSequenceNumber() + 1 &&
136 frame->hasUDPTrailer());
137
138 udp[0] += 1;
139 udp[1] += (status ? 1 : 0);
140 udp[2] += max(frame->getUDPMaximalSequenceNumber() + 1,
141 frame->getUDPNumberOfReceivedPackets());
142 udp[3] += frame->getUDPNumberOfReceivedPackets();
143
144 h1.Fill((Double_t) 31, (frame->testWhiteRabbitStatus() ? 1.0 : 0.0));
145 h2.Fill((Double_t) 31, (status ? 1.0 : 0.0));
146 }
147 }
148 STATUS(endl);
149
150 if (debug >= notice_t) {
151
152 for (int i = 0; i != sizeof(udp)/sizeof(udp[0]); ++i) {
153 cout << "UDP[" << i << "] = " << setw(12) << udp[i] << endl;
154 }
155
156 cout << "Estimated packet loss probability " << SCIENTIFIC(12,3) << (double) (udp[2] - udp[3]) / (double) (udp[2]) << endl;
157 cout << "Estimated packet loss probability (worst-case-scenario) " << SCIENTIFIC(12,3) << (double) (udp[0] - udp[1]) / (double) (udp[3]) << endl;
158 }
159
160 out.Write();
161 out.Close();
162}
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:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Lookup table for PMT addresses in detector.
const JModuleAddressMap & get(const int id) const
Get module address map.
Lookup table for PMT addresses in optical module.
const JPMTAddressTranslator & getAddressTranslator(const int tdc) const
Get PMT address translator.
Utility class to parse command line options.
Definition JParser.hh:1698
General purpose class for object reading from a list of file names.
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
virtual const pointer_type & next() override
Get next element.
int getDetectorID() const
Get detector identifier.
int getRunNumber() const
Get run number.
int getFrameIndex() const
Get frame index.
static int getN()
Get number of bins.
static const double * getData(const double factor=1.0)
Get abscissa values.
JDetectorAddressMap & getDetectorAddressMap()
Get detector address map.
@ notice_t
notice
Definition JMessage.hh:32
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double getRate(const JDAQSummaryFrame &frame, const int pmt, const double factor=1.0)
Get corrected rate of PMT.
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
Auxiliary class for defining the range of iterations of objects.
Definition JLimit.hh:45
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128
Auxiliary data structure for floating point format specification.
Definition JManip.hh:488