57{
61
63 JLimit_t& numberOfEvents = inputFile.getLimit();
67
68 try {
69
70 JParser<> zap(
"Auxiliary program to histogram and print trigger statistics.");
71
77
78 zap(argc, argv);
79 }
80 catch(const exception &error) {
81 FATAL(error.what() << endl);
82 }
83
84
85 TH1D h1("Event ", NULL, 100, 0.0, 1.0e1);
86 TH1D h2("Summary ", NULL, 100, 0.0, 1.0e1);
87
88 TH1D hm("Trigger mask ", NULL, NUMBER_OF_TRIGGER_BITS, -0.5, NUMBER_OF_TRIGGER_BITS - 0.5);
89 TH1D hn("Trigger hits ", NULL, 1000, -0.5, 1000 - 0.5);
90 TH1D hs("Snapshot hits ", NULL, 1000, -0.5, 10000 - 0.5);
91 TH1D hr("PMT rate [kHz]", NULL, 100, 0.0, 50.0);
92
93
95
96 NOTICE(parameters << endl);
97
98
100
101 STATUS(
"entry: " << setw(10) << input.getCounter() <<
'\r');
DEBUG(endl);
102
104
105 h1.Fill((Double_t)
getSizeof(*
object) * 1e-6);
106
109
111 if (object->hasTriggerBit(i)) {
112 hm.Fill((Double_t) i);
113 }
114 }
115
116 {
118
120
122
123 if (object->getTriggerMask(*i) != 0) {
125 }
126 }
127
129 ERROR(
"Number of snapshot hits with trigger mask " <<
n <<
" != " << object->size<
JDAQTriggeredHit>() << endl);
130 }
131 }
132 }
133
134
135 long long int numberOfSummaryslices = 0;
136
138
139 STATUS(
"entry: " << setw(10) << input.getCounter() <<
'\r');
DEBUG(endl);
140
142
143 h2.Fill((Double_t)
getSizeof(*
object) * 1e-6);
144
145 for (JDAQSummaryslice::const_iterator i = object->begin(); i != object->end(); ++i) {
147 hr.Fill(i->getRate(pmt) * 1.0e-3);
148 }
149 }
150 }
151
158 }
159
161 NOTICE(
"Background rate estimate from snapshot hits " << setprecision(2)
162 << (hs.GetMean() - hn.GetMean()) * numberOfSummaryslices / (hr.GetEntries() * 2e-6 * parameters.TMaxEvent_ns)
163 << " [kHz]" << endl);
165
166
167 const double T = numberOfSummaryslices * 1.0e-9 *
getFrameTime();
168
169 NOTICE(setw(
WIDTH) << left <<
"Total run duration (based on time slices) [s] " <<
FIXED(7,1) << T << endl);
170
171
172 for (Int_t i = 1; i <= hm.GetNbinsX(); ++i) {
173
175 const Double_t
y = (Double_t) hm.GetBinContent(i);
176
178
179 if (name != NULL || y != 0.0) {
180
182 << "[" << setw(2) << x << "]" << ' '
183 << setw(16) << left << (name != NULL ? name : "?") << ' '
185
186 if (numberOfSummaryslices != 0) {
188 }
189
191 }
192 }
193
195 << setw(4) << " " << ' '
196 << setw(16) << " " << ' '
197 <<
FIXED(9,0) << h1.GetEntries());
198
199 if (numberOfSummaryslices != 0) {
200 NOTICE(
FIXED(12,2) << h1.GetEntries() / T <<
" [Hz]");
201 }
202
204
206
208
209 out << h1 << h2;
210 out << hm << hn << hs << hr;
211
212 out.Write();
213 out.Close();
214 }
215
216
217 for (Int_t i = 1; i <= hm.GetNbinsX(); ++i) {
218
220 const Double_t
y = (Double_t) hm.GetBinContent(i);
221
223
224 if (name != NULL) {
226 }
227 }
228
230
231 return 0;
232}
#define DEBUG(A)
Message macros.
#define QAQC(A)
QA/QC output macro.
int qaqc
QA/QC file descriptor.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
virtual bool hasNext() override
Check availability of next element.
JTriggerCounter_t next()
Increment trigger counter.
std::ostream & print(std::ostream &out, const JTestSummary &summary, const char delimiter=' ', const bool useColors=true)
Print test summary.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters.
const char * getTriggerName(JTriggerbit_t bit)
Get trigger name.
unsigned int JTriggerbit_t
Type definition of trigger bit.
KM3NeT DAQ data structures and auxiliaries.
double getFrameTime()
Get frame time duration.
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
size_t getSizeof()
Definition of method to get size of data type.
Auxiliary class to set-up Hit.
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.