Python Interpreter
Example HDF5 Reading
The below is a basic python interpreter for the HDF5 file which creates a simple CSV from the frame data of a basic scan. By changing the file name in the function call to a completed scan you can get data from your file.
This is not optimised and is intended to show how many of the parameters can be accessed from the file.
# -*- coding: utf-8 -*-
"""
Created on Fri Dec 16 15:25:30 2022
@author: Tom
"""
import h5py
def headerDict (chan):
timePV = "CHAN{}SCA0".format(chan)
DTPV = "CHAN{}DTPercent".format(chan)
ICRPV = "CHAN{}SCA3".format(chan)
OCRPV = "CHAN{}SCA4".format(chan)
chanDict = {
"time" : timePV,
"DTpercent":DTPV,
"ICR":ICRPV,
"OCR":OCRPV
}
return chanDict
def headerWrite (df,paramData, param, numChan, frame):
df.write("%s," % param)
for chan in range(1,numChan):
df.write("%.2f" % (paramData[channels[chan][param]][frame]))
if (chan==numChan-1):
df.write("\n")
else:
df.write(",")
def getData(data, chan, frame):
header = {
'chan':chan,
'frame':frame
}
scaler = data['data']['data'][frame][chan]
params={}
NDAttr = headerDict(chan)
for attr in NDAttr:
val=NDAttr[attr]
params[attr]=(data['instrument']['NDAttributes'][val][frame])
allData = {
'header':header,
'scaler':scaler,
'params':params
}
return allData
def writeFile(rawdata, frame, channels):
header=['']*8
MCA=['']*4096
for c in range(1,channels):
data=getData(rawdata, c, frame)
j=0
frame = data['header']['frame']
chan = data['header']['chan']
params = data['params']
scaler = data['scaler']
header[j]=("Frame, %i\n" % frame)
j=j+1
if chan == 1:
header[j]+=str("Channel,")
header[j]+=str("%i" % chan)
if chan == channels-1:
header[j]+=("\n")
else:
header[j]+=(",")
j=j+1
for param in params:
val = params[param]
if chan == 1:
header[j]=("%s," % param)
header[j]+=("%f" % val)
if chan == channels-1:
header[j]+=("\n")
else:
header[j]+=(",")
j=j+1
for i in range(len(scaler)):
if chan == 1:
MCA[i]=("%d," % (i*10))
MCA[i]+=("%d" % scaler[i])
if chan == channels-1:
MCA[i]+=("\n" % scaler[i])
else:
MCA[i]+=(",")
df=open("Frame{frame}.csv".format(frame=frame), "+w")
for h in header:
df.write(h)
for m in MCA:
df.write(m)
df.close()
# Gets basic data for hdf5 file
f = h5py.File("<fileName>.hdf5",'r')
rawdata = f['entry']
channels=8
for frame in range(10):
writeFile(rawdata, frame, channels)