196 vector<string> inputFile;
197 JLimit numberOfEvents;
202 JParser<> zap(
"Program to compare acoustics fit data.");
204 zap[
'f'] = make_field(inputFile,
"two outputs of JKatoomba[.sh]");
205 zap[
'n'] = make_field(numberOfEvents) = JLimit::max();
206 zap[
'd'] = make_field(debug) = 2;
210 catch(
const exception &error) {
211 FATAL(error.what() << endl);
214 if (inputFile.size() != 2u) {
215 FATAL(
"Wrong number of input files " << inputFile.size() << endl);
218 const size_t width = max(inputFile[0].size(), inputFile[1].size());
219 const printer print = { debug, width };
221 vector<JEvt> buffer[2];
223 for (
int i = 0; i != 2; ++i) {
225 for (JSingleFileScanner<JEvt> in(inputFile[i], numberOfEvents); in.hasNext(); ) {
226 buffer[i].push_back(*in.next());
229 sort(buffer[i].begin(), buffer[i].end());
233 for (
int i = 0; i != 2; ++i) {
234 for (vector<JEvt>::iterator p = buffer[i].begin(); p != buffer[i].end(); ++p) {
235 sort(p->begin(), p->end(), make_comparator(&JFit::id, JComparison::lt()));
240 int count[] = { 0, 0 };
242 for (vector<JEvt>::const_iterator
243 p0 = buffer[0].begin(),
244 p1 = buffer[1].begin(); p0 != buffer[0].end() && p1 != buffer[1].end(); ) {
246 for ( ; p0 != buffer[0].end() && p1 != buffer[1].end() && compare(*p0,*p1); ++p0, ++count[1]) {
247 print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0,
">>",
"");
250 for ( ; p0 != buffer[0].end() && p1 != buffer[1].end() && compare(*p1,*p0); ++p1, ++count[1]) {
251 print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1,
"<<",
"");
254 if (p0 != buffer[0].end() && p1 != buffer[1].end()) {
256 if (!compare(*p0,*p1) && !compare(*p1,*p0)) {
260 print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0,
"",
"\\");
261 print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1,
"",
"/ ");
267 if (p0->detid == p1->detid &&
268 p0->UNIXTimeStart == p1->UNIXTimeStart &&
269 p0->UNIXTimeStop == p1->UNIXTimeStop) {
271 print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0,
"",
"");
272 print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1,
"",
"");
274 JEvt::const_iterator i0 = p0->begin();
275 JEvt::const_iterator i1 = p1->begin();
277 for ( ; i0 != p0->end() && i1 != p1->end(); ++i0, ++i1) {
278 if (compare(*i0, *i1) || compare(*i1,*i0)) {
279 print(cout, *i0,
">>",
"");
280 print(cout, *i1,
"<<",
"");
284 for ( ; i0 != p0->end(); ++i0) {
285 print(cout, *i0,
">>",
"");
288 for ( ; i1 != p1->end(); ++i1) {
289 print(cout, *i1,
"<<",
"");
294 print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0,
">>",
"");
295 print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1,
"<<",
"");
299 if (compare(*p0,*p1) || compare(*p1,*p0)) {
309 STATUS(
"Number of differences / events: " << count[1] <<
" / " << count[0] << endl);
311 if (buffer[0].size() != buffer[1].size()) {
312 FATAL(
"Different size " << buffer[0].size() <<
' ' << buffer[1].size() << endl);
316 FATAL(
"Number of differences " << count[1] << endl);