From f4d9dd7a4823ec0f7f28df4d455fb95e1700d43b Mon Sep 17 00:00:00 2001
From: swittl <simon.wittl@th-deg.de>
Date: Fri, 21 Mar 2025 13:13:52 +0100
Subject: [PATCH] added fly by example

---
 .gitignore                      |  3 +-
 examples/06_linear_fly_by_h5.py | 53 +++++++++++++++++++++++++++++++++
 pyproject.toml                  |  1 +
 uv.lock                         | 37 ++++++++++++++++++-----
 4 files changed, 86 insertions(+), 8 deletions(-)
 create mode 100644 examples/06_linear_fly_by_h5.py

diff --git a/.gitignore b/.gitignore
index 00d2c60..9d4ff02 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,5 @@ dist
 *.aRTist
 *.ply
 /build/
-/examples/
\ No newline at end of file
+/examples/
+/temp/
\ No newline at end of file
diff --git a/examples/06_linear_fly_by_h5.py b/examples/06_linear_fly_by_h5.py
new file mode 100644
index 0000000..40a58da
--- /dev/null
+++ b/examples/06_linear_fly_by_h5.py
@@ -0,0 +1,53 @@
+import h5py
+import numpy as np
+from artist_pythonlib import API
+from tqdm import tqdm
+from h5schemas.projection_geometry.overwrite_projection_geometry import overwrite_projection_geometry_at_index
+
+
+
+FOD = 1000.
+FDD = 2000.
+DISTANCE = 20
+DELTA = 0.01
+
+def set_source_detector(api: API, z: float):
+    api.translate('S', 0., FOD, z)
+    api.translate('D', 0., FOD-FDD, z)
+    api.rotate('D', 90, 0, 0)
+
+def add_error(api: API, error_source, error_detector):
+    error_source += (np.random.random(3) - 0.5) * 2 * 0.01
+    error_detector += (np.random.random(3) - 0.5) * 2 * 0.01
+
+    source = api.get_position('S')
+    api.translate('S', *(source + error_source))
+
+    detector = api.get_position('D')
+    api.translate('D', *(detector + error_detector))
+
+    return error_source, error_detector
+
+def main():
+    file = h5py.File('./temp/fly_by_linear.h5', 'a')
+    api = API()
+    error_source, error_detector = np.zeros((3,)), np.ones((3,))
+
+    z_steps = np.linspace(-DISTANCE / 2, DISTANCE / 2, int(DISTANCE / DELTA))
+
+    for i in tqdm(range(z_steps.shape[0])):
+        z = z_steps[i]
+        set_source_detector(api, z)
+        error_source, error_detector = add_error(api, error_source, error_detector)
+        api.save_hdf5(file)
+        overwrite_projection_geometry_at_index(
+            file['projection_geometry_nominal'],
+            i,
+            [0., FOD-FDD, z],
+            api.get_orientation('D'),
+            [0., FOD, z],
+            api.get_orientation('S'))
+
+
+if __name__ == '__main__':
+    main()
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 17ecd03..09876a7 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -14,6 +14,7 @@ dependencies = [
     "pillow>=10.0",
     "scipy>=1.10",
     "thd-json>=0.1.11",
+    "tqdm>=4.67.1",
     "xraydb>=4.5.4",
 ]
 
diff --git a/uv.lock b/uv.lock
index a405b31..c815fb5 100644
--- a/uv.lock
+++ b/uv.lock
@@ -12,6 +12,7 @@ dependencies = [
     { name = "pillow" },
     { name = "scipy" },
     { name = "thd-json" },
+    { name = "tqdm" },
     { name = "xraydb" },
 ]
 
@@ -29,6 +30,7 @@ requires-dist = [
     { name = "scipy", specifier = ">=1.10" },
     { name = "thd-json", git = "https://mygit.th-deg.de/roboct-public/roboct-schemas" },
     { name = "thd-json", marker = "extra == 'thd'", git = "https://mygit.th-deg.de/roboct-public/roboct-schemas" },
+    { name = "tqdm", specifier = ">=4.67.1" },
     { name = "xraydb", specifier = ">=4.5.4" },
 ]
 
@@ -41,6 +43,15 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 },
 ]
 
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
+]
+
 [[package]]
 name = "contourpy"
 version = "1.3.1"
@@ -248,8 +259,8 @@ wheels = [
 
 [[package]]
 name = "h5schemas"
-version = "0.1.0"
-source = { git = "https://mygit.th-deg.de/roboct-public/roboct-h5#3624c61163e3230bd2ac42884aa7b39d2cfcdeb8" }
+version = "0.1.17"
+source = { git = "https://mygit.th-deg.de/roboct-public/roboct-h5#4dda0165c77752ea0fdeb38b61c8c9abbd8eb857" }
 dependencies = [
     { name = "h5py" },
     { name = "jsonref" },
@@ -274,16 +285,16 @@ wheels = [
 
 [[package]]
 name = "hypothesis"
-version = "6.129.4"
+version = "6.130.0"
 source = { registry = "https://pypi.org/simple" }
 dependencies = [
     { name = "attrs" },
     { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
     { name = "sortedcontainers" },
 ]
-sdist = { url = "https://files.pythonhosted.org/packages/bb/98/0051e770d36f7e0a55bcfa3590790448d57ed2f355da9adbb957b1f545d9/hypothesis-6.129.4.tar.gz", hash = "sha256:e9fd66c25b8f0aa6395ce6728360892c3af22529cc16cae7512a4672776d4781", size = 425235 }
+sdist = { url = "https://files.pythonhosted.org/packages/25/01/3cca6316aaa0474e109f93c8fda2a31c23de92d86f4826f79ea0c0e6d011/hypothesis-6.130.0.tar.gz", hash = "sha256:274050b4518611500a55f7a5d0247a5359dce0107cb20f10323d6b587cc522d2", size = 425943 }
 wheels = [
-    { url = "https://files.pythonhosted.org/packages/8d/7c/7266143385cbd19c839f9b61cc660d74c5ce2626fea41d8b215ccc5cfba3/hypothesis-6.129.4-py3-none-any.whl", hash = "sha256:45a31fe2b936688b2954f375c7f87e9dfefa4f2cddfa31cdeba15d77600e1286", size = 489542 },
+    { url = "https://files.pythonhosted.org/packages/46/2b/638b52450e44d83230a12b1dd366c1c5c315b171432d4b1e8213e0cb5e04/hypothesis-6.130.0-py3-none-any.whl", hash = "sha256:b75e6fc4738d2e2a1b75d151432cb06e1303de3142905cd7060ba293c18376ce", size = 490230 },
 ]
 
 [[package]]
@@ -871,8 +882,8 @@ wheels = [
 
 [[package]]
 name = "thd-json"
-version = "0.1.11"
-source = { git = "https://mygit.th-deg.de/roboct-public/roboct-schemas#549627970741441756a671333ac8e5f949241eb3" }
+version = "0.1.13"
+source = { git = "https://mygit.th-deg.de/roboct-public/roboct-schemas#0f378205d14a78c744808eba8b5523e9ed2d075f" }
 dependencies = [
     { name = "hatchling" },
     { name = "hypothesis" },
@@ -923,6 +934,18 @@ wheels = [
     { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 },
 ]
 
+[[package]]
+name = "tqdm"
+version = "4.67.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+    { name = "colorama", marker = "platform_system == 'Windows'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 }
+wheels = [
+    { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 },
+]
+
 [[package]]
 name = "trove-classifiers"
 version = "2025.3.19.19"
-- 
GitLab