Source code for mlreflect.xrrloader.p08tools.fio_reader

# -*- coding: utf-8 -*-
"""
Created on Sun Sep 23 17:18:21 2018

@author: Florian
"""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import re


[docs]def read(filename, header_only=False): motor_positions = {} data_block = False param_block = False comment_block = False data_columns = False column_names = [] scan_cmd = None header_info = {} rois = {} data = {} file = open(filename, 'r') for line in file: # print( line ) if line.find('%c') > -1: data_block = False param_block = False comment_block = True # print('entering comment block') continue elif line.find('%p') > -1: data_block = False param_block = True comment_block = False # print('entering parameter block') continue elif line.find('%d') > -1: data_block = True param_block = False comment_block = False # print('entering data block') continue elif line.find('!') > -1: continue if param_block: if line.find('=', 1) > -1: try: spl = line.strip().split('=') # print("%s = %f" % (spl[0], float(spl[1]))) motor_positions[spl[0].strip()] = float(spl[1]) except: try: spl = line.strip().split('=') if spl[0].strip().lower() == 'ubmatrix': line = line.replace(';', ',') spl = line.strip().split('=') # print (spl[1]) bra_open = [] for idx in range(len(spl[1])): if spl[1][idx] == '[': bra_open.append(idx) bra_close = [] for idx in range(len(spl[1])): if spl[1][idx] == ']': bra_close.append(idx) first_row = re.sub(' +', ' ', spl[1][bra_open[1] + 1: bra_close[0]].strip()) first_row = [float(nr) for nr in first_row.split()] sec_row = re.sub(' +', ' ', spl[1][bra_open[2] + 1: bra_close[1]]).strip() sec_row = [float(nr) for nr in sec_row.split()] thir_row = re.sub(' +', ' ', spl[1][bra_open[3] + 1: bra_close[2]].strip()) thir_row = [float(nr) for nr in thir_row.split()] matrix = [first_row, sec_row, thir_row] header_info['ubmatrix'] = matrix elif spl[0].strip().lower() == 'signalcounter': header_info['signalcounter'] = spl[1].strip() elif not spl[0].strip().find('roi') == -1: thisrois = [float(nr) for nr in spl[1].strip()[1:-1].split(',')] roi_name = spl[0].split(' ')[1].strip() cur_rois = {} cnt = 1 for idx in range(0, len(thisrois), 4): cur_roi = thisrois[idx:idx + 4] cur_rois["roi%d" % cnt] = cur_roi cnt += 1 rois[roi_name] = cur_rois except: print('error: %s' % line) elif comment_block: if line.find('scan') > -1 or line.find('mesh') > -1: scan_cmd = line.strip() elif data_block and not data_columns: if line.find('Col ') > -1: spl = line.split() column_names.append(spl[2]) elif len(column_names) > 0: if header_only: break spl = line.split() for idx in range(len(column_names)): try: data[column_names[idx]] = [float(spl[idx])] except: data[column_names[idx]] = [float('nan')] data_columns = True elif data_columns: spl = line.split() for idx in range(len(column_names)): try: data[column_names[idx]].append(float(spl[idx])) except: data[column_names[idx]].append(float('nan')) # print ( line.find('=') ) file.close() header_info["scan_cmd"] = scan_cmd header_info["rois"] = rois return motor_positions, column_names, data, header_info
if __name__ == '__main__': import cProfile cProfile.run("read('./data/test_00065.fio')", sort="tottime") header, column_names, data = read('./data/test_00065.fio') # for key in sorted(header): # print ("%s = %f" % (key, header[key])) for col in column_names: print(col) if 'om' in column_names: print(data['om']) print(len(data['om']))