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 if (cta == ToA_t) { sort(buffer[
i].begin(), buffer[
i].end(), toa); }
286 if (cta == ToE_t) { sort(buffer[
i].begin(), buffer[
i].end(), toe); }
289 sort(p->begin(), p->end(), compare);
294 int count[] = { 0, 0 };
297 p0 = buffer[0].begin(),
298 p1 = buffer[1].begin(); p0 != buffer[0].end() &&
p1 != buffer[1].end(); ) {
300 for ( ; p0 != buffer[0].end() &&
p1 != buffer[1].end() && ((cta == ToA_t && toa(*p0,*
p1)) || (cta == ToE_t && toe(*p0,*
p1))); ++p0, ++count[1]) {
301 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
">>",
"");
304 for ( ; p0 != buffer[0].end() &&
p1 != buffer[1].end() && ((cta == ToA_t && toa(*
p1,*p0)) || (cta == ToE_t && toe(*
p1,*p0))); ++
p1, ++count[1]) {
308 if (p0 != buffer[0].end() &&
p1 != buffer[1].end()) {
310 if (!compare(*p0,*
p1) && !compare(*
p1,*p0)) {
314 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
"",
"\\");
321 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
"",
"*");
324 if (p0->getOID() ==
p1->getOID() &&
325 p0->getCounter() ==
p1->getCounter() &&
326 p0->getID() ==
p1->getID()) {
328 JEvent::const_iterator i0 = p0->begin();
329 JEvent::const_iterator i1 =
p1->begin();
331 while (i0 != p0->end() && i1 !=
p1->end()) {
333 for ( ; i0 != p0->end() && i1 !=
p1->end() && compare(*i0,*i1); ++i0) {
334 print(cout, *i0,
">>",
"");
337 for ( ; i0 != p0->end() && i1 !=
p1->end() && compare(*i1,*i0); ++i1) {
338 print(cout, *i1,
"<<",
"");
341 if (i0 != p0->end() && i1 !=
p1->end()) {
342 if (!compare(*i0, *i1) && !compare(*i1,*i0)) {
349 for ( ; i0 != p0->end(); ++i0) {
350 print(cout, *i0,
">>",
"");
353 for ( ; i1 !=
p1->end(); ++i1) {
354 print(cout, *i1,
"<<",
"");
359 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
">>",
"");
364 if (toa(*p0,*
p1) || toa(*
p1,*p0)) {
374 STATUS(
"Number of differences / events: " << count[1] <<
" / " << count[0] << endl);
376 if (buffer[0].size() != buffer[1].size()) {
377 FATAL(
"Different size " << buffer[0].size() <<
' ' << buffer[1].size() << endl);
381 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.
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.
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