Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
Jaws.cc
Go to the documentation of this file.
1#include <string>
2#include <iostream>
3#include <iomanip>
4#include <vector>
5#include <map>
6#include <bitset>
7
10
13#include "JSupport/JSupport.hh"
16#include "JTools/JRange.hh"
17#include "JSystem/JKeypress.hh"
18#include "Jeep/JPrint.hh"
19#include "Jeep/JParser.hh"
20#include "Jeep/JMessage.hh"
21
22
23namespace {
24
26
27 /**
28 * Auxiliary class to search for periodic hits.
29 */
30 struct JPeriod {
31 /**
32 * Default constructor.
33 */
34 JPeriod() :
35 period(-1),
36 margin(-1)
37 {}
38
39
40 /**
41 * Constructor.
42 *
43 * \param period period [ns]
44 * \param margin margin [ns]
45 */
46 JPeriod(int period,
47 int margin) :
48 period(period),
49 margin(margin)
50 {}
51
52 /**
53 * Check compliance with periodicity.
54 *
55 * \param first first hit
56 * \param second second hit
57 * \return true if periodic; else false
58 */
59 bool operator()(const JDAQHit& first, const JDAQHit& second) const
60 {
61 const int t1 = (second.getT() - first.getT()) % period;
62
63 return (t1 <= margin || t1 >= period - margin);
64 }
65
66 /**
67 * Read periodicity from input stream.
68 *
69 * \param in input stream
70 * \param object periodicity
71 * \return input stream
72 */
73 friend std::istream& operator>>(std::istream& in, JPeriod& object)
74 {
75 return in >> object.period >> object.margin;
76 }
77
78 /**
79 * Write periodicity to output stream.
80 *
81 * \param out output stream
82 * \param object periodicity
83 * \return output stream
84 */
85 friend std::ostream& operator<<(std::ostream& out, const JPeriod& object)
86 {
87 return out << object.period << ' ' << object.margin;
88 }
89
90 int period;
91 int margin;
92 };
93}
94
95
96/**
97 * \file
98 * Example program to search for spurious hits.
99 * \author mdejong
100 */
101int main(int argc, char **argv)
102{
103 using namespace std;
104 using namespace JPP;
105 using namespace KM3NETDAQ;
106
107 typedef JRange<int> JRange_t;
108
110 JLimit_t& numberOfEvents = inputFile.getLimit();
111 JROOTClassSelector selector;
112 JRange_t ToT_ns;
113 JPeriod is_periodic;
114 int numberOfHits;
115 int numberOfColumns;
117 int debug;
118
119 try {
120
121 JParser<> zap("Example program to search for spurious hits.");
122
123 zap['f'] = make_field(inputFile, "input file).");
124 zap['n'] = make_field(numberOfEvents) = JLimit::max();
125 zap['C'] = make_field(selector, "timeslice selector, e.g. JDAQTimeslice.") = getROOTClassSelection<JDAQTimesliceTypes_t>();
126 zap['T'] = make_field(ToT_ns, "time-over-threshold range [ns]");
127 zap['p'] = make_field(is_periodic, "periodicity");
128 zap['M'] = make_field(numberOfHits, "minimum number of hits for periodicity");
129 zap['N'] = make_field(numberOfColumns, "number of columns for printing") = 5;
130 zap['V'] = make_field(veto, "veto PMT from analysis") = JPARSER::initialised();
131 zap['d'] = make_field(debug, "debug.") = 3;
132
133 zap(argc, argv);
134 }
135 catch(const exception& error) {
136 FATAL(error.what() << endl);
137 }
138
139
141
142 for (counter_type counter = 0; in.hasNext() && counter != inputFile.getLimit(); ++counter) {
143
144 STATUS("event: " << setw(10) << counter << '\r'); DEBUG(endl);
145
146 const JDAQTimeslice* timeslice = in.next();
147
148 for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
149
150 // organise data per PMT
151
152 typedef vector<JDAQHit> buffer1D_type;
153 typedef vector<buffer1D_type> buffer2D_type;
154
155 buffer2D_type buffer(numeric_limits<JDAQHit::JPMT_t>::max(), buffer1D_type());
156
157 for (JDAQFrame::const_iterator hit = frame->begin(); hit != frame->end(); ++hit) {
158 buffer[hit->getPMT()].push_back(*hit);
159 }
160
161 // detection of perodic signal
162
164
165 for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
166
167 if (!buffer[pmt].empty()) {
168
169 const JDAQPMTIdentifier id(frame->getModuleID(), pmt);
170
171 for (buffer1D_type::iterator i = buffer[pmt].begin(); i != buffer[pmt].end(); ) {
172
173 if (ToT_ns(i->getToT())) {
174
175 buffer1D_type::iterator p = i;
176
177 for (++p; p != buffer[pmt].end() && ToT_ns(p->getToT()) && is_periodic(*i, *p); ++p) {}
178
179 if (distance(i, p) >= numberOfHits) {
180 top[id].push_back(*i);
181 }
182
183 i = p;
184
185 } else {
186
187 ++i;
188 }
189 }
190 }
191 }
192
193
194 if (debug >= debug_t) {
195
196 for (map<JDAQPMTIdentifier, vector<JDAQHit> >::const_iterator i = top.begin(); i != top.end(); ++i) {
197
198 if (veto.count(i->first) == 0) {
199
200 const int pmt = i->first.getPMTAddress();
201
202 cout << timeslice->getRunNumber() << '/' << FILL(6,'0') << timeslice->getFrameIndex() << FILL() << ' '
203 << setw(9) << i->first.getModuleID() << '.' << FILL(2,'0') << i->first.getPMTAddress() << FILL() << ' '
204 << setw(1) << frame->testHighRateVeto(pmt)
205 << setw(1) << frame->testFIFOStatus (pmt) << endl;
206
207 int count = 0;
208
209 string eol = "";
210
211 for (JDAQFrame::const_iterator hit = frame->begin(); hit != frame->end(); ++hit) {
212
213 const bool has_pmt = (hit->getPMT() == i->first.getPMTAddress());
214 const bool has_hit = (find(i->second.begin(), i->second.end(), *hit) != i->second.end());
215
216 if (has_pmt) {
217
218 if (has_hit) {
219 eol = "*";
220 }
221
222 cout << setw(10) << hit->getT() << ' ' << setw(3) << (int) hit->getToT() << ' ' << RESET;
223
224 if ((++count % numberOfColumns) == 0) {
225
226 cout << eol << endl;
227
228 eol = "";
229 }
230 }
231 }
232
233 cout << endl << "press any key to continue> " << flush;
234
235 JKeypress(false).get();
236
237 cout << endl;
238 }
239 }
240 }
241 }
242 }
243 STATUS(endl);
244}
Keyboard settings for unbuffered input.
General purpose messaging.
#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
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
I/O formatting auxiliaries.
Auxiliary class to define a range between two values.
ROOT TTree parameter settings of various packages.
int main(int argc, char **argv)
Definition Jaws.cc:101
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Auxiliary class for multiplexing object iterators.
virtual bool hasNext() override
Check availability of next element.
virtual const pointer_type & next() override
Get next element.
Utility class to parse command line options.
Definition JParser.hh:1698
General purpose class for object reading from a list of file names.
Enable unbuffered terminal input.
Definition JKeypress.hh:32
char get()
Get single character.
Definition JKeypress.hh:74
Range of values.
Definition JRange.hh:42
int getRunNumber() const
Get run number.
int getFrameIndex() const
Get frame index.
Hit data structure.
Definition JDAQHit.hh:35
JTDC_t getT() const
Get time.
Definition JDAQHit.hh:86
@ debug_t
debug
Definition JMessage.hh:29
@ RESET
reset
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
std::set< JROOTClassSelector > getROOTClassSelection(const bool option=false)
Get ROOT class selection.
Long64_t counter_type
Type definition for counter.
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
JWriter & operator<<(JWriter &out, const JDAQChronometer &chronometer)
Write DAQ chronometer to output.
JReader & operator>>(JReader &in, JDAQChronometer &chronometer)
Read DAQ chronometer from input.
Auxiliary data structure for sequence of same character.
Definition JManip.hh:330
Type definition of range.
Definition JHead.hh:43
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68
Auxiliary class to select ROOT class based on class name.
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