From f1aaf509321c34dbc6ea8af86fcf0153b07e2f0e Mon Sep 17 00:00:00 2001
From: swittl <simon.wittl@th-deg.de>
Date: Mon, 24 Mar 2025 10:27:04 +0100
Subject: [PATCH] added extract projection geometry

---
 pyproject.toml                                |  2 +-
 .../load_utilities/projection_geometry.py     | 37 +++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)
 create mode 100644 src/h5schemas/load_utilities/projection_geometry.py

diff --git a/pyproject.toml b/pyproject.toml
index 67a3a5c..8e80d5a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [project]
 name = "h5schemas"
-version = "0.1.18"
+version = "0.1.19"
 description = "Add your description here"
 readme = "README.md"
 authors = [
diff --git a/src/h5schemas/load_utilities/projection_geometry.py b/src/h5schemas/load_utilities/projection_geometry.py
new file mode 100644
index 0000000..f459807
--- /dev/null
+++ b/src/h5schemas/load_utilities/projection_geometry.py
@@ -0,0 +1,37 @@
+from h5schemas.load_utilities.vectors import CommonVectors, extract_vector
+from h5py import Group
+import numpy as np
+from typing import NamedTuple
+
+
+class ProjectionGeometry(NamedTuple):
+    detector_center_position_mm: np.ndarray
+    detector_center_orientation_quat: np.ndarray
+    focal_spot_position_mm: np.ndarray
+    focal_spot_orientation_quat: np.ndarray
+
+    uuid: np.ndarray
+    timestamp: np.ndarray
+
+
+
+def extract_projection_geometry(h5_group: Group, indices: slice) -> ProjectionGeometry:
+    detector_center_position_mm = extract_vector(h5_group['detector_center_position_mm'], indices, CommonVectors.XYZ)
+    detector_center_orientation_quat = extract_vector(h5_group['detector_center_orientation_quat'], indices, CommonVectors.QUAT)
+    focal_spot_position_mm = extract_vector(h5_group['focal_spot_position_mm'], indices, CommonVectors.XYZ)
+    focal_spot_orientation_quat = extract_vector(h5_group['focal_spot_orientation_quat'], indices, CommonVectors.QUAT)
+
+    uuid = h5_group['header']['uuid'][indices]
+    timestamp = h5_group['header']['timestamp'][indices]
+
+    return ProjectionGeometry(detector_center_position_mm, detector_center_orientation_quat, focal_spot_position_mm, focal_spot_orientation_quat, uuid, timestamp)
+
+
+if __name__ == '__main__':
+    from h5py import File
+
+
+    test_file = File("./examples/projection_geometry.h5", "r")
+
+    proj_geom = extract_projection_geometry(test_file, slice(2))
+    print(proj_geom)
\ No newline at end of file
-- 
GitLab