Source code for crikit.ui.widget_Cut_every_n_spectra
"""
Widget for PlotEffect that sets the parameters to cut M spectra of every N spectra
"""
import numpy as _np
import PyQt5.QtCore as QtCore
from crikit.ui.dialog_AbstractPlotEffect import (AbstractPlotEffectPlugin
as _AbstractPlotEffectPlugin)
from crikit.ui.qt_PlotEffect_CutEveryNSpectra import Ui_Form as _Ui_Form
from crikit.preprocess.crop import CutEveryNSpectra
[docs]class widgetCutEveryNSpectra(_AbstractPlotEffectPlugin):
"""
Widget for PlotEffect that adjusts the parameters appropriate for
the Cutting Every N Spectra.
Attributes
----------
cars_amp_offset : float, optional (default=0.0)
DC offset applied to CARS spectrum(a) prior to KK relation.
nrb_amp_offset : float, optional (default=0.0)
DC offset applied to NRB spectrum(a) prior to KK relation.
phase_offset : float or ndarray, optional (default=0.0)
Phase constant or ndarray applied to retrieved phase prior to
separating the real and imaginary components.
norm_to_nrb : bool, optional (default=True)
Normalize the amplitude by sqrt(NRB). This effectively removes several \
system reponse functions.
pad_factor : int, optional (default=1)
Multiple size of spectral-length to pad the ends of each spectra with. \
Padded with a constant value corresponding to the value at that end of \
the spectrum.
Methods
---------
fcn : Performs the KK
Signals:
changed : a value in the UI has changed
"""
# Parameter dict that will be returned from PlotEffect
# Will be updated later in program to contain all parameters
# to pass to underlying algorithm
parameters = {'name' : 'CutEveryNSpectra',
'long_name' : 'Cut M Spectra Every N Spectra'}
# Labeling options for original data plot
labels_orig = {
'x_label' : 'Repetition Number',
'y_label' : 'Intensity (au)',
'title' : 'Original'
}
# Labeling options for affected data plot
labels_affected = {
'x_label' : labels_orig['x_label'],
'y_label' : labels_orig['y_label'],
'title' : 'Cropped Spectra'
}
def __init__(self, offset=0, cut_m=1, every_n=100, action='cut', parent=None):
super(widgetCutEveryNSpectra, self).__init__(parent)
self.ui = _Ui_Form()
self.ui.setupUi(self)
# Update parameter dict
self.parameters['offset'] = offset
self.parameters['cut_m'] = cut_m
self.parameters['every_n'] = every_n
self.parameters['action'] = action
self.setupOptions()
[docs] def setupOptions(self):
self.ui.spinBoxSpectraToCut.setValue(self.parameters['cut_m'])
self.ui.spinBoxEveryNSpectra.setValue(self.parameters['every_n'])
self.ui.spinBoxOffset.setValue(self.parameters['offset'])
cbox_idx = self.ui.comboBoxAction.findText(self.parameters['action'], QtCore.Qt.MatchFixedString)
self.ui.comboBoxAction.setCurrentIndex(cbox_idx)
self.ui.spinBoxSpectraToCut.editingFinished.connect(self.spinBoxChanged)
self.ui.spinBoxEveryNSpectra.editingFinished.connect(self.spinBoxChanged)
self.ui.spinBoxOffset.editingFinished.connect(self.spinBoxChanged)
self.ui.comboBoxAction.currentIndexChanged.connect(self.comboBoxChanged)
# SIGNALS & SLOTS
# self.ui.spinBoxCARSBias.editingFinished.connect(self.spinBoxChanged)
# self.ui.spinBoxNRBBias.editingFinished.connect(self.spinBoxChanged)
# self.ui.spinBoxPhaseLin.editingFinished.connect(self.spinBoxChanged)
# self.ui.spinBoxPadFactor.editingFinished.connect(self.spinBoxChanged)
# self.ui.checkBoxNRBNorm.clicked.connect(self.changeCheckBoxNRBNorm)
# self.ui.checkBoxLockBias.clicked.connect(self.changeCheckBoxLockBias)
# self.ui.spinBoxNRBBias.setEnabled(not self.lock_cars_nrb_bias)
[docs] def spinBoxChanged(self):
"""
Controller for all spinBoxes
"""
sdr = self.sender()
if sdr == self.ui.spinBoxSpectraToCut:
self.parameters['cut_m'] = self.ui.spinBoxSpectraToCut.value()
elif sdr == self.ui.spinBoxEveryNSpectra:
self.parameters['every_n'] = self.ui.spinBoxEveryNSpectra.value()
elif sdr == self.ui.spinBoxOffset:
self.parameters['offset'] = self.ui.spinBoxOffset.value()
self.changed.emit()
[docs] def comboBoxChanged(self):
""" Action comboBox box changed """
new_action = self.ui.comboBoxAction.currentText().lower()
self.parameters['action'] = new_action
self.changed.emit()
[docs] def fcn(self, data_in):
"""
Return the plot with the appropriate cuts
"""
assert isinstance(data_in, _np.ndarray), 'Required input is an ndarray'
assert data_in.ndim == 1, 'Required input is a 1D ndarray'
data_out = 0*data_in
cutter = CutEveryNSpectra(self.parameters['offset'], cut_m=self.parameters['cut_m'],
every_n=self.parameters['every_n'], action=self.parameters['action'])
# Because of the limits of PlotEffect, the input and output data HAS TO BE the same size
temp = cutter.calculate(_np.repeat(data_in[:,None], 11, axis=-1)).sum(axis=-1)
data_out[:temp.size] = temp
return data_out
if __name__ == '__main__':
import sys as _sys
from PyQt5.QtWidgets import (QApplication as _QApplication)
app = _QApplication(_sys.argv)
app.setStyle('Cleanlooks')
win = widgetCutEveryNSpectra()
win.show()
app.exec_()
_sys.exit()