Ignore:
File:
1 edited

Legend:

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

    r085409e3 r6d87082  
    321321        self.magneticAnglesWidget = QtWidgets.QWidget() 
    322322        labl = QtWidgets.QLabel(self.magneticAnglesWidget) 
    323         pixmap = QtGui.QPixmap(GuiUtils.IMAGES_DIRECTORY_LOCATION + '/M_angles_pic.bmp') 
     323        pixmap = QtGui.QPixmap(GuiUtils.IMAGES_DIRECTORY_LOCATION + '/M_angles_pic.png') 
    324324        labl.setPixmap(pixmap) 
    325325        self.magneticAnglesWidget.setFixedSize(pixmap.width(), pixmap.height()) 
     
    15361536 
    15371537        elapsed = result[1] 
    1538         if self.calc_fit._interrupting: 
     1538        if self.calc_fit is not None and self.calc_fit._interrupting: 
    15391539            msg = "Fitting cancelled by user after: %s s." % GuiUtils.formatNumber(elapsed) 
    15401540            logger.warning("\n"+msg+"\n") 
     
    22972297        # TODO: multishell params in self.kernel_module.details[??] = value 
    22982298 
     2299        # handle display of effective radius parameter according to radius_effective_mode; pass ER into model if 
     2300        # necessary 
     2301        self.processEffectiveRadius() 
     2302 
    22992303        # Force the chart update when actual parameters changed 
    23002304        if model_column == 1: 
     
    23032307        # Update state stack 
    23042308        self.updateUndo() 
     2309 
     2310    def processEffectiveRadius(self): 
     2311        """ 
     2312        Checks the value of radius_effective_mode, if existent, and processes radius_effective as necessary. 
     2313        * mode == 0: This means 'unconstrained'; ensure use can specify ER. 
     2314        * mode > 0: This means it is constrained to a P(Q)-computed value in sasmodels; prevent user from editing ER. 
     2315 
     2316        Note: If ER has been computed, it is passed back to SasView as an intermediate result. That value must be 
     2317        displayed for the user; that is not dealt with here, but in complete1D. 
     2318        """ 
     2319        ER_row = self.getRowFromName("radius_effective") 
     2320        if ER_row is None: 
     2321            return 
     2322 
     2323        ER_mode_row = self.getRowFromName("radius_effective_mode") 
     2324        if ER_mode_row is None: 
     2325            return 
     2326 
     2327        try: 
     2328            ER_mode = int(self._model_model.item(ER_mode_row, 1).text()) 
     2329        except ValueError: 
     2330            logging.error("radius_effective_mode was set to an invalid value.") 
     2331            return 
     2332 
     2333        if ER_mode == 0: 
     2334            # ensure the ER value can be modified by user 
     2335            self.setParamEditableByRow(ER_row, True) 
     2336        elif ER_mode > 0: 
     2337            # ensure the ER value cannot be modified by user 
     2338            self.setParamEditableByRow(ER_row, False) 
     2339        else: 
     2340            logging.error("radius_effective_mode was set to an invalid value.") 
     2341 
     2342    def setParamEditableByRow(self, row, editable=True): 
     2343        """ 
     2344        Sets whether the user can edit a parameter in the table. If they cannot, the parameter name's font is changed, 
     2345        the value itself cannot be edited if clicked on, and the parameter may not be fitted. 
     2346        """ 
     2347        item_name = self._model_model.item(row, 0) 
     2348        item_value = self._model_model.item(row, 1) 
     2349 
     2350        item_value.setEditable(editable) 
     2351 
     2352        if editable: 
     2353            # reset font 
     2354            item_name.setFont(QtGui.QFont()) 
     2355            # reset colour 
     2356            item_name.setForeground(QtGui.QBrush()) 
     2357            # make checkable 
     2358            item_name.setCheckable(True) 
     2359        else: 
     2360            # change font 
     2361            font = QtGui.QFont() 
     2362            font.setItalic(True) 
     2363            item_name.setFont(font) 
     2364            # change colour 
     2365            item_name.setForeground(QtGui.QBrush(QtGui.QColor(50, 50, 50))) 
     2366            # make not checkable (and uncheck) 
     2367            item_name.setCheckState(QtCore.Qt.Unchecked) 
     2368            item_name.setCheckable(False) 
    23052369 
    23062370    def isCheckable(self, row): 
     
    24122476                model.setParam(key, value) 
    24132477        # add magnetic params if asked 
    2414         if self.chkMagnetism.isChecked(): 
    2415             for key, value in self.magnet_params.items() and self._magnet_model.rowCount() > 0: 
     2478        if self.chkMagnetism.isChecked() and self._magnet_model.rowCount() > 0: 
     2479            for key, value in self.magnet_params.items(): 
    24162480                model.setParam(key, value) 
    24172481 
     
    24912555        self.enableInteractiveElements() 
    24922556        if return_data is None: 
    2493             self.calculateDataFailed("Results not available.") 
    24942557            return 
    24952558        fitted_data = self.logic.new1DPlot(return_data, self.tab_id) 
     
    25362599            self.communicate.plotUpdateSignal.emit([plot]) 
    25372600 
     2601        # Update radius_effective if relevant 
     2602        self.updateEffectiveRadius(return_data) 
     2603 
    25382604    def complete2D(self, return_data): 
    25392605        """ 
     
    25432609        self.enableInteractiveElements() 
    25442610 
     2611        if return_data is None: 
     2612            return 
     2613 
    25452614        fitted_data = self.logic.new2DPlot(return_data) 
     2615        # assure the current index is set properly for batch 
     2616        if len(self._logic) > 1: 
     2617            for i, logic in enumerate(self._logic): 
     2618                if logic.data.name in fitted_data.name: 
     2619                    self.data_index = i 
     2620 
    25462621        residuals = self.calculateResiduals(fitted_data) 
    25472622        self.model_data = fitted_data 
     
    25532628        for plot in new_plots: 
    25542629            self.communicate.plotUpdateSignal.emit([plot]) 
     2630 
     2631    def updateEffectiveRadius(self, return_data): 
     2632        """ 
     2633        Given return data from sasmodels, update the effective radius parameter in the GUI table with the new 
     2634        calculated value as returned by sasmodels (if the value was returned). 
     2635        """ 
     2636        ER_mode_row = self.getRowFromName("radius_effective_mode") 
     2637        if ER_mode_row is None: 
     2638            return 
     2639        try: 
     2640            ER_mode = int(self._model_model.item(ER_mode_row, 1).text()) 
     2641        except ValueError: 
     2642            logging.error("radius_effective_mode was set to an invalid value.") 
     2643            return 
     2644        if ER_mode < 1: 
     2645            # does not need updating if it is not being computed 
     2646            return 
     2647 
     2648        ER_row = self.getRowFromName("radius_effective") 
     2649        if ER_row is None: 
     2650            return 
     2651 
     2652        scalar_results = self.logic.getScalarIntermediateResults(return_data) 
     2653        ER_value = scalar_results.get("effective_radius") # note name of key 
     2654        if ER_value is None: 
     2655            return 
     2656        # ensure the model does not recompute when updating the value 
     2657        self._model_model.blockSignals(True) 
     2658        self._model_model.item(ER_row, 1).setText(str(ER_value)) 
     2659        self._model_model.blockSignals(False) 
     2660        # ensure the view is updated immediately 
     2661        self._model_model.layoutChanged.emit() 
    25552662 
    25562663    def calculateResiduals(self, fitted_data): 
Note: See TracChangeset for help on using the changeset viewer.