@@ -26,6 +26,18 @@ def load_hdf5(self, filename: str, name: str):
2626
2727 # TODO: Add checks of dimensions etc.
2828
29+ def save_hdf5 (self , name : str , filename : str ):
30+ """Save a single dataset to HDF5."""
31+ sc .io .to_hdf5 (self ._data [name ], filename )
32+
33+ def save_all_hdf5 (self , folder : str ):
34+ """Save all datasets to individual HDF5 files in a folder."""
35+ import os
36+
37+ os .makedirs (folder , exist_ok = True )
38+ for name , data in self ._data .items ():
39+ sc .io .to_hdf5 (data , os .path .join (folder , f"{ name } .h5" ))
40+
2941 def append_data (self , new_data : sc .DataArray , name : str ):
3042 """Append data with a name."""
3143 self ._data [name ] = new_data
@@ -56,6 +68,19 @@ def plot_data(self, name: str = None):
5668 fig = pp .plot (data .transpose (), title = f"{ name } " )
5769 display (fig )
5870
71+ # Helpful methods
72+ def items (self ):
73+ """Return (name, data) pairs, like dict.items()."""
74+ return self ._data .items ()
75+
76+ def values (self ):
77+ """Return all DataArrays, like dict.values()."""
78+ return self ._data .values ()
79+
80+ def keys (self ):
81+ """Return all dataset names, like dict.keys()."""
82+ return self ._data .keys ()
83+
5984 # Dunder methods
6085 def __getitem__ (self , key : str ):
6186 """Allow dictionary-style access: my_exp['vanadium']"""
@@ -75,3 +100,10 @@ def __contains__(self, key: str):
75100
76101 def __repr__ (self ):
77102 return f"Experiment(name = { self .name } , datasets={ list (self ._data .keys ())} )"
103+
104+ def __str__ (self ):
105+ return self .__repr__ ()
106+
107+ def __iter__ (self ):
108+ """Iterate over dataset names."""
109+ return iter (self ._data )
0 commit comments