Changeset b787e68c in sasview for sansview


Ignore:
Timestamp:
Apr 7, 2009 5:41:04 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:
8a1ab69
Parents:
b94a0a6
Message:

working on saving page state

Location:
sansview/perspectives/fitting
Files:
6 edited

Legend:

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

    rcfc0913 rb787e68c  
    1515        This class provide general structure of  fitpanel page 
    1616    """ 
     17     ## Internal name for the AUI manager 
     18    window_name = "Basic Page" 
     19    ## Title to appear on top of the window 
     20    window_caption = "Basic page " 
    1721     
    1822    def __init__(self,parent, page_info): 
    1923        wx.ScrolledWindow.__init__(self, parent) 
    20         ## store name 
    21         self.name = page_info.name 
    2224        ##window_name 
    2325        self.window_name = page_info.window_name 
     
    177179        self.polydisp= sans.models.dispersion_models.models 
    178180        self.disp_box = wx.ComboBox(self, -1) 
    179         self.disp_box.SetValue("GaussianModel") 
    180          
     181        
    181182        for key in self.polydisp.iterkeys(): 
    182183            name = str(key.__name__) 
     
    184185                # Remove the option until the rest of the code is ready for it 
    185186                self.disp_box.Append("Select customized Model",key) 
    186                 pass   
     187                 
    187188            else: 
    188                 self.disp_box.Append(name,key)  
     189                self.disp_box.Append(name,key) 
     190        self.disp_box.SetSelection(0)  
     191         
    189192        wx.EVT_COMBOBOX(self.disp_box,-1, self._on_select_Disp)  
    190193              
     
    439442        if hasattr(self,"enable_smearer"): 
    440443            self.state.enable_smearer = self.enable_smearer.GetValue()    
     444             
     445        if hasattr(self,"disp_box"): 
     446            self.state.disp_box = self.disp_box.GetCurrentSelection() 
     447        self._save_plotting_range() 
    441448       
    442449        ## save checkbutton state and txtcrtl values 
     
    454461    def reset_page(self, state): 
    455462        """ 
    456             Use page_info and change the state of existing button 
     463            Use page_state and change the state of existing page 
    457464        """ 
    458465        self.state = state.clone() 
    459466        self.model= self.state.model 
    460467        self.data = self.state.data 
     468        
     469        ##model parameter values restore 
    461470        self._set_model_sizer_selection( self.model ) 
    462471        self.set_model_param_sizer(self.model) 
     472         
     473        ## display dispersion info layer 
     474        self.enable_disp.SetValue(self.state.enable_disp) 
     475        if hasattr(self, "disp_box"): 
     476            self.disp_box.SetSelection(self.state.disp_box)   
     477        self._set_dipers_Param(event=None) 
     478        
     479        ## smearing info  restore 
     480        if hasattr(self,"enable_smearer"): 
     481            self.enable_smearer.SetValue(state.enable_smearer) 
     482         
     483        ##plotting range restore     
    463484        self._reset_plotting_range() 
    464485         
    465         self.enable_disp.SetValue(self.state.enable_disp) 
    466         self._set_dipers_Param(event=None) 
    467          
    468         if hasattr(self,"enable_smearer"): 
    469             self.enable_smearer= self.state.enable_smearer 
     486        ## reset state of checkbox,textcrtl  and parameters value 
    470487        if hasattr(self, "cb1"):     
    471488            self.cb1.SetValue(self.state.cb1) 
     
    473490        self._reset_parameters_state(self.fittable_param,state.fittable_param) 
    474491        self._reset_parameters_state(self.fixed_param,state.fixed_param) 
     492         
     493        ## draw the model with previous parameters value 
    475494        self._draw_model() 
    476495         
     
    497516        self.qmax.SetValue(format_number(self.state.qmax))  
    498517        if self.state.npts!=None: 
    499             self.npts= self.state.npts 
     518            self.npts.SetValue(format_number(self.state.npts))  
     519            self.num_points = float(self.state.npts) 
    500520             
    501521        self.qmin_x = float(self.qmin.GetValue()) 
     
    507527            save the state of plotting range  
    508528        """ 
    509         self.state.qmin = self.qmin.GetValue()    
    510         self.state.qmax = self.qmax.GetValue()   
     529        self.state.qmin = self.qmin_x 
     530        self.state.qmax = self.qmax_x  
    511531        if self.npts!=None: 
    512             self.state.npts= self.npts.GetValue() 
     532            self.state.npts= self.num_points 
    513533             
    514534             
     
    520540        """ 
    521541        if self.model !=None: 
    522             self.save_current_state() 
     542             
    523543            # Flag to register when a parameter has changed. 
    524544            is_modified = False 
     
    547567                    self.num_points = float(self.npts.GetValue()) 
    548568                    is_modified = True 
     569            ## save current state 
     570            self.save_current_state() 
     571             
    549572            ## if any value is modify draw model with new value 
    550573            if is_modified: 
     
    596619                else: 
    597620                    item_page[6].Hide() 
     621                             
    598622                             
    599623    def _copy_parameters_state(self, listtocopy, statelist): 
     
    10531077                else: 
    10541078                    ## set gaussian sizer  
    1055                     self._set_sizer_gaussian()   
     1079                    #self._set_sizer_gaussian()   
     1080                    self._on_select_Disp(event=None) 
    10561081            else: 
    10571082                self.model_disp.Hide() 
     
    11171142             self.disp_list should change type later .now only gaussian 
    11181143        """ 
    1119         dispersity  =event.GetClientData() 
     1144         
     1145        n = self.disp_box.GetCurrentSelection() 
     1146        dispersity= self.disp_box.GetClientData(n) 
    11201147        name= dispersity.__name__ 
    11211148        if name == "GaussianDispersion": 
     
    11251152            self._set_sizer_arraydispersion() 
    11261153         
    1127              
    1128      
     1154        self.state.disp_box= n 
     1155        ## post state to fit panel 
     1156        event = PageInfoEvent(page = self) 
     1157        wx.PostEvent(self.parent, event) 
     1158         
     1159         
    11291160    def _set_sizer_arraydispersion(self): 
    11301161        """ 
  • sansview/perspectives/fitting/fitpage.py

    rcfc0913 rb787e68c  
    1010from sans.guiframe.utils import format_number 
    1111 
     12## event to post model to fit to fitting plugins 
    1213(ModelEventbox, EVT_MODEL_BOX) = wx.lib.newevent.NewEvent() 
     14 
     15## event to know the selected fit engine 
    1316(FitterTypeEvent, EVT_FITTER_TYPE)   = wx.lib.newevent.NewEvent() 
    1417_BOX_WIDTH = 80 
     
    1619import basepage 
    1720from basepage import BasicPage 
     21from basepage import PageInfoEvent 
    1822 
    1923 
     
    3135            Initialization of the Panel 
    3236        """ 
    33         self.name = self.data.name 
    34          
    3537        ## fit page does not content npts txtcrtl 
    3638        self.npts=None 
     
    3941        ## default fitengine type 
    4042        self.engine_type = "scipy" 
    41          
     43        ## draw sizer 
    4244        self._fill_datainfo_sizer() 
    43          
    4445        self._fill_model_sizer( self.sizer1) 
    4546        self._on_select_model(event=None) 
    4647        self._fill_range_sizer()  
    47          
    48         
     48     
    4949        ## to update the panel according to the fit engine type selected 
    5050        self.Bind(EVT_FITTER_TYPE,self._on_engine_change) 
     
    515515                wx.PostEvent(self.manager.parent, StatusEvent(status=\ 
    516516                            "Data contains smearing information %s"%msg)) 
    517             self.manager.set_smearer(smear, qmin= self.qmin_x, qmax= self.qmax_x)    
     517            self.manager.set_smearer(smear, qmin= float(self.qmin_x), 
     518                                      qmax= float(self.qmax_x))    
    518519        ## save the state enable smearing 
    519520        self.save_current_state() 
     521         
    520522   
    521523    def compute_chisqr2D(self): 
  • sansview/perspectives/fitting/fitpanel.py

    rcfc0913 rb787e68c  
    9696        """ 
    9797        state = self.get_current_page().createMemento() 
    98         page_name = self.get_current_page().name 
     98        page_name = self.get_current_page().window_name 
    9999        page_finder = self.manager.get_page_finder()  
    100100        fitproblem = None 
     
    103103            fitproblem= page_finder[self.get_current_page()] 
    104104             
    105         self.manager._add_page_onmenu(page_name, fitproblem) 
    106105         
    107106        selected_page = self.GetPage(self.GetSelection()) 
     
    114113             
    115114            #Delete the page from notebook 
    116             if selected_page.name in self.list_fitpage_name: 
    117                 self.list_fitpage_name.remove(selected_page.name) 
    118                  
    119             if selected_page.name== self.draw_model_name: 
     115            if selected_page.window_name in self.list_fitpage_name: 
     116                self.list_fitpage_name.remove(selected_page.window_name) 
     117            
     118            if selected_page.window_name== "Model": 
     119                fitproblem = self.get_current_page().model.clone() 
    120120                self.draw_model_name=None 
    121121                self.model_page=None 
     
    128128            self.about_page=None 
    129129        else: 
    130             self.manager.sim_page=None   
     130            self.manager.sim_page=None  
     131        ## page on menu 
     132        self.manager._add_page_onmenu(page_name, fitproblem) 
     133         
    131134         
    132135         
     
    177180            Add a fitting page on the notebook contained by fitpanel 
    178181            @param data: data to fit 
    179             @return panel : page just added for futher used. is used by fitting module 
     182            @return panel : page just added for further used. is used by fitting module 
    180183        """      
    181184        try: 
     
    188191            myinfo.event_owner = self.event_owner  
    189192            myinfo.manager = self.manager 
    190             myinfo.window_name = "Fit Page" 
    191             myinfo.window_caption = "Fit Page" 
     193            myinfo.window_name = name 
     194            myinfo.window_caption = name 
    192195         
    193196            #if not name in self.fit_page_name : 
    194197            from fitpage import FitPage 
    195198            panel = FitPage(parent= self, page_info=myinfo) 
    196             self.AddPage(page=panel,caption=name,select=True) 
     199             
     200            self.AddPage(page=panel, caption=name, select=True) 
    197201            self.list_fitpage_name.append(name) 
    198202            if reset: 
     
    209213         
    210214    
    211     def add_model_page(self,model,page_title, qmin=0, qmax=0.1, 
    212                         npts=50, topmenu=False,page_info=None): 
     215    def add_model_page(self,model, qmin=0, qmax=0.1, 
     216                        npts=50, topmenu=False, reset=False): 
    213217        """ 
    214218            Add a model page only one  to display any model selected from the menu or the page combo box. 
     
    224228        if topmenu==True: 
    225229            if  self.draw_model_name ==None: 
    226                 self._help_add_model_page(model,page_title,  
    227                                 qmin=qmin, qmax=qmax, npts=npts, page_info=page_info) 
     230                self._help_add_model_page(model=model, 
     231                                qmin=qmin, qmax=qmax, npts=npts, reset=reset) 
    228232            else: 
    229233                self.model_page.select_model(model, page_title) 
    230         else: 
    231             if  self.draw_model_name ==None: 
    232                 self._create_model_page(model,page_title, qmin=qmin, qmax=qmax, 
    233                                          npts=npts, page_info=page_info) 
     234        
     235       
    234236            
    235237    def  _onGetstate(self, event): 
     
    238240        """ 
    239241        page= event.page 
    240         if page.name in self.fit_page_name: 
    241             self.fit_page_name[page.name].insert(0,page.createMemento())  
     242        if page.window_name in self.fit_page_name: 
     243            self.fit_page_name[page.window_name].insert(0,page.createMemento())  
    242244             
    243245                 
    244     def _help_add_model_page(self,model,page_title, qmin=0,  
    245                              qmax=0.1, npts=50,page_info=None): 
     246    def _help_add_model_page(self,model,page_title="Model", qmin=0,  
     247                             qmax=0.1, npts=50,reset= False): 
    246248        """ 
    247249            #TODO: fill in description 
     
    251253            @param npts: number of Q points 
    252254        """ 
    253         self._create_model_page(model,page_title,qmin=qmin, qmax=qmax, 
    254                                  npts=npts,page_info= page_info) 
     255        ## creating object that contaning info about model  
     256        myinfo = PageInfo(model= model ,name= page_title) 
     257        myinfo.model_list_box = self.model_list_box.get_list() 
     258        myinfo.event_owner = self.event_owner  
     259        myinfo.manager = self.manager 
     260        myinfo.window_name = page_title 
     261        myinfo.window_caption = page_title 
     262       
     263        from modelpage import ModelPage 
     264        panel = ModelPage(self,myinfo) 
     265         
     266        self.AddPage(page=panel,caption=page_title,select=True) 
     267 
     268        self.model_page_number=self.GetSelection() 
     269        self.model_page=self.GetPage(self.GetSelection()) 
     270        # Set the range used to plot models 
     271        self.model_page.set_range(qmin, qmax, npts) 
     272        ##  resetting page 
     273        if reset: 
     274            if page_title in self.fit_page_name.keys(): 
     275                 
     276                memento= self.fit_page_name[page_title][0] 
     277                panel.reset_page(memento) 
     278        else: 
     279            self.fit_page_name[page_title]=[] 
     280            self.fit_page_name[page_title].insert(0,panel.createMemento()) 
     281          
    255282        # We just created a model page, we are ready to plot the model 
    256283        #self.manager.draw_model(model, model.name) 
    257284        #FOR PLUGIN  for some reason model.name is = BASEcomponent 
    258285        self.manager.draw_model(model) 
    259      
    260     def _create_model_page(self,model,page_title, qmin, qmax, npts,page_info=None): 
    261         """ 
    262         adding model page occurs here 
    263         """ 
    264         ## creating object that contaning info about model  
    265         if page_info==None: 
    266              
    267             myinfo = PageInfo(model=model ,name=page_title) 
    268             myinfo.model_list_box = self.model_list_box.get_list() 
    269             myinfo.event_owner = self.event_owner  
    270             myinfo.manager = self.manager 
    271             myinfo.window_name = "Model Page" 
    272             myinfo.window_caption = "Model Page" 
    273         else: 
    274             myinfo = page_info 
    275      
    276         from modelpage import ModelPage 
    277         panel = ModelPage(self,myinfo) 
    278         
    279         self.AddPage(page=panel,caption="Model",select=True) 
    280  
    281         self.draw_model_name=page_title 
    282         self.model_page_number=self.GetSelection() 
    283         self.model_page=self.GetPage(self.GetSelection()) 
    284          
    285          
    286         # Set the range used to plot models 
    287         self.model_page.set_range(qmin, qmax, npts) 
    288          
    289          
    290286   
    291     
    292   
     287   
  • sansview/perspectives/fitting/fitting.py

    rcfc0913 rb787e68c  
    471471            if event.GetId() in value: 
    472472                id,fitproblem = value 
    473                  
    474                 if name !="Model Page": 
     473                if name !="Model": 
    475474                    data= fitproblem.get_fit_data() 
    476475                    page = self.fit_panel.add_fit_page(data= data,reset=True) 
     
    478477                        self.page_finder[page]=fitproblem 
    479478                else: 
    480                     model= page_info.model 
    481                     self.fit_panel.add_model_page(model,model.name,topmenu=False, 
    482                                                   page_info=page_info) 
     479                    model = fitproblem 
     480                    self.fit_panel.add_model_page(model=model, topmenu=True, 
     481                                                  reset= True) 
    483482                    break 
    484483         
     
    787786            @param evt: wx.menu event 
    788787        """ 
    789         name = evt.model.__class__.__name__ 
    790         if hasattr(evt.model, "name"): 
    791             name = evt.model.name 
    792788        model = evt.model 
    793789      
     
    795791        # will be plotted automatically. If a page already exists, 
    796792        # the content will be updated and the plot refreshed 
    797         self.fit_panel.add_model_page(model,name,topmenu=True) 
     793        self.fit_panel.add_model_page(model,topmenu=True) 
    798794     
    799795    
  • sansview/perspectives/fitting/modelpage.py

    rb94a0a6 rb787e68c  
    2424   
    2525    """ 
    26     def __init__(self,parent, page_info, name=""): 
     26    def __init__(self,parent, page_info): 
    2727        BasicPage.__init__(self, parent, page_info) 
    2828        """  
    2929            Initialization of the Panel 
    3030        """ 
    31         self.name ="Model" 
    32         page_info.page_name= "Model Page" 
    3331        self._fill_model_sizer( self.sizer1)   
    3432        self._fill_range_sizer()  
     
    251249        """ 
    252250        self.model = model 
    253         self.parent.model_page.name = name 
    254         self.parent.draw_model_name = name 
    255          
    256251        self.set_model_param_sizer(self.model) 
    257252        self._draw_model() 
  • sansview/perspectives/fitting/pagestate.py

    rcfc0913 rb787e68c  
    5151        self.formfactorcombobox = "" 
    5252        self.structurecombobox  = "" 
    53         self.disp_box="" 
     53        ## the indice of the current selection 
     54        self.disp_box = 0 
    5455        ## Qrange 
    5556        ## Q range 
     
    7071        """ 
    7172        self.data = copy.deepcopy(data) 
    72      
    73      
     73 
    7474         
    7575    def clone(self): 
     
    8686        obj.fixed_param = copy.deepcopy(self.fixed_param) 
    8787        obj.fittable_param = copy.deepcopy(self.fittable_param) 
    88         obj.enable_disp= self.enable_disp 
    89         obj.enable_smearer = self.enable_smearer 
    90         obj.disp_box= copy.deepcopy(self.disp_box) 
    91         obj.cb1 = self.cb1 
     88        obj.enable_disp = copy.deepcopy(self.enable_disp) 
     89        obj.enable_smearer = copy.deepcopy(self.enable_smearer) 
     90        obj.disp_box = copy.deepcopy(self.disp_box) 
     91        obj.qmin = copy.deepcopy(self.qmin) 
     92        obj.qmax = copy.deepcopy(self.qmax) 
     93        obj.npts = copy.deepcopy(self.npts ) 
     94        obj.cb1 = copy.deepcopy(self.cb1) 
     95         
    9296        return obj 
    9397 
Note: See TracChangeset for help on using the changeset viewer.