Jpp 19.3.0-rc.3
the software that should make you happy
Loading...
Searching...
No Matches
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)
 

Functions

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

Macro Definition Documentation

◆ MAKE_ENTRY

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

Function Documentation

◆ main()

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, "print optional weights: " << get_keys(getWeight)) = JPARSER::initialised();
181 zap['+'] = make_field(option, "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 const int WIDTH = 16;
192
193 JTreeScanner<Evt> mc(inputFile);
194
195 Vec offset(0,0,0);
196
197 try {
198 offset = getOffset(getHeader(inputFile));
199 } catch(const exception& error) {}
200
201
202 while (inputFile.hasNext()) {
203
204 cout << "event: " << setw(10) << inputFile.getCounter() << endl;
205
206 multi_pointer_type ps = inputFile.next();
207
208 JDAQEvent* tev = ps;
209 JEvt* evt = ps;
210
211 if (quality_sorter.is_valid()) {
212 sort(evt->begin(), evt->end(), quality_sorter);
213 }
214
215 time_converter converter;
216
217 cout << "trigger: " << setw(10) << tev->getCounter() << ' '
218 << tev->getTimesliceStart() << endl;
219
220 if (mc.getEntries() != 0) {
221
222 Evt* event = mc.getEntry(tev->getCounter());
223
224 if (event != NULL) {
225
226 converter = time_converter(*event, *tev);
227
228 if (option.count(MONTECARLO) != 0) {
229
230 if (has_neutrino(*event)) {
231
232 JTrack ta = getTrack(get_neutrino(*event));
233
234 ta.add(getPosition(offset));
235
236 cout << LEFT(WIDTH) << "neutrino" << right << ' ' << ta << endl;
237 }
238
239
240 for (vector<Trk>::const_iterator i = event->mc_trks.begin(); i != event->mc_trks.end(); ++i) {
241
242 JTrack ta = getTrack(*i);
243
244 ta.add(getPosition(offset));
245
246 cout << LEFT(WIDTH) << (is_muon (*i) ? "muon" :
247 is_electron(*i) ? "electron" :
248 is_hadron (*i) ? "hadron" : "other") << right << ' ' << ta << endl;
249 }
250 }
251 }
252 }
253
254 cout << "number of fits " << setw(4) << right << evt->size() << endl;
255
256 for (size_t i = 0; i != min(evt->size(), numberOfFits); ++i) {
257
258 const JFit& fit = (*evt)[i];
259
260 JTrack tb = getTrack(fit);
261
262 tb.sub(converter.putTime());
263
264 cout << LEFT(WIDTH) << "fit" << right << ' '
265 << tb << ' '
266 << FIXED(7,2) << fit.getQ() << ' '
267 << setw(2) << fit.getHistory().size() << '/' << fit.getStatus();
268
269 for (const auto& key : keys) {
270 cout << ' ' << SCIENTIFIC(12,3) << getWeight(fit, key, 0.0);
271 }
272
273 cout << endl;
274
275 for (size_t row = 0; row != fit.getDimensionOfErrorMatrix(); ++row) {
276 for (size_t col = 0; col <= row; ++col) {
277 cout << ' ' << SCIENTIFIC(12,3) << fit.getV(row,col);
278 }
279 cout << endl;
280 }
281
282 if (option.count(HISTORY) != 0) {
283 cout << fit.getHistory() << endl;
284 }
285 }
286 }
287}
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Utility class to parse command line options.
Definition JParser.hh:1698
General purpose class for parallel reading of objects from a single file or multiple files.
Template definition for direct access of elements in ROOT TChain.
JDAQUTCExtended getTimesliceStart() const
Get start of timeslice.
JTriggerCounter_t getCounter() const
Get trigger counter.
Auxiliary class to convert DAQ hit time to/from Monte Carlo hit time.
double putTime() const
Get Monte Carlo time minus DAQ/trigger time.
JTrack3E getTrack(const Trk &track)
Get track.
bool is_electron(const Trk &track)
Test whether given track is a (anti-)electron.
bool has_neutrino(const Evt &evt)
Test whether given event has an incoming neutrino.
JPosition3D getPosition(const Vec &pos)
Get position.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
Vec getOffset(const JHead &header)
Get offset.
const Trk & get_neutrino(const Evt &evt)
Get incoming neutrino.
bool is_hadron(const Trk &track)
Test whether given track is a hadron.
double getWeight(T __begin, T __end)
Get total weight of data points.
@ LEFT
Definition JTwosome.hh:18
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.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition Evt.hh:21
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
Acoustic event fit.
Acoustic single fit.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68
General purpose sorter of fit results.
Auxiliary class for defining the range of iterations of objects.
Definition JLimit.hh:45
const JLimit & getLimit() const
Get limit.
Definition JLimit.hh:84
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128
Auxiliary data structure for floating point format specification.
Definition JManip.hh:488
The Vec class is a straightforward 3-d vector, which also works in pyroot.
Definition Vec.hh:13
Auxiliary data structure for alignment of data.
Definition JManip.hh:231
Reconstruction type dependent comparison of track quality.