Changeset c69b6d5 in sasview


Ignore:
Timestamp:
Nov 11, 2009 5:49:13 PM (14 years ago)
Author:
Jae Cho <jhjcho@…>
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:
35c9d31
Parents:
f1aa385
Message:

more fixes on problems of performing fitting on mac after changing param min/max

Location:
sansview/perspectives/fitting
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sansview/perspectives/fitting/basepage.py

    rf1aa385 rc69b6d5  
    860860            after fitting 
    861861        """ 
    862          
     862        """ 
    863863        if hasattr(self,"text2_3"): 
    864864            self.text2_3.Hide() 
     
    883883                    item[4].Hide() 
    884884        ##Is this layout necessary? Had a problem w/MAC:Not anymore. 
    885         #self.Layout() 
    886          
     885        self.Layout() 
     886        """ 
    887887        return         
    888888    def _selectDlg(self): 
  • sansview/perspectives/fitting/fitpage.py

    rffb838f rc69b6d5  
    6161        self.Bind(EVT_FITTER_TYPE,self._on_engine_change) 
    6262        self.Bind(EVT_FIT_STOP,self._on_fit_complete) 
    63      
     63 
    6464    def _on_fit_complete(self, event): 
    6565        """ 
     
    376376                        ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    377377                                                       kill_focus_callback = self._onparamRangeEnter, 
     378                                                       text_enter_callback = self._onparamRangeEnter, 
     379                                                       #mouse_up_callback = self._onparamRangeEnter, 
    378380                                                       set_focus_callback  = self._onparamRangeEnter) 
    379381 
     
    384386                        ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    385387                                                       kill_focus_callback = self._onparamRangeEnter, 
     388                                                       text_enter_callback = self._onparamRangeEnter, 
     389                                                       #mouse_up_callback = self._onparamRangeEnter, 
    386390                                                       set_focus_callback  = self._onparamRangeEnter) 
    387391                        self.sizer4_4.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     
    474478                        ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    475479                                                       kill_focus_callback = self._onparamRangeEnter, 
     480                                                       text_enter_callback = self._onparamRangeEnter, 
     481                                                       #mouse_up_callback = self._onparamRangeEnter, 
    476482                                                       set_focus_callback  = self._onparamRangeEnter) 
    477483 
     
    483489                        ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    484490                                                       kill_focus_callback = self._onparamRangeEnter, 
     491                                                       text_enter_callback = self._onparamRangeEnter, 
     492                                                       #mouse_up_callback = self._onparamRangeEnter, 
    485493                                                       set_focus_callback  = self._onparamRangeEnter) 
    486494                        self.sizer4_4.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     
    587595         
    588596        #Clear errors if exist from previous fitting 
    589         self._clear_Err_on_Fit()     
     597        self._clear_Err_on_Fit()  
    590598 
    591599        # Remove or do not allow fitting on the Q=0 point, especially when y(q=0)=None at x[0]. 
     
    699707            Check validity of value enter in the parameters range field 
    700708        """ 
     709        is_modified = False    
    701710        tcrtl= event.GetEventObject() 
    702711        if tcrtl.GetValue().lstrip().rstrip()!="": 
     
    706715            except: 
    707716                tcrtl.SetBackgroundColour("pink") 
    708                 tcrtl.Refresh() 
    709717                return 
    710718        else: 
    711719           tcrtl.SetBackgroundColour(wx.WHITE) 
     720           self.save_current_state() 
     721           #is_modified = True 
    712722            
    713         is_modified = False    
    714         if self.model !=None:          
    715             # Flag to register when a parameter has changed.             
    716             is_modified =self._check_value_enter( self.fittable_param ,is_modified) 
    717             is_modified =self._check_value_enter( self.fixed_param ,is_modified) 
    718             is_modified =self._check_value_enter( self.parameters ,is_modified)   
    719  
    720         #self._onparamEnter_helper()  
    721         tcrtl.Refresh() 
     723        if not is_modified: 
     724            self._onparamEnter_helper() 
    722725        ## new state posted 
    723         if is_modified: 
     726        if self.state_change: 
    724727            #self._undo.Enable(True) 
    725728            self.save_current_state() 
    726             #self._undo.Enable(True) 
    727729            event = PageInfoEvent(page = self) 
    728730            wx.PostEvent(self.parent, event) 
    729731            self.state_change= False 
    730          
     732        self.Layout() 
     733        self.Refresh()                 
     734 
    731735                 
    732736         
     
    766770        """ 
    767771        return float(self.qmin_x) , float(self.qmax_x) 
     772 
     773    def get_chi2(self): 
     774        """ 
     775            return the current chi2 
     776        """ 
     777        return self.tcChi.GetLabel() 
    768778         
    769779    def get_param_list(self): 
     
    788798        
    789799        """ 
    790         self.tcChi.SetLabel(format_number(chisqr)) 
     800        #format chi2 
     801        chi2 = format_number(chisqr) 
     802         
     803        self.tcChi.SetLabel(chi2) 
    791804        params = {} 
    792805        is_modified = False 
     
    804817        #set the panel when fit result are float not list 
    805818        if out.__class__== numpy.float64: 
     819            #print "float64" 
    806820            self.param_toFit[0][2].SetValue(format_number(out)) 
    807821            self.param_toFit[0][2].Refresh() 
    808822             
    809             self.param_toFit[0][4].Clear() 
    810             self.param_toFit[0][4].Hide() 
     823            if self.param_toFit[0][4].IsShown: 
     824                self.param_toFit[0][4].Hide() 
    811825            if cov !=None : 
    812826                self.text2_3.Show(True) 
     
    821835 
    822836                if cov[0]==None or  not numpy.isfinite(cov[0]):  
    823                     self.param_toFit[0][3].Hide() 
    824                     self.param_toFit[0][4].Clear() 
    825                     #self.param_toFit[0][4].Hide() 
    826                     self.param_toFit[0][4].Refresh() 
     837                    if self.param_toFit[0][3].IsShown: 
     838                        self.param_toFit[0][3].Hide() 
    827839                else: 
     840                     
    828841                    self.param_toFit[0][3].Show(True) 
    829                     self.param_toFit[0][4].Clear() 
     842                    self.param_toFit[0][3].Refresh()                  
     843                    self.param_toFit[0][4].Show(True) 
    830844                    self.param_toFit[0][4].SetValue(format_number(cov[0])) 
    831                     self.param_toFit[0][4].Show(True) 
    832845                    self.param_toFit[0][4].Refresh() 
    833846                    has_error = True 
    834847        else: 
    835             
     848                 
    836849            if self.text2_3.IsShown(): 
    837850                self.text2_3.Hide() 
    838              
     851            i = 0 
    839852            #Set the panel when fit result are list 
    840853            for item in self.param_toFit:                
     
    845858                    item[4].Hide() 
    846859        
    847                 if( out != None ) and len(out)<=len(self.param_toFit):#and i < len(out): 
     860                if( out != None ) and len(out)<=len(self.param_toFit) and i < len(out): 
    848861                    item[2].SetValue(format_number(self.model.getParam(item[1]))) 
    849862                    item[2].Refresh() 
     
    854867                        break         
    855868 
    856                 if(cov !=None)  and len(cov)<=len(self.param_toFit):#and i < len(cov): 
     869                if(cov !=None)  and len(cov)<=len(self.param_toFit) and i < len(cov): 
    857870                    try: 
    858871                        name= dispersity.__name__ 
     
    877890                        item[4].Refresh() 
    878891                        has_error = True 
    879                      
     892                    i += 1              
    880893        #Show error title when any errors displayed 
    881894        if has_error:  
     
    889902        self.Layout() 
    890903        self.Refresh() 
    891          
     904 
    892905    def onSmear(self, event): 
    893906        """ 
     
    12201233                ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    12211234                                               kill_focus_callback = self._onparamRangeEnter, 
     1235                                               text_enter_callback = self._onparamRangeEnter, 
     1236                                               #mouse_up_callback = self._onparamRangeEnter, 
    12221237                                               set_focus_callback  = self._onparamRangeEnter) 
    12231238      
     
    12281243                ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    12291244                                               kill_focus_callback = self._onparamRangeEnter, 
     1245                                               text_enter_callback = self._onparamRangeEnter, 
     1246                                               #mouse_up_callback = self._onparamRangeEnter, 
    12301247                                               set_focus_callback  = self._onparamRangeEnter) 
    12311248                sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     
    13131330                     
    13141331                     
    1315                     #param_min, param_max= self.model.details[item][1:] 
    13161332                    ix += 1 
    13171333                    ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    13181334                                                   kill_focus_callback = self._onparamRangeEnter, 
     1335                                                   text_enter_callback = self._onparamRangeEnter, 
     1336                                                   #mouse_up_callback = self._onparamRangeEnter, 
    13191337                                                   set_focus_callback  = self._onparamRangeEnter) 
    13201338                
     
    13301348                    ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    13311349                                                   kill_focus_callback = self._onparamRangeEnter, 
     1350                                                   text_enter_callback = self._onparamRangeEnter, 
     1351                                                   #mouse_up_callback = self._onparamRangeEnter, 
    13321352                                                   set_focus_callback  = self._onparamRangeEnter) 
    13331353                    sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
  • sansview/perspectives/fitting/fitting.py

    r6d91073 rc69b6d5  
    2020from sans.guiframe.dataFitting import Theory1D 
    2121from sans.guiframe import dataFitting  
     22from sans.guiframe.utils import format_number 
    2223 
    2324from sans.guicomm.events import NewPlotEvent, StatusEvent   
     
    751752                wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop")) 
    752753                return 
    753             if numpy.any(result.pvec ==None )or not numpy.all(numpy.isfinite(result.pvec) ): 
     754            if not numpy.isfinite(result.fitness) or numpy.any(result.pvec ==None )or not numpy.all(numpy.isfinite(result.pvec) ): 
    754755                msg= "Single Fitting did not converge!!!" 
    755756                wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop")) 
     
    798799        ## fit more than 1 model at the same time  
    799800        try: 
     801            msg = ""  
    800802            if result ==None: 
    801803                msg= "Complex Fitting Stop !!!" 
    802804                wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop")) 
    803805                return 
    804             if numpy.any(result.pvec ==None )or not numpy.all(numpy.isfinite(result.pvec) ): 
     806            if not numpy.isfinite(result.fitness) or numpy.any(result.pvec ==None )or not numpy.all(numpy.isfinite(result.pvec) ): 
    805807                msg= "Single Fitting did not converge!!!" 
    806808                wx.PostEvent(self.parent, StatusEvent(status=msg,type="stop")) 
    807809                return 
     810               
    808811            for page, value in self.page_finder.iteritems(): 
     812                if format_number(result.fitness) == page.get_chi2(): 
     813                    #ToDo: Compare parameter inputs with outputs too. 
     814                    msg= "Simultaneous Fit completed" 
     815                    msg +=" but chi2 has not been improved..." 
     816                    wx.PostEvent(self.parent, StatusEvent(status="%s " % msg))  
     817                    break                    
    809818                if value.get_scheduled()==1: 
    810819                    model = value.get_model() 
     
    838847                    self.draw_model( model=model, data= metadata, smearer=smearer, 
    839848                                     qmin= qmin, qmax= qmax) 
    840             wx.PostEvent(self.parent, StatusEvent(status="", type="stop")) 
     849            wx.PostEvent(self.parent, StatusEvent(status=msg, type="stop")) 
    841850        except: 
    842851             msg= "Simultaneous Fit completed" 
Note: See TracChangeset for help on using the changeset viewer.