Add batch integration
This commit is contained in:
parent
f76a742fff
commit
ab1752e179
1 changed files with 49 additions and 22 deletions
|
|
@ -35,6 +35,37 @@ def get_image_headers(path):
|
||||||
return image.header
|
return image.header
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def integrate_scans(data: dict, options={}):
|
||||||
|
|
||||||
|
default_options = {
|
||||||
|
'extension': '.dat',
|
||||||
|
'save': True,
|
||||||
|
'integration_save_folder': './integrated/',
|
||||||
|
'integration_save_filename': None,
|
||||||
|
}
|
||||||
|
|
||||||
|
options = aux.update_options(options=options, required_options=default_options.keys(), default_options=default_options)
|
||||||
|
|
||||||
|
|
||||||
|
if not isinstance(data['path'], list):
|
||||||
|
imgs = aux.get_filenames(data['path'], ext=options['extension'])
|
||||||
|
|
||||||
|
|
||||||
|
diffractograms, wavelengths = [], []
|
||||||
|
for img in imgs:
|
||||||
|
data['image'] = get_image_array(img)
|
||||||
|
|
||||||
|
options['integration_save_filename'] = os.path.basename(img).split('.')[0] + '_int.xy'
|
||||||
|
|
||||||
|
diff, wl = integrate_1d(data=data, options=options)
|
||||||
|
|
||||||
|
diffractograms.append(diff)
|
||||||
|
wavelengths.append(wl)
|
||||||
|
|
||||||
|
return diffractograms, wavelengths
|
||||||
|
|
||||||
|
|
||||||
def integrate_1d(data, options={}, index=0):
|
def integrate_1d(data, options={}, index=0):
|
||||||
''' Integrates an image file to a 1D diffractogram.
|
''' Integrates an image file to a 1D diffractogram.
|
||||||
|
|
||||||
|
|
@ -48,17 +79,17 @@ def integrate_1d(data, options={}, index=0):
|
||||||
df: DataFrame contianing 1D diffractogram if option 'return' is True
|
df: DataFrame contianing 1D diffractogram if option 'return' is True
|
||||||
'''
|
'''
|
||||||
|
|
||||||
required_options = ['unit', 'npt', 'save', 'save_filename', 'save_extension', 'save_folder', 'overwrite', 'extract_folder', 'error_model']
|
required_options = ['unit', 'npt', 'save', 'integration_save_filename', 'save_extension', 'integration_save_folder', 'overwrite', 'extract_folder', 'error_model']
|
||||||
|
|
||||||
default_options = {
|
default_options = {
|
||||||
'unit': '2th_deg',
|
'unit': '2th_deg',
|
||||||
'npt': 3000,
|
'npt': 5000,
|
||||||
'extract_folder': 'tmp',
|
'extract_folder': 'tmp',
|
||||||
'error_model': None,
|
'error_model': None,
|
||||||
'save': False,
|
'save': False,
|
||||||
'save_filename': None,
|
'integration_save_filename': None,
|
||||||
'save_extension': '_integrated.xy',
|
'save_extension': '_integrated.xy',
|
||||||
'save_folder': '.',
|
'integration_save_folder': '.',
|
||||||
'overwrite': False}
|
'overwrite': False}
|
||||||
|
|
||||||
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)
|
||||||
|
|
@ -68,7 +99,7 @@ def integrate_1d(data, options={}, index=0):
|
||||||
|
|
||||||
|
|
||||||
# Get image array from filename if not passed
|
# Get image array from filename if not passed
|
||||||
if 'image' not in data.keys() or not data['image']:
|
if 'image' not in data.keys() or not isinstance(data['image'], np.ndarray):
|
||||||
data['image'] = get_image_array(data['path'][index])
|
data['image'] = get_image_array(data['path'][index])
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -89,8 +120,8 @@ def integrate_1d(data, options={}, index=0):
|
||||||
if not os.path.isdir(options['extract_folder']):
|
if not os.path.isdir(options['extract_folder']):
|
||||||
os.makedirs(options['extract_folder'])
|
os.makedirs(options['extract_folder'])
|
||||||
|
|
||||||
if not os.path.isdir(options['save_folder']):
|
if not os.path.isdir(options['integration_save_folder']):
|
||||||
os.makedirs(options['save_folder'])
|
os.makedirs(options['integration_save_folder'])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -105,10 +136,6 @@ def integrate_1d(data, options={}, index=0):
|
||||||
os.remove(filename)
|
os.remove(filename)
|
||||||
shutil.rmtree(f'tmp')
|
shutil.rmtree(f'tmp')
|
||||||
|
|
||||||
|
|
||||||
# Reset this option
|
|
||||||
options['save_folder'] = None
|
|
||||||
|
|
||||||
return diffractogram, wavelength
|
return diffractogram, wavelength
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -122,19 +149,18 @@ def make_filename(options, path=None):
|
||||||
elif options['save']:
|
elif options['save']:
|
||||||
|
|
||||||
# Case 1: No filename is given.
|
# Case 1: No filename is given.
|
||||||
if not options['save_filename']:
|
if not options['integration_save_filename']:
|
||||||
# If a path is given instead of an image array, the path is taken as the trunk of the savename
|
# If a path is given instead of an image array, the path is taken as the trunk of the savename
|
||||||
if path:
|
if path:
|
||||||
# Make filename by joining the save_folder, the filename (with extension deleted) and adding the save_extension
|
# Make filename by joining the save_folder, the filename (with extension deleted) and adding the save_extension
|
||||||
filename = os.path.join(options['save_folder'], os.path.split(path)[-1].split('.')[0] + options['save_extension'])
|
filename = os.path.join(options['integration_save_folder'], os.path.split(path)[-1].split('.')[0] + options['save_extension'])
|
||||||
else:
|
else:
|
||||||
# Make filename just "integrated.dat" in the save_folder
|
# Make filename just "integrated.dat" in the save_folder
|
||||||
filename = os.path.join(options['save_folder'], 'integrated.xy')
|
filename = os.path.join(options['integration_save_folder'], 'integrated.xy')
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
filename = os.path.join(options['save_folder'], options['save_filename'])
|
filename = os.path.join(options['integration_save_folder'], options['integration_save_filename'])
|
||||||
|
|
||||||
|
|
||||||
if not options['overwrite']:
|
if not options['overwrite']:
|
||||||
trunk = filename.split('.')[0]
|
trunk = filename.split('.')[0]
|
||||||
|
|
@ -216,6 +242,7 @@ def process_2d_scans(data: dict, options={}):
|
||||||
|
|
||||||
img_avgs = []
|
img_avgs = []
|
||||||
headers = []
|
headers = []
|
||||||
|
|
||||||
for img, dark in zip(imgs,darks):
|
for img, dark in zip(imgs,darks):
|
||||||
img_avg = average_images(img)
|
img_avg = average_images(img)
|
||||||
header = get_image_headers(img[0])
|
header = get_image_headers(img[0])
|
||||||
|
|
@ -233,10 +260,10 @@ def process_2d_scans(data: dict, options={}):
|
||||||
os.makedirs(options['save_folder'])
|
os.makedirs(options['save_folder'])
|
||||||
|
|
||||||
for i, img in enumerate(img_avgs):
|
for i, img in enumerate(img_avgs):
|
||||||
with open(os.path.join(options['save_folder'], options['save_filename']+f'{i}'.zfill(4)+options['save_extension']), 'w') as f:
|
if options['save_extension'] == '.dat':
|
||||||
f.write(f'# Time: {headers[i]["time"]}\n')
|
with open(os.path.join(options['save_folder'], options['save_filename']+f'{i}'.zfill(4)+options['save_extension']), 'w') as f:
|
||||||
np.savetxt(f, img, fmt='%.2f', delimiter=";")
|
f.write(f'# Time: {headers[i]["time"]}\n')
|
||||||
|
np.savetxt(f, img, fmt='%.2f', delimiter=";")
|
||||||
|
|
||||||
|
|
||||||
return img_avgs
|
return img_avgs
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue