Skip to content

Commit bab9e02

Browse files
committed
add affine eval function to new echogrambuilder
1 parent 0c1cf18 commit bab9e02

2 files changed

Lines changed: 20 additions & 6 deletions

File tree

python/themachinethatgoesping/pingprocessing/watercolumn/echograms/coordinate_system.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,20 @@ def initialized(self) -> bool:
104104
"""Whether coordinate system is fully initialized."""
105105
return self._initialized
106106

107+
def _affine_eval(self, affine: Tuple[np.ndarray, np.ndarray], nr: int, indices) -> np.ndarray:
108+
"""Evaluate affine transform for a given ping at sample indices.
109+
110+
Args:
111+
affine: Tuple of (a, b) arrays from _compute_affine_coefficients.
112+
nr: Ping index.
113+
indices: Sample index or array of sample indices.
114+
115+
Returns:
116+
Coordinate values: a[nr] + b[nr] * indices
117+
"""
118+
a, b = affine
119+
return a[nr] + b[nr] * np.asarray(indices, dtype=np.float32)
120+
107121
def _compute_affine_coefficients(self, min_vals: np.ndarray, max_vals: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:
108122
"""Compute affine coefficients for: value = a + b * sample_index.
109123

python/themachinethatgoesping/pingprocessing/watercolumn/echograms/echogrambuilder_new.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,15 +1093,15 @@ def get_extent_layers(self, nr, axis_name=None):
10931093

10941094
case "Sample number":
10951095
assert cs.has_sample_nrs, "ERROR: Sample nr values not initialized"
1096-
extents[key] = cs.y_indice_to_sample_nr_interpolator[nr]([layer.i0[nr] - 0.5, layer.i1[nr] - 0.5])
1096+
extents[key] = cs._affine_eval(cs._affine_sample_to_sample_nr, nr, [layer.i0[nr] - 0.5, layer.i1[nr] - 0.5])
10971097

10981098
case "Depth (m)":
10991099
assert cs.has_depths, "ERROR: Depths values not initialized"
1100-
extents[key] = cs.y_indice_to_depth_interpolator[nr]([layer.i0[nr] - 0.5, layer.i1[nr] - 0.5])
1100+
extents[key] = cs._affine_eval(cs._affine_sample_to_depth, nr, [layer.i0[nr] - 0.5, layer.i1[nr] - 0.5])
11011101

11021102
case "Range (m)":
11031103
assert cs.has_ranges, "ERROR: Ranges values not initialized"
1104-
extents[key] = cs.y_indice_to_range_interpolator[nr]([layer.i0[nr] - 0.5, layer.i1[nr] - 0.5])
1104+
extents[key] = cs._affine_eval(cs._affine_sample_to_range, nr, [layer.i0[nr] - 0.5, layer.i1[nr] - 0.5])
11051105

11061106
case _:
11071107
raise RuntimeError(f"Invalid axis_name '{axis_name}'")
@@ -1122,15 +1122,15 @@ def get_limits_layers(self, nr, axis_name=None):
11221122

11231123
case "Sample number":
11241124
assert cs.has_sample_nrs, "ERROR: Sample nr values not initialized"
1125-
extents[key] = cs.y_indice_to_sample_nr_interpolator[nr]([layer.i0[nr], layer.i1[nr] - 1])
1125+
extents[key] = cs._affine_eval(cs._affine_sample_to_sample_nr, nr, [layer.i0[nr], layer.i1[nr] - 1])
11261126

11271127
case "Depth (m)":
11281128
assert cs.has_depths, "ERROR: Depths values not initialized"
1129-
extents[key] = cs.y_indice_to_depth_interpolator[nr]([layer.i0[nr], layer.i1[nr] - 1])
1129+
extents[key] = cs._affine_eval(cs._affine_sample_to_depth, nr, [layer.i0[nr], layer.i1[nr] - 1])
11301130

11311131
case "Range (m)":
11321132
assert cs.has_ranges, "ERROR: Ranges values not initialized"
1133-
extents[key] = cs.y_indice_to_range_interpolator[nr]([layer.i0[nr], layer.i1[nr] - 1])
1133+
extents[key] = cs._affine_eval(cs._affine_sample_to_range, nr, [layer.i0[nr], layer.i1[nr] - 1])
11341134

11351135
case _:
11361136
raise RuntimeError(f"Invalid axis_name '{axis_name}'")

0 commit comments

Comments
 (0)