Changeset dceff6e in sasview for src/sas/sasgui/perspectives


Ignore:
Timestamp:
Aug 31, 2016 11:21:55 AM (8 years ago)
Author:
Gonzalez, Miguel <gonzalez@…>
Branches:
master, 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, costrafo411, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
ce94504
Parents:
ec30905 (diff), 4036cb0 (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 'master' of https://github.com/SasView/sasview

Location:
src/sas/sasgui/perspectives
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/calculator/data_operator.py

    re871a2d r0e760e9  
    1515from sas.sasgui.guiframe.documentation_window import DocumentationWindow 
    1616 
    17 #Control panel width  
     17#Control panel width 
    1818if sys.platform.count("win32") > 0: 
    1919    PANEL_TOP = 0 
     
    156156 
    157157        wx.EVT_TEXT_ENTER(self.data_namectr, -1, self.on_name) 
    158         wx.EVT_TEXT_ENTER(self.numberctr, -1, self.on_number) 
     158        wx.EVT_TEXT(self.numberctr, -1, self.on_number) 
    159159        wx.EVT_COMBOBOX(self.data1_cbox, -1, self.on_select_data1) 
    160160        wx.EVT_COMBOBOX(self.operator_cbox, -1, self.on_select_operator) 
     
    235235        self.name_sizer.Layout() 
    236236 
    237     def on_number(self, event=None): 
     237    def on_number(self, event=None, control=None): 
    238238        """ 
    239239        On selecting Number for Data2 
    240240        """ 
    241241        self.send_warnings('') 
    242         item = event.GetEventObject() 
     242        item = control 
     243        if item is None and event is not None: 
     244            item = event.GetEventObject() 
     245        elif item is None: 
     246            raise ValueError("Event or control must be supplied") 
    243247        text = item.GetValue().strip() 
    244248        if self.numberctr.IsShown(): 
     
    251255                except: 
    252256                    self._set_textctrl_color(self.numberctr, 'pink') 
    253                     msg = "DataOperation: Number requires a float number." 
    254                     self.send_warnings(msg, 'error') 
    255                     return 
     257                    if event is None: 
     258                        msg = "DataOperation: Number requires a float number." 
     259                        self.send_warnings(msg, 'error') 
     260                    return False 
    256261            else: 
    257262                self._set_textctrl_color(self.numberctr, self.color) 
     
    263268        self.draw_output(self.output) 
    264269        self.Refresh() 
     270        return True 
    265271 
    266272    def on_select_data1(self, event=None): 
     
    607613            wx.MessageBox(msg, 'Error') 
    608614            return 
     615        if self.numberctr.IsEnabled() and self.numberctr.IsShown(): 
     616            valid_num = self.on_number(control=self.numberctr) 
     617            if not valid_num: 
     618                return 
    609619        # send data to data manager 
    610620        self.output.name = name 
     
    731741        #add plot 
    732742        self.graph.add(plot) 
    733         #draw         
     743        #draw 
    734744        self.graph.render(self) 
    735745 
     
    985995    window = DataOperatorWindow(parent=None, data=[], title="Data Editor") 
    986996    app.MainLoop() 
    987  
  • src/sas/sasgui/perspectives/calculator/image_viewer.py

    rd0248bd r25b9707a  
    7373                    parent.put_icon(plot_frame) 
    7474            except: 
    75                 print "parent", parent 
    7675                err_msg += "Failed to load '%s'.\n" % basename 
    7776        if err_msg: 
     
    109108        """ 
    110109        # Initialize the Frame object 
    111         PlotFrame.__init__(self, parent, id, title, scale, size) 
     110        PlotFrame.__init__(self, parent, id, title, scale, size, 
     111            show_menu_icons=False) 
    112112        self.parent = parent 
    113113        self.data = image 
     
    437437    ImageView(None).load() 
    438438    app.MainLoop() 
    439  
  • src/sas/sasgui/perspectives/calculator/model_editor.py

    rbb841ef r9501661  
    578578                    else: 
    579579                        out_f.write(line + "\n") 
    580                 elif line.count("P1 = make_class"): 
     580                elif line.count("P1 = find_model"): 
    581581                    out_f.write(line % (name1) + "\n") 
    582                 elif line.count("P2 = make_class"): 
     582                elif line.count("P2 = find_model"): 
    583583                    out_f.write(line % (name2) + "\n") 
    584584 
     
    719719        Do the layout for parameter related widgets 
    720720        """ 
    721         param_txt = wx.StaticText(self, -1, 'Fit Parameters (if any): ') 
    722  
    723         param_tip = "#Set the parameters and initial values.\n" 
     721        param_txt = wx.StaticText(self, -1, 'Fit Parameters NOT requiring' + \ 
     722                                  ' polydispersity (if any): ') 
     723 
     724        param_tip = "#Set the parameters NOT requiring polydispersity " + \ 
     725        "and their initial values.\n" 
    724726        param_tip += "#Example:\n" 
    725727        param_tip += "A = 1\nB = 1" 
     
    736738         
    737739        # Parameters with polydispersity 
    738         pd_param_txt = wx.StaticText(self, -1, 'Fit Parameters requiring polydispersity (if any): ') 
    739  
    740         pd_param_tip = "#Set the parameters and initial values.\n" 
     740        pd_param_txt = wx.StaticText(self, -1, 'Fit Parameters requiring ' + \ 
     741                                     'polydispersity (if any): ') 
     742 
     743        pd_param_tip = "#Set the parameters requiring polydispersity and " + \ 
     744        "their initial values.\n" 
    741745        pd_param_tip += "#Example:\n" 
    742746        pd_param_tip += "C = 2\nD = 2" 
     
    803807        self.bt_close.SetToolTipString("Close this panel.") 
    804808 
    805         self.button_sizer.AddMany([(self.bt_apply, 0, 
    806                                     wx.LEFT, EDITOR_WIDTH * 0.8), 
    807                                    (self.bt_help, 0, 
    808                                     wx.LEFT,15), 
    809                                    (self.bt_close, 0, 
    810                                     wx.LEFT | wx.BOTTOM, 15)]) 
     809        self.button_sizer.AddMany([(self.bt_apply, 0,0), 
     810                                   (self.bt_help, 0, wx.LEFT | wx.BOTTOM,15), 
     811                                   (self.bt_close, 0, wx.LEFT | wx.RIGHT, 15)]) 
    811812 
    812813    def _do_layout(self): 
     
    835836                                  wx.ALL | wx.EXPAND, 5), 
    836837                                 (self.msg_sizer, 0, wx.EXPAND | wx.ALL, 5), 
    837                                  (self.button_sizer, 0, wx.EXPAND | wx.ALL, 5)]) 
     838                                 (self.button_sizer, 0, wx.ALIGN_RIGHT)]) 
    838839        self.SetSizer(self.main_sizer) 
    839840        self.SetAutoLayout(True) 
     
    12371238##import scipy? 
    12381239#class Model(Model1DPlugin): 
    1239 #    name = "" 
     1240#    name = basename without extension of __file__ 
    12401241#    def __init__(self): 
    12411242#        Model1DPlugin.__init__(self, name=self.name) 
    12421243#        #set name same as file name 
    1243 #        self.name = self.get_fname() 
    12441244#        #self.params here 
    12451245#        self.description = "%s" 
     
    13031303""" 
    13041304TEST_TEMPLATE = """ 
    1305     def get_fname(self): 
    1306         path = sys._getframe().f_code.co_filename 
    1307         basename  = os.path.basename(path) 
    1308         name, _ = os.path.splitext(basename) 
    1309         return name 
    13101305###################################################################### 
    13111306## THIS IS FOR TEST. DO NOT MODIFY THE FOLLOWING LINES!!!!!!!!!!!!!!!! 
     
    13301325import sys 
    13311326import copy 
     1327import collections 
    13321328 
    13331329import numpy 
    13341330 
    13351331from sas.sascalc.fit.pluginmodel import Model1DPlugin 
    1336 from sasmodels.sasview_model import make_class 
    1337 from sasmodels.core import load_model_info 
    1338 # User can change the name of the model (only with single functional model) 
    1339 #P1_model: 
    1340 #from %s import Model as P1 
    1341  
    1342 #P2_model: 
    1343 #from %s import Model as P2 
     1332from sasmodels.sasview_model import find_model 
    13441333 
    13451334class Model(Model1DPlugin): 
    1346     name = "" 
    1347     def __init__(self): 
     1335    name = os.path.splitext(os.path.basename(__file__))[0] 
     1336    is_multiplicity_model = False 
     1337    def __init__(self, multiplicity=1): 
    13481338        Model1DPlugin.__init__(self, name='') 
    1349         P1 = make_class('%s') 
    1350         P2 = make_class('%s') 
     1339        P1 = find_model('%s') 
     1340        P2 = find_model('%s') 
    13511341        p_model1 = P1() 
    13521342        p_model2 = P2() 
    13531343        ## Setting  model name model description 
    13541344        self.description = '%s' 
    1355         self.name = self.get_fname() 
    13561345        if self.name.rstrip().lstrip() == '': 
    13571346            self.name = self._get_name(p_model1.name, p_model2.name) 
     
    13621351 
    13631352        ## Define parameters 
    1364         self.params = {} 
     1353        self.params = collections.OrderedDict() 
    13651354 
    13661355        ## Parameter details [units, min, max] 
     
    13911380        #list of parameter that can be fitted 
    13921381        self._set_fixed_params() 
     1382 
    13931383        ## parameters with orientation 
     1384        self.orientation_params = [] 
    13941385        for item in self.p_model1.orientation_params: 
    13951386            new_item = "p1_" + item 
     
    14021393                self.orientation_params.append(new_item) 
    14031394        ## magnetic params 
     1395        self.magnetic_params = [] 
    14041396        for item in self.p_model1.magnetic_params: 
    14051397            new_item = "p1_" + item 
     
    14591451 
    14601452    def _set_dispersion(self): 
     1453        self.dispersion = collections.OrderedDict() 
    14611454        ##set dispersion only from p_model 
    14621455        for name , value in self.p_model1.dispersion.iteritems(): 
     
    15741567 
    15751568    def _set_fixed_params(self): 
     1569        self.fixed = [] 
    15761570        for item in self.p_model1.fixed: 
    15771571            new_item = "p1" + item 
     
    16241618        self.description += description 
    16251619 
    1626     def get_fname(self): 
    1627         path = sys._getframe().f_code.co_filename 
    1628         basename  = os.path.basename(path) 
    1629         name, _ = os.path.splitext(basename) 
    1630         return name 
    1631  
    16321620if __name__ == "__main__": 
    16331621    m1= Model() 
  • src/sas/sasgui/perspectives/calculator/pyconsole.py

    r26d6e045 r7673ecd  
    2727    """ 
    2828    # try running the model 
    29     from sasmodels.core import load_model, call_kernel 
    30     model = load_model(path) 
    31  
     29    from sasmodels.sasview_model import load_custom_model 
     30    Model = load_custom_model(path) 
     31    model = Model() 
    3232    q =  np.array([0.01, 0.1]) 
    33     kernel = model.make_kernel([q]) 
    34     Iq = call_kernel(kernel, {}) 
    35  
     33    Iq = model.evalDistribution(q) 
    3634    qx, qy =  np.array([0.01, 0.01]), np.array([0.1, 0.1]) 
    37     kernel = model.make_kernel([qx, qy]) 
    38     Iqxy = call_kernel(kernel, {}) 
     35    Iqxy = model.evalDistribution([qx, qy]) 
    3936 
    4037    result = """ 
     
    5653    except Exception: 
    5754        import traceback 
    58         result, errmsg = None, traceback.format_exc(limit=2) 
     55        result, errmsg = None, traceback.format_exc() 
    5956 
    6057    parts = ["Running model '%s'..." % os.path.basename(fname)] 
  • src/sas/sasgui/perspectives/fitting/basepage.py

    rcb4ef58 ree4b3cb  
    1212import json 
    1313import logging 
     14import traceback 
     15 
    1416from collections import defaultdict 
    1517from wx.lib.scrolledpanel import ScrolledPanel 
     18 
     19import sasmodels.sasview_model 
    1620from sas.sasgui.guiframe.panel_base import PanelBase 
    1721from sas.sasgui.guiframe.utils import format_number, check_float, IdList 
     
    198202        self.state_change = False 
    199203        ## save customized array 
    200         self.values = [] 
    201         self.weights = [] 
     204        self.values = {}   # type: Dict[str, List[float, ...]] 
     205        self.weights = {}   # type: Dict[str, List[float, ...]] 
    202206        ## retrieve saved state 
    203207        self.number_saved_state = 0 
     
    852856                    angles.append(angle) 
    853857                    weights.append(weight) 
    854                 except: 
     858                except Exception: 
    855859                    # Skip non-data lines 
    856                     logging.error(sys.exc_info()[1]) 
     860                    logging.error(traceback.format_exc()) 
    857861            return numpy.array(angles), numpy.array(weights) 
    858862        except: 
     
    13931397                self.model._persistency_dict[key] = \ 
    13941398                                 [state.values, state.weights] 
    1395             except: 
    1396                 logging.error(sys.exc_info()[1]) 
     1399            except Exception: 
     1400                logging.error(traceback.format_exc()) 
    13971401            selection = self._find_polyfunc_selection(disp_model) 
    13981402            for list in self.fittable_param: 
     
    14101414                            list[5].Disable() 
    14111415                            list[6].Disable() 
    1412                         except: 
    1413                             logging.error(sys.exc_info()[1]) 
     1416                        except Exception: 
     1417                            logging.error(traceback.format_exc()) 
    14141418            # For array, disable all fixed params 
    14151419            if selection == 1: 
     
    14191423                        try: 
    14201424                            item[2].Disable() 
    1421                         except: 
    1422                             logging.error(sys.exc_info()[1]) 
     1425                        except Exception: 
     1426                            logging.error(traceback.format_exc()) 
    14231427 
    14241428        # Make sure the check box updated when all checked 
     
    15001504            is_2Ddata = True 
    15011505        if self.model != None: 
    1502             try: 
    1503                 is_modified = self._check_value_enter(self.fittable_param, 
    1504                                                       is_modified) 
    1505                 is_modified = self._check_value_enter(self.fixed_param, 
    1506                                                       is_modified) 
    1507                 is_modified = self._check_value_enter(self.parameters, 
    1508                                                       is_modified) 
    1509             except: 
    1510                 logging.error(sys.exc_info()[1]) 
     1506            is_modified = (self._check_value_enter(self.fittable_param) 
     1507                           or self._check_value_enter(self.fixed_param) 
     1508                           or self._check_value_enter(self.parameters)) 
    15111509 
    15121510            # Here we should check whether the boundaries have been modified. 
     
    15571555        flag = True 
    15581556        self.fitrange = True 
    1559         is_modified = False 
    15601557 
    15611558        #wx.PostEvent(self._manager.parent, StatusEvent(status=" \ 
     
    15701567                                                                [self.data]) 
    15711568            ##Check the values 
    1572             self._check_value_enter(self.fittable_param, is_modified) 
    1573             self._check_value_enter(self.fixed_param, is_modified) 
    1574             self._check_value_enter(self.parameters, is_modified) 
     1569            self._check_value_enter(self.fittable_param) 
     1570            self._check_value_enter(self.fixed_param) 
     1571            self._check_value_enter(self.parameters) 
    15751572 
    15761573            # If qmin and qmax have been modified, update qmin and qmax and 
     
    16511648        try: 
    16521649            self.save_current_state() 
    1653         except: 
    1654             logging.error(sys.exc_info()[1]) 
     1650        except Exception: 
     1651            logging.error(traceback.format_exc()) 
    16551652 
    16561653        return flag 
    1657  
    1658     def _is_modified(self, is_modified): 
    1659         """ 
    1660         return to self._is_modified 
    1661         """ 
    1662         return is_modified 
    16631654 
    16641655    def _reset_parameters_state(self, listtorestore, statelist): 
     
    18951886            if mod_cat == custom_model: 
    18961887                for model in self.model_list_box[mod_cat]: 
    1897                     if 'sasmodels.sasview_model.' in str(model): 
    1898                         str_m = model.id 
    1899                     else: 
    1900                         str_m = str(model).split(".")[0] 
    1901                     #self.model_box.Append(str_m) 
     1888                    str_m = model.id if hasattr(model, 'id') else model.name 
    19021889                    m_list.append(self.model_dict[str_m]) 
    19031890            else: 
     
    19101897                    #    wx.PostEvent(self.parent.parent, 
    19111898                    #                 StatusEvent(status=msg, info="error")) 
    1912         except: 
    1913             msg = "%s\n" % (sys.exc_info()[1]) 
     1899        except Exception: 
     1900            msg = traceback.format_exc() 
    19141901            wx.PostEvent(self._manager.parent, 
    19151902                         StatusEvent(status=msg, info="error")) 
     
    19641951        wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    19651952        # Flag to register when a parameter has changed. 
    1966         #is_modified = False 
    19671953        if tcrtl.GetValue().lstrip().rstrip() != "": 
    19681954            try: 
     
    19941980                    if temp_npts != self.num_points: 
    19951981                        self.num_points = temp_npts 
    1996                         #is_modified = True 
    19971982                else: 
    19981983                    msg = "Cannot plot: No points in Q range!!!  " 
     
    21462131                self.temp_multi_functional = True 
    21472132        elif form_factor != None: 
    2148             self.model = form_factor(self.multi_factor) 
     2133            if self.multi_factor is not None: 
     2134                self.model = form_factor(self.multi_factor) 
     2135            else: 
     2136                # old style plugin models do not accept a multiplicity argument 
     2137                self.model = form_factor() 
    21492138        else: 
    21502139            self.model = None 
     
    21652154        self.on_set_focus(None) 
    21662155        self.Layout() 
     2156 
    21672157 
    21682158    def _validate_qrange(self, qmin_ctrl, qmax_ctrl): 
     
    22722262        return flag 
    22732263 
    2274     def _check_value_enter(self, list, modified): 
     2264    def _check_value_enter(self, list): 
    22752265        """ 
    22762266        :param list: model parameter and panel info 
     
    22822272                parameter's maximum value , 
    22832273                parameter's units] 
    2284         """ 
    2285         is_modified = modified 
    2286         if len(list) == 0: 
    2287             return is_modified 
     2274 
     2275        Returns True if the model parameters have changed. 
     2276        """ 
     2277        is_modified = False 
    22882278        for item in list: 
    22892279            #skip angle parameters for 1D 
    2290             if not self.enable2D: 
    2291                 if item in self.orientation_params: 
    2292                     continue 
    2293             #try: 
     2280            if not self.enable2D and item in self.orientation_params: 
     2281                continue 
     2282 
    22942283            name = str(item[1]) 
    2295  
    2296             if string.find(name, ".npts") == -1 and \ 
    2297                                         string.find(name, ".nsigmas") == -1: 
    2298                 ## check model parameters range 
    2299                 param_min = None 
    2300                 param_max = None 
    2301  
    2302                 ## check minimun value 
    2303                 if item[5] != None and item[5] != "": 
    2304                     if item[5].GetValue().lstrip().rstrip() != "": 
    2305                         try: 
    2306                             param_min = float(item[5].GetValue()) 
    2307                             if not self._validate_qrange(item[5], item[2]): 
    2308                                 if numpy.isfinite(param_min): 
    2309                                     item[2].SetValue(format_number(param_min)) 
    2310  
    2311                             item[5].SetBackgroundColour(wx.WHITE) 
    2312                             item[2].SetBackgroundColour(wx.WHITE) 
    2313  
    2314                         except: 
    2315                             msg = "Wrong fit parameter range entered" 
    2316                             wx.PostEvent(self._manager.parent, 
    2317                                          StatusEvent(status=msg)) 
    2318                             raise ValueError, msg 
    2319                         is_modified = True 
    2320                 ## check maximum value 
    2321                 if item[6] != None and item[6] != "": 
    2322                     if item[6].GetValue().lstrip().rstrip() != "": 
    2323                         try: 
    2324                             param_max = float(item[6].GetValue()) 
    2325                             if not self._validate_qrange(item[2], item[6]): 
    2326                                 if numpy.isfinite(param_max): 
    2327                                     item[2].SetValue(format_number(param_max)) 
    2328  
    2329                             item[6].SetBackgroundColour(wx.WHITE) 
    2330                             item[2].SetBackgroundColour(wx.WHITE) 
    2331                         except: 
    2332                             msg = "Wrong Fit parameter range entered " 
    2333                             wx.PostEvent(self._manager.parent, 
    2334                                          StatusEvent(status=msg)) 
    2335                             raise ValueError, msg 
    2336                         is_modified = True 
    2337  
    2338                 if param_min != None and param_max != None: 
    2339                     if not self._validate_qrange(item[5], item[6]): 
    2340                         msg = "Wrong Fit range entered for parameter " 
    2341                         msg += "name %s of model %s " % (name, self.model.name) 
    2342                         wx.PostEvent(self._manager.parent, 
    2343                                      StatusEvent(status=msg)) 
    2344  
    2345                 if name in self.model.details.keys(): 
    2346                     self.model.details[name][1:3] = param_min, param_max 
    2347                     is_modified = True 
    2348                 else: 
    2349                     self.model.details[name] = ["", param_min, param_max] 
    2350                     is_modified = True 
    2351             try: 
    2352                 # Check if the textctr is enabled 
    2353                 if item[2].IsEnabled(): 
    2354                     value = float(item[2].GetValue()) 
    2355                     item[2].SetBackgroundColour("white") 
    2356                     # If the value of the parameter has changed, 
    2357                     # +update the model and set the is_modified flag 
    2358                     if value != self.model.getParam(name) and \ 
    2359                                                 numpy.isfinite(value): 
    2360                         self.model.setParam(name, value) 
    2361             except: 
    2362                 item[2].SetBackgroundColour("pink") 
    2363                 msg = "Wrong Fit parameter value entered " 
    2364                 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
     2284            if name.endswith(".npts") or name.endswith(".nsigmas"): 
     2285                continue 
     2286 
     2287            # Check that min, max and value are floats 
     2288            value_ctrl, min_ctrl, max_ctrl = item[2], item[5], item[6] 
     2289            min_str = min_ctrl.GetValue().strip() 
     2290            max_str = max_ctrl.GetValue().strip() 
     2291            value_str = value_ctrl.GetValue().strip() 
     2292            validity = check_float(value_ctrl) 
     2293            if min_str != "": 
     2294                validity = validity and check_float(min_ctrl) 
     2295            if max_str != "": 
     2296                validity = validity and check_float(max_ctrl) 
     2297            if not validity: 
     2298                continue 
     2299 
     2300            # Check that min is less than max 
     2301            low = -numpy.inf if min_str == "" else float(min_str) 
     2302            high = numpy.inf if max_str == "" else float(max_str) 
     2303            if high < low: 
     2304                min_ctrl.SetBackgroundColour("pink") 
     2305                min_ctrl.Refresh() 
     2306                max_ctrl.SetBackgroundColour("pink") 
     2307                max_ctrl.Refresh() 
     2308                #msg = "Invalid fit range for %s: min must be smaller than max"%name 
     2309                #wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
     2310                continue 
     2311 
     2312            # Force value between min and max 
     2313            value = float(value_str) 
     2314            if value < low: 
     2315                value = low 
     2316                value_ctrl.SetValue(format_number(value)) 
     2317            elif value > high: 
     2318                value = high 
     2319                value_ctrl.SetValue(format_number(value)) 
     2320 
     2321            # Update value in model if it has changed 
     2322            if value != self.model.getParam(name): 
     2323                self.model.setParam(name, value) 
     2324                is_modified = True 
     2325 
     2326            if name not in self.model.details.keys(): 
     2327                self.model.details[name] = ["", None, None] 
     2328            old_low, old_high = self.model.details[name][1:3] 
     2329            if old_low != low or old_high != high: 
     2330                # The configuration has changed but it won't change the 
     2331                # computed curve so no need to set is_modified to True 
     2332                #is_modified = True 
     2333                self.model.details[name][1:3] = low, high 
    23652334 
    23662335        return is_modified 
     
    24742443                try: 
    24752444                    self.model.set_dispersion(p, disp_model) 
    2476                 except: 
    2477                     logging.error(sys.exc_info()[1]) 
     2445                except Exception: 
     2446                    logging.error(traceback.format_exc()) 
    24782447 
    24792448        ## save state into 
     
    25882557            self._draw_model() 
    25892558            self.Refresh() 
    2590         except: 
     2559        except Exception: 
     2560            logging.error(traceback.format_exc()) 
    25912561            # Error msg 
    25922562            msg = "Error occurred:" 
     
    26802650        # Try to delete values and weight of the names array dic if exists 
    26812651        try: 
    2682             del self.values[name] 
    2683             del self.weights[name] 
    2684             # delete all other dic 
    2685             del self.state.values[name] 
    2686             del self.state.weights[name] 
    2687             del self.model._persistency_dict[name.split('.')[0]] 
    2688             del self.state.model._persistency_dict[name.split('.')[0]] 
    2689         except: 
    2690             logging.error(sys.exc_info()[1]) 
     2652            if name in self.values: 
     2653                del self.values[name] 
     2654                del self.weights[name] 
     2655                # delete all other dic 
     2656                del self.state.values[name] 
     2657                del self.state.weights[name] 
     2658                del self.model._persistency_dict[name.split('.')[0]] 
     2659                del self.state.model._persistency_dict[name.split('.')[0]] 
     2660        except Exception: 
     2661            logging.error(traceback.format_exc()) 
    26912662 
    26922663    def _lay_out(self): 
     
    28322803                        graphs.append(item2.figure) 
    28332804                        canvases.append(item2.canvas) 
    2834             except: 
     2805            except Exception: 
    28352806                # Not for control panels 
    2836                 logging.error(sys.exc_info()[1]) 
     2807                logging.error(traceback.format_exc()) 
    28372808        # Make sure the resduals plot goes to the last 
    28382809        if res_item != None: 
     
    29362907        """ 
    29372908 
    2938         _TreeLocation = "user/sasgui/perspectives/fitting/mag_help.html" 
     2909        _TreeLocation = "user/magnetism.html" 
    29392910        _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, "", 
    29402911                                          "Polarized Beam/Magnetc Help") 
     
    31673138                if item[7].__class__.__name__ == 'ComboBox': 
    31683139                    disfunc = str(item[7].GetValue()) 
    3169             except: 
    3170                 logging.error(sys.exc_info()[1]) 
     3140            except Exception: 
     3141                logging.error(traceback.format_exc()) 
    31713142 
    31723143            # 2D 
     
    31743145                try: 
    31753146                    check = item[0].GetValue() 
    3176                 except: 
     3147                except Exception: 
    31773148                    check = None 
    31783149                name = item[1] 
     
    32023173                    for weight in self.weights[name]: 
    32033174                        disfunc += ' ' + str(weight) 
    3204             except: 
    3205                 logging.error(sys.exc_info()[1]) 
     3175            except Exception: 
     3176                logging.error(traceback.format_exc()) 
    32063177            content += name + ',' + str(check) + ',' + value + disfunc + ':' 
    32073178 
     
    34033374                                                       weights=pd_weights) 
    34043375                            is_array = True 
    3405                 except: 
    3406                     logging.error(sys.exc_info()[1]) 
     3376                except Exception: 
     3377                    logging.error(traceback.format_exc()) 
    34073378                if not is_array: 
    34083379                    self._disp_obj_dict[name] = disp_model 
     
    34183389                                             self.state.weights] 
    34193390 
    3420             except: 
    3421                 logging.error(sys.exc_info()[1]) 
     3391            except Exception: 
     3392                logging.error(traceback.format_exc()) 
    34223393                print "Error in BasePage._paste_poly_help: %s" % \ 
    34233394                                        sys.exc_info()[1] 
  • src/sas/sasgui/perspectives/fitting/batchfitpage.py

    rfc18690 ree4b3cb  
    256256#         if self.model != None:            
    257257#             ##Check the values 
    258 #             self._check_value_enter( self.fittable_param, is_modified) 
    259 #             self._check_value_enter( self.fixed_param, is_modified) 
    260 #             self._check_value_enter( self.parameters, is_modified) 
     258#             self._check_value_enter( self.fittable_param) 
     259#             self._check_value_enter( self.fixed_param) 
     260#             self._check_value_enter( self.parameters) 
    261261#  
    262262#             # If qmin and qmax have been modified, update qmin and qmax and  
  • src/sas/sasgui/perspectives/fitting/fitpage.py

    r934ce649 ree4b3cb  
    13651365            try: 
    13661366                tcrtl.SetBackgroundColour(wx.WHITE) 
    1367                 self._check_value_enter(self.fittable_param, is_modified) 
    1368                 self._check_value_enter(self.parameters, is_modified) 
     1367                self._check_value_enter(self.fittable_param) 
     1368                self._check_value_enter(self.parameters) 
    13691369            except: 
    13701370                tcrtl.SetBackgroundColour("pink") 
  • src/sas/sasgui/perspectives/fitting/fitting.py

    r934ce649 r7673ecd  
    273273                        wx.PostEvent(self.parent, evt) 
    274274                        break 
    275         except: 
     275        except Exception: 
     276            import traceback; traceback.print_exc() 
    276277            msg = 'Delete Error: \nCould not delete the file; Check if in use.' 
    277278            wx.MessageBox(msg, 'Error') 
     
    579580                _, theory_state = item 
    580581                self.fit_panel.set_model_state(theory_state) 
    581             except: 
     582            except Exception: 
    582583                msg = "Fitting: cannot deal with the theory received" 
    583584                evt = StatusEvent(status=msg, info="error") 
  • src/sas/sasgui/perspectives/fitting/media/fitting_help.rst

    r20846be rb64b87c  
    1515 
    1616 
    17 Fitting Perspective 
    18 =================== 
     17Fitting 
     18======= 
    1919 
    2020.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
     
    2424 
    2525To fit some data you must first load some data, activate one or more data sets, 
    26 send those data sets to the fitting perspective, and select a model to fit to 
    27 each data set. 
     26send those data sets to fitting, and select a model to fit to each data set. 
    2827 
    2928Instructions on how to load and activate data are in the section :ref:`Loading_data`. 
     
    331330This mode fits one data set. 
    332331 
    333 When data is sent to the fitting perspective it is plotted in a graph window as 
    334 markers. 
     332When data is sent to the fitting it is plotted in a graph window as markers. 
    335333 
    336334If a graph does not appear, or a graph window appears but is empty, then the data 
  • src/sas/sasgui/perspectives/fitting/media/pd_help.rst

    r7805458 rb64b87c  
    105105 
    106106The median value for the distribution will be the value given for the respective 
    107 size parameter in the *Fitting Perspective*, for example, radius = 60. 
     107size parameter in the *FitPage*, for example, radius = 60. 
    108108 
    109109The polydispersity is given by |sigma| 
     
    172172 
    173173SasView only uses these array values during the computation, therefore any mean 
    174 value of the parameter represented by *x* present in the *Fitting Perspective* 
     174value of the parameter represented by *x* present in the *FitPage* 
    175175will be ignored. 
    176176 
  • src/sas/sasgui/perspectives/fitting/models.py

    r6afc14b rdceff6e  
    22    Utilities to manage models 
    33""" 
    4 import imp 
     4import traceback 
    55import os 
    66import sys 
     
    88# Time is needed by the log method 
    99import time 
     10import datetime 
    1011import logging 
    1112import py_compile 
     
    2021 
    2122PLUGIN_DIR = 'plugin_models' 
     23PLUGIN_LOG = os.path.join(os.path.expanduser("~"), '.sasview', PLUGIN_DIR, 
     24                          "plugins.log") 
    2225 
    2326def get_model_python_path(): 
     
    2831 
    2932 
    30 def log(message): 
     33def plugin_log(message): 
    3134    """ 
    3235    Log a message in a file located in the user's home directory 
    3336    """ 
    34     dir = os.path.join(os.path.expanduser("~"), '.sasview', PLUGIN_DIR) 
    35     out = open(os.path.join(dir, "plugins.log"), 'a') 
    36     out.write("%10g:  %s\n" % (time.clock(), message)) 
     37    out = open(PLUGIN_LOG, 'a') 
     38    now = time.time() 
     39    stamp = datetime.datetime.fromtimestamp(now).strftime('%Y-%m-%d %H:%M:%S') 
     40    out.write("%s: %s\n" % (stamp, message)) 
    3741    out.close() 
    3842 
     
    5155    if not issubclass(model, Model1DPlugin): 
    5256        msg = "Plugin %s must be of type Model1DPlugin \n" % str(name) 
    53         log(msg) 
     57        plugin_log(msg) 
    5458        return None 
    5559    if model.__name__ != "Model": 
    5660        msg = "Plugin %s class name must be Model \n" % str(name) 
    57         log(msg) 
     61        plugin_log(msg) 
    5862        return None 
    5963    try: 
     
    6367                                                             str(sys.exc_type), 
    6468                                                             sys.exc_info()[1]) 
    65         log(msg) 
     69        plugin_log(msg) 
    6670        return None 
    6771 
     
    7276            msg = "Plugin %s: error writing function \n\t :%s %s\n " % \ 
    7377                    (str(name), str(sys.exc_type), sys.exc_info()[1]) 
    74             log(msg) 
     78            plugin_log(msg) 
    7579            return None 
    7680    else: 
    7781        msg = "Plugin  %s needs a method called function \n" % str(name) 
    78         log(msg) 
     82        plugin_log(msg) 
    7983        return None 
    8084    return model 
     
    132136    """ 
    133137    def __nonzero__(self): 
    134         type, value, traceback = sys.exc_info() 
     138        type, value, tb = sys.exc_info() 
    135139        if type is not None and issubclass(type, py_compile.PyCompileError): 
    136140            print "Problem with", repr(value) 
    137             raise type, value, traceback 
     141            raise type, value, tb 
    138142        return 1 
    139143 
     
    155159 
    156160def _findModels(dir): 
     161    """ 
     162    Find custom models 
     163    """ 
    157164    # List of plugin objects 
    158     plugins = {} 
    159165    dir = find_plugins_dir() 
    160166    # Go through files in plug-in directory 
    161     #always recompile the folder plugin 
    162167    if not os.path.isdir(dir): 
    163         msg = "SasView couldn't locate Model plugin folder." 
    164         msg += """ "%s" does not exist""" % dir 
     168        msg = "SasView couldn't locate Model plugin folder %r." % dir 
    165169        logging.warning(msg) 
    166         return plugins 
    167     else: 
    168         log("looking for models in: %s" % str(dir)) 
    169         compile_file(dir) 
    170         logging.info("plugin model dir: %s" % str(dir)) 
    171     try: 
    172         list = os.listdir(dir) 
    173         for item in list: 
    174             toks = os.path.splitext(os.path.basename(item)) 
    175             if toks[1] == '.py' and not toks[0] == '__init__': 
    176                 name = toks[0] 
    177                 path = [os.path.abspath(dir)] 
    178                 file = None 
    179                 try: 
    180                     (file, path, info) = imp.find_module(name, path) 
    181                     module = imp.load_module(name, file, item, info) 
    182                     if hasattr(module, "Model"): 
    183                         try: 
    184                             if _check_plugin(module.Model, name) != None: 
    185                                 plugins[name] = module.Model 
    186                         except: 
    187                             msg = "Error accessing Model" 
    188                             msg += "in %s\n  %s %s\n" % (name, 
    189                                                          str(sys.exc_type), 
    190                                                          sys.exc_info()[1]) 
    191                             log(msg) 
    192                     else: 
    193                         filename = os.path.join(dir, item) 
    194                         plugins[name] = load_custom_model(filename) 
    195  
    196                 except: 
    197                     msg = "Error accessing Model" 
    198                     msg += " in %s\n  %s %s \n" % (name, 
    199                                                    str(sys.exc_type), 
    200                                                    sys.exc_info()[1]) 
    201                     log(msg) 
    202                 finally: 
    203  
    204                     if not file == None: 
    205                         file.close() 
    206     except: 
    207         # Don't deal with bad plug-in imports. Just skip. 
    208         msg = "Could not import model plugin: %s" % sys.exc_info()[1] 
    209         log(msg) 
    210  
     170        return {} 
     171 
     172    plugin_log("looking for models in: %s" % str(dir)) 
     173    #compile_file(dir)  #always recompile the folder plugin 
     174    logging.info("plugin model dir: %s" % str(dir)) 
     175 
     176    plugins = {} 
     177    for filename in os.listdir(dir): 
     178        name, ext = os.path.splitext(filename) 
     179        if ext == '.py' and not name == '__init__': 
     180            path = os.path.abspath(os.path.join(dir, filename)) 
     181            try: 
     182                model = load_custom_model(path) 
     183                plugins[model.name] = model 
     184            except Exception: 
     185                msg = traceback.format_exc() 
     186                msg += "\nwhile accessing model in %r" % path 
     187                plugin_log(msg) 
     188                logging.warning("Failed to load plugin %r. See %s for details" 
     189                                % (path, PLUGIN_LOG)) 
     190             
    211191    return plugins 
    212192 
  • src/sas/sasgui/perspectives/fitting/pagestate.py

    rc10d9d6c r7673ecd  
    1919import logging 
    2020import numpy 
    21 import string 
     21import traceback 
    2222 
    2323import xml.dom.minidom 
     
    473473            try: 
    474474                value = content[1] 
    475             except: 
    476                 logging.error(sys.exc_value) 
     475            except Exception: 
     476                logging.error(traceback.format_exc()) 
    477477            if name.count("State created"): 
    478478                repo_time = "" + value 
     
    515515                        title = content[2] + " [" + repo_time + "]" 
    516516                        title_name = HEADER % title 
    517                 except: 
    518                     logging.error(sys.exc_value) 
     517                except Exception: 
     518                    logging.error(traceback.format_exc()) 
    519519            if name == "model name ": 
    520520                try: 
     
    530530                    q_name = ("Q Range:    " + q_range) 
    531531                    q_range = CENTRE % q_name 
    532                 except: 
    533                     logging.error(sys.exc_value) 
     532                except Exception: 
     533                    logging.error(traceback.format_exc()) 
    534534        paramval = "" 
    535535        for lines in param_string.split(":"): 
     
    864864                            attribute = getattr(self, item[1]) 
    865865                            attribute[name] = com_name 
    866                         except: 
    867                             logging.error(sys.exc_value) 
     866                        except Exception: 
     867                            logging.error(traceback.format_exc()) 
    868868 
    869869                # get self.values and self.weights dic. if exists 
     
    880880                                val = float(line) 
    881881                                value_list.append(val) 
    882                             except: 
     882                            except Exception: 
    883883                                # pass if line is empty (it happens) 
    884                                 logging.error(sys.exc_value) 
     884                                logging.error(traceback.format_exc()) 
    885885                        dic[name] = numpy.array(value_list) 
    886886                    setattr(self, item[1], dic) 
     
    12931293                    if len(note_value) > 0: 
    12941294                        data_info.notes.append(note_value) 
    1295             except: 
     1295            except Exception: 
    12961296                err_mess = "cansas_reader.read: error processing entry notes\n  %s" % sys.exc_value 
    12971297                self.errors.append(err_mess) 
     
    13151315                    if len(detail_value) > 0: 
    13161316                        data_info.sample.details.append(detail_value) 
    1317             except: 
     1317            except Exception: 
    13181318                err_mess = "cansas_reader.read: error processing sample details\n  %s" % sys.exc_value 
    13191319                self.errors.append(err_mess) 
  • src/sas/sasgui/perspectives/invariant/invariant_panel.py

    rc12f9b4 rcb93b40  
    250250 
    251251            num = self.state.saved_state['state_num'] 
    252             if num > 0: 
     252            if int(num) > 0: 
    253253                self._set_undo_flag(True) 
    254             if num < len(state.state_list) - 1: 
     254            if int(num) < len(state.state_list) - 1: 
    255255                self._set_redo_flag(True) 
    256256 
     
    18601860                                   (self.button_calculate, 0, 
    18611861                                    wx.RIGHT | wx.TOP | wx.BOTTOM, 10), 
    1862                                    (self.button_help, 0,  
     1862                                   (self.button_help, 0, 
    18631863                                    wx.RIGHT | wx.TOP | wx.BOTTOM, 10),]) 
    18641864    def _do_layout(self): 
     
    18821882        self.SetSizer(self.main_sizer) 
    18831883        self.SetAutoLayout(True) 
    1884          
     1884 
    18851885    def on_help(self, event): 
    18861886        """ 
    1887         Bring up the Invariant Documentation whenever the HELP button is  
     1887        Bring up the Invariant Documentation whenever the HELP button is 
    18881888        clicked. 
    18891889 
  • src/sas/sasgui/perspectives/invariant/invariant_state.py

    rc10d9d6c rcb93b40  
    426426                        if input_field is not None: 
    427427                            temp_state[item] = val 
    428                             self.state_list[ind] = temp_state 
     428                            self.state_list[str(ind)] = temp_state 
    429429 
    430430            # Parse current state (ie, saved_state) 
     
    790790            doc = state.toXML(datainfo.name, doc=doc, entry_node=sasentry) 
    791791        return doc 
    792  
  • src/sas/sasgui/perspectives/invariant/media/invariant_help.rst

    r70305bd2 rb64b87c  
    44.. by S King, ISIS, during SasView CodeCamp-III in Feb 2015. 
    55 
    6 Invariant Calculation Perspective 
    7 ================================= 
     6Invariant Calculation 
     7===================== 
    88 
    99Description 
     
    4545.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
    4646 
    47 Using the perspective 
    48 --------------------- 
     47Using invariant analysis 
     48------------------------ 
    4949 
    50501) Select *Invariant* from the *Analysis* menu on the SasView toolbar. 
     
    5353 
    54543) Select a dataset and use the *Send To* button on the *Data Explorer* to load  
    55    the dataset into the *Invariant* perspective. 
     55   the dataset into the *Invariant* panel. 
    5656 
    57 4) Use the *Customised Input* boxes on the *Invariant* perspective to subtract  
     574) Use the *Customised Input* boxes on the *Invariant* panel to subtract  
    5858   any background, specify the contrast (i.e. difference in SLDs - this must be  
    5959   specified for the eventual value of Q*\  to be on an absolute scale), or to  
     
    7373 
    74748) If the value of Q*\  calculated with the extrapolated regions is invalid, a  
    75    red warning will appear at the top of the *Invariant* perspective panel. 
     75   red warning will appear at the top of the *Invariant* panel. 
    7676 
    7777   The details of the calculation are available by clicking the *Details*  
  • src/sas/sasgui/perspectives/pr/media/pr_help.rst

    r7805458 rb64b87c  
    44.. by S King, ISIS, during SasView CodeCamp-III in Feb 2015. 
    55 
    6 P(r) Inversion Perspective 
    7 ========================== 
     6P(r) Calculation 
     7================ 
    88 
    99Description 
     
    3232.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 
    3333 
    34 Using the perspective 
    35 --------------------- 
     34Using P(r) inversion 
     35-------------------- 
    3636 
    3737The user must enter 
Note: See TracChangeset for help on using the changeset viewer.