@Override public VMultiDouble readValue() { Instant reference = electReferenceTimeStamp(collectors); if (reference == null) return null; TimeInterval allowedInterval = TimeInterval.around(tolerance, reference); List<VDouble> values = new ArrayList<VDouble>(collectors.size()); StringBuilder buffer = new StringBuilder(); for (ReadFunction<List<VDouble>> collector : collectors) { List<VDouble> data = collector.readValue(); if (log.isLoggable(Level.FINE)) { buffer.append(data.size()).append(", "); } VDouble value = closestElement(data, allowedInterval, reference); values.add(value); } if (log.isLoggable(Level.FINE)) { log.fine(buffer.toString()); } return ValueFactory.newVMultiDouble(values, ValueFactory.alarmNone(), ValueFactory.newTime(reference), ValueFactory.displayNone()); }