double ArduinoComparer::computeError( const Trajectory &aT , const Trajectory &dT , double offsetSeconds ) const { double sum = 0; // Check each reading in the device trajectory. Find its time and // shift it. Then read the value from the Arduino trace at the // shifted time and run its value through the mapping to find the // expected device value at that time. Compute the sum of squared // errors. // Because we want a positive offset to correspond to the device // measurements being behind the Arduino, we need to offset the // Arduino measurements by the negative of the offset. for (size_t i = 0; i < dT.m_entries.size(); i++) { double deviceValue = dT.m_entries[i].m_value; double timeShifted = dT.m_entries[i].m_time - offsetSeconds; size_t arduinoValue = static_cast<size_t>(aT.lookup(timeShifted)); double expectedDeviceValue = m_mappingMean[arduinoValue]; sum += (expectedDeviceValue - deviceValue) * (expectedDeviceValue - deviceValue); } return sum; }