118{
121
125
126 try {
127
128 JParser<> zap(
"Program to compare toa data.");
129
130 zap[
'f'] =
make_field(inputFile,
"two outputs of JToA");
133
134 zap(argc, argv);
135 }
136 catch(const exception &error) {
137 FATAL(error.what() << endl);
138 }
139
140 if (inputFile.size() != 2u) {
141 FATAL(
"Wrong number of input files " << inputFile.size() << endl);
142 }
143
144 const size_t width = max(inputFile[0].size(), inputFile[1].size());
145
147
148 for (int i = 0; i != 2; ++i) {
149
151 buffer[i].push_back(*in.next());
152 }
153
154 sort(buffer[i].begin(), buffer[i].end(), compare);
155 }
156
157 int count[] = { 0, 0 };
158
159 for (vector<JToA>::const_iterator
160 p0 = buffer[0].begin(),
161 p1 = buffer[1].begin(); p0 != buffer[0].end() &&
p1 != buffer[1].end(); ) {
162
163 for ( ; p0 != buffer[0].end() &&
p1 != buffer[1].end() && compare(*p0,*
p1); ++p0, ++count[1]) {
164 DEBUG(
">> " << setw(width) << left << inputFile[0] << right <<
' ' << *p0 << endl);
165 }
166
167 for ( ; p0 != buffer[0].end() &&
p1 != buffer[1].end() && compare(*
p1,*p0); ++
p1, ++count[1]) {
168 DEBUG(
"<< " << setw(width) << left << inputFile[1] << right <<
' ' << *
p1 << endl);
169 }
170
171 if (p0 != buffer[0].end() &&
p1 != buffer[1].end() && !compare(*p0,*
p1) && !compare(*
p1,*p0)) {
172
173 ++count[0];
174
175 DEBUG(setw(width) << left << inputFile[0] << right <<
' ' << *p0 <<
" \\" << endl);
176 DEBUG(setw(width) << left << inputFile[1] << right <<
' ' << *
p1 <<
" / " << endl);
177
178 ++p0;
180 }
181 }
182
183 STATUS(
"Number of differences / events: " << count[1] <<
" / " << count[0] << endl);
184
185 if (buffer[0].size() != buffer[1].size()) {
186 FATAL(
"Different size " << buffer[0].size() <<
' ' << buffer[1].size() << endl);
187 }
188
189 if (count[1] != 0) {
190 FATAL(
"Number of differences " << count[1] << endl);
191 }
192}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
Object reading from a list of files.
virtual bool hasNext() override
Check availability of next element.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.