Changeset e88ebfd in sasview for sansview/perspectives/fitting


Ignore:
Timestamp:
Mar 11, 2011 4:39:00 PM (14 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:
ee2b492
Parents:
14cd91b1
Message:

working on guiframe

Location:
sansview/perspectives/fitting
Files:
4 edited

Legend:

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

    rb2d9826 re88ebfd  
    946946            return  True 
    947947         
    948             
     948    def set_model_state(self, state): 
     949        """ 
     950        reset page given a model state 
     951        """ 
     952        self.disp_cb_dict = state.disp_cb_dict 
     953        self.disp_list = state.disp_list 
     954       
     955        ## set the state of the radio box 
     956        self.shape_rbutton.SetValue(state.shape_rbutton ) 
     957        self.shape_indep_rbutton.SetValue(state.shape_indep_rbutton) 
     958        self.struct_rbutton.SetValue(state.struct_rbutton) 
     959        self.plugin_rbutton.SetValue(state.plugin_rbutton) 
     960         
     961        ## fill model combobox 
     962        self._show_combox_helper() 
     963        #select the current model 
     964        self.formfactorbox.Select(int(state.formfactorcombobox)) 
     965        self.structurebox.SetSelection(state.structurecombobox ) 
     966        if state.multi_factor != None: 
     967            self.multifactorbox.SetSelection(state.multi_factor) 
     968             
     969         ## reset state of checkbox,textcrtl  and  regular parameters value 
     970        self._reset_parameters_state(self.orientation_params_disp, 
     971                                     state.orientation_params_disp) 
     972        self._reset_parameters_state(self.orientation_params, 
     973                                     state.orientation_params) 
     974        self._reset_parameters_state(self.str_parameters, 
     975                                     state.str_parameters) 
     976        self._reset_parameters_state(self.parameters,state.parameters) 
     977         ## display dispersion info layer         
     978        self.enable_disp.SetValue(state.enable_disp) 
     979        self.disable_disp.SetValue(state.disable_disp) 
     980         
     981        if hasattr(self, "disp_box"): 
     982             
     983            self.disp_box.SetSelection(state.disp_box)  
     984            n= self.disp_box.GetCurrentSelection() 
     985            dispersity= self.disp_box.GetClientData(n) 
     986            name = dispersity.__name__      
     987 
     988            self._set_dipers_Param(event=None) 
     989        
     990            if name == "ArrayDispersion": 
     991                 
     992                for item in self.disp_cb_dict.keys(): 
     993                     
     994                    if hasattr(self.disp_cb_dict[item], "SetValue") : 
     995                        self.disp_cb_dict[item].SetValue(\ 
     996                                                    state.disp_cb_dict[item]) 
     997                        # Create the dispersion objects 
     998                        from sans.models.dispersion_models import ArrayDispersion 
     999                        disp_model = ArrayDispersion() 
     1000                        if hasattr(state,"values")and\ 
     1001                                 self.disp_cb_dict[item].GetValue() == True: 
     1002                            if len(state.values)>0: 
     1003                                self.values=state.values 
     1004                                self.weights=state.weights 
     1005                                disp_model.set_weights(self.values, 
     1006                                                        state.weights) 
     1007                            else: 
     1008                                self._reset_dispersity() 
     1009                         
     1010                        self._disp_obj_dict[item] = disp_model 
     1011                        # Set the new model as the dispersion object  
     1012                        #for the selected parameter 
     1013                        self.model.set_dispersion(item, disp_model) 
     1014                     
     1015                        self.model._persistency_dict[item] = \ 
     1016                                                [state.values, state.weights] 
     1017                     
     1018            else: 
     1019                keys = self.model.getParamList() 
     1020                for item in keys: 
     1021                    if item in self.disp_list and \ 
     1022                        not self.model.details.has_key(item): 
     1023                        self.model.details[item] = ["", None, None] 
     1024                for k,v in self.state.disp_cb_dict.iteritems(): 
     1025                    self.disp_cb_dict = copy.deepcopy(state.disp_cb_dict)  
     1026                    self.state.disp_cb_dict = copy.deepcopy(state.disp_cb_dict) 
     1027         ## smearing info  restore 
     1028        if hasattr(self, "enable_smearer"): 
     1029            ## set smearing value whether or not the data  
     1030            #contain the smearing info 
     1031            self.enable_smearer.SetValue(state.enable_smearer) 
     1032            self.disable_smearer.SetValue(state.disable_smearer) 
     1033            self.onSmear(event=None)            
     1034        self.pinhole_smearer.SetValue(state.pinhole_smearer) 
     1035        self.slit_smearer.SetValue(state.slit_smearer) 
     1036        ## we have two more options for smearing 
     1037        if self.pinhole_smearer.GetValue(): self.onPinholeSmear(event=None) 
     1038        elif self.slit_smearer.GetValue(): self.onSlitSmear(event=None) 
     1039        
     1040        ## reset state of checkbox,textcrtl  and dispersity parameters value 
     1041        self._reset_parameters_state(self.fittable_param,state.fittable_param) 
     1042        self._reset_parameters_state(self.fixed_param,state.fixed_param) 
     1043         
     1044        ## draw the model with previous parameters value 
     1045        self._onparamEnter_helper() 
     1046        self.select_param(event=None)  
     1047        #Save state_fit 
     1048        self.save_current_state_fit() 
     1049        self._lay_out() 
     1050        self.Refresh() 
     1051         
    9491052    def reset_page_helper(self, state): 
    9501053        """ 
  • sansview/perspectives/fitting/fitpanel.py

    rb2d9826 re88ebfd  
    101101            return selected_page.get_data() 
    102102     
     103    def set_model_state(state): 
     104        """ 
     105        receive a state to reset the model in the current page 
     106        """ 
     107        pos = self.GetSelection() 
     108        if pos != -1: 
     109            selected_page = self.GetPage(pos) 
     110            selected_page.set_model_state(state) 
     111             
    103112    def get_state(self): 
    104113        """ 
  • sansview/perspectives/fitting/fitproblem.py

    r6bbeacd4 re88ebfd  
     1import copy  
    12 
    23class FitProblem: 
     
    3233        copy fitproblem 
    3334        """ 
    34         import copy  
     35         
    3536        obj          = FitProblem() 
    3637        model= None 
     
    110111         
    111112        """ 
    112         self.theory_data = data 
    113          
    114  
     113        self.theory_data = copy.deepcopy(data) 
     114       
    115115    def get_theory_data(self): 
    116116        """ 
  • sansview/perspectives/fitting/fitting.py

    rb2d9826 re88ebfd  
    1717import logging 
    1818import numpy 
    19 #import math 
    2019import string 
    2120import time 
    22 #import thread 
    2321from copy import deepcopy 
    24  
    2522import models 
    2623import fitpage 
     
    3633from sans.guiframe.gui_style import GUIFRAME_ID 
    3734from sans.guiframe.plugin_base import PluginBase  
    38  
    3935 
    4036from .console import ConsoleUpdate 
     
    256252        return True 
    257253     
    258     def set_data(self, data_list=None, theory_list=None): 
     254    def set_data(self, data_list=None): 
    259255        """ 
    260256        receive a list of data to fit 
     
    270266        else: 
    271267            selected_data_list = data_list 
    272         for data in selected_data_list: 
    273             self.add_fit_page(data=data) 
    274             wx.PostEvent(self.parent, NewPlotEvent(plot=data,  
    275                                                    title=str(data.title))) 
     268        try: 
     269            for data in selected_data_list: 
     270                self.add_fit_page(data=data) 
     271                wx.PostEvent(self.parent, NewPlotEvent(plot=data,  
     272                                                       title=str(data.title))) 
     273        except: 
     274            msg = "Fitting Set_data: " + str(sys.exc_value) 
     275            wx.PostEvent(self.parent, StatusEvent(status=msg, info="error")) 
     276             
     277    def set_theory(self,  theory_list=None): 
     278        """ 
     279        """ 
     280        #set the model state for a given theory_state: 
     281        for item in theory_list: 
     282            try: 
     283                _, theory_state = item 
     284                self.fit_panel.set_model_state(theory_state) 
     285            except: 
     286                msg = "Fitting: cannot deal with the theory received" 
     287                logging.error("set_theory " + msg + "\n" + str(sys.exc_value)) 
     288                wx.PostEvent(self.parent, StatusEvent(status=msg, info="error")) 
    276289             
    277290    def set_state(self, state=None, datainfo=None, format=None): 
     
    593606        if theory: 
    594607            id = data.id  
    595         group_id = data.group_id[len(data.group_id)-1] 
     608        group_id = data.group_id 
    596609        wx.PostEvent(self.parent, NewPlotEvent(id=id, 
    597610                                                   group_id=group_id, 
     
    643656        #append Data1D to the panel containing its theory 
    644657        #if theory already plotted 
    645          
    646658        if page.id in self.page_finder: 
    647659            theory_data = self.page_finder[page.id].get_theory_data() 
    648              
    649660            if issubclass(data.__class__, Data2D): 
    650                 data.group_id.append(wx.NewId()) 
     661                data.group_id = wx.NewId() 
    651662                if theory_data is not None: 
    652663                    group_id = str(page.id) + " Model1D" 
    653                     if group_id in theory_data.group_id: 
    654                         theory_data.group_id.remove(group_id) 
    655664                    wx.PostEvent(self.parent,  
    656665                             NewPlotEvent(group_id=group_id, 
     
    660669                if theory_data is not None: 
    661670                    group_id = str(page.id) + " Model2D" 
    662                     if group_id in theory_data.group_id: 
    663                         theory_data.group_id.remove(group_id) 
    664                     data_group_id = theory_data.group_id[len(theory_data.group_id)-1] 
    665                     if data_group_id not in data.group_id: 
    666                         data.group_id.append(data_group_id) 
     671                    data.group_id = theory_data.group_id 
    667672                    wx.PostEvent(self.parent,  
    668673                             NewPlotEvent(group_id=group_id, 
    669674                                               action="delete")) 
    670                     self.parent.update_data(prev_data=theory_data, new_data=data)        
     675                    self.parent.update_data(prev_data=theory_data, new_data=data)    
     676               
    671677        self.store_data(id=page.id, data=data, caption=page.window_name) 
    672678        if self.sim_page is not None: 
     
    725731                if name !="Model": 
    726732                    data= fitproblem.get_fit_data() 
    727                     page = self.fit_panel.add_fit_page(data= data,reset=True) 
     733                    page = self.fit_panel.add_fit_page(data=data, reset=True) 
    728734                    if fitproblem != None: 
    729735                        self.page_finder[id] = fitproblem 
     
    11031109        theory.ymin = ymin  
    11041110        theory.ymax = ymax  
    1105         group_id = str(id) + " Model2D" 
    1106         if group_id not in theory.group_id: 
    1107             theory.group_id.append(group_id) 
     1111        theory.group_id = str(id) + " Model2D" 
    11081112        theory.id = str(id) + " Model2D" 
    11091113   
    1110                  
    11111114    def _complete1D(self, x,y, id, elapsed,index,model, 
    11121115                    toggle_mode_on=False,state=None, data=None): 
     
    11261129                    theory_data = self.page_finder[id].get_theory_data() 
    11271130                    if theory_data is not None: 
    1128                         group_id = theory_data.group_id[len(theory_data.group_id)-1] 
    1129                         if group_id not in data.group_id: 
    1130                             data.group_id.append(group_id) 
     1131                       data.group_id = theory_data.group_id 
    11311132                #data is plotted before the theory, then take its group_id 
    11321133                #assign to the new theory 
    1133                 group_id = data.group_id[len(data.group_id)-1] 
    1134                 if group_id not in new_plot.group_id: 
    1135                     new_plot.group_id.append(group_id) 
     1134                new_plot.group_id = data.group_id 
    11361135                
    11371136            else: 
     
    11401139                new_plot.title = "Analytical model 1D " 
    11411140                #find a group id to plot theory without data 
    1142                 group_id =  str(id) + " Model1D"   
    1143                 if group_id not in new_plot.group_id: 
    1144                     new_plot.group_id.append(group_id) 
     1141                new_plot.group_id =  str(id) + " Model1D"   
    11451142                new_plot.is_data = False  
    11461143            new_plot.id =  str(id) + " Model1D"   
     
    11611158                             NewPlotEvent(group_id=str(id) + " Model2D", 
    11621159                                               action="Hide")) 
    1163                  
     1160            
    11641161            self.page_finder[id].set_theory_data(new_plot) 
     1162            theory_data = self.page_finder[id].get_theory_data() 
    11651163            if data is None: 
    1166                 theory_data = self.page_finder[id].get_theory_data() 
     1164                name = "Data generates by Fitting " 
     1165                theory_data.name = name 
    11671166                self.parent.add_data_helper({theory_data.id:theory_data}) 
    11681167                data_id = theory_data.id 
     
    11701169                data_id = data.id 
    11711170            
    1172             self.parent.append_theory(data_id=data_id,  
    1173                                           theory=new_plot, state=state) 
     1171            self.parent.update_theory(data_id=data_id,  
     1172                                       theory=theory_data, 
     1173                                       state=state)      
    11741174            current_pg = self.fit_panel.get_page_by_id(id) 
    11751175            title = new_plot.title 
     
    12181218        else: 
    12191219            new_plot.id = str(id) + " Model2D" 
    1220             group_id = str(id) + " Model2D" 
    1221             if group_id not in new_plot.group_id: 
    1222                 new_plot.group_id.append(group_id) 
    1223           
     1220            new_plot.group_id = str(id) + " Model2D" 
    12241221            new_plot.x_bins = data.x_bins 
    12251222            new_plot.y_bins = data.y_bins 
     
    12471244                             NewPlotEvent(group_id=str(id) + " Model1D", 
    12481245                                               action="Hide")) 
    1249         self.page_finder[id].set_theory_data(theory_data) 
    1250          
     1246         
     1247        self.page_finder[id].set_theory_data(new_plot) 
     1248        theory_data = self.page_finder[id].get_theory_data() 
    12511249        if data is None: 
    1252             theory_data = self.page_finder[id].get_theory_data() 
     1250            name = "Data generates by Fitting " 
     1251            theory_data.name = name 
    12531252            self.parent.add_data_helper({theory_data.id:theory_data}) 
    12541253            data_id = theory_data.id 
    12551254        else: 
    12561255            data_id = data.id 
    1257          
    1258         self.parent.append_theory(data_id=data_id,  
    1259                                           theory=new_plot, state=state) 
     1256        self.parent.update_theory(data_id=data_id,  
     1257                                       theory=theory_data, 
     1258                                       state=state)   
    12601259        current_pg = self.fit_panel.get_page_by_id(id) 
    12611260        title = new_plot.title 
Note: See TracChangeset for help on using the changeset viewer.