45 if (cta != ToA_t && cta != ToE_t) {
53 if ((cta == ToA_t && first.
getToA() == second.
getToA()) ||
67 if (cta == ToA_t) {
return first.
getToA() < second.
getToA(); }
68 if (cta == ToE_t) {
return first.
getToE() < second.
getToE(); }
92 inline bool operator()(
const JEvent& first,
const JEvent& second)
const
98 if (first.size() == second.size()) {
100 for (JEvent::const_iterator
102 p1 = second.begin(); p0 != first.end() &&
p1 != second.end(); ++p0, ++
p1) {
104 if ((*
this)(*p0, *
p1)) {
113 return first.size() < second.size();
148 std::ostream& operator()(std::ostream& out,
const std::string& filename,
const int index,
const JEvent& evt,
const std::string& prefix,
const std::string& postfix)
const
154 out << prefix << (prefix ==
"" ?
"" :
" ")
155 << setw(width) << left << filename << right <<
' '
156 <<
"[" <<
FILL(6,
'0') << index <<
"]" <<
FILL() <<
' '
159 << setw(2) << evt.
getID() <<
' '
160 <<
FIXED(12,6) << evt. begin()->getToA() <<
' '
161 <<
FIXED(12,6) << evt.rbegin()->getToA()
162 << (postfix ==
"" ?
"" :
" ") << postfix << endl;
178 std::ostream& operator()(std::ostream& out,
const JTransmission&
object,
const std::string& prefix,
const std::string& postfix)
const
184 out << prefix << (prefix ==
"" ?
"" :
" ")
185 << setw(8) <<
object.getID() <<
' '
186 << setw(8) <<
object.getRunNumber() <<
' '
187 <<
FIXED(13,7) <<
object.getToA() <<
' '
188 <<
FIXED(13,7) <<
object.getToE() <<
' '
189 <<
FIXED(8,0) <<
object.getQ()
190 << (postfix ==
"" ?
"" :
" ") << postfix << endl;
205 static inline bool toa(
const JEvent& first,
const JEvent& second)
207 return first.begin()->getToA() < second.begin()->getToA();
218 static inline bool toe(
const JEvent& first,
const JEvent& second)
220 return first.begin()->getToE() < second.begin()->getToE();
239 int main(
int argc,
char **argv)
251 JParser<> zap(
"Program to compare acoustics event data.");
253 zap[
'f'] =
make_field(inputFile,
"two outputs of JAcousticsEventBuilder[.sh]");
254 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
255 zap[
'O'] =
make_field(option, Null_t <<
" -> nothing " << Sort_t <<
" -> sort") = Null_t, Sort_t;
256 zap[
'C'] =
make_field(cta, ToA_t <<
" -> ToA " << ToE_t <<
" -> ToE") = ToA_t, ToE_t;
261 catch(
const exception &error) {
262 FATAL(error.what() << endl);
265 if (inputFile.size() != 2u) {
266 FATAL(
"Wrong number of input files " << inputFile.size() << endl);
269 const size_t width = max(inputFile[0].size(), inputFile[1].size());
274 for (
int i = 0; i != 2; ++i) {
277 buffer[i].push_back(*in.next());
281 if (option == Sort_t) {
283 for (
int i = 0; i != 2; ++i) {
285 for (
JEvent& evt : buffer[i]) {
286 sort(evt.begin(), evt.end(), compare);
289 if (cta == ToA_t) { sort(buffer[i].begin(), buffer[i].end(), toa); }
290 if (cta == ToE_t) { sort(buffer[i].begin(), buffer[i].end(), toe); }
293 sort(p->begin(), p->end(), compare);
298 int count[] = { 0, 0 };
301 p0 = buffer[0].begin(),
302 p1 = buffer[1].begin(); p0 != buffer[0].end() &&
p1 != buffer[1].end(); ) {
304 for ( ; p0 != buffer[0].end() &&
p1 != buffer[1].end() && ((cta == ToA_t && toa(*p0,*
p1)) || (cta == ToE_t && toe(*p0,*
p1))); ++p0, ++count[1]) {
305 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
">>",
"");
308 for ( ; p0 != buffer[0].end() &&
p1 != buffer[1].end() && ((cta == ToA_t && toa(*
p1,*p0)) || (cta == ToE_t && toe(*
p1,*p0))); ++
p1, ++count[1]) {
312 if (p0 != buffer[0].end() &&
p1 != buffer[1].end()) {
314 if (!compare(*p0,*
p1) && !compare(*
p1,*p0)) {
318 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
"",
"\\");
325 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
"",
"*");
328 if (p0->getDetectorID() ==
p1->getDetectorID() &&
329 p0->getCounter() ==
p1->getCounter() &&
330 p0->getID() ==
p1->getID()) {
332 JEvent::const_iterator i0 = p0->begin();
333 JEvent::const_iterator i1 =
p1->begin();
335 while (i0 != p0->end() && i1 !=
p1->end()) {
337 for ( ; i0 != p0->end() && i1 !=
p1->end() && compare(*i0,*i1); ++i0) {
338 print(cout, *i0,
">>",
"");
341 for ( ; i0 != p0->end() && i1 !=
p1->end() && compare(*i1,*i0); ++i1) {
342 print(cout, *i1,
"<<",
"");
345 if (i0 != p0->end() && i1 !=
p1->end()) {
346 if (!compare(*i0, *i1) && !compare(*i1,*i0)) {
353 for ( ; i0 != p0->end(); ++i0) {
354 print(cout, *i0,
">>",
"");
357 for ( ; i1 !=
p1->end(); ++i1) {
358 print(cout, *i1,
"<<",
"");
363 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
">>",
"");
368 if (toa(*p0,*
p1) || toa(*
p1,*p0)) {
378 STATUS(
"Number of differences / events: " << count[1] <<
" / " << count[0] << endl);
380 if (buffer[0].size() != buffer[1].size()) {
381 FATAL(
"Different size " << buffer[0].size() <<
' ' << buffer[1].size() << endl);
385 FATAL(
"Number of differences " << count[1] << endl);
ROOT TTree parameter settings.
int main(int argc, char **argv)
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
General purpose messaging.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Scanning of objects from a single file according a format that follows from the extension of each fil...
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Exception for accessing a value in a collection that is outside of its range.
Utility class to parse command line options.
Object reading from a list of files.
virtual bool hasNext() override
Check availability of next element.
std::ostream & print(std::ostream &out, const JTestSummary &summary, const char delimiter=' ', const bool useColors=true)
Print test summary.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for sequence of same character.
Auxiliary data structure for floating point format specification.
int getCounter() const
Get counter.
int getID() const
Get emitter identifier.
const int getDetectorID() const
Get detector identifier.
double getToA() const
Get calibrated time of arrival.
double getToE() const
Get estimated time of emission.
double getW() const
Get normalisation.
double getQ() const
Get quality.
int getRunNumber() const
Get run number.
int getID() const
Get identifier.
Auxiliary class for defining the range of iterations of objects.