Changeset edcbd467 in sasview for sansview/perspectives/fitting


Ignore:
Timestamp:
Apr 8, 2010 4:48:01 PM (15 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:
8e87ece
Parents:
0a7c2f8
Message:

refactore _onSelect function

File:
1 edited

Legend:

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

    ra704bb5 redcbd467  
    88copyright 2009, University of Tennessee 
    99""" 
    10 import  re,copy 
     10import  re 
    1111import sys, wx, logging 
    1212import string, numpy, math 
    1313import time 
    1414import thread 
    15 #from danse.common.plottools.plottables import Theory1D 
     15 
     16from copy import deepcopy 
     17from DataLoader.data_info import Data1D as LoaderData1D 
    1618from danse.common.plottools.PlotPanel import PlotPanel 
    1719 
     
    230232        self.index_theory= 0 
    231233        self.parent.Bind(EVT_SLICER_PANEL, self._on_slicer_event) 
    232         self.parent.Bind( ERR_DATA, self._on_data_error) 
     234        self.parent.Bind(ERR_DATA, self._on_data_error) 
    233235        self.parent.Bind(EVT_REMOVE_DATA, self._closed_fitpage) 
    234236        self.parent.Bind(EVT_SLICER_PARS_UPDATE, self._onEVT_SLICER_PANEL) 
     
    284286        id = None 
    285287        if hasattr(item,"id"): 
    286             id = copy.deepcopy(item.id) 
     288            id = item.id 
    287289 
    288290        data= Data1D(x=item.x, y=item.y,dx=None, dy=None) 
     
    292294        data.name = item.name 
    293295        ## allow to highlight data when plotted 
    294         data.interactive = copy.deepcopy(item.interactive) 
     296        data.interactive = deepcopy(item.interactive) 
    295297        ## when 2 data have the same id override the 1 st plotted 
    296298        data.id = id 
     
    377379        self.page_finder[self.current_pg].set_smearer(smearer) 
    378380        ## draw model 1D with smeared data 
    379         data =  self.page_finder[self.current_pg].get_plotted_data() 
     381        data =  self.page_finder[self.current_pg].get_fit_data() 
    380382        model = self.page_finder[self.current_pg].get_model() 
    381383        ## if user has already selected a model to plot 
     
    536538            wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot_data, 
    537539                                                    title=data.name)) 
    538          
     540    def create_fittable_data2D(self, data): 
     541        """ 
     542            check if the current data is a data 2d and add dy to that data 
     543            @return Data2D 
     544        """ 
     545        if data.__class__.__name__ != "Data2D": 
     546            raise Valueerror, " create_fittable_data2D expects a Data2D" 
     547        ## Data2D case 
     548        new_data = deepcopy(data) 
     549        if not hasattr(data, "is_data"): 
     550            new_data.group_id += "data2D" 
     551            new_data.id +="data2D" 
     552            new_data.is_data = False 
     553            title = new_data.name 
     554            title += " Fit" 
     555            wx.PostEvent(self.parent, NewPlotEvent(plot=new_data, 
     556                                                    title=str(title))) 
     557        else: 
     558            new_data.is_data = True 
     559        return new_data 
     560         
     561    def create_fittable_data1D(self, data): 
     562        """ 
     563            check if the current data is a theory 1d and add dy to that data 
     564            @return Data1D 
     565        """ 
     566        if not issubclass(data.__class__, LoaderData1D): 
     567            raise ValueError, "create_fittable_data1D expects Data1D" 
     568        #get the appropriate dy  
     569        dy = deepcopy(data.dy) 
     570        if len(self.err_dy) > 0: 
     571            if data.name in  self.err_dy.iterkeys(): 
     572                dy = self.err_dy[data.name]    
     573                print "err_dy ====", dy  
     574        if data.dy is None or data.dy == []: 
     575            dy = numpy.zeros(len(data.y)) 
     576        print "dy ====", dy  
     577        if data.__class__.__name__ == "Theory1D": 
     578             
     579            new_data = self.copy_data(data, dy) 
     580            new_data.group_id += "data1D" 
     581            new_data.id +="data1D" 
     582            new_data.is_data = False 
     583            title = new_data.name 
     584            title = 'Data created from Theory' 
     585            wx.PostEvent(self.parent, NewPlotEvent(plot=new_data, 
     586                                                    title=str(title), 
     587                                                   reset=True)) 
     588        else: 
     589            new_data = self.copy_data(data, dy)   
     590            new_data.is_data = True 
     591        return new_data 
     592            
     593    def add_fit_page(self, data): 
     594        """ 
     595            given a data, ask to the fitting panel to create a new fitting page, 
     596            get this page and store it into the page_finder of this plug-in 
     597        """ 
     598        try: 
     599            page = self.fit_panel.add_fit_page(data) 
     600            # add data associated to the page created 
     601            if page != None:   
     602                page.set_data(data)  
     603                #create a fitproblem storing all link to data,model,page creation 
     604                if not page in self.page_finder.keys(): 
     605                    self.page_finder[page]= FitProblem() 
     606                ## item is almost the same as data but contains 
     607                ## axis info for plotting  
     608                #self.page_finder[page].add_plotted_data(item) 
     609                self.page_finder[page].add_fit_data(data) 
     610 
     611                wx.PostEvent(self.parent, StatusEvent(status="Page Created")) 
     612            else: 
     613                wx.PostEvent(self.parent, StatusEvent(status="Page was already Created")) 
     614        except: 
     615            raise 
     616            #wx.PostEvent(self.parent, StatusEvent(status="Creating Fit page: %s"\ 
     617            #%sys.exc_value)) 
     618            return 
     619     
    539620    def _onEVT_SLICER_PANEL(self, event): 
    540621        """ 
     
    650731        Plugin.on_perspective(self,event=event) 
    651732        for plottable in self.panel.graph.plottables: 
    652             if plottable.name == self.panel.graph.selected_plottable: 
    653                 if  plottable.__class__.__name__=="Theory1D": 
    654                     dy=numpy.zeros(len(plottable.y)) 
    655                     if hasattr(plottable, "dy"): 
    656                         dy= copy.deepcopy(plottable.dy) 
    657                          
    658                     item = self.copy_data(plottable, dy) 
    659                     item.group_id += "data1D" 
    660                     item.id +="data1D" 
    661                     item.is_data = False 
    662                     title = item.name 
    663                     title = 'Data created from Theory' 
    664                     wx.PostEvent(self.parent, NewPlotEvent(plot=item, 
    665                                                             title=str(title), 
    666                                                            reset=True)) 
    667                 else: 
    668                     item= self.copy_data(plottable, plottable.dy)   
    669                     item.is_data=True 
    670                      
    671                 ## put the errors values back to the model if the errors were hiden 
    672                 ## before sending them to the fit engine 
    673                 if len(self.err_dy)>0: 
    674                     dy = item.dy 
    675                     if item.name in  self.err_dy.iterkeys(): 
    676                         dy = self.err_dy[item.name] 
    677                     data = self.copy_data(item, dy) 
    678                     data.is_data= item.is_data 
    679                  
    680                 else: 
    681                     if item.dy==None: 
    682                         dy= numpy.zeros(len(item.y)) 
    683                         data= self.copy_data(item, dy) 
    684                         data.is_data=item.is_data 
    685                     else: 
    686                         data= self.copy_data(item,item.dy) 
    687                         data.is_data=item.is_data 
     733            if issubclass(plottable.__class__, LoaderData1D): 
     734                if plottable.name == self.panel.graph.selected_plottable: 
     735                    data = self.create_fittable_data1D(data=plottable) 
     736                    self.add_fit_page(data=data) 
     737                    return 
    688738            else: 
    689                 ## Data2D case 
    690                 if not hasattr(plottable, "is_data"): 
    691                     item= copy.deepcopy(plottable) 
    692                     item.group_id += "data2D" 
    693                     item.id +="data2D" 
    694                     item.is_data= False 
    695                     title = item.name 
    696                     title += " Fit" 
    697                     data = item 
    698                     wx.PostEvent(self.parent, NewPlotEvent(plot=item, title=str(title))) 
    699                 else: 
    700                     item= copy.deepcopy(plottable) 
    701                     data= copy.deepcopy(plottable) 
    702                     item.is_data=True 
    703                     data.is_data=True 
    704                  
    705                 
    706             ## create anew page                    
    707             if item.name == self.panel.graph.selected_plottable or\ 
    708                  item.__class__.__name__ is "Data2D": 
    709                 try: 
    710                     page = self.fit_panel.add_fit_page(data) 
    711                     # add data associated to the page created 
    712                     if page != None:   
    713                         page.set_data(data)  
    714                         #create a fitproblem storing all link to data,model,page creation 
    715                         if not page in self.page_finder.keys(): 
    716                             self.page_finder[page]= FitProblem() 
    717                         ## item is almost the same as data but contains 
    718                         ## axis info for plotting  
    719                         self.page_finder[page].add_plotted_data(item) 
    720                         self.page_finder[page].add_fit_data(data) 
    721  
    722                         wx.PostEvent(self.parent, StatusEvent(status="Page Created")) 
    723                     else: 
    724                         wx.PostEvent(self.parent, StatusEvent(status="Page was already Created")) 
    725                 except: 
    726                     raise 
    727                     #wx.PostEvent(self.parent, StatusEvent(status="Creating Fit page: %s"\ 
    728                     #%sys.exc_value)) 
    729                     return 
    730                  
    731                  
     739                data = self.create_fittable_data2D(data=plottable) 
     740                self.add_fit_page(data=data) 
     741 
    732742    def _updateFit(self): 
    733743        """ 
     
    801811                if value.get_scheduled()==1: 
    802812                    model = value.get_model() 
    803                     metadata =  value.get_plotted_data() 
     813                    data =  value.get_fit_data() 
    804814                    small_param_name = [] 
    805815                    small_out = [] 
     
    935945            if self.page_finder[self.current_pg].get_model()== None : 
    936946                 
    937                 model.name="M"+str(self.index_model) 
     947                model.name = "M"+str(self.index_model) 
    938948                self.index_model += 1   
    939949            else: 
    940950                model.name= self.page_finder[self.current_pg].get_model().name 
    941951                 
    942             metadata = self.page_finder[self.current_pg].get_plotted_data() 
     952            data = self.page_finder[self.current_pg].get_fit_data() 
    943953             
    944954            # save the name containing the data name with the appropriate model 
     
    948958            smearer=  self.page_finder[self.current_pg].get_smearer() 
    949959            # save model name 
    950             self.draw_model( model=model,smearer=smearer,  
    951                              data= metadata, qmin=qmin, qmax=qmax) 
     960            self.draw_model( model=model, smearer=smearer,  
     961                             data=data, qmin=qmin, qmax=qmax) 
    952962             
    953963            if self.sim_page!=None: 
    954964                self.sim_page.draw_page() 
    955965         
    956          
    957    
    958966    def _on_model_menu(self, evt): 
    959967        """ 
     
    11831191        """ 
    11841192        self.err_dy = event.err_dy 
    1185          
     1193        print "receiving error dy",self.err_dy 
    11861194          
    11871195    def _draw_model2D(self,model,data=None,description=None, enable2D=False, 
Note: See TracChangeset for help on using the changeset viewer.