diff --git a/nafuma/xrd/io.py b/nafuma/xrd/io.py index ef77b0e..d7a3b51 100644 --- a/nafuma/xrd/io.py +++ b/nafuma/xrd/io.py @@ -5,6 +5,7 @@ import numpy as np import os import shutil import sys +import datetime import zipfile import xml.etree.ElementTree as ET @@ -320,13 +321,20 @@ def read_brml(data, options={}, index=0): def read_htxrd(data, options={}, index=0): - required_options = ['extract_folder', 'save_folder', 'save_filename'] + required_options = ['extract_folder', 'save_folder', 'save_filename', 'adjust_time'] default_options = { 'extract_folder': 'tmp', 'save_folder': None, - 'save_filename': None + 'save_filename': None, + 'adjust_time': True } + if not isinstance(data['path'], list): + data['path'] = [data['path']] + + if 'wavelength' not in data.keys(): + data['wavelength'] = [None for i in range(len(data['path']))] + options = aux.update_options(options=options, required_options=required_options, default_options=default_options) @@ -343,6 +351,9 @@ def read_htxrd(data, options={}, index=0): # initalise empty list to store all DataFrames diffractograms = [] wavelengths = [] + + active_scan = False + timestamps = [] # Loop through all RawData-files and extract all data and temperatures for i, file in enumerate(files): @@ -357,7 +368,6 @@ def read_htxrd(data, options={}, index=0): # initalise empty list to store data from this particular scan diffractogram = [] - for chain in root.findall('./DataRoutes/DataRoute'): scantypes = chain.findall('ScanInformation') @@ -367,6 +377,7 @@ def read_htxrd(data, options={}, index=0): continue else: + active_scan = True if chain.get('RouteFlag') == 'Final': for scandata in chain.findall('Datum'): scandata = scandata.text.split(',') @@ -387,8 +398,22 @@ def read_htxrd(data, options={}, index=0): wavelengths.append(wavelength) + if active_scan: + for chain in root.findall('./TimeStampStarted'): + time_start = datetime.datetime.strptime(chain.text[:-7], "%Y-%m-%dT%H:%M:%S.%f") + for chain in root.findall('./TimeStampFinished'): + time_end = datetime.datetime.strptime(chain.text[:-7], "%Y-%m-%dT%H:%M:%S.%f") + + + time_diff = time_end - time_start + + if options['adjust_time']: + timestamps.append(time_start + time_diff/2) + + if options['save_folder']: - for i, (diffractogram, wavelength) in enumerate(zip(diffractograms, wavelengths)): + print(options['save_folder']) + for i, (diffractogram, wavelength, timestamp) in enumerate(zip(diffractograms, wavelengths, timestamps)): if not options['save_filename']: filename = os.path.basename(data['path'][index]).split('.')[0] + '_' + str(i).zfill(4) +'.xy' else: @@ -398,7 +423,7 @@ def read_htxrd(data, options={}, index=0): if not os.path.isdir(options['save_folder']): os.makedirs(options['save_folder']) - save_htxrd_as_xy(diffractogram, wavelength, filename, options['save_folder']) + save_htxrd_as_xy(diffractogram, wavelength, timestamp, filename, options['save_folder']) @@ -408,19 +433,20 @@ def read_htxrd(data, options={}, index=0): return diffractograms, wavelengths -def save_htxrd_as_xy(diffractogram, wavelength, filename, save_path): +def save_htxrd_as_xy(diffractogram, wavelength, timestamp, filename, save_path): headers = '\n'.join( [line for line in [f'# Temperature {np.round(diffractogram["T"].mean())}', f'# Wavelength {wavelength}', + f'# Time {timestamp}' ] ] ) diffractogram = diffractogram.drop('T', axis=1) - with open(os.path.join(save_path, filename), 'w') as f: + with open(os.path.join(save_path, filename), 'w', newline='\n') as f: for line in headers: f.write(line)