Files
sfbd/interface/load.py
2024-12-03 17:27:53 +01:00

74 lines
2.0 KiB
Python

import h5py
def loadDataset(filename):
hid = h5py.File(filename, "r")
icount = 0
snap = loadSnap(hid)
data={}
act= {}
maxID = 0
for key in hid.keys():
if 'scan' in key:
ID = int(key.split('_')[1])
if ID > maxID:
maxID = ID
print('Reading scan_%d' % ID)
data[ID]=loadData(hid,ID)
act[ID]=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[j] for j in range(maxID+1)],[act[j] for j in range(maxID+1)],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