diff --git a/g5505_file_reader.py b/g5505_file_reader.py new file mode 100644 index 0000000..8d29410 --- /dev/null +++ b/g5505_file_reader.py @@ -0,0 +1,58 @@ +import numpy as np +import pandas as np +import matplotlib.pyplot as plt +import plotly.express as px +import plotly.graph_objects as go +from plotly.subplots import make_subplots +from igor2.binarywave import load as loadibw + + +def read_xps_ibw_file_as_dict(filename): + + """ Reads ibw files from multiphase chemistry group, which contain xps spectra and acquisition settings.""" + + file_obj = loadibw(filename) + + required_keys = ['wData','data_units','dimension_units','note'] + if sum([item in required_keys for item in file_obj['wave'].keys()]) < len(required_keys): + raise ValueError('This is not a valid xps ibw file. It does not satisfy minimum adimissibility criteria.') + + file_dict = {} + file_dict['name'] = filename + file_dict['data'] = file_obj['wave']['wData'] + file_dict['data_units'] = file_obj['wave']['data_units'] + file_dict['shape'] = file_dict['data'].shape + file_dict['dtype'] = type(file_dict['data']) + + # Convert notes of bytes class to string class and split string into a list of elements separated by '\r'. + notes_list = file_obj['wave']['note'].decode("utf-8").split('\r') + exclude_list = ['Excitation Energy'] + for item in notes_list: + if '=' in item: + key, value = tuple(item.split('=')) + # TODO: check if value can be converted into a numeric type. Now all values are string type + if not key in exclude_list: + file_dict[key] = value + + # TODO: talk to thorsten to see if there is an easier way to access the below attributes + dimension_labels = file_obj['wave']['dimension_units'].decode("utf-8").split(']') + file_dict['dimension_units'] = [item+']' for item in dimension_labels[0:len(dimension_labels)-1]] + + + return file_dict + +def main(): + + inputfile_dir = '\\\\fs101\\5505\\People\\Juan\\TypicalBeamTime' + + file_dict = read_xps_ibw_file_as_dict(inputfile_dir+'\\SES\\0069069_N1s_495eV.ibw') + + for key in file_dict.keys(): + print(key,file_dict[key]) + + +if __name__ == '__main__': + + main() + + print(':)') \ No newline at end of file