From 76f13c2c07ccb187d7b8376322cd973fd2d54be4 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Wed, 7 Aug 2024 08:49:20 +0200 Subject: fix: Remove too short outliers --- ride/climb.go | 2 +- ride/climb_test.go | 15 +++++++++++++++ ride/ride.go | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) (limited to 'ride') diff --git a/ride/climb.go b/ride/climb.go index cff2b39..7720fa8 100644 --- a/ride/climb.go +++ b/ride/climb.go @@ -109,7 +109,7 @@ func climbsBetween(points []Point, start int, end int) []Climb { return climbsBetween(points, start+1, end) } climb := bestClimbBetween(points, start, highest) - if Score(points, climb.start, climb.end) >= 35 { + if Score(points, climb.start, climb.end) >= 35 && points[climb.end].distance-points[climb.start].distance >= ClimbDistanceMinimum { fmt.Printf("Found climb between %.1fkm and %.1fkm\n", points[climb.start].distance/1000, points[climb.end].distance/1000) climbs = append(climbs, climb) } diff --git a/ride/climb_test.go b/ride/climb_test.go index 65b6b54..0f6ff8b 100644 --- a/ride/climb_test.go +++ b/ride/climb_test.go @@ -88,3 +88,18 @@ func TestPogacar20220721(t *testing.T) { assert.Equal(t, "99.2km-109.3km: 10.2km at 8.4% (710 pts - HC)", r.String(climbs[4])) assert.Equal(t, "128.6km-142.2km: 13.6km at 7.8% (832 pts - HC)", r.String(climbs[5])) } + +func TestBouclesVerdon2024(t *testing.T) { + gpxContent, err := gpx.ParseFile("../examples/2024-06-29.BouclesVerdon.gpx") + assert.NoError(t, err) + r := ride.FromGPX(gpxContent) + climbs := r.AllClimbs() + + assert.Len(t, climbs, 6) + assert.Equal(t, "3.6km-13.8km: 10.3km at 2.1% (44 pts - Cat 4)", r.String(climbs[0])) // TODO: Not steep enough + assert.Equal(t, "34.7km-37.3km: 2.5km at 5.0% (62 pts - Cat 4)", r.String(climbs[1])) + assert.Equal(t, "41.9km-51.0km: 9.0km at 2.5% (55 pts - Cat 4)", r.String(climbs[2])) // TODO: Not steep enough + assert.Equal(t, "57.6km-60.8km: 3.1km at 6.3% (124 pts - Cat 3)", r.String(climbs[3])) + assert.Equal(t, "71.7km-74.7km: 3.0km at 5.3% (84 pts - Cat 3)", r.String(climbs[4])) + assert.Equal(t, "77.4km-78.7km: 1.3km at 5.3% (37 pts - Cat 4)", r.String(climbs[5])) +} diff --git a/ride/ride.go b/ride/ride.go index 2f0b78b..a745b0c 100644 --- a/ride/ride.go +++ b/ride/ride.go @@ -59,3 +59,17 @@ func (r *Ride) ScoreFromKm(start, end float64) float64 { } return Score(r.points, i, j) } + +func (r *Ride) ClimbFromDist(startDist, endDist float64) Climb { + start, end := 0, 0 + for i, p := range r.points { + if start == 0 && p.distance >= startDist { + start = i + } + if end == 0 && p.distance >= endDist { + end = i + break + } + } + return Climb{start, end} +} -- cgit v1.2.3