From 5e9350bfb3b42ddcff8bbb1d626d082ff508ae05 Mon Sep 17 00:00:00 2001
From: swittl <simon.wittl@th-deg.de>
Date: Mon, 24 Mar 2025 10:12:55 +0100
Subject: [PATCH] added slice utility

---
 pyproject.toml                                |  2 +-
 src/h5schemas/load_utilities/__init__.py      |  0
 src/h5schemas/load_utilities/vectors.py       | 37 +++++++++++++++++++
 .../projection/overwrite_projection.py        |  2 +-
 4 files changed, 39 insertions(+), 2 deletions(-)
 create mode 100644 src/h5schemas/load_utilities/__init__.py
 create mode 100644 src/h5schemas/load_utilities/vectors.py

diff --git a/pyproject.toml b/pyproject.toml
index 17de555..67a3a5c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [project]
 name = "h5schemas"
-version = "0.1.17"
+version = "0.1.18"
 description = "Add your description here"
 readme = "README.md"
 authors = [
diff --git a/src/h5schemas/load_utilities/__init__.py b/src/h5schemas/load_utilities/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/h5schemas/load_utilities/vectors.py b/src/h5schemas/load_utilities/vectors.py
new file mode 100644
index 0000000..637c809
--- /dev/null
+++ b/src/h5schemas/load_utilities/vectors.py
@@ -0,0 +1,37 @@
+import numpy as np
+from h5py import Group
+from dataclasses import dataclass
+from typing import ClassVar, Literal
+
+
+
+@dataclass
+class CommonVectors:
+    UV: ClassVar[list[str]] = ['u', 'v']
+    XYZ: ClassVar[list[str]] = ['x', 'y', 'z']
+    QUAT: ClassVar[list[str]] = ['x', 'y', 'z', 'w']
+
+
+UVElement = Literal['u', 'v']
+XYZElement = Literal['x', 'y', 'z']
+QUATElement = Literal['x', 'y', 'z', 'w']
+VectorElement = Literal[UVElement, XYZElement, QUATElement]
+
+
+def extract_vector(h5_group: Group, indices: slice, dataset_list: list[VectorElement]):
+    extracted_data = np.stack(
+        [h5_group[element][indices] for element in dataset_list],
+        axis=-1
+    )
+    return extracted_data
+
+
+
+if __name__ == '__main__':
+    from h5py import File
+
+
+    test_file = File("./examples/projection_geometry.h5", "r")
+
+    detector_center_position_mm = extract_vector(test_file['detector_center_position_mm'], slice(2), CommonVectors.XYZ)
+    print(detector_center_position_mm)
\ No newline at end of file
diff --git a/src/h5schemas/projection/overwrite_projection.py b/src/h5schemas/projection/overwrite_projection.py
index ab34498..2b04353 100644
--- a/src/h5schemas/projection/overwrite_projection.py
+++ b/src/h5schemas/projection/overwrite_projection.py
@@ -8,7 +8,6 @@ from h5schemas.projection_geometry.overwrite_projection_geometry import overwrit
 from h5schemas.source.overwrite_source import overwrite_source_at_index
 
 
-
 def overwrite_projection_at_index(
     h5_file: File,
     index: int,
@@ -25,6 +24,7 @@ def overwrite_projection_at_index(
     uuid, timestamp = check_uuid_time_stamp(uuid, timestamp)
     overwrite_image_at_index(h5_file["/image"], index, image, uuid, timestamp)
 
+
     overwrite_projection_geometry_at_index(
         h5_file["/projection_geometry"],
         index,
-- 
GitLab