Update smoothing function
This commit is contained in:
parent
1cf949e36b
commit
9e39135f00
1 changed files with 47 additions and 42 deletions
|
|
@ -262,70 +262,75 @@ def smoothing(data: dict, options={}):
|
||||||
# FIXME Add logging
|
# FIXME Add logging
|
||||||
# FIXME Add saving of files
|
# FIXME Add saving of files
|
||||||
|
|
||||||
required_options = ['log', 'logfile', 'window_length','polyorder']
|
required_options = ['log', 'logfile', 'window_length','polyorder', 'save_default']
|
||||||
default_options = {
|
default_options = {
|
||||||
'log': False,
|
'log': False,
|
||||||
'logfile': f'{datetime.now().strftime("%Y-%m-%d-%H-%M-%S")}_smoothing.log',
|
'logfile': f'{datetime.now().strftime("%Y-%m-%d-%H-%M-%S")}_smoothing.log',
|
||||||
'save_plots': False,
|
'save_plots': False,
|
||||||
'save_folder': './',
|
'save_folder': './',
|
||||||
'window_length': 3,
|
'window_length': 3,
|
||||||
'polyorder': 2
|
'polyorder': 2,
|
||||||
|
'save_default': 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)
|
||||||
|
|
||||||
|
if options['save_default']:
|
||||||
|
data['xanes_data_smooth_default'] = data['xanes_data']['ZapEnergy']
|
||||||
|
|
||||||
# FIXME Add other types of filters
|
# FIXME Add other types of filters
|
||||||
|
# FIXME Instead of assigning values directly to the data dictionary, these should be made into an own DataFrame that you can decide later what to do with - these variables should
|
||||||
|
# then be returned
|
||||||
for filename in data['path']:
|
for filename in data['path']:
|
||||||
xanes_smooth = savgol_filter(data['xanes_data'][filename], options['window_length'], options['polyorder'])
|
xanes_smooth = savgol_filter(data['xanes_data'][filename], options['window_length'], options['polyorder'])
|
||||||
default_smooth = savgol_filter(data['xanes_data'][filename], default_options['window_length'], default_options['polyorder'])
|
if options['save_default']:
|
||||||
|
default_smooth = savgol_filter(data['xanes_data'][filename], default_options['window_length'], default_options['polyorder'])
|
||||||
|
|
||||||
|
data['xanes_data'][filename] = xanes_smooth
|
||||||
|
|
||||||
|
if options['save_default']:
|
||||||
|
data['xanes_data_smooth_default'][filename] = default_smooth
|
||||||
|
|
||||||
|
|
||||||
#printing the smoothed curves vs data
|
if options['save_plots']:
|
||||||
if options['save_folder'] == True:
|
if not os.path.isdir(options['save_folder']):
|
||||||
|
os.makedirs(options['save_folder'])
|
||||||
|
|
||||||
fig, (ax1,ax2) = plt.subplots(1,2,figsize=(15,5))
|
dst = os.path.join(options['save_folder'], os.path.basename(filename)) + '_smooth.png'
|
||||||
x_range_zoom=[6.54,6.55] #make into widget
|
|
||||||
y_range_zoom=[20000,80000] #make into widget
|
|
||||||
|
|
||||||
df_bkgd_sub.plot.scatter(x = "ZapEnergy",y=filenames, ax=ax1, color="Red")
|
edge_pos = estimate_edge_position(data=data, options=options)
|
||||||
df_smooth.plot(x = "ZapEnergy",y=filenames, ax=ax1, color="Blue")
|
intensity_midpoint = data['xanes_data'][filename].max() - data['xanes_data'][filename].min()
|
||||||
ax1.set_xlim(x_range_zoom)
|
|
||||||
ax1.set_ylim(y_range_zoom)
|
|
||||||
ax1.set_title("Smoothed curve (blue) vs data (red) used for further analysis")
|
|
||||||
|
|
||||||
df_bkgd_sub.plot.scatter(x = "ZapEnergy",y=filenames, ax=ax2, color="Red")
|
|
||||||
df_default.plot(x = "ZapEnergy",y=filenames, ax=ax2, color="Green")
|
|
||||||
ax2.set_xlim(x_range_zoom)
|
|
||||||
ax2.set_ylim(y_range_zoom)
|
|
||||||
ax2.set_title("Smoothed curve (green) vs data (red) using default window_length and polyorder")
|
|
||||||
|
|
||||||
|
|
||||||
# FIXME Clear up these two plotting functions
|
if options['save_default']:
|
||||||
|
fig, (ax1, ax2) = plt.subplots(1,2,figsize=(20,5))
|
||||||
|
data['xanes_data'].plot(x='ZapEnergy', y=filename, color='black', ax=ax1)
|
||||||
|
xanes_smooth.plot(x='ZapEnergy', y=filename, color='red', ax=ax1)
|
||||||
|
ax1.set_xlim([edge_pos-0.5, edge_pos+0.5])
|
||||||
|
ax1.set_ylim([intensity_midpoint*0.98, intensity_midpoint*1.02])
|
||||||
|
|
||||||
if options['save_plots']:
|
ax1.set_title(f'{os.path.basename(filename)} - Smooth', size=20)
|
||||||
if not os.path.isdir(options['save_folder']):
|
|
||||||
os.makedirs(options['save_folder'])
|
|
||||||
|
|
||||||
dst = os.path.join(options['save_folder'], os.path.basename(filename)) + '_pre_edge_fit.png'
|
data['xanes_data_original'].plot(x='ZapEnergy', y=filename, color='black', ax=ax2)
|
||||||
|
data['xanes_data_smooth_default'].plot(x='ZapEnergy', y=filename, color='green', ax=ax2)
|
||||||
|
ax2.set_xlim([edge_pos-0.5, edge_pos+0.5])
|
||||||
|
ax2.set_ylim([intensity_midpoint*0.98, intensity_midpoint*1.02])
|
||||||
|
ax2.set_title(f'{os.path.basename(filename)} - Smooth (default values)', size=20)
|
||||||
|
|
||||||
fig, (ax1, ax2) = plt.subplots(1,2,figsize=(10,5))
|
elif not options['save_default']:
|
||||||
data['xanes_data_original'].plot(x='ZapEnergy', y=filename, color='black', ax=ax1)
|
fig, ax = plt.subplots(figsize=(10,5))
|
||||||
pre_edge_fit_data.plot(x='ZapEnergy', y=filename, color='red', ax=ax1)
|
data['xanes_data'].plot(x='ZapEnergy', y=filename, color='black', ax=ax1)
|
||||||
ax1.axvline(x = max(pre_edge_data['ZapEnergy']), ls='--')
|
xanes_smooth.plot(x='ZapEnergy', y=filename, color='red', ax=ax1)
|
||||||
ax1.set_title(f'{os.path.basename(filename)} - Full view', size=20)
|
ax1.set_xlim([edge_pos-0.5, edge_pos+0.5])
|
||||||
|
ax1.set_ylim([intensity_midpoint*0.98, intensity_midpoint*1.02])
|
||||||
|
|
||||||
data['xanes_data_original'].plot(x='ZapEnergy', y=filename, color='black', ax=ax2)
|
ax1.set_title(f'{os.path.basename(filename)} - Smooth', size=20)
|
||||||
pre_edge_fit_data.plot(x='ZapEnergy', y=filename, color='red', ax=ax2)
|
|
||||||
ax2.axvline(x = max(pre_edge_data['ZapEnergy']), ls='--')
|
|
||||||
ax2.set_xlim([min(pre_edge_data['ZapEnergy']), max(pre_edge_data['ZapEnergy'])])
|
|
||||||
ax2.set_ylim([min(pre_edge_data[filename]), max(pre_edge_data[filename])])
|
|
||||||
ax2.set_title(f'{os.path.basename(filename)} - Fit region', size=20)
|
|
||||||
|
|
||||||
|
|
||||||
plt.savefig(dst, transparent=False)
|
plt.savefig(dst, transparent=False)
|
||||||
plt.close()
|
plt.close()
|
||||||
|
|
||||||
return xanes_smooth, default_smooth
|
# FIXME See comment above about return values
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue