Changeset f0b9bce in sasview for src


Ignore:
Timestamp:
Mar 26, 2019 3:14:45 PM (6 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
ticket-1094-headless
Children:
9cc1f49
Parents:
cb44d66 (diff), 2b3eb3d (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.
Message:

Merge branch 'ticket-1243' into ticket-1094-headless

Location:
src/sas
Files:
1 added
26 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sascalc/dataloader/readers/cansas_reader.py

    r8c9e65c rf0b9bce  
    493493                self.current_datainfo.errors.add(error) 
    494494            self.data_cleanup() 
    495             self.sort_one_d_data() 
    496             self.sort_two_d_data() 
     495            self.sort_data() 
    497496            self.reset_data_list() 
    498497            return self.output[0], None 
  • src/sas/sascalc/calculator/instrument.py

    rf4775563 re090ba90  
    128128            self.size = 0 
    129129        else: 
    130             self.size = size 
     130            # TODO: Make sure detector size is number of pixels 
     131            # Could be detector dimensions in e.g., mm, but 
     132            # the resolution calculator assumes it is pixels. 
     133            # Being pixels, it has to be integers rather than float 
     134            self.size = [int(s) for s in size] 
    131135            validate(size[0]) 
    132136 
  • src/sas/sascalc/calculator/resolution_calculator.py

    r574adc7 re090ba90  
    10071007        try: 
    10081008            detector_offset = self.sample2detector_distance[1] 
    1009         except: 
    1010             logger.error(sys.exc_value) 
     1009        except Exception as exc: 
     1010            logger.error(exc) 
    10111011 
    10121012        # detector size in [no of pix_x,no of pix_y] 
     
    10941094            output.qx_data = qx_value 
    10951095            output.qy_data = qy_value 
    1096         except: 
    1097             logger.error(sys.exc_value) 
     1096        except Exception as exc: 
     1097            logger.error(exc) 
    10981098 
    10991099        return output 
  • src/sas/sascalc/corfunc/corfunc_calculator.py

    ra26f67f rdbfd307  
    3030            self.start = start 
    3131            self.stop = stop 
    32             self._lastx = [] 
    33             self._lasty = [] 
     32            self._lastx = np.empty(0, dtype='d') 
     33            self._lasty = None 
    3434 
    3535        def __call__(self, x): 
    3636            # If input is a single number, evaluate the function at that number 
    3737            # and return a single number 
    38             if type(x) == float or type(x) == int: 
     38            if isinstance(x, (float, int)): 
    3939                return self._smoothed_function(np.array([x]))[0] 
    4040            # If input is a list, and is different to the last input, evaluate 
     
    4242            # the function was called, return the result that was calculated 
    4343            # last time instead of explicity evaluating the function again. 
    44             elif self._lastx == [] or x.tolist() != self._lastx.tolist(): 
    45                 self._lasty = self._smoothed_function(x) 
    46                 self._lastx = x 
     44            if not np.array_equal(x, self._lastx): 
     45                self._lastx, self._lasty = x, self._smoothed_function(x) 
    4746            return self._lasty 
    4847 
     
    8887        # Only process data of the class Data1D 
    8988        if not issubclass(data.__class__, Data1D): 
    90             raise ValueError("Data must be of the type DataLoader.Data1D") 
     89            raise ValueError("Correlation function cannot be computed with 2D data.") 
    9190 
    9291        # Prepare the data 
     
    246245        """Fit the Guinier region of the curve""" 
    247246        A = np.vstack([q**2, np.ones(q.shape)]).T 
    248         return lstsq(A, np.log(iq)) 
     247        # CRUFT: numpy>=1.14.0 allows rcond=None for the following default 
     248        rcond = np.finfo(float).eps * max(A.shape) 
     249        return lstsq(A, np.log(iq), rcond=rcond) 
    249250 
    250251    def _fit_porod(self, q, iq): 
  • src/sas/sascalc/data_util/calcthread.py

    r574adc7 re090ba90  
    66from __future__ import print_function 
    77 
    8 import traceback 
    98import sys 
    109import logging 
     10import traceback 
     11from time import sleep 
     12 
    1113try: 
    1214    import _thread as thread 
    1315except ImportError: # CRUFT: python 2 support 
    1416    import thread 
    15  
    16 if sys.platform.count("darwin") > 0: 
    17     import time 
    18     stime = time.time() 
    19  
    20     def clock(): 
    21         return time.time() - stime 
    22  
    23     def sleep(t): 
    24         return time.sleep(t) 
    25 else: 
    26     from time import clock 
    27     from time import sleep 
     17try: 
     18    from time import perf_counter as clock 
     19except ImportError: # CRUFT: python < 3.3 
     20    if sys.platform.count("darwin") > 0: 
     21        from time import time as clock 
     22    else: 
     23        from time import clock 
    2824 
    2925logger = logging.getLogger(__name__) 
    30  
    3126 
    3227class CalcThread: 
     
    248243                self.exception_handler(*sys.exc_info()) 
    249244                return 
    250             except Exception: 
     245            except Exception as exc: 
    251246                pass 
    252247        logger.error(traceback.format_exc()) 
  • src/sas/sascalc/data_util/nxsunit.py

    rb011ecb r8c9e65c  
    9999    Strip '^' from unit names. 
    100100 
    101     * WARNING * this will incorrect transform 10^3 to 103. 
    102     """ 
    103     s.update((k.replace('^',''),v) 
    104              for k, v in list(s.items()) 
    105              if '^' in k) 
     101    * WARNING * this will incorrectly transform 10^3 to 103. 
     102    """ 
     103    stripped = [(k.replace('^',''),v) for k, v in s.items() if '^' in k] 
     104    s.update(stripped) 
    106105 
    107106def _build_all_units(): 
  • src/sas/sascalc/data_util/ordereddicttest.py

    rb699768 re090ba90  
    147147                    ]): 
    148148            self.assert_(dup is not od) 
    149             self.assertEquals(dup, od) 
    150             self.assertEquals(list(dup.items()), list(od.items())) 
    151             self.assertEquals(len(dup), len(od)) 
    152             self.assertEquals(type(dup), type(od)) 
     149            self.assertEqual(dup, od) 
     150            self.assertEqual(list(dup.items()), list(od.items())) 
     151            self.assertEqual(len(dup), len(od)) 
     152            self.assertEqual(type(dup), type(od)) 
    153153 
    154154    def test_repr(self): 
  • src/sas/sascalc/data_util/registry.py

    ra26f67f re090ba90  
    148148            # If file has associated loader(s) and they;ve failed 
    149149            raise last_exc 
    150         raise NoKnownLoaderException(e.message)  # raise generic exception 
     150        raise NoKnownLoaderException(str(message))  # raise generic exception 
  • src/sas/sascalc/data_util/uncertainty.py

    r574adc7 re090ba90  
    1919import numpy as np 
    2020 
    21 from .import err1d 
     21from . import err1d 
    2222from .formatnum import format_uncertainty 
    2323 
  • src/sas/sascalc/dataloader/data_info.py

    r4fdcc65 r8c9e65c  
    2626import numpy as np 
    2727import math 
     28from math import fabs 
    2829 
    2930class plottable_1D(object): 
     
    656657        return self._perform_operation(other, operation) 
    657658 
    658     def __div__(self, other): 
     659    def __truediv__(self, other): 
    659660        """ 
    660661        Divided a data set by another 
     
    667668            return a/b 
    668669        return self._perform_operation(other, operation) 
    669  
    670     def __rdiv__(self, other): 
     670    __div__ = __truediv__ 
     671 
     672    def __rtruediv__(self, other): 
    671673        """ 
    672674        Divided a data set by another 
     
    679681            return b/a 
    680682        return self._perform_operation(other, operation) 
     683    __rdiv__ = __rtruediv__ 
    681684 
    682685    def __or__(self, other): 
     
    800803            TOLERANCE = 0.01 
    801804            for i in range(len(self.x)): 
    802                 if math.fabs((self.x[i] - other.x[i])/self.x[i]) > TOLERANCE: 
     805                if fabs(self.x[i] - other.x[i]) > self.x[i]*TOLERANCE: 
    803806                    msg = "Incompatible data sets: x-values do not match" 
    804807                    raise ValueError(msg) 
     
    10321035                raise ValueError(msg) 
    10331036            for ind in range(len(self.data)): 
    1034                 if math.fabs((self.qx_data[ind] - other.qx_data[ind])/self.qx_data[ind]) > TOLERANCE: 
     1037                if fabs(self.qx_data[ind] - other.qx_data[ind]) > fabs(self.qx_data[ind])*TOLERANCE: 
    10351038                    msg = "Incompatible data sets: qx-values do not match: %s %s" % (self.qx_data[ind], other.qx_data[ind]) 
    10361039                    raise ValueError(msg) 
    1037                 if math.fabs((self.qy_data[ind] - other.qy_data[ind])/self.qy_data[ind]) > TOLERANCE: 
     1040                if fabs(self.qy_data[ind] - other.qy_data[ind]) > fabs(self.qy_data[ind])*TOLERANCE: 
    10381041                    msg = "Incompatible data sets: qy-values do not match: %s %s" % (self.qy_data[ind], other.qy_data[ind]) 
    10391042                    raise ValueError(msg) 
  • src/sas/sascalc/dataloader/loader.py

    rb1ec23d r8c9e65c  
    169169                        if self._identify_plugin(module): 
    170170                            readers_found += 1 
    171                     except: 
     171                    except Exception as exc: 
    172172                        msg = "Loader: Error importing " 
    173                         msg += "%s\n  %s" % (item, sys.exc_value) 
     173                        msg += "%s\n  %s" % (item, exc) 
    174174                        logger.error(msg) 
    175175 
     
    191191                                if self._identify_plugin(module): 
    192192                                    readers_found += 1 
    193                             except: 
     193                            except Exception as exc: 
    194194                                msg = "Loader: Error importing" 
    195                                 msg += " %s\n  %s" % (mfile, sys.exc_value) 
     195                                msg += " %s\n  %s" % (mfile, exc) 
    196196                                logger.error(msg) 
    197197 
    198                     except: 
     198                    except Exception as exc: 
    199199                        msg = "Loader: Error importing " 
    200                         msg += " %s\n  %s" % (item, sys.exc_value) 
     200                        msg += " %s\n  %s" % (item, exc) 
    201201                        logger.error(msg) 
    202202 
     
    242242                    self.writers[ext].append(loader.write) 
    243243 
    244             except: 
     244            except Exception as exc: 
    245245                msg = "Loader: Error accessing" 
    246                 msg += " Reader in %s\n  %s" % (module.__name__, sys.exc_value) 
     246                msg += " Reader in %s\n  %s" % (module.__name__, exc) 
    247247                logger.error(msg) 
    248248        return reader_found 
     
    275275                    self.wildcards.append(wcard) 
    276276 
    277         except: 
     277        except Exception as exc: 
    278278            msg = "Loader: Error accessing Reader " 
    279             msg += "in %s\n  %s" % (loader.__name__, sys.exc_value) 
     279            msg += "in %s\n  %s" % (loader.__name__, exc) 
    280280            logger.error(msg) 
    281281        return reader_found 
     
    320320                        self.writers[ext].insert(0, loader.write) 
    321321 
    322             except: 
     322            except Exception as exc: 
    323323                msg = "Loader: Error accessing Reader" 
    324                 msg += " in %s\n  %s" % (module.__name__, sys.exc_value) 
     324                msg += " in %s\n  %s" % (module.__name__, exc) 
    325325                logger.error(msg) 
    326326        return reader_found 
  • src/sas/sascalc/dataloader/manipulations.py

    r574adc7 re4e9162  
    928928 
    929929        # Organize the results 
    930         for i in range(self.nbins): 
    931             y[i] = y[i] / y_counts[i] 
    932             y_err[i] = math.sqrt(y_err[i]) / y_counts[i] 
    933  
    934             # The type of averaging: phi,q2, or q 
    935             # Calculate x[i]should be at the center of the bin 
     930        with np.errstate(divide='ignore', invalid='ignore'): 
     931            y = y/y_counts 
     932            y_err = np.sqrt(y_err)/y_counts 
     933            # The type of averaging: phi, q2, or q 
     934            # Calculate x values at the center of the bin 
    936935            if run.lower() == 'phi': 
    937                 x[i] = (self.phi_max - self.phi_min) / self.nbins * \ 
    938                     (1.0 * i + 0.5) + self.phi_min 
     936                step = (self.phi_max - self.phi_min) / self.nbins 
     937                x = (np.arange(self.nbins) + 0.5) * step + self.phi_min 
    939938            else: 
    940                 # We take the center of ring area, not radius. 
    941                 # This is more accurate than taking the radial center of ring. 
    942                 # delta_r = (self.r_max - self.r_min) / self.nbins 
    943                 # r_inner = self.r_min + delta_r * i 
    944                 # r_outer = r_inner + delta_r 
    945                 # x[i] = math.sqrt((r_inner * r_inner + r_outer * r_outer) / 2) 
    946                 x[i] = x[i] / y_counts[i] 
    947         y_err[y_err == 0] = np.average(y_err) 
     939                # set q to the average of the q values within each bin 
     940                x = x/y_counts 
     941 
     942                ### Alternate algorithm 
     943                ## We take the center of ring area, not radius. 
     944                ## This is more accurate than taking the radial center of ring. 
     945                #step = (self.r_max - self.r_min) / self.nbins 
     946                #r_inner = self.r_min + step * np.arange(self.nbins) 
     947                #x = math.sqrt((r_inner**2 + (r_inner + step)**2) / 2) 
     948 
    948949        idx = (np.isfinite(y) & np.isfinite(y_err)) 
    949950        if x_err is not None: 
  • src/sas/sascalc/dataloader/readers/associations.py

    rc7c8143 r8c9e65c  
    5454                exec("loader.associate_file_type('%s', %s)" 
    5555                     % (ext.upper(), reader)) 
    56             except: 
     56            except Exception as exc: 
    5757                msg = "read_associations: skipping association" 
    58                 msg += " for %s\n  %s" % (ext.lower(), sys.exc_value) 
     58                msg += " for %s\n  %s" % (ext.lower(), exc) 
    5959                logger.error(msg) 
  • src/sas/sascalc/fit/BumpsFitting.py

    r1386b2f r0aeba4e  
    22BumpsFitting module runs the bumps optimizer. 
    33""" 
     4from __future__ import print_function 
     5 
    46import os 
    57from datetime import timedelta, datetime 
     
    911 
    1012from bumps import fitters 
     13 
    1114try: 
    1215    from bumps.options import FIT_CONFIG 
     16    # Preserve bumps default fitter in case someone wants it later 
     17    BUMPS_DEFAULT_FITTER = FIT_CONFIG.selected_id 
    1318    # Default bumps to use the Levenberg-Marquardt optimizer 
    1419    FIT_CONFIG.selected_id = fitters.LevenbergMarquardtFit.id 
     
    1722except ImportError: 
    1823    # CRUFT: Bumps changed its handling of fit options around 0.7.5.6 
     24    # Preserve bumps default fitter in case someone wants it later 
     25    BUMPS_DEFAULT_FITTER = fitters.FIT_DEFAULT 
    1926    # Default bumps to use the Levenberg-Marquardt optimizer 
    2027    fitters.FIT_DEFAULT = 'lm' 
     
    126133        if initial_values is not None: 
    127134            self._reset_pars(fitted, initial_values) 
     135        #print("constraints", constraints) 
    128136        self.constraints = dict(constraints) 
    129137        self.set_fitted(fitted) 
     
    222230    def _setup(self): 
    223231        exprs = {} 
    224         for M in self.models: 
    225             exprs.update((".".join((M.name, k)), v) for k, v in M.constraints.items()) 
     232        for model in self.models: 
     233            exprs.update((".".join((model.name, k)), v) 
     234                         for k, v in model.constraints.items()) 
    226235        if exprs: 
    227             symtab = dict((".".join((M.name, k)), p) 
    228                           for M in self.models 
    229                           for k, p in M.parameters().items()) 
     236            symtab = dict((".".join((model.name, k)), p) 
     237                          for model in self.models 
     238                          for k, p in model.parameters().items()) 
    230239            self.update = compile_constraints(symtab, exprs) 
    231240        else: 
  • src/sas/sascalc/fit/expression.py

    r574adc7 re090ba90  
    210210 
    211211    #print("Function: "+functiondef) 
    212     exec functiondef in globals,locals 
     212    exec(functiondef, globals, locals) 
    213213    retfn = locals['eval_expressions'] 
    214214 
  • src/sas/sascalc/fit/models.py

    rb963b20 re090ba90  
    1212import py_compile 
    1313import shutil 
     14 
     15from six import reraise 
    1416 
    1517from sasmodels.sasview_model import load_custom_model, load_standard_models 
     
    6264    try: 
    6365        new_instance = model() 
    64     except Exception: 
    65         msg = "Plugin %s error in __init__ \n\t: %s %s\n" % (str(name), 
    66                                                              str(sys.exc_type), 
    67                                                              sys.exc_info()[1]) 
     66    except Exception as exc: 
     67        msg = ("Plugin %s error in __init__ \n\t: %s %s\n" 
     68               % (name, type(exc), exc)) 
    6869        plugin_log(msg) 
    6970        return None 
     
    7273        try: 
    7374            value = new_instance.function() 
    74         except Exception: 
     75        except Exception as exc: 
    7576            msg = "Plugin %s: error writing function \n\t :%s %s\n " % \ 
    76                     (str(name), str(sys.exc_type), sys.exc_info()[1]) 
     77                    (str(name), str(type(exc)), exc) 
    7778            plugin_log(msg) 
    7879            return None 
     
    139140        if type is not None and issubclass(type, py_compile.PyCompileError): 
    140141            print("Problem with", repr(value)) 
    141             raise type, value, tb 
     142            reraise(type, value, tb) 
    142143        return 1 
    143144 
     
    153154        compileall.compile_dir(dir=dir, ddir=dir, force=0, 
    154155                               quiet=report_problem) 
    155     except Exception: 
    156         return sys.exc_info()[1] 
     156    except Exception as exc: 
     157        return exc 
    157158    return None 
    158159 
     
    185186                    model.name = PLUGIN_NAME_BASE + model.name 
    186187                plugins[model.name] = model 
    187             except Exception: 
     188            except Exception as exc: 
    188189                msg = traceback.format_exc() 
    189190                msg += "\nwhile accessing model in %r" % path 
  • src/sas/sascalc/fit/pagestate.py

    r863ac2c rcb44d66  
    11""" 
    22Class that holds a fit page state 
     3 
     4Pagestate fields reflect the names of the gui controls from the sasview 3.x 
     5fit page, so they are somewhat difficult to interpret. 
     6 
     7Pagestate attributes are as follows: 
     8 
     9    # =>name: desc       indicates the attribute is derived 
     10    # name(xml): desc    indicates the attribute name differs from the xml tag 
     11 
     12    # SasView version which saved the file 
     13    version: (4, 1, 2) from <fitting_plug_in version="major.minor.point"> 
     14 
     15    # Session information 
     16    group_id: unique id for fit page in running system (int) 
     17    => data_group_id: unique id for data item in running system (None) 
     18 
     19    # Data file 
     20    data: contents of <SASdata> (Data1D or Data2D) 
     21    data_name: filename + [num] (latex_smeared.xml [1]) 
     22    data_id: filename + [num] + timestamp (latex_smeared.xml [1]1523303027.73) 
     23    file: filename + [date time] (latex_smeared.xml [Apr 09 15:45]) 
     24    name: ?? (None) 
     25    npts: number of points (float) 
     26    enable2D: True if data is 2D (or if model is 2D and no data) 
     27    is_data: True (pagestate will not save if there is no data attached) 
     28 
     29    # Data weighting 
     30    dI_didata: True if dy = data.dy 
     31    dI_idata: True if dy = data.y 
     32    dI_noweight: True if dy = 1 
     33    dI_sqrdata: True if dy = sqrt(data.y) 
     34 
     35    # Data selection 
     36    qmax: maximum q (float) 
     37    qmin: minimum q (float) 
     38    => qmax_x: ?? (None) 
     39    => qmin_x: ?? (None) 
     40 
     41    # Resolution smearing 
     42    enable_smearer: True if use data.dx 
     43    disable_smearer: True if no smearing 
     44    pinhole_smearer: True if custom pinhole smear 
     45    slit_smearer: True if custom slit smear 
     46    dq_l: 2D resolution <dQp> 
     47    dq_r: 2D resolution <dQs> 
     48    dx_old: True for 3.x version of custom pinhole, which used dx_min rather 
     49        than dx_percent, with dx_percent interpreted as 100 * dx_percent/q[0] 
     50    dx_percent: custom pinhole resolution percentage 
     51    dxl: slit height for custom slit resolution 
     52    dxw: slit width for custom slit resolution 
     53    smearer: repr() for active smearer (None on load) 
     54    smear_type: None (None on load) 
     55 
     56    # Model selection 
     57    categorycombobox: model category 
     58    formfactorcombobox: model name (could be "[plug-in] name") 
     59    structurecombobox: structure factor model name (string or None or "None") 
     60    multi_factor: multiplicity (integer or None) 
     61    magnetic_on: True if model is magnetic (only for 2D data for now) 
     62    => model: active model object (None on load) 
     63 
     64    # Model parameters 
     65    # Parameter is a tuple with the following structure.  The parentheses 
     66    # indicate xml attribute for the <parameter .../> tag: 
     67    #    fitted(selected_to_fit): True if parameter is fitted 
     68    #    name(name): display name for the parameter (string) 
     69    #    value(value): displayed parameter value (string) 
     70    #    => plusminus: '+/-' (constant string) 
     71    #    => uncertainty: tuple 
     72    #        (uncertainty_displayed): True if there is an uncertainty 
     73    #        (uncertainty_value): displayed uncertainty (string) 
     74    #    => lower: tuple 
     75    #        (minimum_displayed): True if there is a lower bound 
     76    #        (minimum_value): displayed lower bound (string) 
     77    #    => upper: tuple 
     78    #        (maximum_displayed): True if there is a upper bound 
     79    #        (maximum_value): displayed upper bound (string) 
     80    #    units(unit): displayed units 
     81    parameters: list of normal parameters 
     82    fixed_param: list of non-fitting parameters (nsigma, npts in dispersity) 
     83    fittable_param: list of fittable dispersity parameters (distribution width) 
     84    str_parameters: list of selection parameters (e.g, shell forms in spherical_sld) 
     85    orientation_params(orientation_parameters): list of orientation and 
     86        magnetic parameters (already included in parameters, so safe to ignore) 
     87    orientation_params_disp(dispersity_parameters): list of orientation 
     88        disperisty parameters (already included in fixed_param and 
     89        fittable_param so safe to ignore) 
     90 
     91    # Dispersity controls 
     92    enable_disp: True if dispersity parameters 
     93    disable_disp: True if no dispersity parameters 
     94    disp_obj_dict(disp_obj): {'parameter.width': 'dispersity distribution'} 
     95    values: {'parameter.width': [array distribution parameter values] } 
     96    weights: {'parameter.width': [array distribution parameter weights] } 
     97    => disp_box 0 
     98    => disp_cb_dict {} 
     99    => disp_list [] 
     100 
     101    # Simultaneous fitting 
     102 
     103    => images: None (initialized but unused?) 
     104    => reset: False (initialized but unused?) 
     105    => event_owner None 
     106    => m_name None 
     107    => manager None 
     108    => page_name 
     109    => param_toFit: [] 
     110    => process: list of process done on object [] (maybe managed by guiframe?) 
     111    => saved_states {} 
     112    => cb1: False (simfit cb1 is now stored in select_all) 
     113 
     114    tcChi 1.3463 
     115    theory_data None 
     116    timestamp 1523303103.74 
     117 
     118Constraint attributes are as follows: 
     119 
     120    constraint_dict {} 
     121    constraints_list 
     122        {'model_cbox': 'M2', 'param_cbox': 'scale', 'egal_txt': ' = ', 'constraint': 'M1.scale'} 
     123        {'model_cbox': 'M2', 'param_cbox': 'radius', 'egal_txt': ' = ', 'constraint': 'M1.radius'} 
     124        {'model_cbox': 'M2', 'param_cbox': 'radius.width', 'egal_txt': ' = ', 'constraint': 'M1.radius.width'} 
     125    fit_page_no None 
     126    model_list 
     127        {'fit_number': '393', 'checked': 'True', 'fit_page_source': 'M2', 'name': 'latex_smeared.xml   [1]1523535051.03', 'model_name': 'sphere'} 
     128        {'fit_number': '335', 'checked': 'True', 'fit_page_source': 'M1', 'name': 'latex_smeared.xml  1523535050.03', 'model_name': 'sphere'} 
     129    model_to_fit 
     130    no_constraint 0 
     131    select_all True 
     132 
     133 
    3134""" 
    4135# TODO: Refactor code so we don't need to use getattr/setattr 
     
    162293        self.theory_data = None 
    163294        # Is 2D 
    164         self.is_2D = False 
    165295        self.images = None 
    166296 
     
    557687        temp_parameters = [] 
    558688        temp_fittable_param = [] 
    559         if self.data.__class__.__name__ == "Data2D": 
    560             self.is_2D = True 
    561         else: 
    562             self.is_2D = False 
    563689        if self.data is not None: 
    564             if not self.is_2D: 
     690            is_2D = (self.data.__class__.__name__ == "Data2D") 
     691            if not is_2D: 
    565692                for item in self.parameters: 
    566693                    if item not in self.orientation_params: 
     
    650777                    #Truncating string so print doesn't complain of being outside margins 
    651778                    if sys.platform != "win32": 
    652                         MAX_STRING_LENGHT = 50 
    653                         if len(file_value) > MAX_STRING_LENGHT: 
    654                             file_value = "File name:.."+file_value[-MAX_STRING_LENGHT+10:] 
     779                        MAX_STRING_LENGTH = 50 
     780                        if len(file_value) > MAX_STRING_LENGTH: 
     781                            file_value = "File name:.."+file_value[-MAX_STRING_LENGTH+10:] 
    655782                    file_name = CENTRE % file_value 
    656783                    if len(title) == 0: 
     
    9051032                doc_model = newdoc.createElement('model_list_item') 
    9061033                doc_model.setAttribute('checked', str(model[0].GetValue())) 
    907                 keys = model[1].keys() 
     1034                keys = list(model[1].keys()) 
    9081035                doc_model.setAttribute('name', str(keys[0])) 
    9091036                values = model[1].get(keys[0]) 
     
    9641091        if node.get('version'): 
    9651092            # Get the version for model conversion purposes 
    966             x = re.sub('[^\d.]', '', node.get('version')) 
     1093            x = re.sub(r'[^\d.]', '', node.get('version')) 
    9671094            self.version = tuple(int(e) for e in str.split(x, ".")) 
    9681095            # The tuple must be at least 3 items long 
     
    9841111                try: 
    9851112                    self.timestamp = float(entry.get('epoch')) 
    986                 except Exception: 
     1113                except Exception as exc: 
    9871114                    msg = "PageState.fromXML: Could not" 
    988                     msg += " read timestamp\n %s" % sys.exc_value 
     1115                    msg += " read timestamp\n %s" % exc 
    9891116                    logger.error(msg) 
    9901117 
     
    12821409                        if isinstance(data.run_name, dict): 
    12831410                            # Note: key order in dict is not guaranteed, so sort 
    1284                             name = data.run_name.keys()[0] 
     1411                            name = list(data.run_name.keys())[0] 
    12851412                        else: 
    12861413                            name = data.run_name 
  • src/sas/sascalc/invariant/invariant.py

    r574adc7 rdbfd307  
    344344        else: 
    345345            A = np.vstack([linearized_data.x / linearized_data.dy, 1.0 / linearized_data.dy]).T 
    346             (p, residuals, _, _) = np.linalg.lstsq(A, linearized_data.y / linearized_data.dy) 
     346            # CRUFT: numpy>=1.14.0 allows rcond=None for the following default 
     347            rcond = np.finfo(float).eps * max(A.shape) 
     348            p, residuals, _, _ = np.linalg.lstsq(A, linearized_data.y / linearized_data.dy, 
     349                                                 rcond=rcond) 
    347350 
    348351            # Get the covariance matrix, defined as inv_cov = a_transposed * a 
  • src/sas/sascalc/pr/distance_explorer.py

    r959eb01 re090ba90  
    9999                results.pos_err.append(pos_err) 
    100100                results.osc.append(osc) 
    101             except: 
     101            except Exception as exc: 
    102102                # This inversion failed, skip this D_max value 
    103103                msg = "ExploreDialog: inversion failed for " 
    104                 msg += "D_max=%s\n %s" % (str(d), sys.exc_value) 
     104                msg += "D_max=%s\n %s" % (str(d), exc) 
    105105                results.errors.append(msg) 
    106106 
  • src/sas/sascalc/pr/fit/expression.py

    r574adc7 re090ba90  
    210210 
    211211    #print("Function: "+functiondef) 
    212     exec functiondef in globals,locals 
     212    exec(functiondef, globals, locals) 
    213213    retfn = locals['eval_expressions'] 
    214214 
  • src/sas/sascalc/pr/invertor.py

    r57e48ca r7af652d  
    474474 
    475475        # Perform the inversion (least square fit) 
    476         c, chi2, _, _ = lstsq(a, b, rcond=-1) 
     476        # CRUFT: numpy>=1.14.0 allows rcond=None for the following default 
     477        rcond = np.finfo(float).eps * max(a.shape) 
     478        c, chi2, _, _ = lstsq(a, b, rcond=rcond) 
    477479        # Sanity check 
    478480        try: 
  • src/sas/sascalc/pr/num_term.py

    r3e6829d r8c9e65c  
    182182                data_y = np.append(data_y, test_y) 
    183183                data_err = np.append(data_err, err) 
    184             except: 
    185                 logger.error(sys.exc_value) 
     184            except Exception as exc: 
     185                logger.error(exc) 
    186186 
    187187    return data_x, data_y, data_err 
  • src/sas/sascalc/realspace/VolumeCanvas.py

    r98e3f24 re090ba90  
    472472            Return a list of the shapes 
    473473        """ 
    474         return self.shapes.keys() 
     474        return list(self.shapes.keys()) 
    475475 
    476476    def _addSingleShape(self, shapeDesc): 
  • src/sas/sasgui/perspectives/corfunc/media/corfunc_help.rst

    r490f790 r4d06668  
    3030of the profile provides measures of the layer thickness, and the area under  
    3131the profile is related to the amount of material that is adsorbed. 
     32 
     33.. note:: 
     34    These transforms assume that the data has been measured on a pinhole- 
     35    collimated instrument or, if not, that the data has been Lorentz- 
     36    corrected beforehand. 
    3237 
    3338Both analyses are performed in 3 stages: 
  • src/sas/sasgui/perspectives/fitting/fitpage.py

    rca4f40d rcb44d66  
    5656        # draw sizer 
    5757        self._fill_data_sizer() 
    58         self.is_2D = None 
    5958        self.fit_started = False 
    6059        self.weightbt_string = None 
  • src/sas/sasgui/plottools/PlotPanel.py

    r2469df7 r75313af  
    14341434 
    14351435        """ 
     1436        # TODO: include mask info in plotter 
    14361437        self.data = data 
    14371438        self.qx_data = qx_data 
     
    14511452        else: 
    14521453            output = copy.deepcopy(self.data) 
    1453         # check scale 
     1454        # rescale data if necessary 
    14541455        if self.scale == 'log_{10}': 
    1455             try: 
    1456                 if  self.zmin_2D <= 0  and len(output[output > 0]) > 0: 
    1457                     zmin_temp = self.zmin_2D 
    1458                     output[output > 0] = np.log10(output[output > 0]) 
    1459                     #In log scale Negative values are not correct in general 
    1460                     #output[output<=0] = math.log(np.min(output[output>0])) 
    1461                 elif self.zmin_2D <= 0: 
    1462                     zmin_temp = self.zmin_2D 
    1463                     output[output > 0] = np.zeros(len(output)) 
    1464                     output[output <= 0] = -32 
    1465                 else: 
    1466                     zmin_temp = self.zmin_2D 
    1467                     output[output > 0] = np.log10(output[output > 0]) 
    1468                     #In log scale Negative values are not correct in general 
    1469                     #output[output<=0] = math.log(np.min(output[output>0])) 
    1470             except: 
    1471                 #Too many problems in 2D plot with scale 
    1472                 pass 
    1473  
    1474         else: 
    1475             zmin_temp = self.zmin_2D 
     1456            with np.errstate(all='ignore'): 
     1457                output = np.log10(output) 
     1458            index = np.isfinite(output) 
     1459            if not index.all(): 
     1460                cutoff = (np.min(output[index]) - np.log10(2) 
     1461                          if index.any() else 0.) 
     1462                output[~index] = cutoff 
     1463        # TODO: fix handling of zmin_2D/zmax_2D in _onToggleScale 
     1464        # For now, use default vmin/vmax from data 
     1465        #vmin, vmax = self.zmin_2D, self.zmax_2D 
     1466        vmin, vmax = None, None 
    14761467        self.cmap = cmap 
    14771468        if self.dimension != 3: 
    14781469            #Re-adjust colorbar 
    14791470            self.subplot.figure.subplots_adjust(left=0.2, right=.8, bottom=.2) 
    1480  
    14811471            im = self.subplot.imshow(output, interpolation='nearest', 
    14821472                                     origin='lower', 
    1483                                      vmin=zmin_temp, vmax=self.zmax_2D, 
     1473                                     vmin=vmin, vmax=vmax, 
    14841474                                     cmap=self.cmap, 
    14851475                                     extent=(self.xmin_2D, self.xmax_2D, 
Note: See TracChangeset for help on using the changeset viewer.