70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
"""
|
|
Inspect DimScaling and DimExtents metadata in an Asylum Research HDF5 file.
|
|
|
|
Usage:
|
|
python scripts/inspect_h5.py /path/to/your/file.h5
|
|
"""
|
|
import sys
|
|
import numpy as np
|
|
|
|
try:
|
|
import h5py
|
|
except ImportError:
|
|
print("pip install h5py")
|
|
sys.exit(1)
|
|
|
|
if len(sys.argv) < 2:
|
|
print("Usage: python scripts/inspect_h5.py <file.h5>")
|
|
sys.exit(1)
|
|
|
|
path = sys.argv[1]
|
|
|
|
with h5py.File(path, "r") as f:
|
|
channels_path = "Image/DataSetInfo/Global/Channels"
|
|
grp = f.get(channels_path)
|
|
if grp is None:
|
|
print("No Image/DataSetInfo/Global/Channels group found")
|
|
sys.exit(1)
|
|
|
|
for ch_name in grp:
|
|
dims_path = f"{channels_path}/{ch_name}/ImageDims"
|
|
dims_grp = f.get(dims_path)
|
|
if dims_grp is None:
|
|
print(f"{ch_name}: no ImageDims group")
|
|
continue
|
|
|
|
print(f"\n=== Channel: {ch_name} ===")
|
|
|
|
scaling = dims_grp.attrs.get("DimScaling")
|
|
if scaling is not None:
|
|
s = np.asarray(scaling, dtype=float)
|
|
print(f" DimScaling shape: {s.shape}")
|
|
print(f" DimScaling[0,:]: {s[0]} (row 0)")
|
|
print(f" DimScaling[1,:]: {s[1]} (row 1)")
|
|
print(f" --- If [start, end] interpretation ---")
|
|
print(f" xreal (row1 range) = {abs(s[1,1] - s[1,0])}")
|
|
print(f" yreal (row0 range) = {abs(s[0,1] - s[0,0])}")
|
|
print(f" --- If [step, offset] interpretation ---")
|
|
print(f" row0: step={s[0,0]} offset={s[0,1]}")
|
|
print(f" row1: step={s[1,0]} offset={s[1,1]}")
|
|
else:
|
|
print(" DimScaling: not found")
|
|
|
|
dim_units = dims_grp.attrs.get("DimUnits")
|
|
print(f" DimUnits: {dim_units}")
|
|
|
|
data_units = dims_grp.attrs.get("DataUnits")
|
|
print(f" DataUnits: {data_units}")
|
|
|
|
for child_name in dims_grp:
|
|
child = dims_grp[child_name]
|
|
if isinstance(child, h5py.Group) and "DimExtents" in child.attrs:
|
|
ext = np.asarray(child.attrs["DimExtents"])
|
|
print(f" DimExtents ('{child_name}'): {ext}")
|
|
|
|
print("\n=== 2D dataset shapes ===")
|
|
def _visit(name, obj):
|
|
if isinstance(obj, h5py.Dataset) and obj.ndim == 2:
|
|
print(f" {name} shape={obj.shape}")
|
|
f.visititems(_visit)
|