%matplotlib notebook
import matplotlib.pyplot as plt
import hyperspy.api as hs
hs.set_log_level('ERROR')
import numpy as np
import os
from IPython.display import HTML, display
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
plt.rcParams.update({'figure.max_open_warning': 0})
warnings.filterwarnings("ignore")
#def hide_code():
display(HTML('''<script>
code_show=true;
function code_toggle() {
if (code_show){
$('div.input').hide();
} else {
$('div.input').show();
}
code_show = !code_show
}
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit" value="Click here to toggle on/off the raw code."></form>'''))
#hide_code()
os.chdir(r'/dls/science/groups/e02/Mohsen/Sadler_data/em19373-2/GATAN/A6/Y/SI data (18)/')
# #load from saved hspy versions
# eels_core = hs.load('eels_core.hspy')
# eels_low = hs.load('eels_low.hspy')
#######To load the raw data
eels_core = hs.load('EELS Spectrum Image (high-loss).dm4')
eels_low = hs.load('EELS Spectrum Image (low-loss).dm4')
eels_core.sum().plot()
eels_low.sum().plot()
eels_core.axes_manager
#Spike removal
eels_low.isig[2.7:].spikes_removal_tool()
eels_core.spikes_removal_tool()
#Aligning the data wrt the zero-loss peak
eels_low.align_zero_loss_peak(calibrate = True,print_stats = True, also_align=[eels_core])
#After aligning / spike removal
eels_core.save('eels_core')
eels_low.save('eels_low')
###### Skip to here if loading pre-processed data
eels_core.axes_manager
#Interactive sum spectrum over image roi
eels_core.plot()
rec_roi = hs.roi.RectangularROI(left = 1., right = 1.5, top = 1.9, bottom= 2.0)
roi_reg = rec_roi.interactive(eels_core)
roi_reg_sum = hs.interactive(roi_reg.sum, event= roi_reg.axes_manager.events.any_axis_changed)
roi_reg_sum.plot()
eels_core.plot()
eels_core.decomposition()
eels_core.learning_results.summary()
eels_core.plot_explained_variance_ratio()
eels_core.decomposition(algorithm= 'RPCA_GoDec', output_dimension= 4)
eels_core.plot_decomposition_results()
#To avoid nmf error due to negative values
eels_core_pos = hs.signals.EELSSpectrum(eels_core.data.clip(min=0))
eels_core_pos.decomposition(True, algorithm= 'nmf', output_dimension= 7)
eels_core_pos.axes_manager = eels_core.axes_manager
eels_core_pos.axes_manager
eels_core.axes_manager
eels_core_pos.plot_decomposition_results()
#Issue with the edge of a detector quadrant
results_l = eels_core_pos.get_decomposition_loadings()
results_f = eels_core_pos.get_decomposition_factors()
from matplotlib import pyplot as plt
hs.plot.plot_images(results_l, cmap = 'jet', per_row=4, suptitle='NMF Decompostion Loadings', axes_decor='off',
label=['Component {}'.format(i) for i in range(results_l.data.shape[0])])
plt.savefig('/dls/science/groups/e02/Mohsen/Sadler_data/em19373-2/GATAN/A6/Y/SI data (18)/eels_nmf_loadings.png', dpi = 300)
hs.plot.plot_spectra(results_f, style='cascade')
plt.axvline(284, c='C1', ls=':', lw=0.5)
plt.text(x=284, y=0.50, s='C-K$_\\alpha$', color='C1')
plt.axvline(188, c='C3', ls=':', lw=0.5)
plt.text(x=180, y=3.37, s='B-K$_\\alpha$', color='C3')
plt.savefig('/dls/science/groups/e02/Mohsen/Sadler_data/em19373-2/GATAN/A6/Y/SI data (18)/eels_nmf_factors.png', dpi = 300)
eels_core_pos.save('eels_core_pos')
eels_core_pos.sum().plot()