Changeset 6da860a in sasview for src/sas/qtgui/Perspectives


Ignore:
Timestamp:
May 1, 2018 11:51:06 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:
72ecbdf2
Parents:
6bd0d81
Message:

Responding to P(r) code review.

Location:
src/sas/qtgui/Perspectives/Inversion
Files:
2 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/Perspectives/Inversion/DMaxExplorerWidget.py

    rae34d30 r6da860a  
    88 
    99# global 
    10 import sys 
    11 import os 
    1210import logging 
    1311import numpy as np 
     
    5149 
    5250        self.plot = PlotterWidget(self, self) 
    53         self.hasPlot = None 
     51        self.hasPlot = False 
    5452        self.verticalLayout.insertWidget(0, self.plot) 
    5553 
    5654        # Let's choose the Standard Item Model. 
    5755        self.model = QtGui.QStandardItemModel(self) 
    58         self.mapper = None 
     56        self.mapper = QtWidgets.QDataWidgetMapper(self) 
    5957 
    6058        # Add validators on line edits 
    6159        self.setupValidators() 
    6260 
    63         # # Connect buttons to slots. 
    64         # # Needs to be done early so default values propagate properly. 
     61        # Connect buttons to slots. 
     62        # Needs to be done early so default values propagate properly. 
    6563        self.setupSlots() 
    6664 
     
    8987 
    9088    def setupMapper(self): 
    91         self.mapper = QtWidgets.QDataWidgetMapper(self) 
    9289        self.mapper.setOrientation(QtCore.Qt.Vertical) 
    9390        self.mapper.setModel(self.model) 
     
    112109        chi2 = [] 
    113110 
    114         xs = np.linspace(float(self.model.item(W.DMIN).text()), 
    115                          float(self.model.item(W.DMAX).text()), 
    116                          float(self.model.item(W.NPTS).text())) 
     111        try: 
     112            dmin = float(self.model.item(W.DMIN).text()) 
     113            dmax = float(self.model.item(W.DMAX).text()) 
     114            npts = float(self.model.item(W.NPTS).text()) 
     115            xs = np.linspace(dmin, dmax, npts) 
     116        except ValueError as e: 
     117            msg = ("An input value is not correctly formatted. Please check {}" 
     118                   .format(e.message)) 
     119            logger.error(msg) 
    117120 
    118121        original = self.pr_state.d_max 
     
    133136                msg = "ExploreDialog: inversion failed " 
    134137                msg += "for D_max=%s\n%s" % (str(x), ex) 
    135                 print(msg) 
    136138                logger.error(msg) 
    137139 
     
    143145            msg = "ExploreDialog: inversion failed " 
    144146            msg += "for D_max=%s\n%s" % (str(x), ex) 
    145             print(msg) 
    146147            logger.error(msg) 
    147148 
  • src/sas/qtgui/Perspectives/Inversion/InversionLogic.py

    r318b353e r6da860a  
    11import math 
    2 import pylab 
     2import logging 
    33import numpy as np 
    44 
     
    1212GROUP_ID_IQ_DATA = r"$I_{obs}(q)$" 
    1313GROUP_ID_PR_FIT = r"$P_{fit}(r)$" 
     14PR_PLOT_PTS = 51 
     15 
     16logger = logging.getLogger(__name__) 
    1417 
    1518 
     
    1922    No QStandardModelIndex here. 
    2023    """ 
    21  
    22     # TODO: Add way to change this value 
    23     _pr_n_pts = 51 
    2424 
    2525    def __init__(self, data=None): 
     
    6363            maxq = pr.q_max 
    6464 
    65         x = pylab.arange(minq, maxq, maxq / 301.0) 
     65        x = np.arange(minq, maxq, maxq / 301.0) 
    6666        y = np.zeros(len(x)) 
    6767        err = np.zeros(len(x)) 
     
    7373            except: 
    7474                err[i] = 1.0 
    75                 print(("Error getting error", value, x[i])) 
     75                logger.log(("Error getting error", value, x[i])) 
    7676 
    7777        new_plot = Data1D(x, y) 
     
    8989        # If we have used slit smearing, plot the smeared I(q) too 
    9090        if pr.slit_width > 0 or pr.slit_height > 0: 
    91             x = pylab.arange(minq, maxq, maxq / 301.0) 
     91            x = np.arange(minq, maxq, maxq / 301.0) 
    9292            y = np.zeros(len(x)) 
    9393            err = np.zeros(len(x)) 
     
    9999                except: 
    100100                    err[i] = 1.0 
    101                     print(("Error getting error", value, x[i])) 
     101                    logger.log(("Error getting error", value, x[i])) 
    102102 
    103103            new_plot = Data1D(x, y) 
     
    113113        return new_plot 
    114114 
    115     def update1DPlot(self, plot, out, pr, q=None): 
    116         """ 
    117         Create a new 1D data instance based on fitting results 
    118         """ 
    119  
    120         qtemp = pr.x 
    121         if q is not None: 
    122             qtemp = q 
    123  
    124         # Make a plot 
    125         maxq = max(qtemp) 
    126  
    127         minq = min(qtemp) 
    128  
    129         # Check for user min/max 
    130         if pr.q_min is not None and maxq >= pr.q_min >= minq: 
    131             minq = pr.q_min 
    132         if pr.q_max is not None and maxq >= pr.q_max >= minq: 
    133             maxq = pr.q_max 
    134  
    135         x = pylab.arange(minq, maxq, maxq / 301.0) 
    136         y = np.zeros(len(x)) 
    137         err = np.zeros(len(x)) 
    138         for i in range(len(x)): 
    139             value = pr.iq(out, x[i]) 
    140             y[i] = value 
    141             try: 
    142                 err[i] = math.sqrt(math.fabs(value)) 
    143             except: 
    144                 err[i] = 1.0 
    145                 print(("Error getting error", value, x[i])) 
    146  
    147         plot.x = x 
    148         plot.y = y 
    149  
    150         # If we have used slit smearing, plot the smeared I(q) too 
    151         if pr.slit_width > 0 or pr.slit_height > 0: 
    152             x = pylab.arange(minq, maxq, maxq / 301.0) 
    153             y = np.zeros(len(x)) 
    154             err = np.zeros(len(x)) 
    155             for i in range(len(x)): 
    156                 value = pr.iq_smeared(pr.out, x[i]) 
    157                 y[i] = value 
    158                 try: 
    159                     err[i] = math.sqrt(math.fabs(value)) 
    160                 except: 
    161                     err[i] = 1.0 
    162                     print(("Error getting error", value, x[i])) 
    163  
    164             plot.x = x 
    165             plot.y = y 
    166  
    167         return plot 
    168  
    169115    def newPRPlot(self, out, pr, cov=None): 
    170116        """ 
    171117        """ 
    172118        # Show P(r) 
    173         x = pylab.arange(0.0, pr.d_max, pr.d_max / self._pr_n_pts) 
     119        x = np.arange(0.0, pr.d_max, pr.d_max / PR_PLOT_PTS) 
    174120 
    175121        y = np.zeros(len(x)) 
     
    193139            y[i] = value 
    194140 
    195         # if self._normalize_output == True: 
    196         #     y = y / total 
    197         #     dy = dy / total 
    198         # elif self._scale_output_unity == True: 
    199         #     y = y / pmax 
    200         #     dy = dy / pmax 
    201  
    202141        if cov2 is None: 
    203142            new_plot = Data1D(x, y) 
     
    213152 
    214153        return new_plot 
    215  
    216     def updatePRPlot(self, plot, out, pr, cov=None): 
    217         x = pylab.arange(0.0, pr.d_max, pr.d_max / self._pr_n_pts) 
    218  
    219         y = np.zeros(len(x)) 
    220         dy = np.zeros(len(x)) 
    221  
    222         total = 0.0 
    223         pmax = 0.0 
    224         cov2 = np.ascontiguousarray(cov) 
    225  
    226         for i in range(len(x)): 
    227             if cov2 is None: 
    228                 value = pr.pr(out, x[i]) 
    229             else: 
    230                 (value, dy[i]) = pr.pr_err(out, cov2, x[i]) 
    231             total += value * pr.d_max / len(x) 
    232  
    233             # keep track of the maximum P(r) value 
    234             if value > pmax: 
    235                 pmax = value 
    236  
    237             y[i] = value 
    238  
    239         # if self._normalize_output == True: 
    240         #     y = y / total 
    241         #     dy = dy / total 
    242         # elif self._scale_output_unity == True: 
    243         #     y = y / pmax 
    244         #     dy = dy / pmax 
    245         plot.x = x 
    246         plot.y = y 
    247  
    248         if cov2 is not None: 
    249             plot.dy = dy 
    250  
    251         return plot 
    252154 
    253155    def computeDataRange(self): 
  • src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py

    rd79bb7e r6da860a  
    3131MAX_DIST = 140.0 
    3232DICT_KEYS = ["Calculator", "PrPlot", "DataPlot"] 
     33 
     34logger = logging.getLogger(__name__) 
    3335 
    3436 
     
    354356            msg = "Unable to update P{r}. The connection between the main GUI " 
    355357            msg += "and P(r) was severed. Attempting to restart P(r)." 
    356             logging.warning(msg) 
     358            logger.warning(msg) 
    357359            self.setClosable(True) 
    358360            self.close() 
     
    395397        """ 
    396398        from .DMaxExplorerWidget import DmaxWindow 
    397         self.dmaxWindow = DmaxWindow(self._calculator, self.getNFunc(), self) 
     399        self.dmaxWindow = DmaxWindow(pr_state=self._calculator, 
     400                                     nfunc=self.getNFunc(), 
     401                                     parent=self) 
    398402        self.dmaxWindow.show() 
    399403 
     
    459463            nfunc = int(self.noOfTermsInput.text()) 
    460464        except ValueError: 
    461             logging.error("Incorrect number of terms specified: %s" 
     465            logger.error("Incorrect number of terms specified: %s" 
    462466                          %self.noOfTermsInput.text()) 
    463467            self.noOfTermsInput.setText(str(NUMBER_OF_TERMS)) 
     
    581585                self.dataList.setCurrentIndex(index) 
    582586                self.isBatch = True 
     587                # Add the index before calculating in case calculation fails 
     588                self.batchComplete.append(index) 
    583589                break 
    584590        if self.isBatch: 
     
    599605        # Set data before running the calculations 
    600606        self.updateCalculator() 
     607        # Disable calculation buttons to prevent thread interference 
     608        self.calculateAllButton.setEnabled(False) 
     609        self.calculateThisButton.setEnabled(False) 
    601610 
    602611        # If a thread is already started, stop it 
     
    672681        """ 
    673682        alpha, message, elapsed = output_tuple 
     683        self._calculator.alpha = alpha 
     684        self._calculator.elapsed += self._calculator.elapsed 
    674685        if message: 
    675             logging.info(message) 
     686            logger.info(message) 
    676687        self.performEstimateNT() 
    677688 
     
    690701        """ 
    691702        nterms, alpha, message, elapsed = output_tuple 
    692         self._calculator.elapsed = elapsed 
     703        self._calculator.elapsed += elapsed 
    693704        self._calculator.suggested_alpha = alpha 
    694705        self.nTermsSuggested = nterms 
     
    696707        self.updateGuiValues() 
    697708        if message: 
    698             logging.info(message) 
     709            logger.info(message) 
    699710        if self.isBatch: 
    700711            self.acceptAlpha() 
     
    742753            Call-back method for calculation errors 
    743754        """ 
    744         logging.warning(error) 
     755        logger.error(error) 
Note: See TracChangeset for help on using the changeset viewer.