Changeset f64a4b7 in sasview for fittingview/src


Ignore:
Timestamp:
Oct 3, 2011 2:14:11 PM (13 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:
140fad00
Parents:
68a921f
Message:

working display residuals

Location:
fittingview/src/sans/perspectives/fitting
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • fittingview/src/sans/perspectives/fitting/fitproblem.py

    r3fb5e68 rf64a4b7  
    157157        self.scheduled = 0 
    158158        self.fit_tab_caption = '' 
     159        self.nbr_residuals_computed = 0 
     160        self.batch_inputs = {} 
     161        self.batch_outputs = {} 
     162        
    159163  
    160164    def enable_smearing(self, flag=False, fid=None): 
     
    415419        return self.itervalues() 
    416420     
    417     def set_result(self, result): 
     421    def set_result(self, batch_inputs, batch_outputs): 
    418422        """ 
    419423        set a list of result 
    420424        """ 
    421         self.result = result 
     425        self.batch_inputs = batch_inputs 
     426        self.batch_outputs = batch_outputs 
    422427                 
    423428    def get_result(self): 
     
    425430        get result  
    426431        """ 
    427         return self.result 
     432        return self.batch_inputs, self.batch_outputs 
    428433     
    429434    def set_graph_id(self, id): 
  • fittingview/src/sans/perspectives/fitting/fitting.py

    r342dc442 rf64a4b7  
    4646 
    4747(PageInfoEvent, EVT_PAGE_INFO)   = wx.lib.newevent.NewEvent() 
     48(BatchDrawEvent, EVT_BATCH_DRAW)   = wx.lib.newevent.NewEvent() 
    4849 
    4950if sys.platform.count("darwin")==0: 
     
    268269        self.parent.Bind(EVT_SLICER_PANEL, self._on_slicer_event) 
    269270        self.parent.Bind(EVT_SLICER_PARS_UPDATE, self._onEVT_SLICER_PANEL) 
     271        self.parent.Bind(EVT_BATCH_DRAW, self.on_display_grid) 
    270272        self.parent._mgr.Bind(wx.aui.EVT_AUI_PANE_CLOSE,self._onclearslicer)     
    271273        #Create reader when fitting panel are created 
     
    639641                   enable1D=True, enable2D=False, 
    640642                   state=None, 
     643                   fid=None, 
    641644                   toggle_mode_on=False, 
    642645                   qmin=None, qmax=None,  
     
    667670                               qmin=qmin, 
    668671                               qmax=qmax,  
     672                               fid=fid, 
    669673                               weight=weight, 
    670674                               toggle_mode_on=toggle_mode_on, 
     
    680684                                qmin=qmin, 
    681685                                qmax=qmax, 
     686                                fid=fid, 
    682687                                weight=weight, 
    683688                                state=state, 
     
    725730            try: 
    726731                if value.get_scheduled() == 1: 
     732                    value.nbr_residuals_computed = 0 
    727733                    #Get list of parameters name to fit 
    728734                    pars = [] 
     
    10541060                        batch_inputs["error on %s" % pars[index]].append(item) 
    10551061            pid = page_id[0] 
    1056             self.page_finder[pid].set_result(result=batch_outputs)    
    1057             
     1062            self.page_finder[pid].set_result(batch_inputs=batch_inputs, 
     1063                                             batch_outputs=batch_outputs)    
     1064            count = len(self.page_finder[pid].keys()) 
    10581065            for pid in page_id: 
    10591066                cpage = self.fit_panel.get_page_by_id(pid) 
     
    10741081                                      state=None, 
    10751082                                      toggle_mode_on=False, 
     1083                                      fid=fid, 
    10761084                                      qmin=qmin, qmax=qmax,  
    10771085                                      update_chisqr=False,  
    10781086                                      weight=weight) 
    1079         #get theory data and residuals of each data then send all values 
    1080         # to the grid   
    1081         wx.CallAfter(self.on_set_batch_result, page_id, pars, batch_outputs,  
    1082                 batch_inputs) 
     1087            
     1088     
     1089         
    10831090                     
    1084     def on_set_batch_result(self, page_id, pars, batch_outputs, batch_inputs): 
    1085         """ 
    1086         """ 
    1087         for pid in page_id: 
    1088             fitproblem_list = self.page_finder[pid].values() 
    1089             fitproblem_list.sort() 
    1090             index = 0 
    1091             for fitproblem in fitproblem_list: 
    1092                 residuals =  fitproblem.get_residuals() 
    1093                 theory_data = fitproblem.get_theory_data() 
    1094                 data = fitproblem.get_fit_data() 
    1095                 model = fitproblem.get_model() 
    1096                  #fill batch result information 
    1097                 if "Data" not in batch_outputs.keys(): 
    1098                     batch_outputs["Data"] = [] 
    1099                 from sans.guiframe.data_processor import BatchCell 
    1100                 cell = BatchCell() 
    1101                 cell.label = data.name 
    1102                 cell.value = index 
    1103                 cell.object = [data, theory_data] 
    1104                  
    1105                 for param in model.getParamList(): 
    1106                     if param not in pars: 
    1107                         if param not in batch_inputs.keys(): 
    1108                             batch_inputs[param] = [] 
    1109                         if param not in model.non_fittable: 
    1110                             batch_inputs[param].append(model.getParam(param)) 
    1111                 batch_outputs["Data"].append(cell) 
    1112                 for key, value in data.meta_data.iteritems(): 
    1113                     if key not in batch_inputs.keys(): 
    1114                         batch_inputs[key] = [] 
    1115                     batch_inputs[key].append(value) 
    1116                 param = "temperature" 
    1117                 if hasattr(data.sample, param): 
    1118                     if param not in  batch_inputs.keys(): 
    1119                          batch_inputs[param] = [] 
    1120                     batch_inputs[param].append(data.sample.temperature) 
    1121                 # associate residuals plot 
    1122                 batch_outputs["Chi2"][index].object = residuals 
    1123            
    1124         self.parent.on_set_batch_result(data_outputs=batch_outputs,  
    1125                                             data_inputs=batch_inputs, 
    1126                                             plugin_name=self.sub_menu) 
    1127               
    1128               
     1091    def on_set_batch_result(self, page_id, fid, batch_outputs, batch_inputs): 
     1092        """ 
     1093        """ 
     1094         
     1095        pid =  page_id 
     1096        if fid not in self.page_finder[pid]: 
     1097            return 
     1098        fitproblem = self.page_finder[pid][fid] 
     1099        index = self.page_finder[pid].nbr_residuals_computed - 1 
     1100        print "index", index 
     1101        residuals =  fitproblem.get_residuals() 
     1102        theory_data = fitproblem.get_theory_data() 
     1103        data = fitproblem.get_fit_data() 
     1104        model = fitproblem.get_model() 
     1105        #fill batch result information 
     1106        if "Data" not in batch_outputs.keys(): 
     1107            batch_outputs["Data"] = [] 
     1108        from sans.guiframe.data_processor import BatchCell 
     1109        cell = BatchCell() 
     1110        cell.label = data.name 
     1111        cell.value = index 
     1112        theory_data.id = wx.NewId() 
     1113        cell.object = [data, theory_data] 
     1114         
     1115        batch_outputs["Data"].append(cell) 
     1116        for key, value in data.meta_data.iteritems(): 
     1117            if key not in batch_inputs.keys(): 
     1118                batch_inputs[key] = [] 
     1119            batch_inputs[key].append(value) 
     1120        param = "temperature" 
     1121        if hasattr(data.sample, param): 
     1122            if param not in  batch_inputs.keys(): 
     1123                 batch_inputs[param] = [] 
     1124            batch_inputs[param].append(data.sample.temperature) 
     1125        # associate residuals plot 
     1126        batch_outputs["Chi2"][index].object = [residuals] 
     1127        
    11291128    def _single_fit_completed(self, result, pars, page_id, batch_outputs, 
    11301129                          batch_inputs=None,  elapsed=None): 
     
    13961395         
    13971396    def _complete1D(self, x, y, page_id, elapsed, index, model, 
    1398                     weight=None, 
     1397                    weight=None, fid=None, 
    13991398                    toggle_mode_on=False, state=None,  
    14001399                    data=None, update_chisqr=True): 
     
    14441443                                 Chi2UpdateEvent(output=self._cal_chisqr( 
    14451444                                                                data=data, 
     1445                                                                fid=fid, 
    14461446                                                                weight=weight, 
    14471447                                                            page_id=page_id, 
    14481448                                                            index=index))) 
    14491449                else: 
    1450                     self._plot_residuals(page_id=page_id, data=data, 
     1450                    self._plot_residuals(page_id=page_id, data=data, fid=fid, 
    14511451                                          index=index, weight=weight) 
    14521452 
     
    14681468   
    14691469    def _complete2D(self, image, data, model, page_id,  elapsed, index, qmin, 
    1470                      
    1471                      qmax, weight=None, toggle_mode_on=False, state=None,  
     1470                qmax, fid=None, weight=None, toggle_mode_on=False, state=None,  
    14721471                     update_chisqr=True): 
    14731472        """ 
     
    15201519                             Chi2UpdateEvent(output=self._cal_chisqr(data=data, 
    15211520                                                                    weight=weight, 
     1521                                                                    fid=fid, 
    15221522                                                         page_id=page_id, 
    15231523                                                         index=index))) 
    15241524            else: 
    1525                 self._plot_residuals(page_id=page_id, data=data, 
     1525                self._plot_residuals(page_id=page_id, data=data, fid=fid, 
    15261526                                      index=index, weight=weight) 
    15271527        msg = "Computation  completed!" 
     
    15331533                      description=None, enable2D=False, 
    15341534                      state=None, 
     1535                      fid=None, 
    15351536                      weight=None, 
    15361537                      toggle_mode_on=False, 
     
    15611562                                    qmax=qmax, 
    15621563                                    weight=weight,  
     1564                                    fid=fid, 
    15631565                                    toggle_mode_on=toggle_mode_on, 
    15641566                                    state=state, 
     
    15771579                state=None, 
    15781580                weight=None, 
     1581                fid=None,  
    15791582                toggle_mode_on=False, update_chisqr=True,  
    15801583                enable1D=True): 
     
    16011604                                  state=state, 
    16021605                                  weight=weight, 
     1606                                  fid=fid, 
    16031607                                  toggle_mode_on=toggle_mode_on, 
    16041608                                  completefn=self._complete1D, 
     
    16131617   
    16141618     
    1615     def _cal_chisqr(self, page_id, data, weight, index=None):  
     1619    def _cal_chisqr(self, page_id, data, weight, fid=None, index=None):  
    16161620        """ 
    16171621        Get handy Chisqr using the output from draw1D and 2D,  
     
    16671671        chisqr = numpy.average(residuals * residuals) 
    16681672        self._plot_residuals(page_id=page_id, data=data_copy,  
     1673                             fid=fid, 
    16691674                             weight=weight, index=index) 
    16701675         
    16711676        return chisqr 
    16721677     
    1673     def _plot_residuals(self, page_id, weight, data=None, index=None):  
     1678    def _plot_residuals(self, page_id, weight, fid=None, 
     1679                        data=None, index=None):  
    16741680        """ 
    16751681        Plot the residuals 
     
    17531759        title = new_plot.name  
    17541760        self.page_finder[page_id].set_residuals(residuals=new_plot, fid=data.id) 
     1761        batch_on = self.fit_panel.get_page_by_id(page_id).batch_on 
     1762         
     1763        # Need all residuals before plotting 
     1764        # Should be refactored 
     1765        n = len(self.page_finder[page_id].keys()) 
     1766        m = self.page_finder[page_id].nbr_residuals_computed 
     1767        flag = False 
     1768        batch_inputs, batch_outputs = self.page_finder[page_id].get_result() 
     1769       
     1770        if self.page_finder[page_id].nbr_residuals_computed == -1: 
     1771            flag = False 
     1772        else: 
     1773            if m == n - 1: 
     1774                flag = True 
     1775            else: 
     1776                flag = False 
     1777                self.page_finder[page_id].nbr_residuals_computed += 1 
     1778             
     1779            self.on_set_batch_result(page_id=page_id, 
     1780                                 fid=fid, 
     1781                              batch_outputs=batch_outputs,  
     1782                                batch_inputs=batch_inputs)  
    17551783        # plot data 
    1756         wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title=title))  
     1784        event = BatchDrawEvent(page_id=page_id ,  
     1785                           batch_on=batch_on, 
     1786                           batch_outputs=batch_outputs, 
     1787                           batch_inputs=batch_inputs, 
     1788                           is_displayed=flag) 
     1789        wx.PostEvent(self.parent, event) 
     1790         
     1791        if not batch_on: 
     1792            wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title=title)) 
     1793             
    17571794        #reset weight   
    17581795        #self.weight = None 
     1796         
     1797    def on_display_grid(self, event): 
     1798        """ 
     1799        deplay batch result 
     1800        """ 
     1801        page_id = event.page_id 
     1802        batch_on = event.batch_on 
     1803        flag = event.is_displayed 
     1804        batch_outputs = event.batch_outputs 
     1805        batch_inputs = event.batch_inputs 
     1806        if flag and batch_on: 
     1807            self.parent.on_set_batch_result(data_outputs=batch_outputs,  
     1808                                            data_inputs=batch_inputs, 
     1809                                            plugin_name=self.sub_menu) 
     1810            self.page_finder[page_id].nbr_residuals_computed = -1 
     1811        
    17591812#def profile(fn, *args, **kw): 
    17601813#    import cProfile, pstats, os 
  • fittingview/src/sans/perspectives/fitting/model_thread.py

    r62f851f rf64a4b7  
    1818                 state=None, 
    1919                 weight=None, 
     20                 fid=None, 
    2021                 toggle_mode_on=False, 
    2122                 completefn=None, 
     
    3233        self.qmax = qmax 
    3334        self.weight = weight 
     35        self.fid = fid 
    3436        #self.qstep = qstep 
    3537        self.toggle_mode_on = toggle_mode_on 
     
    104106                       elapsed=elapsed, 
    105107                       index=index_model, 
     108                       fid=self.fid, 
    106109                       qmin=self.qmin, 
    107110                       qmax=self.qmax, 
     
    118121                 page_id, 
    119122                 data, 
     123                 fid=None, 
    120124                 qmin=None, 
    121125                 qmax=None, 
     
    136140                 yieldtime, 
    137141                 worktime) 
     142        self.fid = fid 
    138143        self.data = data 
    139144        self.qmin = qmin 
     
    172177                      state=self.state, 
    173178                      weight=self.weight, 
     179                      fid=self.fid, 
    174180                      toggle_mode_on=self.toggle_mode_on, 
    175181                      elapsed=elapsed,index=index, model=self.model, 
Note: See TracChangeset for help on using the changeset viewer.