Changeset 72c969b in sasview for src/sans/perspectives


Ignore:
Timestamp:
Sep 8, 2014 5:57:17 AM (10 years ago)
Author:
pkienzle
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.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
1792311
Parents:
a9807efa (diff), 5b1392f (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:

sync with trunk

Location:
src/sans/perspectives/fitting
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • src/sans/perspectives/fitting/basepage.py

    r116e1a7 rbf5e985  
    9696        self.num_points = None 
    9797        ## default fitengine type 
    98         self.engine_type = 'scipy' 
     98        self.engine_type = 'bumps' 
    9999        ## smear default 
    100100        self.current_smearer = None 
     
    835835            infor = "warning" 
    836836        else: 
    837             msg = "Error was occured " 
    838             msg += ": No valid parameter values to paste from the clipboard..." 
     837            msg = "Error occured: " 
     838            msg += "No valid parameter values to paste from the clipboard..." 
    839839            infor = "error" 
    840840            wx.PostEvent(self._manager.parent, 
     
    21832183                else: 
    21842184                    tcrtl.SetBackgroundColour("pink") 
    2185                     msg = "Model Error:wrong value entered: %s" % sys.exc_value 
     2185                    msg = "Model Error: wrong value entered: %s" % sys.exc_value 
    21862186                    wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    21872187                    return 
    21882188            except: 
    21892189                tcrtl.SetBackgroundColour("pink") 
    2190                 msg = "Model Error:wrong value entered: %s" % sys.exc_value 
     2190                msg = "Model Error: wrong value entered: %s" % sys.exc_value 
    21912191                wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    21922192                return 
     
    21992199                        #is_modified = True 
    22002200                else: 
    2201                     msg = "Cannot Plot :No npts in that Qrange!!!  " 
     2201                    msg = "Cannot plot: No points in Q range!!!  " 
    22022202                    wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    22032203        else: 
    22042204            tcrtl.SetBackgroundColour("pink") 
    2205             msg = "Model Error:wrong value entered!!!" 
     2205            msg = "Model Error: wrong value entered!!!" 
    22062206            wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    22072207        self.save_current_state() 
     
    22402240                else: 
    22412241                    tcrtl.SetBackgroundColour("pink") 
    2242                     msg = "Model Error:wrong value entered: %s" % sys.exc_value 
     2242                    msg = "Model Error: wrong value entered: %s" % sys.exc_value 
    22432243                    wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    22442244                    return 
    22452245            except: 
    22462246                tcrtl.SetBackgroundColour("pink") 
    2247                 msg = "Model Error:wrong value entered: %s" % sys.exc_value 
     2247                msg = "Model Error: wrong value entered: %s" % sys.exc_value 
    22482248                wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    22492249                return 
     
    22562256                        is_modified = True 
    22572257                else: 
    2258                     msg = "Cannot Plot :No npts in that Qrange!!!  " 
     2258                    msg = "Cannot Plot: No points in Q range!!!  " 
    22592259                    wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    22602260        else: 
    22612261            tcrtl.SetBackgroundColour("pink") 
    2262             msg = "Model Error:wrong value entered!!!" 
     2262            msg = "Model Error: wrong value entered!!!" 
    22632263            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    22642264        self.save_current_state() 
     
    24312431                self.qmax.SetBackgroundColour("pink") 
    24322432                self.qmax.Refresh() 
    2433                 msg = "Npts of Data Error :" 
    2434                 msg += "No or too little npts of %s." % data.name 
     2433                msg = "Data Error: " 
     2434                msg += "Too few points in %s." % data.name 
    24352435                wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    24362436                self.fitrange = False 
     
    24662466                self.qmax.SetBackgroundColour("pink") 
    24672467                self.qmax.Refresh() 
    2468                 msg = "Npts of Data Error :" 
    2469                 msg += "No or too little npts of %s." % data.name 
     2468                msg = "Data Error: " 
     2469                msg += "Too few points in %s." % data.name 
    24702470                wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    24712471                self.fitrange = False 
     
    25182518                                            
    25192519                        except: 
    2520                             msg = "Wrong Fit parameter range entered " 
     2520                            msg = "Wrong fit parameter range entered" 
    25212521                            wx.PostEvent(self._manager.parent, 
    25222522                                         StatusEvent(status=msg)) 
     
    29862986            self.qmin.SetValue(str(self.qmin_x)) 
    29872987            self.qmax.SetValue(str(self.qmax_x)) 
    2988             self.set_npts2fit() 
     2988            self.show_npts2fit() 
    29892989            # At this point, some button and variables satatus (disabled?) 
    29902990            # should be checked such as color that should be reset to 
     
    38743874        to fit if implemented 
    38753875        """ 
    3876     def set_npts2fit(self): 
     3876    def show_npts2fit(self): 
    38773877        """ 
    38783878        setValue Npts for fitting if implemented 
  • src/sans/perspectives/fitting/console.py

    r5777106 r35086c3  
    55import time 
    66import wx 
    7 import park 
    8 from park.fitresult import FitHandler 
     7from sans.fit import FitHandler 
    98 
    109class ConsoleUpdate(FitHandler): 
     
    8887        Print result object 
    8988        """ 
    90         msg = " \n %s \n" % self.result.__str__() 
     89        msg = " \n %s \n" % str(self.result) 
    9190        wx.PostEvent(self.parent, StatusEvent(status=msg)) 
    9291                      
     
    129128             
    130129         
    131     def update_fit(self, msg="", last=False): 
     130    def update_fit(self, last=False): 
    132131        """ 
    133132        """ 
     
    136135        self.update_duration = t1 
    137136        self.fit_duration += self.elapsed_time 
    138         str_time = time.strftime("%a, %d %b %Y %H:%M:%S ", time.localtime(t1)) 
    139         UPDATE_INTERVAL = 0.5 
     137        str_time = time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime(t1)) 
     138        UPDATE_INTERVAL = 5.0 
    140139        u_flag = False 
    141140        if self.fit_duration >= UPDATE_INTERVAL: 
    142141            self.fit_duration = 0 
    143142            u_flag = True 
    144         if not last: 
    145             msg += "Fit Updates ... %s \n" % str_time     
    146         else: 
    147             msg += "Final updates ........." 
     143        msg = str_time 
    148144        if u_flag or last: 
    149145            if self.result is not None: 
     
    164160                msg +=  str(self.result) 
    165161                msg += "\n" 
    166                 if not last: 
    167                     msg += "About %s s elapsed......... \n" % \ 
    168                                             str (UPDATE_INTERVAL) 
    169162            else: 
    170163                msg += "No result available\n" 
  • src/sans/perspectives/fitting/fit_thread.py

    ra855fec re3efa6b3  
    1818     
    1919    def __init__(self,  
    20                   fn, 
    21                   page_id, 
    22                    handler, 
    23                     batch_outputs, 
    24                     batch_inputs=None,              
    25                   pars=None, 
     20                 fn, 
     21                 page_id, 
     22                 handler, 
     23                 batch_outputs, 
     24                 batch_inputs=None, 
     25                 pars=None, 
    2626                 completefn = None, 
    2727                 updatefn   = None, 
     
    3030                 ftol       = None, 
    3131                 reset_flag = False): 
    32         CalcThread.__init__(self,completefn, 
     32        CalcThread.__init__(self, 
     33                 completefn, 
    3334                 updatefn, 
    3435                 yieldtime, 
     
    8081                list_map_get_attr.append(map_getattr) 
    8182            #from multiprocessing import Pool 
    82             inputs = zip(list_map_get_attr,self.fitter, list_fit_function, 
    83                           list_q, list_q, list_handler,list_curr_thread,list_ftol, 
     83            inputs = zip(list_map_get_attr, self.fitter, list_fit_function, 
     84                         list_q, list_q, list_handler,list_curr_thread,list_ftol, 
    8485                         list_reset_flag) 
    8586            result =  map(map_apply, inputs) 
     
    8788            self.complete(result=result, 
    8889                          batch_inputs=self.batch_inputs, 
    89                            batch_outputs=self.batch_outputs, 
     90                          batch_outputs=self.batch_outputs, 
    9091                          page_id=self.page_id, 
    9192                          pars = self.pars, 
  • src/sans/perspectives/fitting/fitpage.py

    rd44648e rbf5e985  
    661661                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    662662         
    663         if self.engine_type == "park": 
    664             self.text_disp_max.Show(True) 
    665             self.text_disp_min.Show(True) 
     663        self.text_disp_max.Show(True) 
     664        self.text_disp_min.Show(True) 
    666665 
    667666        for item in self.model.dispersion.keys(): 
     
    738737                                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    739738 
    740                         if self.engine_type == "park": 
    741                             ctl3.Show(True) 
    742                             ctl4.Show(True) 
     739                        ctl3.Show(True) 
     740                        ctl4.Show(True) 
    743741                                                               
    744742                    elif p == "npts": 
     
    10051003            return 
    10061004 
    1007         if len(self._manager.fit_thread_list) > 0 and\ 
    1008                     self._manager._fit_engine != "park" and\ 
    1009                     self._manager.sim_page != None and \ 
    1010                     self._manager.sim_page.uid == self.uid: 
     1005        if (len(self._manager.fit_thread_list) > 0 
     1006                and self._manager._fit_engine not in ("park","bumps") 
     1007                and self._manager.sim_page != None 
     1008                and self._manager.sim_page.uid == self.uid): 
    10111009            msg = "The FitEnging will be set to 'ParkMC'\n" 
    10121010            msg += " to fit with more than one data set..." 
     
    12681266        if check_float(tcrtl): 
    12691267            flag = self._onparamEnter_helper() 
    1270             self.set_npts2fit() 
     1268            self.show_npts2fit() 
    12711269            if self.fitrange: 
    12721270                temp_smearer = None 
     
    14681466                    #self.data.mask = index_data 
    14691467                    #self.Npts_fit.SetValue(str(len(self.data.mask))) 
    1470                     self.set_npts2fit() 
     1468                    self.show_npts2fit() 
    14711469            else: 
    14721470                index_data = ((self.qmin_x <= self.data.x) & \ 
     
    17661764            # try re draw the model plot if it exists 
    17671765            self._draw_model() 
    1768             self.set_npts2fit() 
     1766            self.show_npts2fit() 
    17691767        elif self.model == None: 
    17701768            self.panel.MakeModal(False) 
    17711769            event.Skip() 
    1772             self.set_npts2fit() 
     1770            self.show_npts2fit() 
    17731771            msg = "No model is found on updating MASK in the model plot... " 
    17741772            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
     
    20562054        return npts2fit 
    20572055 
    2058     def set_npts2fit(self): 
     2056    def show_npts2fit(self): 
    20592057        """ 
    20602058        setValue Npts for fitting 
     
    20682066        return self.tcChi.GetValue() 
    20692067         
    2070     def get_param_list(self): 
    2071         """ 
    2072         :return self.param_toFit: list containing  references to TextCtrl 
    2073             checked.Theses TextCtrl will allow reference to parameters to fit. 
    2074          
    2075         :raise: if return an empty list of parameter fit will nnote work 
    2076             properly so raise ValueError,"missing parameter to fit" 
    2077         """ 
    2078         if self.param_toFit != []: 
    2079             return self.param_toFit 
    2080         else: 
    2081             msg = "missing parameters to fit" 
    2082             wx.MessageBox(msg, 'warning') 
    2083             return False 
    2084        
    20852068    def onsetValues(self, chisqr, p_name, out, cov): 
    20862069        """ 
     
    21082091        if chisqr != None and numpy.isfinite(chisqr): 
    21092092            #format chi2 
    2110             if self.engine_type == "park": 
    2111                 npt_fit = float(self.get_npts2fit()) 
    21122093            chi2 = format_number(chisqr, True) 
    21132094            self.tcChi.SetValue(chi2) 
  • src/sans/perspectives/fitting/fitpanel.py

    rb6a181b reff93b8  
    6464        self.sim_page = None 
    6565        self.batch_page = None 
    66         self.fit_engine_type = "scipy" 
     66        self.fit_engine_type = "bumps" 
    6767        ## get the state of a page 
    6868        self.Bind(basepage.EVT_PAGE_INFO, self._onGetstate) 
  • src/sans/perspectives/fitting/fitproblem.py

    r5777106 r5bf0331  
    454454        return self.itervalues() 
    455455     
    456     def  set_result(self, result, fid): 
     456    def set_result(self, result, fid): 
    457457        """ 
    458458        """ 
  • src/sans/perspectives/fitting/fitting.py

    r9afebe1 ra9807efa  
    3636from .fitproblem import FitProblemDictionary 
    3737from .fitpanel import FitPanel 
     38from .resultpanel import ResultPanel, PlotResultEvent 
     39 
    3840from .fit_thread import FitThread 
    3941from .pagestate import Reader 
     
    4244from sans.perspectives.calculator.model_editor import EditorWindow 
    4345from sans.guiframe.gui_manager import MDIFrame 
     46 
     47# TODO: remove globals from interface to bumps options! 
     48# Default bumps to use the levenberg-marquardt optimizer 
     49import bumps.fitters 
     50bumps.fitters.FIT_DEFAULT = 'lm' 
    4451 
    4552MAX_NBR_DATA = 4 
     
    7885        # Start with a good default 
    7986        self.elapsed = 0.022 
    80         # the type of optimizer selected, park or scipy 
    81         self.fitter = None 
    8287        self.fit_panel = None 
    83         #let fit ready 
    84         self.fitproblem_count = None 
    8588        #Flag to let the plug-in know that it is running stand alone 
    8689        self.standalone = True 
     
    8891        self.closed_page_dict = {} 
    8992        ## Fit engine 
    90         self._fit_engine = 'scipy' 
     93        self._fit_engine = 'bumps' 
    9194        self._gui_engine = None 
    9295        ## Relative error desired in the sum of squares (float); scipy only 
     
    111114        self.scipy_id = wx.NewId() 
    112115        self.park_id = wx.NewId() 
     116        self.bumps_id = wx.NewId() 
    113117        self.menu1 = None 
    114118        self.new_model_frame = None 
     
    198202        wx.EVT_MENU(owner, self.park_id, self._onset_engine_park) 
    199203         
    200         self.menu1.FindItemById(self.scipy_id).Check(True) 
    201         self.menu1.FindItemById(self.park_id).Check(False) 
     204        bumps_help = "Bumps: fitting and uncertainty analysis. More in Help window...." 
     205        self.menu1.AppendCheckItem(self.bumps_id, "Bumps fit", 
     206                                   bumps_help) 
     207        wx.EVT_MENU(owner, self.bumps_id, self._onset_engine_bumps) 
     208         
     209        self.menu1.FindItemById(self.scipy_id).Check(self._fit_engine=="scipy") 
     210        self.menu1.FindItemById(self.park_id).Check(self._fit_engine=="park") 
     211        self.menu1.FindItemById(self.bumps_id).Check(self._fit_engine=="bumps") 
    202212        self.menu1.AppendSeparator() 
    203213        self.id_tol = wx.NewId() 
     
    207217                                   ftol_help) 
    208218        wx.EVT_MENU(owner, self.id_tol, self.show_ftol_dialog) 
     219 
     220        self.id_bumps_options = wx.NewId() 
     221        bopts_help = "Bumps fitting options" 
     222        self.menu1.Append(self.id_bumps_options, 'Bumps &Options', bopts_help) 
     223        wx.EVT_MENU(owner, self.id_bumps_options, self.on_bumps_options) 
     224        self.bumps_options_menu = self.menu1.FindItemById(self.id_bumps_options) 
     225        self.bumps_options_menu.Enable(True) 
     226 
     227        self.id_result_panel = wx.NewId() 
     228        self.menu1.Append(self.id_result_panel, "Fit Results", "Show fit results panel") 
     229        wx.EVT_MENU(owner, self.id_result_panel, lambda ev: self.result_frame.Show()) 
    209230        self.menu1.AppendSeparator() 
    210231         
     
    511532        self.perspective = [] 
    512533        self.perspective.append(self.fit_panel.window_name) 
     534 
     535        self.result_frame = MDIFrame(self.parent, None, ResultPanel.window_caption, (220, 200)) 
     536        self.result_panel = ResultPanel(parent=self.result_frame, manager=self) 
     537        self.perspective.append(self.result_panel.window_name) 
    513538        
    514539        #index number to create random model name 
     
    525550        #Send the fitting panel to guiframe 
    526551        self.mypanels.append(self.fit_panel) 
     552        self.mypanels.append(self.result_panel) 
    527553        return self.mypanels 
    528554     
     
    818844                         StatusEvent(status=msg, info='warning')) 
    819845        dialog.Destroy() 
     846 
     847    def on_bumps_options(self, event=None): 
     848        from bumps.gui.fit_dialog import OpenFitOptions 
     849        OpenFitOptions() 
    820850 
    821851    def stop_fit(self, uid): 
     
    951981        :param uid: id related to the panel currently calling this fit function. 
    952982        """ 
    953         flag = True 
    954         ##  count the number of fitproblem schedule to fit 
    955         fitproblem_count = 0 
    956         for value in self.page_finder.values(): 
    957             if value.get_scheduled() == 1: 
    958                 fitproblem_count += 1 
    959         self._gui_engine = self._return_engine_type() 
    960         self.fitproblem_count = fitproblem_count 
    961         if self._fit_engine == "park": 
    962             engineType = "Simultaneous Fit" 
     983        if uid is None: raise RuntimeError("no page to fit") # Should never happen 
     984 
     985        # Remember the user selected fit engine before the fit.  Simultaneous 
     986        # fitting may change the selected engine, so it needs to be restored 
     987        # when the fit is complete. 
     988        self._gui_engine = self._fit_engine 
     989 
     990        sim_page_uid = getattr(self.sim_page, 'uid', None) 
     991        batch_page_uid = getattr(self.batch_page, 'uid', None) 
     992 
     993        if uid == sim_page_uid: 
     994            fit_type = 'simultaneous' 
     995        elif uid == batch_page_uid: 
     996            fit_type = 'combined_batch' 
    963997        else: 
    964             engineType = "Single Fit" 
     998            fit_type = 'single' 
     999 
     1000        # if constrained fit, don't use scipy leastsq directly 
     1001        if fit_type == 'simultaneous': 
     1002            if self._fit_engine not in ("park","bumps"): 
     1003                self._on_change_engine(engine='bumps') 
     1004 
     1005 
    9651006        fitter_list = [] 
    9661007        sim_fitter = None 
    967         is_single_fit = True 
    968         batch_on = False 
    969         if self.sim_page is not None and self.sim_page.uid == uid: 
     1008        if fit_type == 'simultaneous': 
    9701009            #simulatanous fit only one engine need to be created 
    971             ## if simultaneous fit change automatically the engine to park 
    972             self._on_change_engine(engine='park') 
    9731010            sim_fitter = Fit(self._fit_engine) 
    9741011            sim_fitter.fitter_id = self.sim_page.uid 
    9751012            fitter_list.append(sim_fitter) 
    976             is_single_fit = False 
    977             batch_on = self.sim_page.batch_on 
    978              
    979         self.fitproblem_count = fitproblem_count 
    980         if self._fit_engine == "park": 
    981             engineType = "Simultaneous Fit" 
    982         else: 
    983             engineType = "Single Fit" 
    984          
     1013 
    9851014        self.current_pg = None 
    9861015        list_page_id = [] 
    9871016        fit_id = 0 
    988         batch_inputs = {} 
    989         batch_outputs = {} 
    990         for page_id, value in self.page_finder.iteritems(): 
     1017        for page_id, page_info in self.page_finder.iteritems(): 
    9911018            # For simulfit (uid give with None), do for-loop 
    9921019            # if uid is specified (singlefit), do it only on the page. 
    993             if engineType == "Single Fit": 
    994                 #combine more than 1 batch page on single mode 
    995                 if self.batch_page is None or self.batch_page.uid != uid: 
    996                     if page_id != uid: 
    997                         continue 
     1020            if page_id in (sim_page_uid, batch_page_uid): continue 
     1021            if fit_type == "single" and page_id != uid: continue 
     1022 
    9981023            try: 
    999                 if value.get_scheduled() == 1: 
    1000                     value.nbr_residuals_computed = 0 
    1001                     #Get list of parameters name to fit 
    1002                     pars = [] 
    1003                     templist = [] 
     1024                if page_info.get_scheduled() == 1: 
     1025                    page_info.nbr_residuals_computed = 0 
    10041026                    page = self.fit_panel.get_page_by_id(page_id) 
    10051027                    self.set_fit_weight(uid=page.uid, 
    10061028                                     flag=page.get_weight_flag(), 
    10071029                                     is2d=page._is_2D()) 
    1008                     templist = page.get_param_list() 
    1009                     flag = page._update_paramv_on_fit() 
    1010                     if not flag: 
     1030                    if not page.param_toFit: 
     1031                        msg = "No fitting parameters for %s"%page.window_caption 
     1032                        wx.PostEvent(page.parent.parent, 
     1033                                     StatusEvent(status=msg, info="error", 
     1034                                                 type="stop")) 
     1035                        return False 
     1036                    if not page._update_paramv_on_fit(): 
    10111037                        msg = "Fitting range or parameter values are" 
    10121038                        msg += " invalid in %s" % \ 
     
    10151041                                     StatusEvent(status=msg, info="error", 
    10161042                                     type="stop")) 
    1017                         return flag 
    1018                     for element in templist: 
    1019                         name = str(element[1]) 
    1020                         pars.append(name) 
    1021                     fitproblem_list = value.values() 
     1043                        return False 
     1044 
     1045                    pars = [str(element[1]) for element in page.param_toFit] 
     1046                    fitproblem_list = page_info.values() 
    10221047                    for fitproblem in  fitproblem_list: 
    10231048                        if sim_fitter is None: 
    10241049                            fitter = Fit(self._fit_engine) 
    10251050                            fitter.fitter_id = page_id 
    1026                             self._fit_helper(fitproblem=fitproblem, 
    1027                                              pars=pars, 
    1028                                              fitter=fitter, 
    1029                                              fit_id=fit_id, 
    1030                                              batch_inputs=batch_inputs, 
    1031                                              batch_outputs=batch_outputs) 
    10321051                            fitter_list.append(fitter) 
    10331052                        else: 
    10341053                            fitter = sim_fitter 
    1035                             self._fit_helper(fitproblem=fitproblem, 
     1054                        self._add_problem_to_fit(fitproblem=fitproblem, 
    10361055                                             pars=pars, 
    10371056                                             fitter=fitter, 
    1038                                              fit_id=fit_id, 
    1039                                              batch_inputs=batch_inputs, 
    1040                                              batch_outputs=batch_outputs) 
     1057                                             fit_id=fit_id) 
    10411058                        fit_id += 1 
    10421059                    list_page_id.append(page_id) 
    1043                     current_page_id = page_id 
    1044                     value.clear_model_param() 
     1060                    page_info.clear_model_param() 
    10451061            except KeyboardInterrupt: 
    1046                 flag = True 
    10471062                msg = "Fitting terminated" 
    10481063                wx.PostEvent(self.parent, StatusEvent(status=msg, info="info", 
    10491064                                                      type="stop")) 
    1050                 return flag 
     1065                return True 
    10511066            except: 
    1052                 flag = False 
    1053                 msg = "%s error: %s" % (engineType, sys.exc_value) 
     1067                msg = "Fitting error: %s" % str(sys.exc_value) 
    10541068                wx.PostEvent(self.parent, StatusEvent(status=msg, info="error", 
    10551069                                                      type="stop")) 
    1056                 return flag 
     1070                return False 
    10571071        ## If a thread is already started, stop it 
    10581072        #if self.calc_fit!= None and self.calc_fit.isrunning(): 
     
    10661080                                improvement_delta=0.1) 
    10671081        self._mac_sleep(0.2) 
    1068         ## perform single fit 
    1069         try: 
     1082 
     1083        # batch fit 
     1084        batch_inputs = {} 
     1085        batch_outputs = {} 
     1086        if fit_type == "simultaneous": 
     1087            page = self.sim_page 
     1088        elif fit_type == "combined_batch": 
     1089            page = self.batch_page 
     1090        else: 
    10701091            page = self.fit_panel.get_page_by_id(uid) 
    1071             batch_on = page.batch_on 
    1072         except: 
    1073             try: 
    1074                 #if the id cannot be found then  we deal with a self.sim_page 
    1075                 #or a self.batch_page 
    1076                 if self.sim_page is not None and uid == self.sim_page.uid: 
    1077                     batch_on = self.sim_page.batch_on 
    1078                 if self.batch_page is not None and uid == self.batch_page.uid: 
    1079                     batch_on = self.batch_page.batch_on 
    1080             except: 
    1081                 batch_on = False 
    1082  
    1083         # batch fit 
    1084         if batch_on: 
     1092        if page.batch_on: 
    10851093            calc_fit = FitThread(handler=handler, 
    10861094                                 fn=fitter_list, 
     
    10931101                                 reset_flag=self.batch_reset_flag) 
    10941102        else: 
    1095             # single fit: not batch and not simul fit 
    1096             if not is_single_fit: 
    1097                 current_page_id = self.sim_page.uid 
    10981103            ## Perform more than 1 fit at the time 
    10991104            calc_fit = FitThread(handler=handler, 
     
    11051110                                    completefn=self._fit_completed, 
    11061111                                    ftol=self.ftol) 
    1107         self.fit_thread_list[current_page_id] = calc_fit 
     1112        #self.fit_thread_list[current_page_id] = calc_fit 
     1113        self.fit_thread_list[uid] = calc_fit 
    11081114        calc_fit.queue() 
     1115        calc_fit.ready(2.5) 
    11091116        msg = "Fitting is in progress..." 
    11101117        wx.PostEvent(self.parent, StatusEvent(status=msg, type="progress")) 
    11111118         
    1112         self.ready_fit(calc_fit=calc_fit) 
    1113         return flag 
    1114      
    1115     def ready_fit(self, calc_fit): 
    1116         """ 
    1117         Ready for another fit 
    1118         """ 
    1119         if self.fitproblem_count != None and self.fitproblem_count > 1: 
    1120             calc_fit.ready(2.5) 
    1121         else: 
    1122             time.sleep(0.4) 
    1123              
     1119        return True 
     1120 
    11241121    def remove_plot(self, uid, fid=None, theory=False): 
    11251122        """ 
     
    12611258                self.page_finder[uid].schedule_tofit(value) 
    12621259                 
    1263     def _fit_helper(self, fitproblem, pars, fitter, fit_id, 
    1264                     batch_inputs, batch_outputs): 
     1260    def _add_problem_to_fit(self, fitproblem, pars, fitter, fit_id): 
    12651261        """ 
    12661262        Create and set fit engine with series of data and model 
     
    15711567        wx.PostEvent(self.parent, StatusEvent(status=msg, info="info", 
    15721568                                                      type="stop")) 
     1569        wx.PostEvent(self.result_panel, PlotResultEvent(result=result)) 
    15731570        # reset fit_engine if changed by simul_fit 
    15741571        if self._fit_engine != self._gui_engine: 
     
    16821679        self._on_change_engine('scipy') 
    16831680        
     1681    def _onset_engine_bumps(self, event): 
     1682        """  
     1683        set engine to bumps 
     1684        """ 
     1685        self._on_change_engine('bumps') 
     1686        
    16841687    def _on_slicer_event(self, event): 
    16851688        """ 
     
    17141717                break 
    17151718     
    1716     def _return_engine_type(self): 
    1717         """ 
    1718         return the current type of engine 
    1719         """ 
    1720         return self._fit_engine 
    1721       
    17221719    def _on_change_engine(self, engine='park'): 
    17231720        """ 
     
    17331730            self.menu1.FindItemById(self.park_id).Check(True) 
    17341731            self.menu1.FindItemById(self.scipy_id).Check(False) 
     1732            self.menu1.FindItemById(self.bumps_id).Check(False) 
     1733        elif engine == "scipy": 
     1734            self.menu1.FindItemById(self.park_id).Check(False) 
     1735            self.menu1.FindItemById(self.scipy_id).Check(True) 
     1736            self.menu1.FindItemById(self.bumps_id).Check(False) 
    17351737        else: 
    17361738            self.menu1.FindItemById(self.park_id).Check(False) 
    1737             self.menu1.FindItemById(self.scipy_id).Check(True) 
     1739            self.menu1.FindItemById(self.scipy_id).Check(False) 
     1740            self.menu1.FindItemById(self.bumps_id).Check(True) 
    17381741        ## post a message to status bar 
    17391742        msg = "Engine set to: %s" % self._fit_engine 
  • src/sans/perspectives/fitting/simfitpage.py

    r5777106 rbf5e985  
    138138                self.Layout() 
    139139                break 
    140         self._onAdd_constraint(None) 
     140 
     141        #self._onAdd_constraint(None) 
    141142              
    142143    def onFit(self, event): 
     
    152153        ## making sure all parameters content a constraint 
    153154        ## validity of the constraint expression is own by fit engine 
    154         if self.parent._manager._fit_engine != "park" and flag: 
     155        if self.parent._manager._fit_engine not in ("park","bumps") and flag: 
    155156            msg = "The FitEnging will be set to 'Park' fit engine\n" 
    156157            msg += " for the simultaneous fit..." 
     
    378379        box_description = wx.StaticBox(self, -1,"Easy Setup ") 
    379380        boxsizer = wx.StaticBoxSizer(box_description, wx.HORIZONTAL)      
    380         sizer_constraint = wx.BoxSizer(wx.HORIZONTAL|wx.LEFT|wx.RIGHT|wx.EXPAND) 
     381        sizer_constraint = wx.BoxSizer(wx.HORIZONTAL) 
    381382        self.model_cbox_left = wx.ComboBox(self, -1, style=wx.CB_READONLY) 
    382383        self.model_cbox_left.Clear() 
     
    814815                         
    815816                    for fid in self.page_finder[id].iterkeys(): 
    816                         self.page_finder[id].set_model_param(param, 
    817                                                         constraint, fid=fid) 
     817                        # wrap in param/constraint in str() to remove unicode 
     818                        self.page_finder[id].set_model_param(str(param), 
     819                                                        str(constraint), fid=fid) 
    818820                    break 
    819821        return True 
Note: See TracChangeset for help on using the changeset viewer.