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

Example program to remove PMT(s) from data (and set corresponding rate to 0). More...

#include <string>
#include <iostream>
#include <iomanip>
#include <set>
#include "km3net-dataformat/online/JDAQ.hh"
#include "km3net-dataformat/online/JDAQPMTIdentifier.hh"
#include "JDAQ/JDAQTimesliceIO.hh"
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JDAQ/JDAQEventIO.hh"
#include "JTrigger/JTriggerParameters.hh"
#include "JSupport/JMultipleFileScanner.hh"
#include "JSupport/JFileRecorder.hh"
#include "JSupport/JSupport.hh"
#include "JLang/JTypeSelector.hh"
#include "JLang/JObjectMultiplexer.hh"
#include "JLang/JObjectDemultiplexer.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 remove PMT(s) from data (and set corresponding rate to 0).

Author
mdejong

Definition in file JRemovePMT.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 60 of file JRemovePMT.cc.

61 {
62  using namespace std;
63  using namespace JPP;
64  using namespace KM3NETDAQ;
65 
67  JLimit_t& numberOfEvents = inputFile.getLimit();
70  int debug;
71 
72  try {
73 
74  JParser<> zap("Example program to remove PMT(s) from data (and set corresponding rate to 0).");
75 
76  zap['f'] = make_field(inputFile);
77  zap['o'] = make_field(outputFile) = "abc.root";
78  zap['n'] = make_field(numberOfEvents) = JLimit::max();
79  zap['P'] = make_field(PMT) = JPARSER::initialised();
80  zap['d'] = make_field(debug) = 1;
81 
82  zap(argc, argv);
83  }
84  catch(const exception& error) {
85  FATAL(error.what() << endl);
86  }
87 
88 
89  outputFile.open();
90 
91  {
93 
94  // put base class JDAQTimeslice at end of type list
95 
97 
99 
100  for (counter_type counter = 0; in.hasNext() && counter != inputFile.getLimit(); ++counter) {
101 
102  STATUS("event: " << setw(10) << counter << '\r'); DEBUG(endl);
103 
104  JDAQTimeslice* timeslice = in.next();
105 
106  for (JDAQTimeslice::iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
107 
108  bool rm = false;
109 
110  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
111 
112  if (PMT.find(JDAQPMTIdentifier(frame->getModuleID(), pmt)) != PMT.end() ||
113  PMT.find(JDAQPMTIdentifier(-1, pmt)) != PMT.end()) {
114  rm = true;
115  }
116  }
117 
118  if (rm) {
119 
121 
122  for (JDAQSuperFrame::const_iterator hit = frame->begin(); hit != frame->end(); ++hit) {
123  buffer[hit->getPMT()].push_back(*hit);
124  }
125 
126  vector<JDAQHit> data;
127 
128  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
129 
130  if (PMT.find(JDAQPMTIdentifier(frame->getModuleID(), pmt)) == PMT.end() &&
131  PMT.find(JDAQPMTIdentifier(-1, pmt)) == PMT.end()) {
132  copy(buffer[pmt].begin(), buffer[pmt].end(), back_inserter(data));
133  }
134  }
135 
136  sort(data.begin(), data.end());
137 
138  frame->clear();
139  frame->add(data.size(), data.data());
140  }
141  }
142 
143  out.put(*timeslice);
144  }
145  STATUS(endl);
146  }
147  {
149 
150  while (in.hasNext()) {
151 
152  STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
153 
154  JDAQEvent* event = in.next();
155 
156  remove(event->getHits<JDAQTriggeredHit>(), PMT);
157  remove(event->getHits<JDAQSnapshotHit> (), PMT);
158 
159  outputFile.put(*event);
160  }
161  STATUS(endl);
162  }
163  {
165 
166  while (in.hasNext()) {
167 
168  STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
169 
170  JDAQSummaryslice* summaryslice = in.next();
171 
172  for (JDAQSummaryslice::iterator frame = summaryslice->begin(); frame != summaryslice->end(); ++frame) {
173 
174  for (int pmt = 0; pmt != NUMBER_OF_PMTS; ++pmt) {
175 
176  if (PMT.find(JDAQPMTIdentifier(frame->getModuleID(), pmt)) != PMT.end() ||
177  PMT.find(JDAQPMTIdentifier(-1, pmt)) != PMT.end()) {
178  (*frame)[pmt].setValue(0.0);
179  }
180  }
181  }
182 
183  outputFile.put(*summaryslice);
184  }
185  STATUS(endl);
186  }
187 
189 
190  io >> outputFile;
191 
192  outputFile.close();
193 }
Template specialisation of JMultipleFileScanner for trigger parameters.
Object writing to file.
Utility class to parse command line options.
Definition: JParser.hh:1517
DAQ key hit.
Definition: JDAQKeyHit.hh:19
Append to type list.
Definition: JTypeList.hh:61
static const JPBS_t PMT(3, 4, 2, 3)
PBS of photo-multiplier tube (PMT)
#define STATUS(A)
Definition: JMessage.hh:63
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:83
Long64_t counter_type
Type definition for counter.
Auxiliary class for multiplexing object iterators.
string outputFile
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
Hit data structure.
Definition: JDAQHit.hh:34
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1993
Data time slice.
Auxiliary class for demultiplexing object outputs.
#define FATAL(A)
Definition: JMessage.hh:67
General purpose class for object reading from a list of file names.
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition: JHead.cc:162
const JLimit & getLimit() const
Get limit.
Definition: JLimit.hh:73
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
Definition: JDAQ.hh:26
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
Definition: JCanberra.sh:46
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62