105 using namespace KM3NETDAQ;
121 JParser<> zap(
"Example program to search for spurious hits.");
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;
135 catch(
const exception& error) {
136 FATAL(error.what() << endl);
142 for (
counter_type counter = 0;
in.hasNext() && counter != inputFile.getLimit(); ++counter) {
144 STATUS(
"event: " << setw(10) << counter <<
'\r');
DEBUG(endl);
148 for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
155 buffer2D_type buffer(numeric_limits<JDAQHit::JPMT_t>::max(), buffer1D_type());
158 buffer[hit->getPMT()].push_back(*hit);
167 if (!buffer[pmt].empty()) {
171 for (buffer1D_type::iterator i = buffer[pmt].begin(); i != buffer[pmt].end(); ) {
173 if (ToT_ns(i->getToT())) {
175 buffer1D_type::iterator p = i;
177 for (++p; p != buffer[pmt].end() && ToT_ns(p->getToT()) && is_periodic(*i, *p); ++p) {}
179 if (
distance(i, p) >= numberOfHits) {
180 top[id].push_back(*i);
198 if (veto.count(i->first) == 0) {
200 const int pmt = i->first.getPMTAddress();
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;
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());
222 cout << setw(10) << hit->getT() <<
' ' << setw(3) << (int) hit->getToT() <<
' ' <<
RESET;
224 if ((++count % numberOfColumns) == 0) {
233 cout << endl <<
"press any key to continue> " << flush;
Utility class to parse command line options.
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 to select ROOT class based on class name.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Long64_t counter_type
Type definition for counter.
Auxiliary class for multiplexing object iterators.
int getRunNumber() const
Get run number.
int getFrameIndex() const
Get frame index.
Auxiliary class for defining the range of iterations of objects.
Type definition of range.
char get()
Get single character.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Enable unbuffered terminal input.
Auxiliary data structure for sequence of same character.
General purpose class for object reading from a list of file names.
const JLimit & getLimit() const
Get limit.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
#define DEBUG(A)
Message macros.