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();
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;
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() != 2
u) {
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->getOID() ==
p1->getOID() &&
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);
Utility class to parse command line options.
int main(int argc, char *argv[])
double getQ() const
Get quality.
int getRunNumber() const
Get run number.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
ROOT TTree parameter settings.
int getCounter() const
Get counter.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Auxiliary data structure for floating point format specification.
double getToE() const
Get estimated time of emission.
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
Scanning of objects from a single file according a format that follows from the extension of each fil...
Auxiliary class for defining the range of iterations of objects.
double getW() const
Get normalisation.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
const std::string & getOID() const
Get detector identifier.
General purpose messaging.
Auxiliary data structure for sequence of same character.
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Utility class to parse command line options.
double getToA() const
Get calibrated time of arrival.
int getID() const
Get identifier.
Object reading from a list of files.
Exception for accessing a value in a collection that is outside of its range.
int getID() const
Get emitter identifier.