import h5py def loadDataset(filename): hid = h5py.File(filename, "r") icount = 0 snap = loadSnap(hid) data =[] act = [] for key in hid.keys(): if 'scan' in key: ID = int(key.split('_')[1]) print('Reading scan_%d' % ID) data.append(loadData(hid,ID)) act.append(loadActuator(hid,ID)) icount +=1 hid.close() if icount == 0: return None, None, None elif icount == 1: return data[0], act[0],snap return data,act,snap def loadSnap(hid): snap={} if not 'experiment' in hid.keys(): return None for key1 in hid['experiment'].keys(): if isinstance(hid['experiment'][key1],h5py.Group): for key2 in hid['experiment'][key1].keys(): val = hid['experiment'][key1][key2][()] snap[key1+':'+key2]=val else: snap[key1]=hid['experiment'][key1][()] return snap def loadData(hid,scanrun=1): run='scan_%d' % scanrun data = {} for key1 in hid[run]['data'].keys(): if isinstance(hid[run]['data'][key1],h5py.Group): for key2 in hid[run]['data'][key1].keys(): val = hid[run]['data'][key1][key2][()] data[key1+':'+key2]=val else: data[key1]=hid[run]['data'][key1][()] return data def loadActuator(hid,scanrun=1): run='scan_%d' % scanrun data = {} if 'actuators' in hid[run]['method'].keys(): for key1 in hid[run]['method']['actuators'].keys(): if isinstance(hid[run]['method']['actuators'][key1],h5py.Group): for key2 in hid[run]['method']['actuators'][key1].keys(): val = hid[run]['method']['actuators'][key1][key2][()] data[key1+':'+key2]={'val':val} else: data[key1]=hid[run]['method']['actuators'][key1][()] return data