From 5d0a52589b9e7b84e5ef90c0381194c6a298e52f Mon Sep 17 00:00:00 2001
From: swittl <simon.wittl@th-deg.de>
Date: Thu, 20 Mar 2025 16:45:54 +0100
Subject: [PATCH] added joint states

---
 examples/joint.h5                             | Bin 0 -> 16432 bytes
 examples/thd_joint_joint.h5                   | Bin 0 -> 185336 bytes
 pyproject.toml                                |   2 +-
 src/h5schemas/joint/__init__.py               |   0
 src/h5schemas/joint/add_joint.py              |  28 ++++++++
 src/h5schemas/thd_joint_states/__init__.py    |   0
 .../thd_joint_states/add_thd_joint_states.py  |  65 ++++++++++++++++++
 uv.lock                                       |   8 +--
 8 files changed, 98 insertions(+), 5 deletions(-)
 create mode 100644 examples/joint.h5
 create mode 100644 examples/thd_joint_joint.h5
 create mode 100644 src/h5schemas/joint/__init__.py
 create mode 100644 src/h5schemas/joint/add_joint.py
 create mode 100644 src/h5schemas/thd_joint_states/__init__.py
 create mode 100644 src/h5schemas/thd_joint_states/add_thd_joint_states.py

diff --git a/examples/joint.h5 b/examples/joint.h5
new file mode 100644
index 0000000000000000000000000000000000000000..3686ac081b34e2eccf099720f99914a6678e4909
GIT binary patch
literal 16432
zcmeI0u}%U(5QgUtOisk8i3MtNm8GGe7lR-L5d)f7O5`+W;E)p%A3-}G!$<K^EPVsq
z*`1*PqS3@e;}2nHnAx4X{r0~l>|_0~wwl|{5x;_fvb1hpZ6@+6mR&@@YyLtUPwa!(
zXWuy<@tde1@eQdz+wZhht&-`f_0`HSDrTJ*XaM$K5vW%WPI$uSGHX@oi|9;Y48>7B
z)-~}>>ru|?*EOtAr)1A_SI9_R)oaG&IkOS&lhbOMN-I>FNXI1;<-DKqZGk}QWqg17
zj2Nj;Wu7ND1CR2wX~Ny;?lO&UNAV!BSKc!B!7TXW?#K;wKG6>Ml4=}Vw>^pOmpDQ6
z>Wpc_srQl7K5icJ6D=hvQ~)0hLT-*go~)b=$z|F#G}CA}j?<{C9ScU+cD)Q}x0V6b
z4jOH<Nz!TSjEzmWoc1B3lCq=%tCxP9#QkxfKGTWaUS(1Fk(#U1x&Lw<NW(70uWpVi
z&4$&GY^bUyyKk5~uZ+_)N=9KPx$Z^b;3^y>QFt?mlhK}?mu|oE^GwOO*W-k){cPM0
zGR@PPdaxh>0w4eaAOHd&00JNY0w4eaAOHeCO@Pnc`8-e0FV#}G_{zoExctG_^T5TU
z5Cs7c009sH0TB561m5;#4rONpu@Z#=0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI
Y5C8!X009sH0T2KI5C8!X_|*j70UU8{-v9sr

literal 0
HcmV?d00001

diff --git a/examples/thd_joint_joint.h5 b/examples/thd_joint_joint.h5
new file mode 100644
index 0000000000000000000000000000000000000000..9fd3ea7a85ce98963baab038a576b2ee7351ed2f
GIT binary patch
literal 185336
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

literal 0
HcmV?d00001

diff --git a/pyproject.toml b/pyproject.toml
index f8ace50..6617135 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [project]
 name = "h5schemas"
-version = "0.1.0"
+version = "0.1.12"
 description = "Add your description here"
 readme = "README.md"
 authors = [
diff --git a/src/h5schemas/joint/__init__.py b/src/h5schemas/joint/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/h5schemas/joint/add_joint.py b/src/h5schemas/joint/add_joint.py
new file mode 100644
index 0000000..add8137
--- /dev/null
+++ b/src/h5schemas/joint/add_joint.py
@@ -0,0 +1,28 @@
+from h5py import File, Group
+from thd_json import joint
+from h5schemas.scan_schema import open_schema
+from h5schemas.initialize_dataset import initialize_dataset
+
+
+def init_joint(h5_file: File | Group):
+    schema_groups = get_source_schemas()
+    initialize_dataset(h5_file, schema_groups)
+
+
+def get_source_schemas():
+    return open_schema(joint, "joint.json")
+
+
+def add_joint_sample(h5_file: File | Group, joint_value_rad):
+    dst = h5_file["q"]
+    dst.resize((dst.shape[0] + 1,))
+    dst[-1,] = joint_value_rad
+
+
+if __name__ == "__main__":
+    test_file = File("./examples/joint.h5", "w")
+    init_joint(test_file)
+
+    add_joint_sample(test_file, 1.0)
+    add_joint_sample(test_file, 2.0)
+    add_joint_sample(test_file, 3.0)
diff --git a/src/h5schemas/thd_joint_states/__init__.py b/src/h5schemas/thd_joint_states/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/h5schemas/thd_joint_states/add_thd_joint_states.py b/src/h5schemas/thd_joint_states/add_thd_joint_states.py
new file mode 100644
index 0000000..682ce8c
--- /dev/null
+++ b/src/h5schemas/thd_joint_states/add_thd_joint_states.py
@@ -0,0 +1,65 @@
+from h5py import File, Group
+from thd_json import thd_joint_states
+from h5schemas.scan_schema import open_schema
+from h5schemas.initialize_dataset import initialize_dataset
+from h5schemas.joint.add_joint import add_joint_sample
+
+
+def init_thd_joint_states(h5_file: File | Group):
+    schema_groups = get_source_schemas()
+    initialize_dataset(h5_file, schema_groups)
+
+
+def get_source_schemas():
+    return open_schema(thd_joint_states, "thd_joint_states.json")
+
+
+def add_thd_joint_states_sample(
+        h5_file: File | Group,
+        master_joint_e1: float | None = None,
+        master_joint_a1: float | None = None,
+        master_joint_a2: float | None = None,
+        master_joint_a3: float | None = None,
+        master_joint_a4: float | None = None,
+        master_joint_a5: float | None = None,
+        master_joint_a6: float | None = None,
+        slave_joint_e1: float | None = None,
+        slave_joint_a1: float | None = None,
+        slave_joint_a2: float | None = None,
+        slave_joint_a3: float | None = None,
+        slave_joint_a4: float | None = None,
+        slave_joint_a5: float | None = None,
+        slave_joint_a6: float | None = None,
+        table_joint_a1: float | None = None):
+    
+
+    add_joint_sample(h5_file["/master_joint_e1"], master_joint_e1)
+
+    add_joint_sample(h5_file["/master_joint_a1"], master_joint_a1)
+    add_joint_sample(h5_file["/master_joint_a2"], master_joint_a2)
+    add_joint_sample(h5_file["/master_joint_a3"], master_joint_a3)
+    add_joint_sample(h5_file["/master_joint_a4"], master_joint_a4)
+    add_joint_sample(h5_file["/master_joint_a5"], master_joint_a5)
+    add_joint_sample(h5_file["/master_joint_a6"], master_joint_a6)
+
+    add_joint_sample(h5_file["/slave_joint_e1"], slave_joint_e1)
+
+    add_joint_sample(h5_file["/slave_joint_a1"], slave_joint_a1)
+    add_joint_sample(h5_file["/slave_joint_a2"], slave_joint_a2)
+    add_joint_sample(h5_file["/slave_joint_a3"], slave_joint_a3)
+    add_joint_sample(h5_file["/slave_joint_a4"], slave_joint_a4)
+    add_joint_sample(h5_file["/slave_joint_a5"], slave_joint_a5)
+    add_joint_sample(h5_file["/slave_joint_a6"], slave_joint_a6)
+
+    add_joint_sample(h5_file["/table_joint_a1"], table_joint_a1)
+
+if __name__ == "__main__":
+    import numpy as np
+
+
+    test_file = File("./examples/thd_joint_joint.h5", "w")
+    init_thd_joint_states(test_file)
+
+    add_thd_joint_states_sample(test_file, *np.arange(15))
+    add_thd_joint_states_sample(test_file, *np.arange(15, 30))
+
diff --git a/uv.lock b/uv.lock
index d5b322e..dcf914a 100644
--- a/uv.lock
+++ b/uv.lock
@@ -52,7 +52,7 @@ wheels = [
 
 [[package]]
 name = "h5schemas"
-version = "0.1.0"
+version = "0.1.12"
 source = { editable = "." }
 dependencies = [
     { name = "h5py" },
@@ -64,7 +64,7 @@ dependencies = [
 requires-dist = [
     { name = "h5py", specifier = ">=3.13.0" },
     { name = "jsonref", specifier = ">=1.1.0" },
-    { name = "thd-json", git = "https://mygit.th-deg.de/roboct/definitions/json_schemas" },
+    { name = "thd-json", git = "https://mygit.th-deg.de/roboct-public/roboct-schemas" },
 ]
 
 [[package]]
@@ -418,8 +418,8 @@ wheels = [
 
 [[package]]
 name = "thd-json"
-version = "0.1.11"
-source = { git = "https://mygit.th-deg.de/roboct/definitions/json_schemas#549627970741441756a671333ac8e5f949241eb3" }
+version = "0.1.12"
+source = { git = "https://mygit.th-deg.de/roboct-public/roboct-schemas#f9f601e871cd8a514e4df9884a17777bc2474c21" }
 dependencies = [
     { name = "hatchling" },
     { name = "hypothesis" },
-- 
GitLab