Jpp  17.1.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Macros | Functions
JPrintEvt.cc File Reference
#include <string>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include "TROOT.h"
#include "TFile.h"
#include "km3net-dataformat/offline/Head.hh"
#include "km3net-dataformat/offline/Evt.hh"
#include "km3net-dataformat/definitions/fitparameters.hh"
#include "km3net-dataformat/tools/time_converter.hh"
#include "JAAnet/JHead.hh"
#include "JAAnet/JHeadToolkit.hh"
#include "JAAnet/JAAnetToolkit.hh"
#include "JDAQ/JDAQEventIO.hh"
#include "JSupport/JParallelFileScanner.hh"
#include "JSupport/JTreeScanner.hh"
#include "JSupport/JMonteCarloFileSupportkit.hh"
#include "JSupport/JSupport.hh"
#include "JReconstruction/JEvt.hh"
#include "JReconstruction/JEvtToolkit.hh"
#include "JLang/JVectorize.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Macros

#define MAKE_ENTRY(A)   std::make_pair(#A, A)
 

Functions

int main (int argc, char **argv)
 Auxiliary program to print fit results;. More...
 

Macro Definition Documentation

#define MAKE_ENTRY (   A)    std::make_pair(#A, A)

Function Documentation

int main ( int  argc,
char **  argv 
)

Auxiliary program to print fit results;.

Definition at line 155 of file JPrintEvt.cc.

156 {
157  using namespace std;
158  using namespace JPP;
159  using namespace KM3NETDAQ;
160 
161  typedef JParallelFileScanner< JTypeList<JDAQEvent, JEvt> > JParallelFileScanner_t;
162  typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
163 
164  JParallelFileScanner_t inputFile;
165  JLimit_t& numberOfEvents = inputFile.getLimit();
167  size_t numberOfFits;
168  vector<string> keys;
169  set <string> option;
170  int debug;
171 
172  try {
173 
174  JParser<> zap("Auxiliary program to print fit results.");
175 
176  zap['f'] = make_field(inputFile);
177  zap['n'] = make_field(numberOfEvents) = JLimit::max();
179  zap['N'] = make_field(numberOfFits) = 1;
180  zap['k'] = make_field(keys, MAKE_STRING("print optional weights: " << get_keys(getWeight))) = JPARSER::initialised();
181  zap['+'] = make_field(option, MAKE_STRING("print optional data: " << MONTECARLO << ", " << HISTORY)) = JPARSER::initialised();
182  zap['d'] = make_field(debug) = 2;
183 
184  zap(argc, argv);
185  }
186  catch(const exception& error) {
187  FATAL(error.what() << endl);
188  }
189 
190 
191 
192  const int WIDTH = 16;
193 
194  JTreeScanner<Evt> mc(inputFile);
195 
196  JPosition3D center(0,0,0);
197 
198  try {
199  center = get<JPosition3D>(getHeader(inputFile));
200  } catch(const exception& error) {}
201 
202 
203  while (inputFile.hasNext()) {
204 
205  cout << "event: " << setw(10) << inputFile.getCounter() << endl;
206 
207  multi_pointer_type ps = inputFile.next();
208 
209  JDAQEvent* tev = ps;
210  JEvt* evt = ps;
211 
212  if (quality_sorter.is_valid()) {
213  sort(evt->begin(), evt->end(), quality_sorter);
214  }
215 
216  time_converter converter;
217 
218  cout << "trigger: " << setw(10) << tev->getCounter() << ' '
219  << tev->getTimesliceStart() << endl;
220 
221  if (mc.getEntries() != 0) {
222 
223  Evt* event = mc.getEntry(tev->getCounter());
224 
225  if (event != NULL) {
226 
227  converter = time_converter(*event, *tev);
228 
229  if (option.count(MONTECARLO) != 0) {
230 
231  if (has_neutrino(*event)) {
232 
233  JTrack ta = getTrack(get_neutrino(*event));
234 
235  ta.add(center);
236 
237  cout << LEFT(WIDTH) << "neutrino" << right << ' ' << ta << endl;
238  }
239 
240 
241  for (vector<Trk>::const_iterator i = event->mc_trks.begin(); i != event->mc_trks.end(); ++i) {
242 
243  JTrack ta = getTrack(*i);
244 
245  ta.add(center);
246 
247  cout << LEFT(WIDTH) << (is_muon (*i) ? "muon" :
248  is_electron(*i) ? "electron" :
249  is_hadron (*i) ? "hadron" : "other") << right << ' ' << ta << endl;
250  }
251  }
252  }
253  }
254 
255  cout << "number of fits " << setw(4) << right << evt->size() << endl;
256 
257  for (size_t i = 0; i != min(evt->size(), numberOfFits); ++i) {
258 
259  const JFit& fit = (*evt)[i];
260 
261  JTrack tb = getTrack(fit);
262 
263  tb.sub(converter.putTime());
264 
265  cout << LEFT(WIDTH) << "fit" << right << ' '
266  << tb << ' '
267  << FIXED(7,2) << fit.getQ() << ' '
268  << setw(2) << fit.getHistory().size() << '/' << fit.getStatus();
269 
270  for (const auto& key : keys) {
271  cout << ' ' << SCIENTIFIC(12,3) << getWeight(fit, key, 0.0);
272  }
273 
274  cout << endl;
275 
276  for (size_t row = 0; row != fit.getDimensionOfErrorMatrix(); ++row) {
277  for (size_t col = 0; col <= row; ++col) {
278  cout << ' ' << SCIENTIFIC(12,3) << fit.getV(row,col);
279  }
280  cout << endl;
281  }
282 
283  if (option.count(HISTORY) != 0) {
284  cout << fit.getHistory() << endl;
285  }
286  }
287  }
288 }
bool is_electron(const Trk &track)
Test whether given track is a (anti-)electron.
Auxiliary data structure for alignment of data.
Definition: JManip.hh:231
Utility class to parse command line options.
Definition: JParser.hh:1517
JDAQUTCExtended getTimesliceStart() const
Get start of timeslice.
JTrack3E getTrack(const Trk &track)
Get track.
bool has_neutrino(const Evt &evt)
Test whether given event has an incoming neutrino.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
General purpose sorter of fit results.
General purpose class for parallel reading of objects from a single file or multiple files...
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:83
Auxiliary class to convert DAQ hit time to/from Monte Carlo hit time.
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:446
Acoustic single fit.
#define MAKE_STRING(A)
Make string.
Definition: JPrint.hh:127
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
Acoustic event fit.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1993
double putTime() const
Get Monte Carlo time minus DAQ/trigger time.
Muon trajectory.
Reconstruction type dependent comparison of track quality.
#define FATAL(A)
Definition: JMessage.hh:67
Data structure for position in three dimensions.
Definition: JPosition3D.hh:36
const JLimit & getLimit() const
Get limit.
Definition: JLimit.hh:73
const Trk & get_neutrino(const Evt &evt)
Get incoming neutrino.
bool is_hadron(const Trk &track)
Test whether given track is a hadron.
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:484
JTriggerCounter_t getCounter() const
Get trigger counter.
const array_type< JKey_t > & get_keys(const std::map< JKey_t, JValue_t, JComparator_t, JAllocator_t > &data)
Method to create array of keys of map.
Definition: JVectorize.hh:139
int debug
debug level
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition: Evt.hh:20