From 372c6fc9e5272c3f7a60cf497e9fca38145e7663 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=B6ne=2C=20Tjark=20Leon=20Raphael?=
 <tjark.leon.raphael.groene@uni-hamburg.de>
Date: Tue, 17 Jun 2025 09:34:59 +0200
Subject: [PATCH] Update file maxwell_integrate_to_h5.py

---
 maxwell_integrate_to_h5.py | 48 ++++++++++++++++++++++++--------------
 1 file changed, 30 insertions(+), 18 deletions(-)

diff --git a/maxwell_integrate_to_h5.py b/maxwell_integrate_to_h5.py
index f7d7e50..5976eb6 100644
--- a/maxwell_integrate_to_h5.py
+++ b/maxwell_integrate_to_h5.py
@@ -137,30 +137,42 @@ def integrate_ims_in_dir(path_im, path_int, dtype_im=".tif", dtype_int=".dat"):
                 os.remove(output_file)
 
             with h5py.File(output_file, "w") as f:
-                entry = f.create_group("entry")
-                entry.attrs["NX_class"] = np.string_("NXentry")
-                entry.attrs["default"] = np.string_("1.1")  # Optional
+                # Top-level NXroot
+                nxroot = f.create_group(subdir_name)
+                nxroot.attrs["NX_class"] = np.string_("NXroot")
+                nxroot.attrs["default"] = np.string_("1.1")
 
                 for idx, result in enumerate(results_data, start=1):
-                    group_name = f"{idx}.1"
-                    g = entry.create_group(group_name)
-                    g.attrs["NX_class"] = np.string_("NXentry")
-                    g.attrs["default"] = np.string_("measurement")
-
-                    meas = g.create_group("measurement")
-                    meas.attrs["NX_class"] = np.string_("NXdata")
-                    meas.attrs["signal"] = np.string_("I")
-                    meas.attrs["axes"] = np.string_("q")
-                    meas.attrs["filename"] = np.string_(result["filename"])  # 👈 capture filename
-                    meas.attrs["title"] = np.string_(result["filename"])     # (H5Web may show this)
-
-                    # Store datasets
+                    entry_name = f"{idx}.1"
+                    entry = nxroot.create_group(entry_name)
+                    entry.attrs["NX_class"] = np.string_("NXentry")
+                    entry.attrs["default"] = np.string_("plotdata")
+
+                    # Create full measurement group
+                    meas = entry.create_group("measurement")
+                    meas.attrs["NX_class"] = np.string_("NXcollection")
+                    meas.attrs["filename"] = np.string_(result["filename"])
+
                     meas.create_dataset("q", data=result["q"])
                     meas.create_dataset("I", data=result["I"])
                     meas.create_dataset("dI", data=result["dI"])
 
-                    # Optional: add filename as long_name attribute on I
-                    meas["I"].attrs["long_name"] = np.string_(result["filename"])
+                    # Create plotdata group with proper NXdata spec
+                    plot = entry.create_group("plotdata")
+                    plot.attrs["NX_class"] = np.string_("NXdata")
+                    plot.attrs["signal"] = np.string_("I")
+                    plot.attrs["axes"] = np.string_("q")
+                    plot.attrs["title"] = np.string_(result["filename"])
+
+                    plot.create_dataset("q", data=result["q"])
+                    dset_I = plot.create_dataset("I", data=result["I"])
+                    dset_I.attrs["long_name"] = np.string_(result["filename"])
+                    plot["I"].attrs["long_name"] = "Intensity"
+                    plot["q"].attrs["long_name"] = "Ang^-1"
+                    
+                    plot.create_dataset("dI", data=result["dI"])
+                    plot["dI"].attrs["long_name"] = np.string_("Uncertainty in I")
+
 
             print(f"✅ HDF5 file '{output_file}' created with {len(results_data)} spectra.")
             # # Sort results_data by filename
-- 
GitLab