Source code for crikit.ui.dialog_kkOptions
"""
Kramers-Kronig phase retrieval
References
----------
[1] C H Camp Jr, Y J Lee, and M T Cicerone, "Quantitative, Comparable Coherent \
Anti-Stokes Raman Scattering (CARS) Spectroscopy: Correcting Errors in Phase \
Retrieval," Journal of Raman Spectroscopy (2016). arXiv:1507.06543.
"""
import sys as _sys
import os as _os
import numpy as _np
# Generic imports for QT-based programs
from PyQt5.QtWidgets import (QApplication as _QApplication,
QDialog as _QDialog)
# Import from Designer-based GUI
from crikit.ui.qt_KKOptions import Ui_Dialog as Ui_KKOptions
from crikit.ui.dialog_ploteffect import (DialogPlotEffect as
_DialogPlotEffect)
from crikit.ui.widget_KK import (widgetKK as _widgetKK)
# Generic imports for MPL-incorporation
import matplotlib as _mpl
_mpl.use('Qt5Agg')
_mpl.rcParams['font.family'] = 'sans-serif'
_mpl.rcParams['font.size'] = 10
[docs]class DialogKKOptions(_QDialog):
"""
DialogKKOptions : Phase-Retrieval (only Kramers-Kronig currently \
supported) options dialog
Methods
--------
dialogKKOptions : Used to call UI and retrieve results of dialog
References
----------
[1] Y. Liu, Y. J. Lee, and M. T. Cicerone, "Broadband CARS spectral \
phase retrieval using a time-domain Kramers-Kronig transform," \
Opt. Lett. 34, 1363-1365 (2009).
[2] C H Camp Jr, Y J Lee, and M T Cicerone, "Quantitative, Comparable Coherent \
Anti-Stokes Raman Scattering (CARS) Spectroscopy: Correcting Errors in Phase \
Retrieval," Journal of Raman Spectroscopy (2016). arXiv:1507.06543.
"""
NORM_TO_NRB = True
NRB_AMP = 0.0
CARS_AMP = 0.0
PHASE_OFFSET = 0.0
PAD_FACTOR = 1
N_EDGE = 30
def __init__(self, parent=None, data=None, conjugate=False):
super(DialogKKOptions, self).__init__(parent) ### EDIT ###
self.ui = Ui_KKOptions() ### EDIT ###
self.ui.setupUi(self) ### EDIT ###
self.ui.doubleSpinBoxCARSAmp.setValue(self.CARS_AMP)
self.ui.doubleSpinBoxNRBAmp.setValue(self.NRB_AMP)
self.ui.doubleSpinBoxPhase.setValue(self.PHASE_OFFSET)
self.ui.checkBoxNormToNRB.setChecked(self.NORM_TO_NRB)
self.ui.spinBoxPadFactor.setValue(self.PAD_FACTOR)
self.ui.spinBoxEdge.setValue(self.N_EDGE)
self.ui.checkBoxConjugate.setChecked(conjugate)
self.norm_to_nrb = self.NORM_TO_NRB
self.data = data
if data is None:
self.ui.pushButtonInteractive.setEnabled(False)
else:
self.ui.pushButtonInteractive.pressed.connect(self.goInteractive)
[docs] def goInteractive(self):
plugin = _widgetKK()
winPlotEffect = _DialogPlotEffect.dialogPlotEffect(self.data[1:],
x=self.data[0],
plugin=plugin,
parent=self)
if winPlotEffect is not None:
self.ui.doubleSpinBoxCARSAmp.setValue(winPlotEffect.parameters['cars_amp_offset'])
self.ui.doubleSpinBoxNRBAmp.setValue(winPlotEffect.parameters['nrb_amp_offset'])
self.ui.checkBoxNormToNRB.setChecked(winPlotEffect.parameters['norm_to_nrb'])
self.ui.doubleSpinBoxPhase.setValue(winPlotEffect.parameters['phase_offset'])
self.ui.spinBoxPadFactor.setValue(winPlotEffect.parameters['pad_factor'])
self.ui.spinBoxEdge.setValue(winPlotEffect.parameters['n_edge'])
self.ui.checkBoxConjugate.setChecked(winPlotEffect.parameters['conjugate'])
[docs] @staticmethod
def dialogKKOptions(parent=None, data=None, conjugate=False):
"""
Retrieve dark subtraction dialog results
Parameters
----------
None : None
Returns
----------
out : dict{'cars_amp' : float, 'nrb_amp' : float,
'phase_offset' : float, 'norm_to_nrb' : bool,
'pad_factor' : int}
In order: CARS amp offset, NRB amp offset, phase offset, normalize
by NRB, pad factor
"""
dialog = DialogKKOptions(parent=parent,data=data, conjugate=conjugate)
result = dialog.exec_()
if result == 1:
ret = {}
ret['cars_amp'] = dialog.ui.doubleSpinBoxCARSAmp.value()
ret['nrb_amp'] = dialog.ui.doubleSpinBoxNRBAmp.value()
ret['phase_offset'] = dialog.ui.doubleSpinBoxPhase.value()
ret['norm_to_nrb'] = dialog.ui.checkBoxNormToNRB.isChecked()
ret['pad_factor'] = dialog.ui.spinBoxPadFactor.value()
ret['n_edge'] = dialog.ui.spinBoxEdge.value()
ret['conjugate'] = dialog.ui.checkBoxConjugate.isChecked()
return ret
else:
return None
if __name__ == '__main__':
app = _QApplication(_sys.argv)
app.setStyle('Cleanlooks')
# winDark = DialogDarkOptions.dialogDarkOptions(darkloaded=True)
from crikit.data.spectra import Hsi as _Hsi
temp = _Hsi()
WN = _np.linspace(500,4000,1000)
CARS = _np.zeros((20,20,WN.size))
CARS[:,:,:] = _np.abs(1/(1000-WN-1j*20) + 1/(3000-WN-1j*20) + .055)
temp.data = CARS
temp.freq.data = WN
NRB = 0*WN + .055
winKK = DialogKKOptions.dialogKKOptions(data=[WN, NRB,
temp.get_rand_spectra(10, pt_sz=3, quads=False)])
print('KK return: {}'.format(winKK))
_sys.exit()