Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JMergeFit.cc
Go to the documentation of this file.
1
2#include <string>
3#include <iostream>
4#include <iomanip>
5#include <vector>
6#include <algorithm>
7#include <iterator>
8
12
13#include "JDAQ/JDAQEventIO.hh"
16#include "JDAQ/JDAQEvaluator.hh"
18
22#include "JSupport/JSupport.hh"
23#include "JSupport/JMeta.hh"
24
26
27#include "Jeep/JParser.hh"
28#include "Jeep/JMessage.hh"
29
30
31namespace {
32
35 using JFIT::JEvt;
37
38 /**
39 * Auxiliary class for TTree routing.
40 */
41 struct JTreeRouter_t {
42 /**
43 * Default constructor.
44 */
45 JTreeRouter_t()
46 {}
47
48
49 /**
50 * Constructor.
51 *
52 * \param file_name file name
53 */
54 JTreeRouter_t(const std::string& input_file) :
55 indexer(input_file),
56 scanner(input_file)
57 {}
58
59
60 /**
61 * Get reconstructed event corresponding to given DAQ event.
62 *
63 * \param evt DAQ event
64 * \return reconstructed event
65 */
66 const JEvt* get(const JDAQEvent& evt)
67 {
68 const Long64_t i = indexer.find(evt);
69 const JDAQEvent* p = indexer.getEntry(i);
70
71 if (p != NULL && evt.getDAQEventHeader().is_same(p->getDAQEventHeader()))
72 return scanner.getEntry(i);
73 else
74 return NULL;
75 }
76
78 JTreeScanner<JEvt> scanner;
79 };
80}
81
82
83/**
84 * \file
85 *
86 * Program to merge different files with JFIT::JEvt data.
87 * \author mdejong
88 */
89int main(int argc, char **argv)
90{
91 using namespace std;
92 using namespace JPP;
93 using namespace KM3NETDAQ;
94
95 typedef JParallelFileScanner< JTypeList<JDAQEvent, JEvt> > JParallelFileScanner_t;
96 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
97
99
100 vector<std::string> inputFile;
102 int debug;
103
104 try {
105
106 JParser<> zap("Program to merge different files with JFIT::JEvt data " \
107 "(e.g. from JMuonXXX[.sh] and JShowerXXX[.sh] applied to the same input data)." \
108 "\nThe input files should be event-by-event synchronised.");
109
110 zap['f'] = make_field(inputFile, "list of JEvt compatible files");
111 zap['o'] = make_field(outputFile, "single file with merged JEvt data");
112 zap['d'] = make_field(debug) = 1;
113
114 zap(argc, argv);
115 }
116 catch(const exception& error) {
117 FATAL(error.what() << endl);
118 }
119
120
121 if (inputFile.empty()) {
122 FATAL("No input files." << endl);
123 }
124
125 outputFile.open();
126
127 outputFile.put(JMeta(argc, argv));
128
129 JParallelFileScanner_t in(inputFile[0]);
130
131 vector<JTreeRouter_t> buffer(1); // skip one entry
132
133 for (size_t i = 1; i != inputFile.size(); ++i) {
134 buffer.push_back(JTreeRouter_t(inputFile[i]));
135 }
136
137 while (in.hasNext()) {
138
139 STATUS("event: " << setw(10) << in.getCounter() << '\r'); DEBUG(endl);
140
141 multi_pointer_type ps = in.next();
142
143 const JDAQEvent* tev = ps;
144 const JEvt* evt = ps;
145
146 JEvt out(*evt);
147
148 for (size_t i = 1; i != inputFile.size(); ++i) {
149
150 const JEvt* p = buffer[i].get(*tev);
151
152 if (p != NULL) {
153
154 copy(p->begin(), p->end(), back_inserter(out));
155
156 } else {
157
158 FATAL("Inconsistent data at " << in.getFilename() << ":" << in.getCounter() << endl);
159 }
160 }
161
162 outputFile.put(out);
163 }
164 STATUS(endl);
165
166 {
168
169 io >> outputFile;
170 }
171 {
173
174 io >> outputFile;
175 }
176
177 outputFile.close();
178}
string outputFile
Recording of objects on file according a format that follows from the file name extension.
int main(int argc, char **argv)
Definition JMergeFit.cc:89
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define STATUS(A)
Definition JMessage.hh:63
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
ROOT I/O of application specific meta data.
Parallel scanning of objects from a single file or multiple files according a format that follows fro...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
ROOT TTree parameter settings of various packages.
Data structure for set of track fit results.
Utility class to parse command line options.
Definition JParser.hh:1698
Object writing to file.
General purpose class for object reading from a list of file names.
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.
bool is_same(const JDAQEventHeader &header) const
Check if header is same.
const JDAQEventHeader & getDAQEventHeader() const
Get DAQ event header.
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition JHead.cc:163
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
Acoustic event fit.
Type list.
Definition JTypeList.hh:23
Auxiliary class for ROOT I/O of application specific meta data.
Definition JMeta.hh:72
Auxiliary class to determine time of DAQ objects.