split tg calculation from tnmh model
This commit is contained in:
@ -1,8 +1,9 @@
|
||||
from itertools import cycle
|
||||
|
||||
from numpy import array, nan
|
||||
from pyqtgraph import mkPen, mkBrush
|
||||
from numpy import array, nan, isnan
|
||||
from pyqtgraph import mkPen, mkBrush, LegendItem
|
||||
|
||||
from nmreval.dsc.hodge import tau_hodge
|
||||
from nmreval.lib.colors import Tab10
|
||||
from ..Qt import QtWidgets, QtCore
|
||||
from .._py.tnmh_dialog import Ui_Dialog
|
||||
@ -23,6 +24,16 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog):
|
||||
self._plots = {}
|
||||
self._tg_value = {}
|
||||
self._fit = {}
|
||||
self._hodge_plots = {
|
||||
'onset': PlotItem(x=[], y=[], pen=None, symbol='o', symbolBrush=Tab10.TabBlue.rgb(), name='Onset'),
|
||||
'mid': PlotItem(x=[], y=[], pen=None, symbol='s', symbolBrush=Tab10.TabOrange.rgb(), name='Midpoint'),
|
||||
'end': PlotItem(x=[], y=[], pen=None, symbol='t', symbolBrush=Tab10.TabGreen.rgb(), name='End'),
|
||||
'inflection': PlotItem(x=[], y=[], pen=None, symbol='d', symbolBrush=Tab10.TabRed.rgb(), name='Inflection'),
|
||||
'fictive': PlotItem(x=[], y=[], pen=None, symbol='t1', symbolBrush=Tab10.TabPurple.rgb(), name='Fictive'),
|
||||
# 'TNMH': PlotItem(x=[], y=[], pen=None, symbol='star', symbolBrush=Tab10.TabPurple.rgb(), name='TNMH'),
|
||||
}
|
||||
for plt in self._hodge_plots.values():
|
||||
self.graphicsView_3.addItem(plt)
|
||||
|
||||
self.limits = RegionItem(), RegionItem()
|
||||
for lim in self.limits:
|
||||
@ -33,6 +44,9 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog):
|
||||
|
||||
self.listWidget.itemClicked.connect(self.show_tg_values)
|
||||
|
||||
for x in 'abc':
|
||||
self.comboBox_2.addItem(x)
|
||||
|
||||
def __call__(self):
|
||||
self.clear()
|
||||
self.add_sets()
|
||||
@ -44,6 +58,9 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog):
|
||||
self.graphicsView.removeItem(val)
|
||||
self.graphicsView_2.removeItem(val)
|
||||
|
||||
for plt in self._hodge_plots.values():
|
||||
plt.setData(x=[], y=[])
|
||||
|
||||
self._dsc = {}
|
||||
self._plots = {}
|
||||
self._tg_value = {}
|
||||
@ -98,8 +115,8 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog):
|
||||
|
||||
if self._limitless:
|
||||
dist = max_x - min_x
|
||||
self.limits[0].setRegion((min_x, min_x+0.1*dist))
|
||||
self.limits[1].setRegion((max_x-0.1*dist, max_x))
|
||||
self.limits[0].setRegion((min_x, min_x+min(0.1*dist, 5)))
|
||||
self.limits[1].setRegion((max_x-min(5, 0.1*dist), max_x))
|
||||
self._limitless = False
|
||||
|
||||
@QtCore.pyqtSlot(name='on_pushButton_clicked')
|
||||
@ -124,7 +141,7 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog):
|
||||
|
||||
self._tg_value[key].update(tg_results)
|
||||
|
||||
plot[1].setData(array(list(self._tg_value[key].values())))
|
||||
self._update_tg_plots()
|
||||
|
||||
def show_tg_values(self, item):
|
||||
values = self._tg_value.get(item.data(QtCore.Qt.UserRole))
|
||||
@ -137,6 +154,18 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog):
|
||||
if fit is not None:
|
||||
self.label_5.setText(fit._parameter_string())
|
||||
|
||||
def _update_tg_plots(self):
|
||||
for idx in range(self.listWidget.count()):
|
||||
item = self.listWidget.item(idx)
|
||||
|
||||
key = item.data(QtCore.Qt.UserRole)
|
||||
plot = self._plots[key]
|
||||
data, _ = self._dsc[key]
|
||||
|
||||
plot[1].setData(array(list(self._tg_value[key].values())))
|
||||
|
||||
self.hodge()
|
||||
|
||||
@QtCore.pyqtSlot(QtWidgets.QListWidgetItem, name='on_listWidget_itemChanged')
|
||||
def change_visibility(self, item: QtWidgets.QListWidgetItem):
|
||||
is_checked = bool(item.checkState())
|
||||
@ -166,7 +195,7 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog):
|
||||
|
||||
self._tg_value[key]['fictive'] = (tg, 0)
|
||||
|
||||
plot[1].setData(array(list(self._tg_value[key].values())))
|
||||
self._update_tg_plots()
|
||||
|
||||
@QtCore.pyqtSlot(name='on_pushButton_3_clicked')
|
||||
def make_tnmh(self):
|
||||
@ -190,6 +219,25 @@ class TgCalculator(QtWidgets.QDialog, Ui_Dialog):
|
||||
self._fit[key] = res
|
||||
plot[-1].setData(res.x, res.y)
|
||||
|
||||
def hodge(self):
|
||||
for tg_type, plot in self._hodge_plots.items():
|
||||
m = []
|
||||
for idx in range(self.listWidget.count()):
|
||||
item = self.listWidget.item(idx)
|
||||
|
||||
key = item.data(QtCore.Qt.UserRole)
|
||||
data, _ = self._dsc[key]
|
||||
|
||||
tg_value = self._tg_value[key][tg_type][0]
|
||||
if isnan(tg_value):
|
||||
continue
|
||||
|
||||
m.append([tg_value, data.value])
|
||||
|
||||
if len(m) > 1:
|
||||
r = tau_hodge(*array(m).T)
|
||||
plot.setData(r.x, r.y)
|
||||
|
||||
def close(self) -> bool:
|
||||
self.clear()
|
||||
return super().close()
|
||||
|
Reference in New Issue
Block a user