Changeset 919d47c in sasview for src/sas/qtgui/Perspectives


Ignore:
Timestamp:
Jun 8, 2017 7:11:37 AM (7 years ago)
Author:
Piotr Rozyczko <rozyczko@…>
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:
8eaa101
Parents:
70080a0
Message:

Fixed main model update on polydisp. parameter change, code cleanup, minor refactoring

Location:
src/sas/qtgui/Perspectives/Fitting
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/Perspectives/Fitting/FittingWidget.py

    r70080a0 r919d47c  
    4444 
    4545DEFAULT_POLYDISP_FUNCTION = 'gaussian' 
    46  
    47 # Mapping between column index and relevant parameter name extension 
    48 POLY_COL_NAME = 0 
    49 POLY_COL_WIDTH = 1 
    50 POLY_COL_MIN = 2 
    51 POLY_COL_MAX = 3 
    52 POLY_COL_NPTS = 4 
    53 POLY_COL_NSIGMAS = 5 
    54 POLY_COL_FUNCTION = 6 
    55 POLY_COLUMN_DICT = { 
    56     POLY_COL_WIDTH:   'width', 
    57     POLY_COL_MIN:     'min', 
    58     POLY_COL_MAX:     'max', 
    59     POLY_COL_NPTS:    'npts', 
    60     POLY_COL_NSIGMAS: 'nsigmas'} 
    6146 
    6247class FittingWidget(QtGui.QWidget, Ui_FittingWidgetUI): 
     
    499484 
    500485        # Extract changed value. 
    501         if model_column == POLY_COL_NAME: 
     486        if model_column == self.lstPoly.itemDelegate().POLY_PARAMETER: 
    502487            # Is the parameter checked for fitting? 
    503488            value = item.checkState() 
     
    509494                    self.parameters_to_fit.remove(parameter_name) 
    510495            return 
    511         elif model_column in [POLY_COL_MIN, POLY_COL_MAX]: 
     496        elif model_column in [self.lstPoly.itemDelegate().POLY_MIN, self.lstPoly.itemDelegate().POLY_MAX]: 
    512497            try: 
    513498                value = float(item.text()) 
     
    520505            current_details = self.kernel_module.details[parameter_name] 
    521506            current_details[model_column-1] = value 
     507        elif model_column == self.lstPoly.itemDelegate().POLY_FUNCTION: 
     508            # name of the function - just pass 
     509            return 
    522510        else: 
    523511            try: 
     
    526514                # Can't be converted properly, bring back the old value and exit 
    527515                return 
    528  
    529516            property_name = str(self._poly_model.headerData(model_column, 1).toPyObject()).lower() # Value, min, max, etc. 
    530             # print "%s(%s) => %d" % (parameter_name, property_name, value) 
    531517 
    532518            # Update the sasmodel 
    533519            # PD[ratio] -> width, npts -> npts, nsigs -> nsigmas 
    534             self.kernel_module.setParam(parameter_name + '.' + POLY_COLUMN_DICT[model_column], value) 
    535  
    536         # Reload the main model - may not be required if no variable is shown in main view 
    537         #model = str(self.cbModel.currentText()) 
    538         #self.SASModelToQModel(model) 
    539  
    540         pass # debug anchor 
     520            self.kernel_module.setParam(parameter_name + '.' + \ 
     521                                        self.lstPoly.itemDelegate().POLY_COLUMN_DICT[model_column], value) 
    541522 
    542523    def onHelp(self): 
     
    697678            return 
    698679 
    699         def updateFittedValues(row_i): 
     680        def updateFittedValues(row): 
    700681            # Utility function for main model update 
    701682            # internal so can use closure for param_dict 
    702             param_name = str(self._model_model.item(row_i, 0).text()) 
     683            param_name = str(self._model_model.item(row, 0).text()) 
    703684            if param_name not in param_dict.keys(): 
    704685                return 
    705686            # modify the param value 
    706687            param_repr = GuiUtils.formatNumber(param_dict[param_name][0], high=True) 
    707             self._model_model.item(row_i, 1).setText(param_repr) 
     688            self._model_model.item(row, 1).setText(param_repr) 
    708689            if self.has_error_column: 
    709690                error_repr = GuiUtils.formatNumber(param_dict[param_name][1], high=True) 
    710                 self._model_model.item(row_i, 2).setText(error_repr) 
    711  
    712         def createErrorColumn(row_i): 
     691                self._model_model.item(row, 2).setText(error_repr) 
     692 
     693        def updatePolyValues(row): 
     694            # Utility function for updateof polydispersity part of the main model 
     695            param_name = str(self._model_model.item(row, 0).text())+'.width' 
     696            if param_name not in param_dict.keys(): 
     697                return 
     698            # modify the param value 
     699            param_repr = GuiUtils.formatNumber(param_dict[param_name][0], high=True) 
     700            self._model_model.item(row, 0).child(0).child(0,1).setText(param_repr) 
     701 
     702        def createErrorColumn(row): 
    713703            # Utility function for error column update 
    714704            item = QtGui.QStandardItem() 
    715             for param_name in param_dict.keys(): 
    716                 if str(self._model_model.item(row_i, 0).text()) != param_name: 
    717                     continue 
     705            def createItem(param_name): 
    718706                error_repr = GuiUtils.formatNumber(param_dict[param_name][1], high=True) 
    719707                item.setText(error_repr) 
     708            def curr_param(): 
     709                return str(self._model_model.item(row, 0).text()) 
     710 
     711            [createItem(param_name) for param_name in param_dict.keys() if curr_param() == param_name] 
     712 
    720713            error_column.append(item) 
    721714 
     
    724717        self._model_model.blockSignals(True) 
    725718        self.iterateOverModel(updateFittedValues) 
     719        self.iterateOverModel(updatePolyValues) 
    726720        self._model_model.blockSignals(False) 
    727721 
     
    769763                self._poly_model.item(row_i, 2).setText(error_repr) 
    770764 
     765 
    771766        def createErrorColumn(row_i): 
    772767            # Utility function for error column update 
     
    774769                return 
    775770            item = QtGui.QStandardItem() 
    776             for param_name in param_dict.keys(): 
    777                 if str(self._poly_model.item(row_i, 0).text()).rsplit()[-1] + '.width' != param_name: 
    778                     continue 
     771 
     772            def createItem(param_name): 
    779773                error_repr = GuiUtils.formatNumber(param_dict[param_name][1], high=True) 
    780774                item.setText(error_repr) 
     775 
     776            def poly_param(): 
     777                return str(self._poly_model.item(row_i, 0).text()).rsplit()[-1] + '.width' 
     778 
     779            [createItem(param_name) for param_name in param_dict.keys() if poly_param() == param_name] 
     780 
    781781            error_column.append(item) 
    782782 
     
    786786        self.iterateOverModel(updateFittedValues) 
    787787        self._poly_model.blockSignals(False) 
    788  
    789         #return 
    790788 
    791789        if self.has_poly_error_column: 
     
    798796        self.lstPoly.itemDelegate().POLY_NSIGS = 6 
    799797        self.lstPoly.itemDelegate().POLY_FUNCTION = 7 
     798        self.lstPoly.itemDelegate().POLY_COLUMN_DICT = { 
     799            2: 'width', 
     800            3: 'min', 
     801            4: 'max', 
     802            5: 'npts', 
     803            6: 'nsigmas'} 
    800804 
    801805        error_column = [] 
     
    13321336        param = self.model_parameters.form_volume_parameters[row_index] 
    13331337 
     1338        def updateFunctionCaption(row): 
     1339            # Utility function for update of polydispersity function name in the main model 
     1340            param_name = str(self._model_model.item(row, 0).text())# +'.width' 
     1341            if param_name !=  param.name: 
     1342                return 
     1343            # modify the param value 
     1344            self._model_model.item(row, 0).child(0).child(0,4).setText(combo_string) 
     1345 
    13341346        if combo_string == 'array': 
    13351347            try: 
    13361348                self.loadPolydispArray() 
     1349                # Update main model for display 
     1350                self.iterateOverModel(updateFunctionCaption) 
    13371351            except (ValueError, IOError): 
    13381352                # Don't do anything if file lookup failed 
     
    13431357 
    13441358        # Enable the row in case it was disabled by Array 
    1345         #[self._poly_model.item(row_index, i).setEnabled(True) for i in xrange(6)] 
    1346  
    1347         npts_index = self._poly_model.index(row_index, POLY_COL_NPTS) 
    1348         nsigs_index = self._poly_model.index(row_index, POLY_COL_NSIGMAS) 
     1359        self._poly_model.blockSignals(True) 
     1360        [self._poly_model.item(row_index, i).setEnabled(True) for i in xrange(6)] 
     1361        self._poly_model.blockSignals(False) 
     1362 
     1363        npts_index = self._poly_model.index(row_index, self.lstPoly.itemDelegate().POLY_NPTS) 
     1364        nsigs_index = self._poly_model.index(row_index, self.lstPoly.itemDelegate().POLY_NSIGS) 
    13491365 
    13501366        npts = POLYDISPERSITY_MODELS[str(combo_string)].default['npts'] 
     
    13531369        self._poly_model.setData(npts_index, QtCore.QVariant(npts)) 
    13541370        self._poly_model.setData(nsigs_index, QtCore.QVariant(nsigs)) 
     1371 
     1372        self.iterateOverModel(updateFunctionCaption) 
    13551373 
    13561374    def loadPolydispArray(self): 
     
    13651383        values = [] 
    13661384        weights = [] 
     1385        def appendData(data_tuple): 
     1386            """ 
     1387            Fish out floats from a tuple of strings 
     1388            """ 
     1389            try: 
     1390                values.append(float(data_tuple[0])) 
     1391                weights.append(float(data_tuple[1])) 
     1392            except (ValueError, IndexError): 
     1393                # just pass through if line with bad data 
     1394                return 
     1395 
    13671396        with open(datafile, 'r') as column_file: 
    13681397            column_data = [line.rstrip().split() for line in column_file.readlines()] 
    1369             for line in column_data: 
    1370                 try: 
    1371                     values.append(float(line[0])) 
    1372                     weights.append(float(line[1])) 
    1373                 except (ValueError, IndexError): 
    1374                     # just pass through if line with bad data 
    1375                     pass 
     1398            [appendData(line) for line in column_data] 
    13761399 
    13771400        self.disp_model = POLYDISPERSITY_MODELS['array']() 
  • src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py

    r06b0138 r919d47c  
    9393    POLY_FUNCTION=6 
    9494    POLY_EDITABLE_PARAMS = [POLY_MIN, POLY_MAX, POLY_NPTS, POLY_NSIGS] 
     95    POLY_COLUMN_DICT = { 
     96        POLY_PD:    'width', 
     97        POLY_MIN:   'min', 
     98        POLY_MAX:   'max', 
     99        POLY_NPTS:  'npts', 
     100        POLY_NSIGS: 'nsigmas'} 
    95101 
    96102    combo_updated = QtCore.pyqtSignal(str, int) 
Note: See TracChangeset for help on using the changeset viewer.