Ignore:
Timestamp:
Oct 27, 2017 11:20:08 AM (7 years ago)
Author:
krzywon
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:
e7651ff
Parents:
dab3351
Message:

P(r) calculator returning reasonable answers. Plotting and unit tests left.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/Perspectives/PrInversion/PrInversionPerspective.py

    rdab3351 rd1a4793  
    11import sys 
    22import logging 
     3import pylab 
    34import numpy as np 
    45 
     
    1415 
    1516# pr inversion calculation elements 
     17from sas.sascalc.dataloader.data_info import Data1D 
    1618from sas.sascalc.pr.invertor import Invertor 
    1719 
     20def is_float(value): 
     21    try: 
     22        return float(value) 
     23    except ValueError: 
     24        return 0.0 
    1825 
    1926class PrInversionWindow(QtGui.QTabWidget, Ui_PrInversion): 
     
    4148        # is there data 
    4249        self._has_data = False 
     50        self._data = Data1D() 
     51 
     52        # p(r) calculator 
     53        self._calculator = Invertor() 
     54        self._last_calculator = None 
     55        self.calc_thread = None 
     56        self.estimation_thread = None 
    4357 
    4458        # Current data object in view 
     
    4963            data = [data] 
    5064        for datum in data: 
    51             self._data_list.append({datum : None}) 
    52  
    53         # p(r) calculator 
    54         self._calculator = Invertor() 
    55         self._last_calculator = None 
    56         self.calc_thread = None 
    57         self.estimation_thread = None 
     65            self._data_list.append({datum: self._calculator.clone()}) 
    5866 
    5967        self.model = QtGui.QStandardItemModel(self) 
     
    234242    # GUI Interaction Events 
    235243 
     244    def update_calculator(self): 
     245        """Update all p(r) params. Take all GUI values as an override""" 
     246        self._calculator.set_x(self._data.x) 
     247        self._calculator.set_y(self._data.y) 
     248        self._calculator.set_err(self._data.dy) 
     249        self._calculator.set_qmin(is_float(UI.TabbedPrInversionUI._fromUtf8( 
     250            self.minQInput.text()))) 
     251        self._calculator.set_qmax(is_float(UI.TabbedPrInversionUI._fromUtf8( 
     252            self.maxQInput.text()))) 
     253        self._calculator.set_alpha(is_float(UI.TabbedPrInversionUI._fromUtf8( 
     254            self.regularizationConstantInput.text()))) 
     255        self._calculator.set_dmax(is_float(UI.TabbedPrInversionUI._fromUtf8( 
     256            self.maxDistanceInput.text()))) 
     257        self._calculator.set_est_bck(int(is_float( 
     258            UI.TabbedPrInversionUI._fromUtf8(self.backgroundInput.text())))) 
     259        self._calculator.set_slit_height(is_float( 
     260            UI.TabbedPrInversionUI._fromUtf8(self.slitHeightInput.text()))) 
     261        self._calculator.set_slit_width(is_float( 
     262            UI.TabbedPrInversionUI._fromUtf8(self.slitWidthInput.text()))) 
     263 
    236264    def _calculation(self): 
    237265        """ 
    238266        Calculate the P(r) for every data set in the data list 
    239267        """ 
    240         # TODO: Set all invertor values before calculation 
    241         self._calculator.__setattr__("qmin", UI.TabbedPrInversionUI._fromUtf8( 
    242             self.minQInput.text())) 
     268        # Pull in any GUI changes before running the calculations 
     269        self.update_calculator() 
     270        # Run 
    243271        self.startThread() 
    244272 
     
    314342            self._data_list.append({data_object: None}) 
    315343            self._has_data = True 
     344            self._data = data_object 
    316345            self.enableButtons() 
    317346            self.populateDataComboBox(data_object.filename) 
    318             self.model.setItem(WIDGETS.W_QMIN, 
    319                                QtGui.QStandardItem(str(data_object.x.min()))) 
    320             self.model.setItem(WIDGETS.W_QMAX, 
    321                                QtGui.QStandardItem(str(data_object.x.max()))) 
     347            self.model.setItem(WIDGETS.W_QMIN, QtGui.QStandardItem( 
     348                "{:.4g}".format(data_object.x.min()))) 
     349            self.model.setItem(WIDGETS.W_QMAX, QtGui.QStandardItem( 
     350                "{:.4g}".format(data_object.x.max()))) 
    322351 
    323352            # Estimate initial values from data 
     353            self.update_calculator() 
    324354            self.performEstimate() 
    325355 
    326356            # TODO: Plot data on load 
    327357 
    328             # TODO: Only load in the 1st data until batch mode is working 
    329             # TODO: Thus, the break 
     358            # TODO: Only load the 1st data until batch mode is working 
     359            # TODO: thus, the break 
    330360            break 
    331361 
     
    411441        self.regConstantSuggestionButton.setText(QtCore.QString(str(alpha))) 
    412442        self.regConstantSuggestionButton.setEnabled(True) 
    413         if message is not None: 
     443        if message: 
    414444            logging.info(message) 
    415445        self.performEstimateNT() 
     
    426456        """ 
    427457        # Save useful info 
    428         self.noOfTermsSuggestionButton.setText(QtCore.QString(str(nterms))) 
     458        self.noOfTermsSuggestionButton.setText(QtCore.QString( 
     459            "{:n}".format(nterms))) 
    429460        self.noOfTermsSuggestionButton.setEnabled(True) 
    430         self.regConstantSuggestionButton.setText(QtCore.QString(str(alpha))) 
     461        self.regConstantSuggestionButton.setText(QtCore.QString( 
     462            "{:.3g}".format(alpha))) 
    431463        self.regConstantSuggestionButton.setEnabled(True) 
    432464        self.model.setItem(WIDGETS.W_COMP_TIME, 
    433465                           QtGui.QStandardItem(str(elapsed))) 
    434         if message is not None: 
     466        if message: 
    435467            logging.info(message) 
    436468            pass 
     
    459491        # Show result on control panel 
    460492 
     493        # TODO: Connect self._calculator to GUI 
    461494        self.model.setItem(WIDGETS.W_RG, QtGui.QStandardItem(str(pr.rg(out)))) 
    462495        self.model.setItem(WIDGETS.W_I_ZERO, 
    463496                           QtGui.QStandardItem(str(pr.iq0(out)))) 
    464497        self.model.setItem(WIDGETS.W_BACKGROUND_INPUT, 
    465                            QtGui.QStandardItem("{:.2g}".format(pr.background))) 
     498                           QtGui.QStandardItem("{:.3f}".format(pr.background))) 
    466499        self.model.setItem(WIDGETS.W_BACKGROUND_OUTPUT, 
    467500                           QtGui.QStandardItem(str(pr.background))) 
    468501        self.model.setItem(WIDGETS.W_CHI_SQUARED, 
    469                            QtGui.QStandardItem(str(pr.chi2))) 
     502                           QtGui.QStandardItem(str(pr.chi2[0]))) 
    470503        self.model.setItem(WIDGETS.W_COMP_TIME, 
    471504                           QtGui.QStandardItem(str(elapsed))) 
     
    476509        self.model.setItem(WIDGETS.W_SIGMA_POS_FRACTION, 
    477510                           QtGui.QStandardItem(str(pr.get_pos_err(out, cov)))) 
     511 
     512        # Display results tab 
     513        self.PrTabWidget.setCurrentIndex(1) 
    478514 
    479515        # TODO: Show plots 
Note: See TracChangeset for help on using the changeset viewer.