Changes in / [21e71f1:fb39f28] in sasview


Ignore:
Files:
3 deleted
16 edited

Legend:

Unmodified
Added
Removed
  • docs/sphinx-docs/build_sphinx.py

    r5f9e874 rf1b696d  
    3030SPHINX_BUILD = joinpath(SPHINX_ROOT, "build") 
    3131SPHINX_SOURCE = joinpath(SPHINX_ROOT, "source-temp") 
    32 SPHINX_PERSPECTIVES = joinpath(SPHINX_SOURCE, "user", "qtgui", "Perspectives") 
     32SPHINX_PERSPECTIVES = joinpath(SPHINX_SOURCE, "user", "qtgui", "perspectives") 
    3333 
    3434# sasview paths 
     
    5151SASMODELS_DEV_TARGET = joinpath(SPHINX_SOURCE, "dev", "sasmodels-dev") 
    5252SASMODELS_GUIDE_SOURCE = joinpath(SASMODELS_DOCS, "guide") 
    53 SASMODELS_GUIDE_TARGET = joinpath(SPHINX_PERSPECTIVES, "Fitting") 
     53SASMODELS_GUIDE_TARGET = joinpath(SPHINX_PERSPECTIVES, "fitting") 
    5454SASMODELS_GUIDE_EXCLUDE = [ 
    5555    "index.rst", "install.rst", "intro.rst", 
     
    5959BUMPS_DOCS = joinpath(SASVIEW_ROOT, "..", "bumps", "doc") 
    6060BUMPS_SOURCE = joinpath(BUMPS_DOCS, "guide") 
    61 BUMPS_TARGET = joinpath(SPHINX_PERSPECTIVES, "Fitting") 
     61BUMPS_TARGET = joinpath(SPHINX_PERSPECTIVES, "fitting") 
    6262 
    6363run = imp.load_source('run', joinpath(SASVIEW_ROOT, 'run.py')) 
  • src/sas/qtgui/Calculators/GenericScatteringCalculator.py

    r8c85ac1 r133812c7  
    661661            data.xaxis('\\rm{Q_{x}}', '\AA^{-1}') 
    662662            data.yaxis('\\rm{Intensity}', 'cm^{-1}') 
    663  
     663            plot1D = Plotter(self, quickplot=True) 
     664            plot1D.plot(data) 
     665            plot1D.show() 
    664666            self.graph_num += 1 
     667            # TODO 
     668            print('TRANSFER OF DATA TO MAIN PANEL TO BE IMPLEMENTED') 
     669            return plot1D 
    665670        else: 
    666671            numpy.nan_to_num(self.data_to_plot) 
     
    674679            data.title = "GenSAS {}  #{} 2D".format(self.file_name, 
    675680                                                    int(self.graph_num)) 
    676             zeros = numpy.ones(data.data.size, dtype=bool) 
    677             data.mask = zeros 
    678  
     681            plot2D = Plotter2D(self, quickplot=True) 
     682            plot2D.plot(data) 
     683            plot2D.show() 
    679684            self.graph_num += 1 
    680685            # TODO 
    681         new_item = GuiUtils.createModelItemWithPlot(data, name=data.title) 
    682         self.communicator.updateModelFromPerspectiveSignal.emit(new_item) 
    683         self.communicator.forcePlotDisplaySignal.emit([new_item, data]) 
     686            print('TRANSFER OF DATA TO MAIN PANEL TO BE IMPLEMENTED') 
     687            return plot2D 
     688 
    684689 
    685690class Plotter3DWidget(PlotterBase): 
  • src/sas/qtgui/MainWindow/DroppableDataLoadWidget.py

    rba400d1 r53c771e  
    11# global 
    2 import os 
    32from PyQt5 import QtCore 
    43from PyQt5 import QtGui 
     
    5958            filenames=[] 
    6059            for url in event.mimeData().urls(): 
    61                 files = url.toLocalFile() 
    62                 if os.path.isdir(files): 
    63                 # get content of dir into a list 
    64                     content = [os.path.join(os.path.abspath(files), filename) 
    65                                 for filename in os.listdir(files)] 
    66                     filenames += content 
    67                 else: 
    68                     filenames.append(files) 
     60                filenames.append(url.toLocalFile()) 
    6961            self.communicator.fileReadSignal.emit(filenames) 
    7062            event.accept() 
  • src/sas/qtgui/Perspectives/Fitting/ConstraintWidget.py

    r442a9ae r442a9ae  
    11import logging 
    2 import copy 
    32 
    43from twisted.internet import threads 
     
    408407 
    409408        # Show the grid panel 
    410         page_name = "ConstSimulPage" 
    411         results = copy.deepcopy(result[0]) 
    412         results.append(page_name) 
    413         self.parent.communicate.sendDataToGridSignal.emit(results) 
     409        self.parent.communicate.sendDataToGridSignal.emit(result[0]) 
    414410 
    415411        msg = "Fitting completed successfully in: %s s.\n" % GuiUtils.formatNumber(elapsed) 
  • src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py

    r7f41584 r65759c7  
    368368            cbox = createFixedChoiceComboBox(par, row) 
    369369 
    370             # Apply combobox if required 
    371             if None not in (view, cbox): 
    372                 # set the min/max cell to be empty 
    373                 item3.setText("") 
    374                 item4.setText("") 
    375  
    376370            # Always add to the model 
    377371            if row_num is None: 
     
    381375                row_num += 1 
    382376 
    383             if cbox is not None: 
     377            # Apply combobox if required 
     378            if None not in (view, cbox): 
    384379                view.setIndexWidget(item2.index(), cbox) 
    385380 
  • src/sas/qtgui/Perspectives/Fitting/FittingWidget.py

    r7f41584 r442a9ae  
    15951595 
    15961596        # Show the grid panel 
    1597         page_name = "BatchPage" + str(self.tab_id) 
    1598         results = copy.deepcopy(result[0]) 
    1599         results.append(page_name) 
    1600         self.communicate.sendDataToGridSignal.emit(results) 
     1597        self.communicate.sendDataToGridSignal.emit(result[0]) 
    16011598 
    16021599        elapsed = result[1] 
     
    26592656 
    26602657        # Disable buttons/table 
    2661         self.disableInteractiveElementsOnCalculate() 
     2658        self.disableInteractiveElements() 
    26622659        # Awful API to a backend method. 
    26632660        calc_thread = self.methodCalculateForData()(data=data, 
     
    31943191        # cell 3: min value 
    31953192        item3 = QtGui.QStandardItem() 
    3196         # set the cell to be non-editable 
    3197         item3.setFlags(item3.flags() ^ QtCore.Qt.ItemIsEditable) 
    31983193 
    31993194        # cell 4: max value 
    32003195        item4 = QtGui.QStandardItem() 
    3201         # set the cell to be non-editable 
    3202         item4.setFlags(item4.flags() ^ QtCore.Qt.ItemIsEditable) 
    32033196 
    32043197        # cell 4: SLD button 
     
    32403233            # no info about limits 
    32413234            pass 
    3242         except OverflowError: 
    3243             # Try to limit shell_par, if possible 
    3244             if float(shell_par.limits[1])==np.inf: 
    3245                 shell_max = 9 
    3246             logging.warning("Limiting shell count to 9.") 
    32473235        except Exception as ex: 
    32483236            logging.error("Badly defined multiplicity: "+ str(ex)) 
     
    33863374        self.cmdFit.setStyleSheet('QPushButton {color: red;}') 
    33873375        self.cmdFit.setText('Stop fit') 
    3388         self.setInteractiveElements(False) 
    3389  
    3390     def disableInteractiveElementsOnCalculate(self): 
    3391         """ 
    3392         Set buttion caption on fitting/calculate start 
    3393         Disable the param table(s) 
    3394         """ 
    3395         # Notify the user that fitting is being run 
    3396         # Allow for stopping the job 
    3397         self.cmdFit.setStyleSheet('QPushButton {color: red;}') 
    3398         self.cmdFit.setText('Running...') 
    33993376        self.setInteractiveElements(False) 
    34003377 
  • src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py

    r7f41584 r722b7d6  
    9595            # Set some columns uneditable 
    9696            return None 
    97         if index.column() in (self.param_min, self.param_max): 
    98             # Check if the edit role is set 
    99             if not (index.flags() & QtCore.Qt.ItemIsEditable): 
    100                 return None 
    10197 
    10298        return super(ModelViewDelegate, self).createEditor(widget, option, index) 
  • src/sas/qtgui/Perspectives/Fitting/media/fitting_help.rst

    r3b0b17e r00a40bd  
    125125 
    126126For a complete list of all the library models available in SasView, see 
    127 the `Model Documentation <models/index.html>`_ . 
     127the `Model Documentation <../../../index.html>`_ . 
    128128 
    129129It is also possible to add your own models. 
  • src/sas/qtgui/Plotting/Plotter.py

    rc30822c r3b95b3b  
    600600        except: 
    601601            self.position = None 
    602  
    603         x_str = GuiUtils.formatNumber(self.x_click) 
    604         y_str = GuiUtils.formatNumber(self.y_click) 
    605         coord_str = "x: {}, y: {}".format(x_str, y_str) 
    606         self.manager.communicator.statusBarUpdateSignal.emit(coord_str) 
    607602 
    608603    def onMplMouseUp(self, event): 
  • src/sas/qtgui/Plotting/Plotter2D.py

    rc30822c r133812c7  
    107107                      zmax=zmax_2D_temp, show_colorbar=show_colorbar, 
    108108                      update=update) 
    109  
    110         self.updateCircularAverage() 
    111109 
    112110    def calculateDepth(self): 
     
    242240        self.slicer_widget.show() 
    243241 
    244     def circularAverage(self): 
    245         """ 
    246         Calculate the circular average and create the Data object for it 
     242    def onCircularAverage(self): 
     243        """ 
     244        Perform circular averaging on Data2D 
    247245        """ 
    248246        # Find the best number of bins 
     
    283281        new_plot.id = "Circ avg " + self.data.name 
    284282        new_plot.is_data = True 
    285  
    286         return new_plot 
    287  
    288     def onCircularAverage(self): 
    289         """ 
    290         Perform circular averaging on Data2D 
    291         """ 
    292         new_plot = self.circularAverage() 
    293  
    294283        item = self._item 
    295284        if self._item.parent() is not None: 
    296285            item = self._item.parent() 
    297  
    298286        GuiUtils.updateModelItemWithPlot(item, new_plot, new_plot.id) 
    299287 
    300         self.manager.communicator.plotUpdateSignal.emit([new_plot]) 
    301         self.manager.communicator.forcePlotDisplaySignal.emit([item, new_plot]) 
    302  
    303     def updateCircularAverage(self): 
    304         """ 
    305         Update circular averaging plot on Data2D change 
    306         """ 
    307         if not hasattr(self,'_item'): return 
    308         item = self._item 
    309         if self._item.parent() is not None: 
    310             item = self._item.parent() 
    311  
    312         # Get all plots for current item 
    313         plots = GuiUtils.plotsFromModel("", item) 
    314         if plots is None: return 
    315         ca_caption = '2daverage'+self.data.name 
    316         # See if current item plots contain 2D average plot 
    317         has_plot = False 
    318         for plot in plots: 
    319             if plot.group_id is None: continue 
    320             if ca_caption in plot.group_id: has_plot=True 
    321         # return prematurely if no circular average plot found 
    322         if not has_plot: return 
    323  
    324         # Create a new plot 
    325         new_plot = self.circularAverage() 
    326  
    327         # Overwrite existing plot 
    328         GuiUtils.updateModelItemWithPlot(item, new_plot, new_plot.id) 
    329         # Show the new plot, if already visible 
    330288        self.manager.communicator.plotUpdateSignal.emit([new_plot]) 
    331289 
     
    578536        self.plot(data=new_plot) 
    579537 
    580     def onMplMouseDown(self, event): 
    581         """ 
    582         Display x/y/intensity on click 
    583         """ 
    584         # Check that the LEFT button was pressed 
    585         if event.button != 1: 
    586             return 
    587  
    588         if event.inaxes is None: 
    589             return 
    590         x_click = 0.0 
    591         y_click = 0.0 
    592         try: 
    593             x_click = float(event.xdata)  # / size_x 
    594             y_click = float(event.ydata)  # / size_y 
    595         except: 
    596             self.position = None 
    597         x_str = GuiUtils.formatNumber(x_click) 
    598         y_str = GuiUtils.formatNumber(y_click) 
    599         coord_str = "x: {}, y: {}".format(x_str, y_str) 
    600         self.manager.communicator.statusBarUpdateSignal.emit(coord_str) 
    601538 
    602539class Plotter2D(QtWidgets.QDialog, Plotter2DWidget): 
  • src/sas/qtgui/Utilities/GridPanel.py

    rc4c4957 r75906a1  
    126126        return 
    127127 
    128     def addTabPage(self, name=None): 
     128    def addTabPage(self): 
    129129        """ 
    130130        Add new tab page with QTableWidget 
     
    141141        # However, some models have LONG names, which doesn't look well on the tab bar. 
    142142        self.tab_number += 1 
    143         if name is not None: 
    144             tab_name = name 
    145         else: 
    146             tab_name = "Tab " + str(self.tab_number) 
     143        tab_name = "Tab " + str(self.tab_number) 
    147144        # each table needs separate slots. 
    148145        tab_widget.customContextMenuRequested.connect(self.showContextMenu) 
     
    156153        Create a new tab with batch fitting results 
    157154        """ 
    158         # pull out page name from results 
    159         page_name = None 
    160         if len(results)>=2: 
    161             if isinstance(results[-1], str): 
    162                 page_name = results[-1] 
    163                 _ = results.pop(-1) 
    164  
    165155        if self.has_data: 
    166             self.addTabPage(name=page_name) 
    167         else: 
    168             self.tabWidget.setTabText(0, page_name) 
     156            self.addTabPage() 
    169157        # Update the new widget 
    170158        # Fill in the table from input data in the last/newest page 
  • src/sas/sascalc/dataloader/file_reader_base_class.py

    rbe7c981 rb8080e1  
    276276                    dataset.xmax = np.max(dataset.qx_data) 
    277277                    dataset.ymin = np.min(dataset.qy_data) 
    278                     dataset.ymax = np.max(dataset.qy_data) 
     278                    dataset.ymax = np.max(dataset.qx_data) 
    279279 
    280280    def format_unit(self, unit=None): 
  • src/sas/sascalc/pr/fit/BumpsFitting.py

    r57a91fc r9a5097c  
    22BumpsFitting module runs the bumps optimizer. 
    33""" 
    4 from __future__ import division 
    5  
    64import os 
    75from datetime import timedelta, datetime 
     
    3634class Progress(object): 
    3735    def __init__(self, history, max_step, pars, dof): 
    38         remaining_time = int(history.time[0]*(max_step/history.step[0]-1)) 
     36        remaining_time = int(history.time[0]*(float(max_step)/history.step[0]-1)) 
    3937        # Depending on the time remaining, either display the expected 
    4038        # time of completion, or the amount of time remaining.  Use precision 
  • src/sas/sascalc/pr/fit/Loader.py

    r57a91fc r574adc7  
    1 """ 
    2 class Loader  to load any kind of file 
    3 """ 
    4  
    51from __future__ import print_function 
    62 
     3# class Loader  to load any king of file 
     4#import wx 
     5#import string 
    76import numpy as np 
    87 
  • src/sas/sascalc/pr/invertor.py

    r57a91fc raed159f  
    66FIXME: The way the Invertor interacts with its C component should be cleaned up 
    77""" 
    8 from __future__ import division 
    98 
    109import numpy as np 
     
    424423            A[i][j] = (Fourier transformed base function for point j) 
    425424 
    426         We then choose a number of r-points, n_r, to evaluate the second 
     425        We them choose a number of r-points, n_r, to evaluate the second 
    427426        derivative of P(r) at. This is used as our regularization term. 
    428427        For a vector r of length n_r, the following n_r rows are set to :: 
     
    481480 
    482481        # Perform the inversion (least square fit) 
    483         c, chi2, _, _ = lstsq(a, b, rcond=-1) 
     482        c, chi2, _, _ = lstsq(a, b) 
    484483        # Sanity check 
    485484        try: 
     
    504503        try: 
    505504            cov = np.linalg.pinv(inv_cov) 
    506             err = math.fabs(chi2 / (npts - nfunc)) * cov 
    507         except Exception as exc: 
     505            err = math.fabs(chi2 / float(npts - nfunc)) * cov 
     506        except: 
    508507            # We were not able to estimate the errors 
    509508            # Return an empty error matrix 
     
    549548        try: 
    550549            return estimator.num_terms(isquit_func) 
    551         except Exception as exc: 
     550        except: 
    552551            # If we fail, estimate alpha and return the default 
    553552            # number of terms 
  • src/sas/sascalc/pr/num_term.py

    r57a91fc rb8080e1  
    1 from __future__ import print_function, division 
     1from __future__ import print_function 
    22 
    33import math 
     
    5151        osc = self.sort_osc() 
    5252        dv = len(osc) 
    53         med = 0.5*dv 
     53        med = float(dv) / 2.0 
    5454        odd = self.is_odd(dv) 
    5555        medi = 0 
     
    140140            nts = self.compare_err() 
    141141            div = len(nts) 
    142             tem = 0.5*div 
     142            tem = float(div) / 2.0 
    143143            if self.is_odd(div): 
    144144                nt = nts[int(tem)] 
Note: See TracChangeset for help on using the changeset viewer.