Add HTXRD-reading with saving in individual files
This commit is contained in:
parent
ebc77c1b9e
commit
7f61617d9a
1 changed files with 33 additions and 7 deletions
|
|
@ -5,6 +5,7 @@ import numpy as np
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
|
import datetime
|
||||||
|
|
||||||
import zipfile
|
import zipfile
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
|
|
@ -320,13 +321,20 @@ def read_brml(data, options={}, index=0):
|
||||||
|
|
||||||
def read_htxrd(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 = {
|
default_options = {
|
||||||
'extract_folder': 'tmp',
|
'extract_folder': 'tmp',
|
||||||
'save_folder': None,
|
'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)
|
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 = []
|
diffractograms = []
|
||||||
wavelengths = []
|
wavelengths = []
|
||||||
|
|
||||||
|
active_scan = False
|
||||||
|
timestamps = []
|
||||||
|
|
||||||
# Loop through all RawData-files and extract all data and temperatures
|
# Loop through all RawData-files and extract all data and temperatures
|
||||||
for i, file in enumerate(files):
|
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
|
# initalise empty list to store data from this particular scan
|
||||||
diffractogram = []
|
diffractogram = []
|
||||||
|
|
||||||
|
|
||||||
for chain in root.findall('./DataRoutes/DataRoute'):
|
for chain in root.findall('./DataRoutes/DataRoute'):
|
||||||
|
|
||||||
scantypes = chain.findall('ScanInformation')
|
scantypes = chain.findall('ScanInformation')
|
||||||
|
|
@ -367,6 +377,7 @@ def read_htxrd(data, options={}, index=0):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
active_scan = True
|
||||||
if chain.get('RouteFlag') == 'Final':
|
if chain.get('RouteFlag') == 'Final':
|
||||||
for scandata in chain.findall('Datum'):
|
for scandata in chain.findall('Datum'):
|
||||||
scandata = scandata.text.split(',')
|
scandata = scandata.text.split(',')
|
||||||
|
|
@ -387,8 +398,22 @@ def read_htxrd(data, options={}, index=0):
|
||||||
wavelengths.append(wavelength)
|
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']:
|
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']:
|
if not options['save_filename']:
|
||||||
filename = os.path.basename(data['path'][index]).split('.')[0] + '_' + str(i).zfill(4) +'.xy'
|
filename = os.path.basename(data['path'][index]).split('.')[0] + '_' + str(i).zfill(4) +'.xy'
|
||||||
else:
|
else:
|
||||||
|
|
@ -398,7 +423,7 @@ def read_htxrd(data, options={}, index=0):
|
||||||
if not os.path.isdir(options['save_folder']):
|
if not os.path.isdir(options['save_folder']):
|
||||||
os.makedirs(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
|
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(
|
headers = '\n'.join(
|
||||||
[line for line in
|
[line for line in
|
||||||
[f'# Temperature {np.round(diffractogram["T"].mean())}',
|
[f'# Temperature {np.round(diffractogram["T"].mean())}',
|
||||||
f'# Wavelength {wavelength}',
|
f'# Wavelength {wavelength}',
|
||||||
|
f'# Time {timestamp}'
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
diffractogram = diffractogram.drop('T', axis=1)
|
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:
|
for line in headers:
|
||||||
f.write(line)
|
f.write(line)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue