From 346c2c72937a366487b1360490a134aa235dd22c Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 11 Feb 2026 14:53:49 -0800 Subject: [PATCH 1/3] Remove offset from VolumeGeometry --- omf/fileio/geoh5.py | 29 +++++++---------------------- tests/convert_volume_test.py | 6 +++++- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/omf/fileio/geoh5.py b/omf/fileio/geoh5.py index cedd2bb..4b0f12c 100644 --- a/omf/fileio/geoh5.py +++ b/omf/fileio/geoh5.py @@ -297,7 +297,10 @@ def collect_attributes( kwargs = conversion.collect_attributes(element, workspace, **kwargs) else: if isinstance(element, UidModel): - prop = getattr(element, key, None) + if key == "origin": + prop = getattr(element, key, None) + else: + prop = getattr(element, key, None) label = alias else: prop = getattr(element, alias, None) @@ -1167,20 +1170,17 @@ def collect_omf_attributes(cls, element: VolumeElement, **kwargs) -> dict: f"{VolumeGridGeometry} with 3D rotation axes." ) - offsets = [] for key, alias in cls._attribute_map.items(): tensor = getattr(element.geometry, f"tensor_{key}") - axis = getattr(element.geometry, f"axis_{key}") - offsets.append(axis * tensor[0] / 2.0) cell_delimiter = np.r_[0, np.cumsum(tensor)] kwargs.update({f"{alias}_cell_delimiters": cell_delimiter}) - offsets = np.c_[offsets].sum(axis=1) + kwargs["z_cell_delimiters"] *= element.geometry.axis_w[-1] rotation = np.rad2deg( np.arctan2(element.geometry.axis_u[1], element.geometry.axis_u[0]) ) kwargs.update({"rotation": rotation}) - kwargs.update({"origin": np.r_[element.geometry.origin] - offsets}) + kwargs.update({"origin": np.r_[element.geometry.origin]}) return kwargs @@ -1203,23 +1203,8 @@ def collect_h5_attributes( geometry["axis_v"] = rot.dot(np.c_[0.0, axis[1], 0.0].T).flatten() geometry["axis_w"] = np.r_[0, 0, axis[2]] - offsets = [] - for key in cls._attribute_map: - offsets.append( - geometry[f"axis_{key}"] * geometry[f"tensor_{key}"][0] / 2.0 - ) - - offsets = np.c_[offsets].sum(axis=1) if hasattr(entity, "origin"): - geometry.update( - { - "origin": np.r_[ - entity.origin["x"] + offsets[0], - entity.origin["y"] + offsets[1], - entity.origin["z"] + offsets[2], - ] - } - ) + geometry.update({"origin": np.r_[list(entity.origin)]}) kwargs.update({"geometry": geometry}) return kwargs diff --git a/tests/convert_volume_test.py b/tests/convert_volume_test.py index 840b433..13bdaac 100644 --- a/tests/convert_volume_test.py +++ b/tests/convert_volume_test.py @@ -20,7 +20,8 @@ import omf from omf import Project -from omf.fileio.geoh5 import block_model_reordering +from omf.fileio import OMFWriter +from omf.fileio.geoh5 import GeoH5Reader, block_model_reordering def test_volume_to_geoh5(tmp_path: Path): @@ -115,6 +116,9 @@ def test_volume_to_geoh5(tmp_path: Path): omf.fileio.utils.compare_elements(omf_vol, vol) + reader = GeoH5Reader(file) + OMFWriter(reader(), str(tmp_path / f"{__name__}.omf")) + def test_volume_flip_origin_z(tmp_path): dims = [10, 15, 20] From 7da25abdcfeaab9dc92530888208617cf67614ca Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 11 Feb 2026 15:22:46 -0800 Subject: [PATCH 2/3] Fix tests --- omf/fileio/geoh5.py | 8 +++++++- tests/convert_volume_test.py | 5 +---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/omf/fileio/geoh5.py b/omf/fileio/geoh5.py index 4b0f12c..99e8587 100644 --- a/omf/fileio/geoh5.py +++ b/omf/fileio/geoh5.py @@ -1204,7 +1204,13 @@ def collect_h5_attributes( geometry["axis_w"] = np.r_[0, 0, axis[2]] if hasattr(entity, "origin"): - geometry.update({"origin": np.r_[list(entity.origin)]}) + geometry.update( + { + "origin": np.r_[ + entity.origin["x"], entity.origin["y"], entity.origin["z"] + ] + } + ) kwargs.update({"geometry": geometry}) return kwargs diff --git a/tests/convert_volume_test.py b/tests/convert_volume_test.py index 13bdaac..3a58b38 100644 --- a/tests/convert_volume_test.py +++ b/tests/convert_volume_test.py @@ -140,10 +140,7 @@ def test_volume_flip_origin_z(tmp_path): block_model = workspace.get_entity("vol")[0] assert block_model.z_cell_delimiters[-1] < 0 - assert ( - block_model.origin["z"] - == vol.geometry.origin[2] + vol.geometry.tensor_w[0] / 2 - ) + assert block_model.origin["z"] == vol.geometry.origin[2] with Workspace(file) as workspace: rotation = np.random.normal(-180, 180, 1) From 98fef7956ecf6ed4ee509f766cb990e5fd7d2b42 Mon Sep 17 00:00:00 2001 From: domfournier Date: Thu, 12 Feb 2026 12:48:04 -0800 Subject: [PATCH 3/3] Refactor property retrieval for UidModel --- omf/fileio/geoh5.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/omf/fileio/geoh5.py b/omf/fileio/geoh5.py index 99e8587..82d49fb 100644 --- a/omf/fileio/geoh5.py +++ b/omf/fileio/geoh5.py @@ -297,10 +297,7 @@ def collect_attributes( kwargs = conversion.collect_attributes(element, workspace, **kwargs) else: if isinstance(element, UidModel): - if key == "origin": - prop = getattr(element, key, None) - else: - prop = getattr(element, key, None) + prop = getattr(element, key, None) label = alias else: prop = getattr(element, alias, None)