Add HTXRD-reading with saving in individual files

This commit is contained in:
rasmusvt 2022-07-07 14:52:56 +02:00
parent ebc77c1b9e
commit 7f61617d9a

View file

@ -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)
@ -344,6 +352,9 @@ def read_htxrd(data, options={}, index=0):
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)