Files
sfbd/interface/load.py

71 lines
1.9 KiB
Python

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