Skip to content
Snippets Groups Projects
Commit 1834ca76 authored by Mikhail Karnevskiy's avatar Mikhail Karnevskiy
Browse files

Add x_range as parameter to all peak-finders. List of automatic peak-finder...

Add x_range as parameter to all peak-finders. List of automatic peak-finder can contain several peak-finders of the same type.
parent fcc7744a
No related branches found
No related tags found
1 merge request!2Next development step
......@@ -148,12 +148,12 @@ class MainController:
def recalculate_peaks_from_model(self, exclude=None):
self.model.peaks.clean()
processes = self.widget.peak_widget.procs_view.get_processes()
for method, parameters in processes.items():
for method, parameters in processes:
if method == exclude:
continue
peaks = find_peaks(method, self.model.pattern.data, parameters)
for peak in peaks:
self.model.peaks.add_peak(peak)
self.model.peaks.add_peak(**peak)
self.update_peaks_view()
def select_finder_method(self, method, parameters):
......@@ -206,7 +206,7 @@ class MainController:
self.plot_batch()
self.widget.img_view.plot_fit(*self.model.batch_model.get_peaks())
self.widget.fit_table_widget.show_results([], [], [])
self.widget.fit_table_widget.table.clear()
self.widget.fit_table_widget.table.show()
self.widget.fit_plotter_control.treeView.clear()
self.widget.img_view.reshuffled_peaks.clean_peaks()
......@@ -316,6 +316,9 @@ class MainController:
def edit_peaks(self, index, peak):
self.model.peaks.edit_peak(index, peak)
self.recalculate_peaks_from_model()
self.model.peaks.filter_peaks()
self.update_peaks_view()
self.widget.pattern_widget.plot_peaks(self.model.pattern, self.model.peaks)
def remove_peaks(self, index):
......@@ -450,9 +453,17 @@ class MainController:
self.update_2d_view()
def pattern_mouse_click(self, x, y):
if self.widget.peak_widget.get_method() == 'Manual':
self.model.peaks.add_peak(x=x, bin_x=x_to_bin(x, self.model.pattern.x), fix=True)
self.update_peaks_view()
method = self.widget.peak_widget.get_method()
if method == 'Manual':
x_range = self.widget.peak_widget.get_range()
peak = {'bin_x': x_to_bin(x, self.model.pattern.x),
'fix': True,
'x': x,
'method': 'Manual'}
parameters = {'x_range': x_range,
'peak': peak}
self.evaluate_peaks(method=method, parameters=parameters)
def clean_1d_view(self):
self.widget.pattern_widget.plot_fit([], [])
......@@ -490,21 +501,14 @@ class MainController:
def evaluate_peaks(self, method=None, parameters=None, add=False):
log.debug(f"Evaluate peaks with method: {method}")
self.recalculate_peaks_from_model(exclude=method)
if method == 'Background':
self.model.peaks.clean(method=method)
x = np.mean(parameters['x_range'])
bin_x = x_to_bin(x, self.model.pattern.x)
width_x = np.diff(parameters['x_range'])[0]/2
width = max(2, int(width_x / self.model.pattern.bs))
self.model.peaks.add_peak(bin_x=bin_x, width=width, fix=add,
shape=parameters['shape'], method=method)
else:
if len(parameters) > 0:
peaks = find_peaks(method, self.model.pattern.data, parameters)
for peak in peaks:
self.model.peaks.add_peak(peak, method=method)
if method not in ['Manual', 'Background']:
self.widget.peak_widget.procs_view.add_process(method, parameters.copy(), add)
if len(parameters) > 0:
peaks = find_peaks(method, self.model.pattern.data, parameters)
for peak in peaks:
self.model.peaks.add_peak(**peak)
self.model.peaks.filter_peaks()
self.update_peaks_view()
self.widget.peak_widget.procs_view.add_process(method, parameters, add)
log.debug(f"Eval peaks: {self.model.peaks.peaks}")
def update_peaks_view(self):
......@@ -545,7 +549,7 @@ class MainController:
self.widget.batch_fit.set_range(1, n_img, 1)
self.widget.filter_widget.xroi.set_range(x_min, x_max)
self.widget.fit_widget.set_range(x_min, x_max)
self.widget.peak_widget.model_bkg.set_range(x_min, x_max)
self.widget.peak_widget.set_range(x_min, x_max)
self.widget.filter_widget.blockSignals(False)
self.widget.peak_widget.blockSignals(False)
......
......@@ -4,7 +4,7 @@ import logging
from ..model.utils.peaks import find_peaks, create_peak
from ..model.FitModel import FitModel
from ..model.utils import filters
from ..model.utils.peaks import x_to_bin
from ..model.utils.peaks import x_to_bin, filter_peaks
log = logging.getLogger(__name__)
......@@ -21,6 +21,17 @@ def widget_selection(combobox, widgets):
widget.hide()
def get_manual_peaks_idx(peaks):
idxs = []
counter = 0
for peak in sorted(peaks, key=lambda k: k['bin_x']):
if peak['method'] == 'Manual':
idxs.append(counter)
if peak['method'] != 'Background':
counter += 1
return idxs
def batch_processor(task_queue, out_queue, filter_dict, only_preprocess, only_peaks,
peak_dict, fit_params, manual_peaks):
......@@ -40,32 +51,34 @@ def batch_processor(task_queue, out_queue, filter_dict, only_preprocess, only_pe
continue
found_peaks = []
for proc, parameters in peak_dict.items():
peaks = find_peaks(proc, data, parameters)
print(proc, parameters, peaks, xrange)
found_peaks += list(peaks[(peaks > xrange[0]) & (peaks < xrange[1])])
print("Found: ", found_peaks)
for proc, parameters in peak_dict:
peaks = find_peaks(proc, data, parameters.copy())
found_peaks += [x for x in peaks if x['bin_x'] > xrange[0] and x['bin_x'] < xrange[1]]
peak_list = manual_peaks + [create_peak(p, peak_width, peak_shape) for p in found_peaks]
#print("Peak list ", peak_list)
filter_peaks(peak_list)
if only_peaks:
out_queue.put((i_img, found_peaks))
out_queue.put((i_img, peak_list))
continue
# Fitting
if len(found_peaks)+len(manual_peaks) > 0:
peak_list = manual_peaks + [create_peak(x, peak_width, peak_shape) for x in found_peaks]
if len(peak_list) > 0:
fitter = FitModel()
print('To Fit: ', peak_list)
#print('To Fit: ', peak_list)
fitter.fit(*data, peak_list, **fit_params)
out_queue.put((i_img, fitter.fit_result))
if len(found_peaks) == 0:
fit_peaks = fitter.get_peaks()
counter = 0
for i in range(len(manual_peaks)):
if manual_peaks[i]['shape'] not in ['gaussian', 'pvoigt']:
continue
manual_peaks[i]['bin_x'] = x_to_bin(fit_peaks[counter][0], data[0])
fit_peaks = fitter.get_peaks()
idxs = get_manual_peaks_idx(peak_list)
counter = 0
#print("reset manuals ", manual_peaks, "to: ", fit_peaks, idxs)
for i in range(len(manual_peaks)):
if manual_peaks[i]['method'] == 'Manual':
#print("Set manual ", manual_peaks[i]['bin_x'], "to ", x_to_bin(fit_peaks[idxs[counter]][0], data[0]))
manual_peaks[i]['bin_x'] = x_to_bin(fit_peaks[idxs[counter]][0], data[0])
counter += 1
else:
out_queue.put((i_img, None))
......
......@@ -273,7 +273,7 @@ def mock_fit_results(peaks, binning):
fit_result = FitResult()
counter = 0
for peak in peaks:
fit_result.params[f'peak{counter}_center'] = binning[peak]
fit_result.params[f'peak{counter}_center'] = binning[peak['bin_x']]
fit_result.params[f'peak{counter}_center_stderr'] = 0.01
fit_result.params_tip[f'peak{counter}_center'] = ''
counter += 1
......@@ -282,8 +282,8 @@ def mock_fit_results(peaks, binning):
def get_background(x, params, bkg_shape=''):
log.debug("Calculate background: ", params, bkg_shape)
if len(params) > 0:
log.debug(f"Calculate background: {params}, shape: {bkg_shape}")
params['x'] = x
if 'f-series' in bkg_shape:
bkg = series_creator(**params)
......
......@@ -3,7 +3,7 @@ import numpy as np
from .utils.filters import butter_lowpass_filter
from .FitModel import FitResult
from .utils.peaks import models, x_to_bin
from .utils.peaks import models, x_to_bin, filter_peaks
from .utils.functions import peak_model_list, bkg_model_list
......@@ -29,7 +29,8 @@ class PeaksModel:
peak['width'] = max(2, int(peak['width_x'] / self.pattern.bs))
peak['bin_x'] = x_to_bin(peak['x'], self.pattern.x)
def add_peak(self, bin_x, method=None, width=None, shape=None, fix=False, sigma=None, x=None, width_x=None):
def add_peak(self, bin_x, method=None, width=None, shape=None, fix=False, sigma=None, x=None, width_x=None,
x_range=None):
if x is None:
x = self.pattern.x[bin_x]
......@@ -40,7 +41,7 @@ class PeaksModel:
if width_x is None:
width_x = self.pattern.bs * width
self.peaks.append(self.create_peak(bin_x, width, shape, fix, sigma, x, width_x, method))
self.peaks.append(self.create_peak(bin_x, width, shape, fix, sigma, x, width_x, method, x_range))
def set_width(self, width_x):
width = max(2, int(width_x / self.pattern.bs))
......@@ -52,7 +53,7 @@ class PeaksModel:
def set_shape(self, shape):
for peak in self.peaks:
if peak['shape'] in peak_model_list:
if peak['shape'] in peak_model_list and not peak['fix']:
peak['shape'] = shape
self.def_shape = shape
......@@ -86,8 +87,17 @@ class PeaksModel:
self.peaks[index]['width'] = max(2, int(peak[2]/bs))
self.peaks[index]['width_x'] = peak[2]
self.peaks[index]['shape'] = peak[3]
if peak[0] and self.peaks[index]['method'] != 'Background':
self.peaks[index]['method'] = 'Manual'
def filter_peaks(self):
"""
Remove non-fixed peaks, which are within the region of fixed manual peaks.
"""
filter_peaks(self.peaks)
def create_peak(self, bin_x, width=None, shape=None, fix=False, sigma=None, x=None, width_x=None, method=None):
def create_peak(self, bin_x, width=None, shape=None, fix=False, sigma=None, x=None, width_x=None, method=None,
x_range=None):
if shape is None:
shape = self.def_shape
if width is None:
......@@ -99,7 +109,8 @@ class PeaksModel:
'width_x': width_x,
'shape': shape,
'sigma': sigma,
'method': method
'method': method,
'x_range': x_range
}
def clean(self, all=False, method=None):
......
......@@ -114,14 +114,13 @@ def create_fit_model(shape):
order = int(order)
module = sys.modules[__name__]
print(f"Create function {shape} for module {module}")
#print(f"Create function {shape} for module {module}")
class_function = get_class_function(func_type, order)
setattr(sys.modules[__name__], f"{func_type}{order}", class_function)
class_model = type(f"{func_type}_{order}Model", (Model,), {})
def __init__(self, *args, **kwargs):
print('Define init')
super(class_model, self).__init__(class_function, *args, **kwargs)
self.deg = order
......
......@@ -111,27 +111,74 @@ def findpeaks_dir(x, y, cutoff, dir_threshold, min_peak, n_peaks=0):
return np.array(mins)[pp]
def trim_data(x_range, data):
"""
Return sub_array of data with respect to x_range
"""
selection = np.where((data[0] > x_range[0]) & (data[0] < x_range[1]))[0]
if len(selection) == 0:
return None, 0
return [data[0][selection], data[1][selection]], selection[0]
def find_peaks(method, data, parameters):
x_range = parameters.pop('x_range')
data, shift = trim_data(x_range, data)
if data is None:
return np.array([])
if method == 'Find peak CWT':
peaks = findpeaks_cwt(*data, **parameters)
peaks = [{'bin_x': x+shift, 'method': method} for x in peaks]
if method == 'Local Maximum':
peaks = findpeak_max(*data, **parameters)
peaks = [{'bin_x': x+shift, 'method': method} for x in peaks]
if method == 'Derivation':
peaks = findpeaks_dir(*data, **parameters)
peaks = [{'bin_x': x+shift, 'method': method} for x in peaks]
if method == 'Background':
x = np.mean(x_range)
bin_x = x_to_bin(x, data[0])+shift
width = x_to_bin(x_range[1], data[0])-x_to_bin(x_range[0], data[0])
peaks = [{'bin_x': bin_x,
'width': width,
'fix': True,
'shape': parameters['shape'],
'method': method}]
if method == 'Manual':
peaks = [parameters['peak']]
if method in ['Manual', 'Background']:
peaks = np.array([])
return peaks
def create_peak(x, width, shape, fix=True):
return {'fix': fix,
'bin_x': x,
'width': width,
'shape': shape
}
def create_peak(peak, width, shape, fix=False):
peak['width'] = width
peak['shape'] = shape
peak['fix'] = fix
return peak
def filter_peaks(peaks):
"""
Remove non-fixed peaks, which are within the region of fixed manual peaks.
"""
# calculate total prohibited region
bins = []
for peak in peaks:
if peak['fix'] and peak['method'] == 'Manual':
bins.append(np.arange(peak['bin_x'] - peak['width'], peak['bin_x'] + peak['width']))
if len(bins) == 0:
return
bins = np.unique(np.concatenate(bins))
for peak in peaks:
if not peak['fix'] and peak['bin_x'] in bins:
peaks.remove(peak)
def x_to_bin(x, binning):
......
......@@ -52,6 +52,17 @@ class PeaksWidget(QtWidgets.QWidget):
self.peak_view = PeaksViewWidget()
self.procs_view = FitModelViewWidget()
self.x_range_min_txt = QtWidgets.QDoubleSpinBox()
self.x_range_max_txt = QtWidgets.QDoubleSpinBox()
self._range_layout = QtWidgets.QHBoxLayout()
self._range_layout.addItem(HorizontalSpacerItem())
self._range_layout.addWidget(LabelAlignRight('X-Range:'))
self._range_layout.addWidget(self.x_range_min_txt)
self._range_layout.addWidget(QtWidgets.QLabel('-'))
self._range_layout.addWidget(self.x_range_max_txt)
self._range_layout.addItem(HorizontalSpacerItem())
self.cb_layout = QtWidgets.QHBoxLayout()
self.cb_layout.addWidget(self.method_cb)
self.cb_layout.addWidget(self.calc_btn)
......@@ -59,6 +70,7 @@ class PeaksWidget(QtWidgets.QWidget):
self.cb_layout.addWidget(self.add_btn)
self.peaks_sel_gb_layout.addLayout(self.cb_layout)
self.peaks_sel_gb_layout.addLayout(self._range_layout)
add_widgets(self.peaks_sel_gb_layout, self.methods, 'Derivation')
......@@ -102,6 +114,15 @@ class PeaksWidget(QtWidgets.QWidget):
self.peak_width.setToolTip("Set fit width of peaks")
self.method_cb.setToolTip("Select peak finder")
def set_range(self, x_min, x_max):
self.x_range_min_txt.setValue(x_min)
self.x_range_max_txt.setValue(x_max)
def get_range(self):
min_x = float(self.x_range_min_txt.value())
max_x = float(self.x_range_max_txt.value())
return [min_x, max_x]
def get_method(self):
current_index = self.method_cb.currentIndex()
current_method = list(self.methods.keys())[current_index]
......@@ -123,13 +144,17 @@ class PeaksWidget(QtWidgets.QWidget):
def get_parameters(self):
method = self.get_method()
if self.methods[method]:
return self.methods[method].get_parameters()
x_range = self.get_range()
params = self.methods[method].get_parameters()
params['x_range'] = x_range
return params
else:
return None
def set_parameters(self, method, parameters):
if method != 'Manual':
self.methods[method].set_parameters(parameters)
self.set_range(*parameters['x_range'])
class FindPeakCWT(QtWidgets.QWidget):
......@@ -317,30 +342,31 @@ class PeaksViewWidget(QtWidgets.QWidget):
if len(data) == 0:
return
for i, peak in enumerate(data):
item_counter = 0
for i, peak in sorted(enumerate(data), key=lambda x: x[1]['x']):
item = pg.Qt.QtGui.QTreeWidgetItem([])
self.treeView.addTopLevelItem(item)
use_peak_cb = QtWidgets.QCheckBox()
use_peak_cb.setChecked(peak.get('fix', False))
use_peak_cb.stateChanged.connect(partial(self.process_item_changed, i))
use_peak_cb.stateChanged.connect(partial(self.process_item_changed, i, item_counter))
delete_btn = FlatButton()
delete_btn.setIcon(QtGui.QIcon(os.path.join(icons_path, 'delete.png')))
delete_btn.setIconSize(QtCore.QSize(10, 10))
delete_btn.clicked.connect(partial(self.process_item_removed, i))
delete_btn.clicked.connect(partial(self.process_item_removed, i, item_counter))
peak_pos = QtWidgets.QDoubleSpinBox()
peak_pos.setValue(peak.get('x'))
peak_pos.setDecimals(2)
peak_pos.setSingleStep(0.01)
peak_pos.valueChanged.connect(partial(self.process_item_changed, i))
peak_pos.valueChanged.connect(partial(self.process_item_changed, i, item_counter))
peak_width = QtWidgets.QDoubleSpinBox()
peak_width.setValue(peak.get('width_x'))
peak_width.setDecimals(2)
peak_width.setSingleStep(0.01)
peak_width.valueChanged.connect(partial(self.process_item_changed, i))
peak_width.valueChanged.connect(partial(self.process_item_changed, i, item_counter))
sigma = peak.get('sigma')
if sigma is None:
......@@ -356,7 +382,7 @@ class PeaksViewWidget(QtWidgets.QWidget):
else:
peak_shape.addItems([peak['shape']])
peak_shape.setCurrentIndex(0)
peak_shape.currentIndexChanged.connect(partial(self.process_item_changed, i))
peak_shape.currentIndexChanged.connect(partial(self.process_item_changed, i, item_counter))
self.treeView.setItemWidget(item, 0, use_peak_cb)
self.treeView.setItemWidget(item, 1, delete_btn)
......@@ -364,18 +390,19 @@ class PeaksViewWidget(QtWidgets.QWidget):
self.treeView.setItemWidget(item, 3, peak_width)
self.treeView.setItemWidget(item, 4, peak_sigma)
self.treeView.setItemWidget(item, 5, peak_shape)
item_counter += 1
def process_item_changed(self, i):
def process_item_changed(self, i, item_idx):
items = self.treeView.listAllItems()
use_peak = self.treeView.itemWidget(items[i], 0)
peak_pos = self.treeView.itemWidget(items[i], 2)
peak_width = self.treeView.itemWidget(items[i], 3)
peak_shape = self.treeView.itemWidget(items[i], 5)
shape = model_list[peak_shape.currentIndex()]
use_peak = self.treeView.itemWidget(items[item_idx], 0)
peak_pos = self.treeView.itemWidget(items[item_idx], 2)
peak_width = self.treeView.itemWidget(items[item_idx], 3)
peak_shape = self.treeView.itemWidget(items[item_idx], 5)
shape = peak_shape.currentText()#model_list[peak_shape.currentIndex()]
self.item_changed.emit(i, [use_peak.isChecked(), peak_pos.value(), peak_width.value(), shape])
def process_item_removed(self, i):
self.item_removed.emit(i)
def process_item_removed(self, i, item_idx):
self.item_removed.emit(item_idx)
class ModelBackground(QtWidgets.QWidget):
......@@ -387,38 +414,17 @@ class ModelBackground(QtWidgets.QWidget):
self._layout.setContentsMargins(0, 0, 0, 0)
self._layout.setSpacing(5)
self.x_range_min_txt = QtWidgets.QDoubleSpinBox()
self.x_range_max_txt = QtWidgets.QDoubleSpinBox()
self.x_range_max_txt.setValue(50)
self.function_cb = CleanLooksComboBox()
self.function_cb.addItems(bkg_model_list)
self.order = QtWidgets.QSpinBox()
self.order.setRange(1, 10)
self._layout.addWidget(LabelAlignRight('X-Range:'), 0, 0)
self._range_layout = QtWidgets.QHBoxLayout()
self._range_layout.addWidget(self.x_range_min_txt)
self._range_layout.addWidget(QtWidgets.QLabel('-'))
self._range_layout.addWidget(self.x_range_max_txt)
#self._range_layout.addWidget(self.function_cb)
self._range_layout.addItem(HorizontalSpacerItem())
self._layout.addLayout(self._range_layout, 0, 1, 1, 3)
self._layout.addWidget(self.function_cb, 1, 0, 1, 2)
self._layout.addWidget(self.order, 1, 2)
self.setLayout(self._layout)
self.x_range_min_txt.valueChanged.connect(self.emit_parameter_changed)
self.x_range_max_txt.valueChanged.connect(self.emit_parameter_changed)
def set_range(self, x_min, x_max):
self.x_range_min_txt.setValue(x_min)
self.x_range_max_txt.setValue(x_max)
def emit_parameter_changed(self):
self.parameter_changed.emit()
......@@ -429,20 +435,10 @@ class ModelBackground(QtWidgets.QWidget):
return f"{current_function}_{order}"
def get_parameters(self):
min_x = float(self.x_range_min_txt.value())
max_x = float(self.x_range_max_txt.value())
shape = self.get_fit_func()
parameters = {
'x_range': [min_x, max_x],
'shape': shape
}
return parameters
return {'shape': self.get_fit_func()}
def set_parameters(self, parameters):
self.x_range_min_txt.setValue(parameters['x_range'][0])
self.x_range_max_txt.setValue(parameters['x_range'][1])
fit_func = parameters['shape'].split('_')[0]
print(f"Set function {fit_func}")
index = bkg_model_list.index(fit_func)
self.function_cb.setCurrentIndex(index)
......@@ -459,7 +455,7 @@ class FitModelViewWidget(QtWidgets.QWidget):
self.setMaximumHeight(100)
self.proc_list = []
self.proc_pars = {}
self.proc_btn_group = QtWidgets.QButtonGroup()
self.treeView = pg.TreeWidget()
self.treeView.setHeaderLabels(['Use', 'Del', 'Process'])
self.treeView.header().setDefaultAlignment(QtCore.Qt.AlignCenter)
......@@ -473,9 +469,12 @@ class FitModelViewWidget(QtWidgets.QWidget):
self._layout.addStretch(1)
self.setLayout(self._layout)
def append_row(self, proc, use=True):
def append_row(self, proc, proc_idx, use=True, checked=True):
proc_btn = FlatButton(proc)
proc_btn = CheckableFlatButton(proc)
self.proc_btn_group.addButton(proc_btn)
proc_btn.setChecked(False)
proc_btn.setToolTip(f"{proc_idx}")
delete_btn = FlatButton()
delete_btn.setIcon(QtGui.QIcon(os.path.join(icons_path, 'delete.png')))
delete_btn.setIconSize(QtCore.QSize(10, 10))
......@@ -492,57 +491,58 @@ class FitModelViewWidget(QtWidgets.QWidget):
self.treeView.setItemWidget(item, 2, proc_btn)
item.setTextAlignment(2, QtCore.Qt.AlignCenter)
delete_btn.clicked.connect(partial(self.emit_process_changed, proc, 2))
use_proc_cb.released.connect(partial(self.emit_process_changed, proc, 0))
proc_btn.clicked.connect(partial(self.emit_select_method, proc))
delete_btn.clicked.connect(partial(self.emit_process_changed, proc_idx, True))
use_proc_cb.released.connect(partial(self.emit_process_changed, proc_idx, False))
proc_btn.clicked.connect(partial(self.emit_select_method, proc_idx))
def add_process(self, proc, parameters, add):
print("Add proc: ", proc, parameters, add)
if add:
if proc in self.proc_list:
self.enable_proc(proc, True)
else:
self.append_row(proc)
self.proc_list.append(proc)
if add or proc in self.proc_pars:
self.proc_pars[proc] = parameters
def enable_proc(self, proc, flag):
proc_idx = self.proc_list.index(proc)
proc_idx = self.edit_proc_idx()
if proc_idx>= 0:
if add:
btn = self.proc_btn_group.checkedButton()
self.proc_btn_group.setExclusive(False)
btn.setChecked(False)
self.proc_btn_group.setExclusive(True)
self.proc_list[proc_idx] = [proc, parameters, True]
self.enable_proc(proc_idx, True)
else:
if add:
self.proc_list.append([proc, parameters, True])
self.append_row(proc, len(self.proc_list)-1, checked=not add)
def edit_proc_idx(self):
btn = self.proc_btn_group.checkedButton()
tt = -1
if btn:
tt = int(btn.toolTip())
return tt
def enable_proc(self, proc_idx, flag):
items = self.treeView.listAllItems()
self.treeView.itemWidget(items[proc_idx], 0).setChecked(flag)
def emit_select_method(self, method):
self.select_method.emit(method, self.proc_pars[method])
def emit_select_method(self, proc_idx):
self.select_method.emit(self.proc_list[proc_idx][0], self.proc_list[proc_idx][1].copy())
def emit_process_changed(self, proc, dispos):
enabled_procs = self.get_enabled_proc_list()
if dispos == 2:
self.proc_list.remove(proc)
def emit_process_changed(self, proc_idx, remove_flag):
if remove_flag:
self.proc_list.pop(proc_idx)
else:
items = self.treeView.listAllItems()
self.proc_list[proc_idx][2] = self.treeView.itemWidget(items[proc_idx], 0).isChecked()
self.treeView.clear()
for proc in self.proc_list:
if proc in enabled_procs:
self.append_row(proc)
else:
self.append_row(proc, False)
self.proc_btn_group = QtWidgets.QButtonGroup()
for proc_idx, proc in enumerate(self.proc_list):
self.append_row(proc[0], proc_idx, proc[2])
self.process_changed.emit()
def get_enabled_proc_list(self):
enabled_procs = []
items = self.treeView.listAllItems()
for proc_idx, proc in enumerate(self.proc_list):
if self.treeView.itemWidget(items[proc_idx], 0).isChecked():
enabled_procs.append(proc)
return enabled_procs
def get_processes(self):
proc_list = self.get_enabled_proc_list()
procs = {key: value for key, value in self.proc_pars.items() if key in proc_list}
procs = [[proc[0], proc[1].copy()] for proc in self.proc_list]
return procs
def clean(self):
self.proc_list = []
self.proc_pars = {}
self.treeView.clear()
self.proc_btn_group = QtWidgets.QButtonGroup()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment