Jpp  19.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JDAQ/JDAQFilter.cc File Reference

Example program to select events based on hits in strings. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <set>
#include <map>
#include "JDAQ/JDAQEventIO.hh"
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JTrigger/JTriggerParameters.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JDAQHitRouter.hh"
#include "JSupport/JMultipleFileScanner.hh"
#include "JSupport/JFileRecorder.hh"
#include "JSupport/JMeta.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 select events based on hits in strings.

Author
mdejong

Definition in file JDAQ/JDAQFilter.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 30 of file JDAQ/JDAQFilter.cc.

31 {
32  using namespace std;
33  using namespace JPP;
34  using namespace KM3NETDAQ;
35 
36  typedef map<int, int> map_type;
37 
40  JLimit_t& numberOfEvents = inputFile.getLimit();
41  string detectorFile;
42  map_type selector;
43  int debug;
44 
45  try {
46 
47  JParser<> zap("Example program to select events based on hits in strings.");
48 
49  zap['f'] = make_field(inputFile, "input file.");
50  zap['o'] = make_field(outputFile, "output file.") = "filter.root";
51  zap['n'] = make_field(numberOfEvents) = JLimit::max();
52  zap['a'] = make_field(detectorFile, "detector file.");
53  zap['S'] = make_field(selector, "selection: pairs of <string number> <minimum number of triggered hits>");
54  zap['d'] = make_field(debug) = 2;
55 
56  zap['a'] = JPARSER::initialised();
57  zap['S'] = JPARSER::initialised();
58 
59  zap(argc, argv);
60  }
61  catch(const exception& error) {
62  FATAL(error.what() << endl);
63  }
64 
65 
67 
68  if (detectorFile != "") {
69 
70  try {
71  load(detectorFile, detector);
72  }
73  catch(const JException& error) {
74  FATAL(error);
75  }
76 
77  } else if (!selector.empty()) {
78 
79  FATAL("Missing detector file.");
80  }
81 
82  const JDAQHitRouter router(detector);
83 
84 
85  map<int, set<int> > buffer;
86 
87  outputFile.open();
88 
89  outputFile.put(JMeta(argc, argv));
90 
91  while (inputFile.hasNext()) {
92 
93  STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
94 
95  JDAQEvent* event = inputFile.next();
96 
97  bool status = selector.empty();
98 
99  if (!status) {
100 
102 
103  typedef JDAQTriggeredHit JHit_t;
104 
105  for (JDAQEvent::const_iterator<JHit_t> hit = event->begin<JHit_t>(); hit != event->end<JHit_t>(); ++hit) {
106 
107  const JPMTChannel& channel = router.getPMTChannel(*hit);
108 
109  response[channel.getString()] += 1;
110  }
111 
112  for (map_type::const_iterator i = selector.begin(); i != selector.end() && !status; ++i) {
113  status = response[i->first] >= i->second;
114  }
115  }
116 
117  if (status) {
118 
119  outputFile.put(*event);
120 
121  buffer[event->getRunNumber()].insert(event->getFrameIndex());
122  }
123  }
124  STATUS(endl);
125 
126 
127  for (JMultipleFileScanner<JDAQSummaryslice> in(inputFile); in.hasNext(); ) {
128 
129  STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
130 
131  JDAQSummaryslice* summary = in.next();
132 
133  if (buffer[summary->getRunNumber()].count(summary->getFrameIndex())) {
134  outputFile.put(*summary);
135  }
136  }
137  STATUS(endl);
138 
139 
141 
142  io >> outputFile;
143 
144  outputFile.close();
145 }
Auxiliary class for ROOT I/O of application specific meta data.
Definition: JMeta.hh:70
Template specialisation of JMultipleFileScanner for trigger parameters.
Object writing to file.
Utility class to parse command line options.
Definition: JParser.hh:1711
General exception.
Definition: JException.hh:24
Auxiliary class to uniquely identify PMT readout channel.
Definition: JPMTChannel.hh:31
#define STATUS(A)
Definition: JMessage.hh:63
Detector data structure.
Definition: JDetector.hh:89
Template const_iterator.
Definition: JDAQEvent.hh:66
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:84
string outputFile
int getRunNumber() const
Get run number.
Simple wrapper around JModuleRouter class for direct addressing of PMT data in detector data structur...
int getFrameIndex() const
Get frame index.
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
Detector file.
Definition: JHead.hh:226
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2158
#define FATAL(A)
Definition: JMessage.hh:67
int getString() const
Get string number.
Definition: JLocation.hh:134
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
General purpose class for object reading from a list of file names.
then fatal The output file must have the wildcard in the e g root fi 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
Definition: JCanberra.sh:48
char response[100000]
Definition: elog.cc:330
Auxiliary class to set-up Hit.
Definition: JSirene.hh:57
const JLimit & getLimit() const
Get limit.
Definition: JLimit.hh:84
std::map< int, range_type > map_type
do set_variable DETECTOR_TXT $WORKDIR detector
int debug
debug level
JTriggerCounter_t next()
Increment trigger counter.
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62