aboutsummaryrefslogtreecommitdiff
path: root/ride/moving_time.go
diff options
context:
space:
mode:
Diffstat (limited to 'ride/moving_time.go')
-rw-r--r--ride/moving_time.go18
1 files changed, 9 insertions, 9 deletions
diff --git a/ride/moving_time.go b/ride/moving_time.go
index 84cc28e..2ab07bf 100644
--- a/ride/moving_time.go
+++ b/ride/moving_time.go
@@ -19,25 +19,25 @@ const movingTimeMaxGap = 120 * time.Second
// Bench (104 rides, `-backtest`, distance >= 10 km, moving/elapsed ratio >= 0.8):
// absMean 0.4%, stderr 0.1, p50 0.2, p75 0.4, p90 0.8, p95 1.4, p99 2.9.
func MovingTime(r Ride) time.Duration {
- return movingTime(r, movingTimeMinSpeedMps, movingTimeMaxGap)
+ return movingTime(r.timestamps, r.distances, r.powers, r.cadences, movingTimeMinSpeedMps, movingTimeMaxGap)
}
-func movingTime(r Ride, minSpeedMps float64, maxGap time.Duration) time.Duration {
+func movingTime(timestamps []time.Time, distances, powers, cadences []float64, minSpeedMps float64, maxGap time.Duration) time.Duration {
var moving time.Duration
- for i := 1; i < r.Len(); i++ {
- dt := r.Timestamp(i).Sub(r.Timestamp(i - 1))
+ for i := 1; i < len(timestamps); i++ {
+ dt := timestamps[i].Sub(timestamps[i-1])
if dt <= 0 || dt > maxGap {
continue
}
- dd := r.DistanceM(i) - r.DistanceM(i-1)
+ dd := distances[i] - distances[i-1]
gpsMoving := dd/dt.Seconds() > minSpeedMps
powerMoving := false
- if power, ok := r.PowerW(i); ok {
- powerMoving = power >= movingTimeMinPowerW
+ if len(powers) > 0 {
+ powerMoving = powers[i] >= movingTimeMinPowerW
}
cadenceMoving := false
- if cadence, ok := r.CadenceRpm(i); ok {
- cadenceMoving = cadence > 0
+ if len(cadences) > 0 {
+ cadenceMoving = cadences[i] > 0
}
if gpsMoving || powerMoving || cadenceMoving {
moving += dt