28 inline bool compare(
const JToA& first,
const JToA& second)
32 if (first.
RUN == second.
RUN) {
79 return first.
RUN < second.
RUN;
100 out << setw(8) <<
object.RUN <<
' '
101 << setw(8) <<
object.DOMID <<
' '
102 << setw(2) <<
object.WAVEFORMID <<
' '
103 <<
FIXED(15,1) << (
static_cast<double>(
object.SECONDS) +
static_cast<double>(
object.TICKS)*16E-9) <<
' '
104 <<
FIXED( 9,6) <<
object.TOA_NS <<
' '
105 <<
FIXED( 9,3) <<
object.QUALITYFACTOR;
128 JParser<> zap(
"Program to compare toa data.");
130 zap[
'f'] =
make_field(inputFile,
"two outputs of JToA");
136 catch(
const exception &error) {
137 FATAL(error.what() << endl);
140 if (inputFile.size() != 2u) {
141 FATAL(
"Wrong number of input files " << inputFile.size() << endl);
144 const size_t width = max(inputFile[0].size(), inputFile[1].size());
148 for (
int i = 0; i != 2; ++i) {
151 buffer[i].push_back(*in.next());
154 sort(buffer[i].begin(), buffer[i].end(), compare);
157 int count[] = { 0, 0 };
159 for (vector<JToA>::const_iterator
160 p0 = buffer[0].begin(),
161 p1 = buffer[1].begin(); p0 != buffer[0].end() &&
p1 != buffer[1].end(); ) {
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);
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);
171 if (p0 != buffer[0].end() &&
p1 != buffer[1].end() && !compare(*p0,*
p1) && !compare(*
p1,*p0)) {
175 DEBUG(setw(width) << left << inputFile[0] << right <<
' ' << *p0 <<
" \\" << endl);
176 DEBUG(setw(width) << left << inputFile[1] << right <<
' ' << *
p1 <<
" / " << endl);
183 STATUS(
"Number of differences / events: " << count[1] <<
" / " << count[0] << endl);
185 if (buffer[0].size() != buffer[1].size()) {
186 FATAL(
"Different size " << buffer[0].size() <<
' ' << buffer[1].size() << endl);
190 FATAL(
"Number of differences " << count[1] << endl);
ROOT TTree parameter settings.
int main(int argc, char **argv)
General purpose messaging.
#define DEBUG(A)
Message macros.
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...
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).
JWriter & operator<<(JWriter &out, const JDAQChronometer &chronometer)
Write DAQ chronometer to output.
Auxiliary data structure for floating point format specification.
Time-of-arrival data from acoustic piezo sensor or hydrophone.
uint32_t SECONDS
Time of Arrival, in ns (relative to Unix epoch, 1 January 1970 00:00:00 UTC)
uint32_t DOMID
DAQ run number.
int64_t TOA_NS
Unique ID of the waveform that best described the signal around TOA_NS.
uint32_t QUALITYFACTOR
The ticks (16ns) part of the DAQ frame timestamp.
uint32_t QUALITYNORMALISATION
A measure of how good the waveform match was to the signal.
int32_t WAVEFORMID
DOM unique identifeir.
int32_t RUN
detector identifier
uint32_t TICKS
The seconds part of the DAQ frame timestamp.
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.