Source code for paws.core.operations.IO.BL15.ReadImageAndHeader_SSRL15
import os
from collections import OrderedDict
import fabio
from ... import Operation as opmod
from ...Operation import Operation
inputs=OrderedDict(file_path=None)
outputs=OrderedDict(
image_data=None,
header_dict=None,
dir_path=None,
filename=None)
[docs]class ReadImageAndHeader_SSRL15(Operation):
"""Read an image and header from SSRL beam line 1-5."""
def __init__(self):
super(ReadImageAndHeader_SSRL15, self).__init__(inputs, outputs)
self.input_doc['file_path'] = 'path to a tif file '\
'produced by beamline 1-5 at SSRL. '\
'A .txt header file is expected '\
'in the same directory as this .tif file.'
self.output_doc['image_data'] = 'the image data as an ndarray'
self.output_doc['header_dict'] = 'the header data as a python dictionary'
self.output_doc['dir_path'] = 'the directory portion of the input file_path'
self.output_doc['filename'] = 'filename with path and extension stripped'
[docs] def run(self):
p = self.inputs['file_path']
dirpath,filename = os.path.split(p)
filename_noext = os.path.splitext(filename)[0]
path_noext = os.path.splitext(p)[0]
hdr_file_path = path_noext + '.txt'
self.outputs['dir_path'] = dirpath
self.outputs['filename'] = filename_noext
self.outputs['image_data'] = fabio.open(p).data
d = OrderedDict()
for l in open(hdr_file_path,'r').readlines():
if not l.strip() == '' and not l.strip()[0] == '#':
kvs = l.split(',')
# special case for the string headers on line 1
if not kvs[0].find('User') == -1:
u_str = kvs[0].split('User:')[1].strip()
t_str = kvs[1].split('time:')[1].strip()
d['User'] = u_str
d['time'] = t_str
# and filter out the redundant temperature line
elif not (len(kvs)==1 and kvs[0].strip()[-1]=='C'):
for kv in kvs:
kv_arr = kv.split('=')
d[kv_arr[0].strip()] = float(kv_arr[1].strip())
self.outputs['header_dict'] = d