Error in Spectrometer.scan_metadata
Reported by @berruyer at BM23
Writer error message:
ERROR 2022-01-20 13:45:48,748 nexus_writer_service.subscribers.session_writer: [session_bm23-8 (RUNNING)] [11_dscan-8 (FAULT)] Object dtype dtype('O') has no native HDF5 equivalent
ERROR 2022-01-20 13:45:48,748 nexus_writer_service.subscribers.session_writer: [session_bm23-8 (RUNNING)] [11_dscan-8 (FAULT)] [axis (ENABLED)] Scan metadata not saved due to exception:
Traceback (most recent call last):
File "/users/blissadm/local/bliss.git/nexus_writer_service/subscribers/scan_writer_base.py", line 1882, in _subscan_dicttonx
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.7/site-packages/silx/io/dictdump.py", line 715, in dicttonx
)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.7/site-packages/silx/io/dictdump.py", line 318, in dicttoh5
update_mode=update_mode,
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.7/site-packages/silx/io/dictdump.py", line 318, in dicttoh5
update_mode=update_mode,
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.7/site-packages/silx/io/dictdump.py", line 353, in dicttoh5
h5f.create_dataset(h5name,
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.7/site-packages/h5py/_hl/group.py", line 149, in create_dataset
dsid = dataset.make_new_dset(group, shape, dtype, data, name, **kwds)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.7/site-packages/h5py/_hl/dataset.py", line 89, in make_new_dset
else:
File "h5py/h5t.pyx", line 1663, in h5py.h5t.py_create
File "h5py/h5t.pyx", line 1687, in h5py.h5t.py_create
File "h5py/h5t.pyx", line 1747, in h5py.h5t.py_create
TypeError: Object dtype dtype('O') has no native HDF5 equivalent
This is the culprit:
class Spectrometer(BlissController, HasMetadataForScan):
def scan_metadata(self):
meta_dict = {"@NX_class": "NXcollection"}
meta_dict["crystal"] = self.crystal # THIS CANNOT BE SAVED IN HDF5
meta_dict["miscut"] = self.miscut
meta_dict["meridional_radius"] = self.surface_radius_meridional
meta_dict["sample_position"] = self.sample_position
return meta_dict