suboptimumg.log_analysis.gps_laps#

type suboptimumg.log_analysis.gps_laps.LineSegment = tuple[Point, Point]#
type suboptimumg.log_analysis.gps_laps.Point = tuple[float, float]#
suboptimumg.log_analysis.gps_laps.align_laps(laps, baseline_lap=None)[source]#

Align each lap’s posX and posY DataInstances to a baseline using cKDTree + Nelder-Mead to minimize mean log-nearest-neighbour distance. Only considers translations of the GPS points.

Parameters:
  • laps (list[SingleRunData]) – List of SingleRunData objects corresponding to each lap, typically generated by split_laps_from_gps.

  • baseline_lap (int) – Index into laps to use as the alignment reference. If None, dynamically picks the fastest lap as the basline

Returns:

Index of the baseline lap used for alignment.

Return type:

int

suboptimumg.log_analysis.gps_laps.detect_lap_crossings(pos_x, pos_y, timestamps, sf_line, min_lap_time=10.0)[source]#

Detect start/finish line crossings and return their timestamps. Crossings separated by less than min_lap_time are ignored to suppress false positives (e.g. GPS jitters).

Parameters:
  • pos_x (NDArray[float64]) – X and Y coordinates in meters, same length as timestamps.

  • pos_y (NDArray[float64]) – X and Y coordinates in meters, same length as timestamps.

  • timestamps (NDArray[float64])

  • sf_line (((x1, y1), (x2, y2))) – Start/finish line endpoints in local X/Y meters.

  • min_lap_time (float) – Minimum elapsed time between accepted crossings (same unit as timestamps).

Returns:

Timestamps of each accepted S/F crossing, in order.

Return type:

list[float]

suboptimumg.log_analysis.gps_laps.split_laps_from_gps(data, sf_line, min_lap_time=10.0)[source]#

Detect laps via GPS and split SingleRunData into per-lap segments.

Parameters:
  • data (SingleRunData) – Must contain posX and posY.

  • sf_line (((x1, y1), (x2, y2))) – Start/finish line endpoints in local X/Y meters.

  • min_lap_time (float) – Minimum elapsed time between crossings (same unit as data timestamps).

Return type:

List[SingleRunData]