From ebb98debffb2a4166e3aed5f3bbecbd126ccfe98 Mon Sep 17 00:00:00 2001 From: rasmusvt Date: Tue, 15 Mar 2022 17:13:17 +0100 Subject: [PATCH] Open beamline data straight from raw file --- beamtime/xrd/io.py | 49 ++++++++++++++++++++++++-------------------- beamtime/xrd/plot.py | 6 ++---- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/beamtime/xrd/io.py b/beamtime/xrd/io.py index 347eed1..43ae2f7 100644 --- a/beamtime/xrd/io.py +++ b/beamtime/xrd/io.py @@ -23,15 +23,14 @@ def get_image_headers(path): return image.header -def integrate_1d(calibrant, bins, path=None, image=None, options=None): +def integrate_1d(data, options={}): ''' Integrates an image file to a 1D diffractogram. - Input: - calibrant: path to .poni-file - bins: Number of bins to divide image into - path (optional): path to image file - either this or image must be specified. If both is passed, image is prioritsed - image (optional): image array (Numpy) as extracted from get_image_array - options (optional): dictionary of options + Required content of data: + calibrant (str): path to .poni-file + nbins (int): Number of bins to divide image into + path (str) (optional): path to image file - either this or image must be specified. If both is passed, image is prioritsed + image (str) (optional): image array (Numpy) as extracted from get_image_array Output: df: DataFrame contianing 1D diffractogram if option 'return' is True @@ -56,15 +55,15 @@ def integrate_1d(calibrant, bins, path=None, image=None, options=None): options[option] = default_options[option] - if not image: - image = get_image_array(path) + if 'image' not in data.keys(): + data['image'] = get_image_array(data['path']) - ai = pyFAI.load(calibrant) + ai = pyFAI.load(data['calibrant']) if not options['filename']: - if path: - filename = os.path.join(options['save_folder'], os.path.split(path)[-1].split('.')[0] + options['extension']) + if data['path']: + filename = os.path.join(options['save_folder'], os.path.split(data['path'])[-1].split('.')[0] + options['extension']) else: filename = os.path.join(options['save_folder'], 'integrated.dat') @@ -84,10 +83,9 @@ def integrate_1d(calibrant, bins, path=None, image=None, options=None): os.makedirs(options['save_folder']) - res = ai.integrate1d(image, bins, unit=options['unit'], filename=filename) + res = ai.integrate1d(data['image'], data['nbins'], unit=options['unit'], filename=filename) - if options['return']: - return read_diffractogram(filename) + return read_diffractogram(filename) @@ -245,16 +243,23 @@ def read_diffractogram(path): return diffractogram -def read_data(path, kind, options=None): +def read_data(data, options={}): - if kind == 'beamline': - diffractogram = read_diffractogram(path) + if data['plot_kind'] == 'beamline': - elif kind == 'recx': - diffractogram = read_brml(path, options=options) + beamline = ['mar3450', 'edf', 'cbf'] - elif kind == 'image': - diffractogram = get_image_array(path) + if data['path'].split('.')[-1] in beamline: + diffractogram = integrate_1d(data=data, options=options) + + else: + diffractogram = read_diffractogram(data['path']) + + elif data['plot_kind'] == 'recx': + diffractogram = read_brml(data['path'], options=options) + + elif data['plot_kind'] == 'image': + diffractogram = get_image_array(data['path']) return diffractogram diff --git a/beamtime/xrd/plot.py b/beamtime/xrd/plot.py index c9ecc77..25a91cf 100644 --- a/beamtime/xrd/plot.py +++ b/beamtime/xrd/plot.py @@ -19,7 +19,7 @@ def plot_diffractogram(plot_data, options={}): plot_data (dict): Must include path = string to diffractogram data, and plot_kind = (recx, beamline, image)''' # Update options - required_options = ['x_vals', 'y_vals', 'ylabel', 'xlabel', 'xunit', 'yunit', 'line', 'scatter', + required_options = ['x_vals', 'y_vals', 'ylabel', 'xlabel', 'xunit', 'yunit', 'line', 'scatter', 'xlim', 'ylim', 'reflections_plot', 'reflections_indices', 'reflections_data', 'plot_kind', 'palettes', 'interactive', 'rc_params', 'format_params'] default_options = { @@ -59,8 +59,6 @@ def plot_diffractogram(plot_data, options={}): if len(options['reflections_data']) >= 1: options = determine_grid_layout(options=options) - print(options['format_params']['nrows']) - # Prepare plot, and read and process data @@ -84,7 +82,7 @@ def plot_diffractogram(plot_data, options={}): colours = btp.generate_colours(options['palettes']) - diffractogram = xrd.io.read_data(path=plot_data['path'], kind=plot_data['plot_kind'], options=options) + diffractogram = xrd.io.read_data(data=plot_data) if options['line']: