Skip to content

Commit e7abf41

Browse files
author
FelixAbrahamsson
committed
improve: drop nans and add adjustment parameter in sync_frame_index
1 parent 3591af0 commit e7abf41

File tree

4 files changed

+27
-14
lines changed

4 files changed

+27
-14
lines changed

kmm/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from kmm.functional_base import FunctionalBase
22
from kmm.car_direction import CarDirection
3+
from kmm.position_adjustment import PositionAdjustment
34
from kmm import positions
45
from kmm import header
56
from kmm.positions.positions import Positions

kmm/position_adjustment.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from enum import IntEnum
2+
3+
4+
class PositionAdjustment(IntEnum):
5+
WIRE_CAMERA = 8

kmm/positions/positions.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from kmm.header.header import Header
12
from pathlib import Path
23
import pandas as pd
34
from pydantic import validate_arguments
@@ -32,6 +33,7 @@ def from_path(path: Path):
3233
def read_sync_adjust(
3334
kmm_path: Path,
3435
header_path: Path,
36+
adjustment: kmm.PositionAdjustment = kmm.PositionAdjustment.WIRE_CAMERA,
3537
):
3638
"""
3739
Loads positions from .kmm or .kmm2 file + .hdr file, then performs
@@ -40,12 +42,13 @@ def read_sync_adjust(
4042
header = kmm.Header.from_path(header_path)
4143
return (
4244
Positions.from_path(kmm_path)
43-
.sync_frame_index(header)
45+
.sync_frame_index(header, adjustment)
4446
.geodetic()
4547
)
4648

47-
def sync_frame_index(self, header):
48-
return kmm.positions.sync_frame_index(self, header)
49+
@validate_arguments
50+
def sync_frame_index(self, header: Header, adjustment: kmm.PositionAdjustment):
51+
return kmm.positions.sync_frame_index(self, header, adjustment)
4952

5053
def geodetic(self):
5154
return kmm.positions.geodetic(self)

kmm/positions/sync_frame_index.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import numpy as np
22
from pydantic import validate_arguments
33

4-
from kmm import CarDirection
4+
from kmm import CarDirection, PositionAdjustment
55
from kmm.positions.positions import Positions
66
from kmm.header.header import Header
77

88

99
@validate_arguments(config=dict(arbitrary_types_allowed=True))
10-
def sync_frame_index(positions: Positions, header: Header):
10+
def sync_frame_index(positions: Positions, header: Header, adjustment: PositionAdjustment):
1111

1212
validate_meter_increments(positions)
1313
frame_index = (
@@ -17,19 +17,23 @@ def sync_frame_index(positions: Positions, header: Header):
1717
- header.sync
1818
) / 10
1919
).astype(int)
20-
pad = np.zeros(8)
21-
pad.fill(np.nan)
2220

2321
if header.car_direction == CarDirection.A:
24-
frame_index = np.concatenate([pad, frame_index[8:]])
22+
dataframe = (
23+
positions.dataframe
24+
.iloc[adjustment:]
25+
.assign(frame_index=frame_index[adjustment:])
26+
)
2527
elif header.car_direction == CarDirection.B:
26-
frame_index = np.concatenate([frame_index[:-8], pad])
28+
dataframe = (
29+
positions.dataframe
30+
.iloc[:-adjustment]
31+
.assign(frame_index=frame_index[:-adjustment])
32+
)
2733
else:
2834
raise ValueError(header.car_direction)
2935

30-
return positions.replace(
31-
dataframe=positions.dataframe.assign(frame_index=frame_index)
32-
)
36+
return positions.replace(dataframe=dataframe)
3337

3438

3539
def validate_meter_increments(positions):
@@ -50,7 +54,7 @@ def test_sync_frame_index_kmm():
5054
positions = Positions.from_path("tests/ascending_B.kmm")
5155
header = Header.from_path("tests/ascending_B.hdr")
5256
assert (
53-
sync_frame_index(positions, header)
57+
sync_frame_index(positions, header, PositionAdjustment.WIRE_CAMERA)
5458
.dataframe["frame_index"].iloc[0] == 659
5559
)
5660

@@ -61,6 +65,6 @@ def test_sync_frame_index_kmm2():
6165
positions = Positions.from_path("tests/ascending_B.kmm2")
6266
header = Header.from_path("tests/ascending_B.hdr")
6367
assert (
64-
sync_frame_index(positions, header)
68+
sync_frame_index(positions, header, PositionAdjustment.WIRE_CAMERA)
6569
.dataframe["frame_index"].iloc[0] == -808
6670
)

0 commit comments

Comments
 (0)