Changeset b00414d in sasview for src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
- Timestamp:
- Jul 25, 2017 7:36:45 AM (7 years ago)
- Branches:
- ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc
- Children:
- 0d13814
- Parents:
- 2a8bd705
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
r6ff2eb3 rb00414d 36 36 from sas.qtgui.Perspectives.Fitting.ViewDelegate import ModelViewDelegate 37 37 from sas.qtgui.Perspectives.Fitting.ViewDelegate import PolyViewDelegate 38 from sas.qtgui.Perspectives.Fitting.ViewDelegate import MagnetismViewDelegate 38 39 39 40 TAB_MAGNETISM = 4 … … 166 167 # Which shell is being currently displayed? 167 168 self.current_shell_displayed = 0 169 170 # Error column presence in parameter display 168 171 self.has_error_column = False 169 172 self.has_poly_error_column = False 173 self.has_magnet_error_column = False 170 174 171 175 # signal communicator … … 259 263 self.setMagneticModel() 260 264 self.setTableProperties(self.lstMagnetic) 265 # Delegates for custom editing and display 266 self.lstMagnetic.setItemDelegate(MagnetismViewDelegate(self)) 261 267 262 268 def initializeCategoryCombo(self): … … 369 375 370 376 # Respond to change in parameters from the UI 371 self._model_model.itemChanged.connect(self. updateParamsFromModel)377 self._model_model.itemChanged.connect(self.onMainParamsChange) 372 378 self._poly_model.itemChanged.connect(self.onPolyModelChange) 373 374 # TODO after the poly_model prototype accepted 375 #self._magnet_model.itemChanged.connect(self.onMagneticModelChange) 379 self._magnet_model.itemChanged.connect(self.onMagnetModelChange) 376 380 377 381 # Signals from separate tabs asking for replot … … 501 505 if parameter_name in self.parameters_to_fit: 502 506 self.parameters_to_fit.remove(parameter_name) 507 self.cmdFit.setEnabled(self.parameters_to_fit != [] and self.logic.data_is_loaded) 503 508 return 504 509 elif model_column in [self.lstPoly.itemDelegate().poly_min, self.lstPoly.itemDelegate().poly_max]: … … 525 530 self.kernel_module.setParam(parameter_name + '.' + \ 526 531 self.lstPoly.itemDelegate().columnDict()[model_column], value) 532 533 def onMagnetModelChange(self, item): 534 """ 535 Callback method for updating the sasmodel magnetic parameters with the GUI values 536 """ 537 model_column = item.column() 538 model_row = item.row() 539 name_index = self._magnet_model.index(model_row, 0) 540 parameter_name = str(self._magnet_model.data(name_index).toPyObject()) 541 542 if model_column == 0: 543 value = item.checkState() 544 if value == QtCore.Qt.Checked: 545 self.parameters_to_fit.append(parameter_name) 546 else: 547 if parameter_name in self.parameters_to_fit: 548 self.parameters_to_fit.remove(parameter_name) 549 self.cmdFit.setEnabled(self.parameters_to_fit != [] and self.logic.data_is_loaded) 550 # Update state stack 551 self.updateUndo() 552 return 553 554 # Extract changed value. 555 try: 556 value = float(item.text()) 557 except ValueError: 558 # Unparsable field 559 return 560 561 property_index = self._magnet_model.headerData(1, model_column).toInt()[0]-1 # Value, min, max, etc. 562 563 # Update the parameter value - note: this supports +/-inf as well 564 self.kernel_module.params[parameter_name] = value 565 566 # min/max to be changed in self.kernel_module.details[parameter_name] = ['Ang', 0.0, inf] 567 self.kernel_module.details[parameter_name][property_index] = value 568 569 # Force the chart update when actual parameters changed 570 if model_column == 1: 571 self.recalculatePlotData() 572 573 # Update state stack 574 self.updateUndo() 527 575 528 576 def onHelp(self): … … 667 715 self.updatePolyModelFromList(param_dict) 668 716 717 self.updateMagnetModelFromList(param_dict) 718 669 719 # update charts 670 720 self.onPlot() … … 758 808 if not dict: 759 809 return 810 811 def iterateOverPolyModel(func): 812 """ 813 Take func and throw it inside the poly model row loop 814 """ 815 for row_i in xrange(self._poly_model.rowCount()): 816 func(row_i) 760 817 761 818 def updateFittedValues(row_i): … … 795 852 # updating charts with every single model change on the end of fitting 796 853 self._poly_model.blockSignals(True) 797 self.iterateOverModel(updateFittedValues)854 iterateOverPolyModel(updateFittedValues) 798 855 self._poly_model.blockSignals(False) 799 856 … … 803 860 self.lstPoly.itemDelegate().addErrorColumn() 804 861 error_column = [] 805 self.iterateOverModel(createErrorColumn)862 iterateOverPolyModel(createErrorColumn) 806 863 807 864 # switch off reponse to model change … … 812 869 813 870 self.has_poly_error_column = True 871 872 def updateMagnetModelFromList(self, param_dict): 873 """ 874 Update the magnetic model with new parameters, create the errors column 875 """ 876 assert isinstance(param_dict, dict) 877 if not dict: 878 return 879 880 def iterateOverMagnetModel(func): 881 """ 882 Take func and throw it inside the magnet model row loop 883 """ 884 for row_i in xrange(self._model_model.rowCount()): 885 func(row_i) 886 887 def updateFittedValues(row): 888 # Utility function for main model update 889 # internal so can use closure for param_dict 890 param_name = str(self._magnet_model.item(row, 0).text()) 891 if param_name not in param_dict.keys(): 892 return 893 # modify the param value 894 param_repr = GuiUtils.formatNumber(param_dict[param_name][0], high=True) 895 self._magnet_model.item(row, 1).setText(param_repr) 896 if self.has_magnet_error_column: 897 error_repr = GuiUtils.formatNumber(param_dict[param_name][1], high=True) 898 self._magnet_model.item(row, 2).setText(error_repr) 899 900 def createErrorColumn(row): 901 # Utility function for error column update 902 item = QtGui.QStandardItem() 903 def createItem(param_name): 904 error_repr = GuiUtils.formatNumber(param_dict[param_name][1], high=True) 905 item.setText(error_repr) 906 def curr_param(): 907 return str(self._magnet_model.item(row, 0).text()) 908 909 [createItem(param_name) for param_name in param_dict.keys() if curr_param() == param_name] 910 911 error_column.append(item) 912 913 # block signals temporarily, so we don't end up 914 # updating charts with every single model change on the end of fitting 915 self._magnet_model.blockSignals(True) 916 iterateOverMagnetModel(updateFittedValues) 917 self._magnet_model.blockSignals(False) 918 919 if self.has_magnet_error_column: 920 return 921 922 self.lstMagnetic.itemDelegate().addErrorColumn() 923 error_column = [] 924 iterateOverMagnetModel(createErrorColumn) 925 926 # switch off reponse to model change 927 self._magnet_model.blockSignals(True) 928 self._magnet_model.insertColumn(2, error_column) 929 self._magnet_model.blockSignals(False) 930 FittingUtilities.addErrorHeadersToModel(self._magnet_model) 931 932 self.has_magnet_error_column = True 814 933 815 934 def onPlot(self): … … 1039 1158 self._last_model_row = self._model_model.rowCount() 1040 1159 1041 def updateParamsFromModel(self, item):1160 def onMainParamsChange(self, item): 1042 1161 """ 1043 1162 Callback method for updating the sasmodel parameters with the GUI values … … 1055 1174 name_index = self._model_model.index(model_row, 0) 1056 1175 1057 # Extract changed value. Assumes proper validation by QValidator/Delegate1176 # Extract changed value. 1058 1177 try: 1059 1178 value = float(item.text()) … … 1101 1220 main_params = self.checkedListFromModel(self._model_model) 1102 1221 poly_params = self.checkedListFromModel(self._poly_model) 1222 magnet_params = self.checkedListFromModel(self._magnet_model) 1223 1103 1224 # Retrieve poly params names 1104 1225 poly_params = [param.rsplit()[-1] + '.width' for param in poly_params] 1105 # TODO : add magnetic params 1106 1107 self.parameters_to_fit = main_params + poly_params 1226 1227 self.parameters_to_fit = main_params + poly_params + magnet_params 1108 1228 1109 1229 def checkedListFromModel(self, model):
Note: See TracChangeset
for help on using the changeset viewer.