Changeset 948add7 in sasview for sansview/perspectives/fitting


Ignore:
Timestamp:
Sep 30, 2008 2:38:58 PM (16 years ago)
Author:
Gervaise Alina <gervyh@…>
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:
8e81af0
Parents:
8bbab51
Message:

perform single fit when selecting one model on simul_page

Location:
sansview/perspectives/fitting
Files:
4 edited

Legend:

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

    r00561739 r948add7  
    221221        flag=self.checkFitRange() 
    222222        if flag== True: 
    223             qmin = float(self.xmin.GetValue()) 
    224             qmax = float(self.xmax.GetValue()) 
    225             x,y,dy = [numpy.asarray(v) for v in (self.data.x,self.data.y,self.data.dy)] 
    226             if qmin==None and qmax==None:  
    227                 fx =numpy.asarray([self.model.run(v) for v in x]) 
    228                 res=(y - fx)/dy 
    229             else: 
    230                 idx = (x>= qmin) & (x <=qmax) 
    231                 fx = numpy.asarray([self.model.run(item)for item in x[idx ]]) 
    232                 res= (y[idx] - fx)/dy[idx]   
    233              
    234             sum=0 
    235             for item in res: 
    236                 if numpy.isfinite(item): 
    237                     sum +=item 
    238             self.tcChi.SetValue(format_number(math.fabs(sum))) 
     223            try: 
     224                qmin = float(self.xmin.GetValue()) 
     225                qmax = float(self.xmax.GetValue()) 
     226                x,y,dy = [numpy.asarray(v) for v in (self.data.x,self.data.y,self.data.dy)] 
     227                if qmin==None and qmax==None:  
     228                    fx =numpy.asarray([self.model.run(v) for v in x]) 
     229                    res=(y - fx)/dy 
     230                else: 
     231                    idx = (x>= qmin) & (x <=qmax) 
     232                    fx = numpy.asarray([self.model.run(item)for item in x[idx ]]) 
     233                    res= (y[idx] - fx)/dy[idx]   
     234                sum=0 
     235                for item in res: 
     236                    if numpy.isfinite(item): 
     237                        sum +=item 
     238                self.tcChi.SetValue(format_number(math.fabs(sum))) 
     239            except: 
     240                wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\ 
     241                            "Chisqr cannot be compute: %s"% sys.exc_value)) 
    239242             
    240243             
     
    248251        qmax =float( self.xmax.GetValue()) 
    249252        if len(self.param_toFit) >0 and flag==True: 
     253            self.manager.schedule_for_fit( value=1,fitproblem =None)  
    250254            self.manager._on_single_fit(qmin=qmin,qmax=qmax) 
    251255        else: 
     
    546550                     name=str(item[0].GetLabelText()) 
    547551                     value= float(item[1].GetValue()) 
    548                       
    549552                     self.model.setParam(name,value) 
    550553                     self.manager.redraw_model(float(self.xmin.GetValue())\ 
  • sansview/perspectives/fitting/fitproblem.py

    r00561739 r948add7  
    1919        self.theory_name=None 
    2020        self.model_list=[] 
    21         self.schedule='False' 
     21        self.schedule=0 
    2222        self.param_name= None 
    2323        self.param_value=None 
     
    4141    def get_model(self): 
    4242        """ @return: saved model """ 
    43         print "fitproblem",self.model_list 
     43        #print "fitproblem",self.model_list 
    4444        return self.model_list 
    4545      
     
    6868            @param value: value of that parameter 
    6969        """ 
    70         print "fitproblem",name,value 
     70        #print "fitproblem",name,value 
    7171        #self.model_list[0].setParam(name,value) 
    7272        self.param_name = name 
     
    7878            @param value: value of that parameter 
    7979        """ 
    80         print self.param_name, self.param_value 
     80        #print self.param_name, self.param_value 
    8181        #self.model_list[0].setParam(name,value) 
    8282        return self.param_name, self.param_value 
     
    8787            @param value: new model 
    8888        """ 
    89         print "fitproblem : reset model" 
     89        #print "fitproblem : reset model" 
    9090        self.model_list[0]=model 
    9191         
    92     def schedule_tofit(self, schedule='False'): 
     92    def schedule_tofit(self, schedule=0): 
    9393        """ 
    9494             set schedule to true to decide if this fit  must be performed 
  • sansview/perspectives/fitting/fitting.py

    r00561739 r948add7  
    158158                    wx.PostEvent(self.parent, StatusEvent(status="Fitting error: \ 
    159159                    data already Selected ")) 
    160                      
     160    def schedule_for_fit(self,value=0,fitproblem =None):   
     161        """ 
     162         
     163        """    
     164        if fitproblem !=None: 
     165            fitproblem.schedule_tofit(value) 
     166        else: 
     167            current_pg=self.fit_panel.get_current_page()  
     168            for page, val in self.page_finder.iteritems(): 
     169                if page ==current_pg : 
     170                    val.schedule_tofit(value) 
     171                    break 
     172                       
    161173                     
    162174    def get_page_finder(self): 
     
    199211         
    200212         
    201     def _single_fit_completed(self,result,pars,current_pg,qmin,qmax): 
     213    def _single_fit_completed(self,result,pars,cpage,qmin,qmax): 
    202214        """ 
    203215            Display fit result on one page of the notebook. 
     
    211223        try: 
    212224            for page, value in self.page_finder.iteritems(): 
    213                 if page== current_pg: 
     225                if page==cpage : 
    214226                    data = value.get_data() 
    215227                    list = value.get_model() 
     
    229241#            print "fitting result : stderr",result.stderr 
    230242             
    231             current_pg.onsetValues(result.fitness, result.pvec,result.stderr) 
    232             self.plot_helper(currpage=current_pg,qmin=qmin,qmax=qmax) 
     243            cpage.onsetValues(result.fitness, result.pvec,result.stderr) 
     244            self.plot_helper(currpage=cpage,qmin=qmin,qmax=qmax) 
    233245        except: 
    234246            raise 
     
    245257        try: 
    246258            for page, value in self.page_finder.iteritems(): 
    247                 if value.get_scheduled()=='True': 
     259                if value.get_scheduled()==1: 
    248260                    data = value.get_data() 
    249261                    list = value.get_model() 
     
    276288             
    277289        """ 
     290        #print "in single fitting" 
    278291        #set an engine to perform fit 
    279292        from sans.fit.Fitting import Fit 
     
    283296            id=0 
    284297        self.id = id 
     298        page_fitted=None 
     299        fit_problem=None 
    285300        #Get information (model , data) related to the page on  
    286301        #with the fit will be perform 
    287302        current_pg=self.fit_panel.get_current_page()  
     303        simul_pg=self.fit_panel.get_page(0) 
     304             
    288305        for page, value in self.page_finder.iteritems(): 
    289             if page ==current_pg : 
     306            if  value.get_scheduled() ==1 : 
    290307                data = value.get_data() 
    291308                list=value.get_model() 
    292309                model=list[0] 
    293                  
    294310                #Create list of parameters for fitting used 
    295311                pars=[] 
    296312                templist=[] 
    297313                try: 
    298                     templist=current_pg.get_param_list() 
     314                    #templist=current_pg.get_param_list() 
     315                    templist=page.get_param_list() 
     316                    for element in templist: 
     317                        pars.append(str(element[0].GetLabelText())) 
     318                    pars.sort() 
     319                    #Do the single fit 
     320                    self.fitter.set_model(Model(model), self.id, pars)  
     321                    self.fitter.set_data(Data(sans_data=data),self.id,qmin,qmax) 
     322                    self.fitter.select_problem_for_fit(Uid=self.id,value=value.get_scheduled()) 
     323                    page_fitted=page 
     324                    self.id+=1 
     325                    self.schedule_for_fit( 0,value)  
    299326                except: 
    300327                    wx.PostEvent(self.parent, StatusEvent(status="Fitting error: %s" % sys.exc_value)) 
    301328                    return 
    302                
    303                 for element in templist: 
    304                     try: 
    305                        pars.append(str(element[0].GetLabelText())) 
    306                     except: 
    307                         wx.PostEvent(self.parent, StatusEvent(status="Fitting error: %s" % sys.exc_value)) 
    308                         return 
    309329                # make sure to keep an alphabetic order  
    310                 #of parameter names in the list 
    311                 pars.sort() 
    312                 #Do the single fit 
    313                 try: 
    314                     self.fitter.set_model(Model(model), self.id, pars)  
    315                     #print "fitting: data .x",data.x 
    316                     #print "fitting: data .y",data.y 
    317                     #print "fitting: data .dy",data.dy 
    318                     self.fitter.set_data(Data(sans_data=data),self.id,qmin,qmax) 
    319                  
    320                     result=self.fitter.fit() 
    321                     self._single_fit_completed(result,pars,current_pg,qmin,qmax) 
    322                     
    323                 except: 
    324                     raise 
    325                     wx.PostEvent(self.parent, StatusEvent(status="Single Fit error: %s" % sys.exc_value)) 
    326                     return 
     330                #of parameter names in the list       
     331        try: 
     332            result=self.fitter.fit() 
     333            #self._single_fit_completed(result,pars,current_pg,qmin,qmax) 
     334            print "single_fit: result",result.fitness,result.pvec,result.stderr 
     335            #self._single_fit_completed(result,pars,page,qmin,qmax) 
     336            self._single_fit_completed(result,pars,page_fitted,qmin,qmax) 
     337        except: 
     338            wx.PostEvent(self.parent, StatusEvent(status="Single Fit error: %s" % sys.exc_value)) 
     339            return 
    327340          
    328341    def _on_simul_fit(self, id=None,qmin=None,qmax=None): 
     
    346359        for page, value in self.page_finder.iteritems(): 
    347360            try: 
    348                 if value.get_scheduled()=='True': 
     361                if value.get_scheduled()==1: 
    349362                    data = value.get_data() 
    350363                    list = value.get_model() 
     
    363376                    new_model=Model(model) 
    364377                    param_name,param_value=value.get_model_param() 
    365                     print "fitting ",param_name 
    366                     new_model.set( param_name =str(param_value)) 
    367                     #self.fitter.set_model(new_model, self.id, pars)  
     378                    print "fitting ",param_name,value.get_model_param() 
     379                    if param_value !=None: 
     380                        new_model.set( param_name =str(param_value)) 
     381                    self.fitter.set_model(new_model, self.id, pars)  
    368382                    self.fitter.set_data(Data(sans_data=data),self.id,qmin,qmax) 
    369                  
     383                    self.fitter.select_problem_for_fit(Uid=self.id,value=value.get_scheduled()) 
    370384                    self.id += 1  
    371385            except: 
  • sansview/perspectives/fitting/simfitpage.py

    r00561739 r948add7  
    4444 
    4545        self.ctl2 = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE) 
    46         #self.ctl2.Bind(wx.EVT_KILL_FOCUS, self._onTextEnter) 
    47         #self.ctl2.Bind(wx.EVT_TEXT_ENTER, self._onTextEnter) 
     46        
    4847        self.sizer2.Add(self.ctl2, 0, wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10) 
    4948        
     
    6564    def onFit(self,event): 
    6665        """ signal for fitting""" 
    67         self._onTextEnter() 
    68         if len(self.model_toFit) >0 : 
     66         
     67        if len(self.model_toFit) ==1 : 
     68            self.manager._on_single_fit() 
     69            print "simfitpage: when here" 
     70        elif len(self.model_toFit) > 1 : 
    6971            if len(self.params)>0: 
     72                self._onTextEnter() 
    7073                self.set_model() 
    7174            else: 
     
    9497            for item in self.model_list: 
    9598                item[0].SetValue(True) 
    96                 item[1].schedule_tofit('True') 
     99                #item[1].schedule_tofit(1) 
     100                self.manager.schedule_for_fit( value=1,fitproblem =item[1])  
    97101                self.model_toFit.append(item) 
    98102        else: 
     103            print"simfit: deselected all" 
     104            self.manager.schedule_for_fit( value=0,fitproblem =item[1])  
    99105            for item in self.model_list: 
    100106                item[0].SetValue(False)  
    101                 item[1].schedule_tofit('False') 
     107                #item[1].schedule_tofit(0) 
     108                 
    102109            self.model_toFit=[] 
    103110        
     
    113120        self.sizer1.Clear(True) 
    114121        self.page_finder=page_finder 
     122        self.cb1.SetValue(False) 
    115123        ix = 0 
    116124        iy = 1  
     
    139147    def remove_model(self,delpage): 
    140148        """ 
    141              Remove  a checkbox and the name realted to a model selected on page delpage 
     149             Remove  a checkbox and the name related to a model selected on page delpage 
    142150             @param delpage: the page removed 
    143151        """ 
     
    147155        for item in self.model_list: 
    148156            try: 
     157                # redraw the panel without the name of the model associated  
     158                # with the page to delete 
    149159                if not delpage in item: 
    150160                    #print "simfitpage:  redraw modelname",item[3] 
     
    156166                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_model_name) 
    157167                else: 
     168                    # if the page to delete in item remove it from the model list 
    158169                    self.model_list.remove(item) 
    159170            except: 
    160                 raise 
     171                 wx.PostEvent(self.parent.GrandParent, StatusEvent(status="Page deletion Error: %s" % sys.exc_value)) 
     172                  
    161173        self.sizer1.Layout()         
    162174        self.vbox.Layout() 
     
    172184                item[1].schedule_tofit('True') 
    173185                self.model_toFit.append(item) 
    174             else: 
     186                self.manager.schedule_for_fit( value=1,fitproblem =item[1])  
     187            else: 
     188                print"simfit: deselected one" 
     189                self.manager.schedule_for_fit( value=0,fitproblem =item[1])  
    175190                if item in self.model_toFit: 
    176191                    self.model_toFit.remove(item) 
    177                     item[1].schedule_tofit('False') 
     192                     
     193                     
    178194                    self.cb1.SetValue(False) 
    179195        if len(self.model_list)==len(self.model_toFit): 
     
    181197        else: 
    182198            self.cb1.SetValue(False) 
    183    
     199      
     200         
    184201    
    185202    def set_model(self): 
     
    235252                except: 
    236253                     wx.PostEvent(self.parent.GrandParent, StatusEvent(status="Constraint Error: %s" % sys.exc_value)) 
     254                     return 
    237255        except: 
    238256            raise 
Note: See TracChangeset for help on using the changeset viewer.