Changeset cb39d66 in sasview for src/sas/qtgui/Perspectives/Fitting
- Timestamp:
- Sep 25, 2018 3:50:43 PM (6 years ago)
- Branches:
- ESS_GUI, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc
- Children:
- 49699a3
- Parents:
- 34f13a83 (diff), d99b1a5 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - git-author:
- Torin Cooper-Bennun <40573959+tcbennun@…> (09/25/18 15:50:43)
- git-committer:
- GitHub <noreply@…> (09/25/18 15:50:43)
- Location:
- src/sas/qtgui/Perspectives/Fitting
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/qtgui/Perspectives/Fitting/FittingLogic.py
ra54bbf2b radf1c2a 223 223 return plots 224 224 225 def getScalarIntermediateResults(self, return_data): 226 """ 227 Returns a dict of scalar-only intermediate results from the return data. 228 """ 229 res = {} 230 for name, int_res in return_data["intermediate_results"].items(): 231 if isinstance(int_res, np.ndarray): 232 continue 233 res[name] = int_res 234 return res 235 225 236 def computeDataRange(self): 226 237 """ -
src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
r9b9ec10 rcb39d66 2297 2297 # TODO: multishell params in self.kernel_module.details[??] = value 2298 2298 2299 # handle display of effective radius parameter according to radius_effective_mode; pass ER into model if 2300 # necessary 2301 self.processEffectiveRadius() 2302 2299 2303 # Force the chart update when actual parameters changed 2300 2304 if model_column == 1: … … 2303 2307 # Update state stack 2304 2308 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) 2305 2369 2306 2370 def isCheckable(self, row): … … 2535 2599 self.communicate.plotUpdateSignal.emit([plot]) 2536 2600 2601 # Update radius_effective if relevant 2602 self.updateEffectiveRadius(return_data) 2603 2537 2604 def complete2D(self, return_data): 2538 2605 """ … … 2561 2628 for plot in new_plots: 2562 2629 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() 2563 2662 2564 2663 def calculateResiduals(self, fitted_data): -
src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py
r10fee37 r9b9ec10 63 63 self.fittingStoppedSignal.connect(self.onFittingStopped) 64 64 65 self.communicate.copyFitParamsSignal.connect(self.onParamCopy) 66 self.communicate.pasteFitParamsSignal.connect(self.onParamPaste) 67 65 68 # Perspective window not allowed to close by default 66 69 self._allow_close = False … … 94 97 95 98 self._allow_close = value 99 100 def onParamCopy(self): 101 self.currentTab.onParameterCopy("") 102 103 def onParamPaste(self): 104 self.currentTab.onParameterPaste() 96 105 97 106 def closeEvent(self, event): … … 298 307 page_name = "Page%s"%tab_object.tab_id 299 308 if any([page_name in tab for tab in tabs_for_fitting]): 300 tab_object. setFittingStarted()309 tab_object.disableInteractiveElements() 301 310 302 311 pass … … 315 324 page_name = "Page%s"%tab_object.tab_id 316 325 if any([page_name in tab for tab in tabs_for_fitting]): 317 tab_object. setFittingStopped()326 tab_object.enableInteractiveElements() 318 327 319 328 pass -
src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py
r30bed93 r65759c7 484 484 endl = i 485 485 break 486 # make sure we have correct lengths487 assert len(x_current) == len(x_reference[begin:end-endl])488 486 489 487 y = (fn - gn[begin:end-endl])/en … … 549 547 "Data2D": residualsData2D} 550 548 551 residuals = residuals_dict[method_name](reference_data, data_copy) 549 try: 550 residuals = residuals_dict[method_name](reference_data, data_copy) 551 except ValueError: 552 return None 552 553 553 554 theory_name = str(current_data.name.split()[0]) -
src/sas/qtgui/Perspectives/Fitting/SmearingWidget.py
r9a7c81c r8b6e4be 61 61 self.data = None 62 62 self.current_smearer = None 63 self.kernel_model = None 63 64 64 65 # Let only floats in the line edits … … 110 111 if data is None: 111 112 self.setElementsVisibility(False) 112 elif isinstance(data, Data1D): 113 114 def updateKernelModel(self, kernel_model=None): 115 """ 116 Update the model 117 """ 118 self.kernel_model = kernel_model 119 if self.data is None: 120 self.setElementsVisibility(False) 121 return 122 if self.kernel_model is None: 123 return 124 elif isinstance(self.data, Data1D): 113 125 self.cbSmearing.addItems(SMEARING_1D) 114 126 else: 115 127 self.cbSmearing.addItems(SMEARING_2D) 116 128 self.cbSmearing.setCurrentIndex(0) 117 118 def updateKernelModel(self, kernel_model=None):119 """120 Update the model121 """122 self.kernel_model = kernel_model123 129 124 130 def smearer(self): -
src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py
r8faac15 r712db9e 393 393 394 394 # Test tooltips 395 self.assertEqual(len(self.widget._poly_model.header_tooltips), 9)395 self.assertEqual(len(self.widget._poly_model.header_tooltips), 8) 396 396 397 397 header_tooltips = ['Select parameter for fitting', … … 702 702 # Force same data into logic 703 703 self.widget.data = item 704 704 705 category_index = self.widget.cbCategory.findText("Sphere") 705 706 self.widget.cbCategory.setCurrentIndex(category_index) 706 707 self.widget.show()708 707 709 708 # Test no fitting params
Note: See TracChangeset
for help on using the changeset viewer.