Changeset ffa69b6 in sasview


Ignore:
Timestamp:
Jan 26, 2010 4:30:58 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:
fcd8887d
Parents:
2377cd4
Message:

change fitpanel to display default page

Location:
sansview/perspectives/fitting
Files:
3 edited

Legend:

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

    r9237df4 rffa69b6  
    4343        self.SetWindowVariant(variant=FONT_VARIANT) 
    4444        ##window_name 
    45         self.window_name = page_info.window_name 
    46         ##window_caption 
    47         self.window_caption = page_info.window_caption 
     45        
    4846        ## parent of the page 
    4947        self.parent = parent 
    5048        ## manager is the fitting plugin 
    51         self.manager= page_info.manager 
     49        self.manager= None 
    5250        ## owner of the page (fitting plugin) 
    53         self.event_owner= page_info.event_owner 
     51        self.event_owner= None 
    5452         ## current model 
    55         self.model = page_info.model 
     53        self.model = None 
    5654        ## data 
    57         self.data = page_info.data 
     55        self.data = None 
     56        self.state = PageState(parent=parent) 
    5857        ## dictionary containing list of models 
    59         self.model_list_box = page_info.model_list_box 
     58        self.model_list_box = None 
     59        self.set_page_info(page_info=page_info) 
    6060        ## Data member to store the dispersion object created 
    6161        self._disp_obj_dict = {} 
     
    7979        self.disp_list=[] 
    8080        self.disp_name="" 
     81         
    8182        ## list of orientation parameters 
    8283        self.orientation_params=[] 
     
    209210                        control.SetSelection(-1,-1) 
    210211                  
    211         
     212    def set_page_info(self, page_info): 
     213        """ 
     214            set some page important information at once 
     215        """ 
     216       ##window_name 
     217        self.window_name = page_info.window_name 
     218        ##window_caption 
     219        self.window_caption = page_info.window_caption 
     220        ## manager is the fitting plugin 
     221        self.manager= page_info.manager 
     222        ## owner of the page (fitting plugin) 
     223        self.event_owner= page_info.event_owner 
     224         ## current model 
     225        self.model = page_info.model 
     226        ## data 
     227        self.data = page_info.data 
     228        ## dictionary containing list of models 
     229        self.model_list_box = page_info.model_list_box 
     230        ## Data member to store the dispersion object created 
     231        self.populate_box(dict=self.model_list_box) 
     232         
    212233    def onContextMenu(self, event):  
    213234        """ 
     
    312333        self.model_list_box = dict 
    313334        self.state.model_list_box = self.model_list_box 
    314              
    315      
    316          
     335         
     336    def initialize_combox(self):  
     337        """ 
     338            put default value in the combobox  
     339        """   
     340        ## fill combox box 
     341        if self.model_list_box is None: 
     342            return 
     343        if len(self.model_list_box)>0: 
     344            self._populate_box( self.formfactorbox,self.model_list_box["Shapes"]) 
     345        
     346        if len(self.model_list_box)>0: 
     347            self._populate_box( self.structurebox, 
     348                                self.model_list_box["Structure Factors"]) 
     349            self.structurebox.Insert("None", 0,None) 
     350            self.structurebox.SetSelection(0) 
     351            self.structurebox.Hide() 
     352            self.text2.Hide() 
     353            self.structurebox.Disable() 
     354            self.text2.Disable() 
     355              
     356            if self.model.__class__ in self.model_list_box["P(Q)*S(Q)"]: 
     357                self.structurebox.Show() 
     358                self.text2.Show() 
     359                self.structurebox.Enable() 
     360                self.text2.Enable()             
     361                 
    317362    def set_dispers_sizer(self): 
    318363        """ 
     
    728773        self._copy_parameters_state(self.fixed_param, self.state.fixed_param) 
    729774     
    730                 
     775           
     776    def check_invalid_panel(self):   
     777        """ 
     778            check if the user can already perform some action with this panel 
     779        """  
     780        flag = False 
     781        if self.data is None and self.model is None: 
     782            msg = "Please load a Data to start" 
     783            wx.MessageBox(msg, 'Info') 
     784            return  True 
    731785    def reset_page_helper(self, state): 
    732786        """ 
     
    881935            Reset the plotting range to a given state 
    882936        """ 
     937        if self.check_invalid_panel(): 
     938            return 
    883939        self.qmin.SetValue(str(state.qmin)) 
    884940        self.qmax.SetValue(str(state.qmax))  
     
    12241280            [Note to coder: This way future changes will be done in only one place.]  
    12251281        """ 
     1282        if self.check_invalid_panel(): 
     1283            return 
    12261284        if self.model !=None: 
    12271285            temp_smear=None 
     
    12361294                                    qstep= float(self.num_points), 
    12371295                                    enable2D=self.enable2D)  
    1238         print "_draw_model" 
    1239         for name in self.model.getParamList(): 
    1240             print name , self.model.getParam(name) 
     1296        
    12411297         
    12421298    def _set_model_sizer(self,sizer, box_sizer, title="", object=None): 
     
    12831339         
    12841340        self.formfactorbox = wx.ComboBox(self, -1,style=wx.CB_READONLY) 
    1285         if self.model!=None: 
     1341        if self.model!= None: 
    12861342            self.formfactorbox.SetValue(self.model.name) 
    1287              
    1288              
     1343            
    12891344        self.structurebox = wx.ComboBox(self, -1,style=wx.CB_READONLY) 
    12901345        wx.EVT_COMBOBOX(self.formfactorbox,-1, self._on_select_model) 
    12911346        wx.EVT_COMBOBOX(self.structurebox,-1, self._on_select_model) 
    12921347         
    1293      
    1294         ## fill combox box 
    1295         if len(self.model_list_box)>0: 
    1296             self._populate_box( self.formfactorbox,self.model_list_box["Shapes"]) 
    12971348        
    1298         if len(self.model_list_box)>0: 
    1299             self._populate_box( self.structurebox, 
    1300                                 self.model_list_box["Structure Factors"]) 
    1301             self.structurebox.Insert("None", 0,None) 
    1302             self.structurebox.SetSelection(0) 
    1303             self.structurebox.Hide() 
    1304             self.text2.Hide() 
    1305             self.structurebox.Disable() 
    1306             self.text2.Disable() 
     1349        self.initialize_combox() 
    13071350              
    1308             if self.model.__class__ in self.model_list_box["P(Q)*S(Q)"]: 
    1309                 self.structurebox.Show() 
    1310                 self.text2.Show() 
    1311                 self.structurebox.Enable() 
    1312                 self.text2.Enable()             
    1313          
    13141351        ## check model type to show sizer 
    13151352        if self.model !=None: 
     
    13421379            Show combox box associate with type of model selected 
    13431380        """ 
     1381        if self.check_invalid_panel(): 
     1382            return 
     1383 
    13441384        ## Don't want to populate combo box again if the event comes from check box 
    13451385        if self.shape_rbutton.GetValue()and\ 
     
    16611701            Redraw the model with the default dispersity (Gaussian) 
    16621702        """ 
    1663          
     1703        if self.check_invalid_panel(): 
     1704            return  
    16641705        self._reset_dispersity() 
    16651706     
     
    19882029        #On 'Reset' button  for Q range clicked 
    19892030        """ 
     2031        if self.check_invalid_panel(): 
     2032            return 
    19902033        ##For 3 different cases: Data2D, Data1D, and theory 
    19912034        if self.data.__class__.__name__ == "Data2D": 
  • sansview/perspectives/fitting/fitpage.py

    r9237df4 rffa69b6  
    5555        self._fill_range_sizer()  
    5656        #self._on_select_model(event=None) 
    57         if self.data !=None: 
     57        if self.data is None: 
     58            self.formfactorbox.Disable() 
     59            self.structurebox.Disable() 
     60        else: 
    5861            self.smearer = smear_selection( self.data ) 
    5962            if self.smearer ==None: 
     
    6467        self.Bind(EVT_FITTER_TYPE,self._on_engine_change) 
    6568        self.Bind(EVT_FIT_STOP,self._on_fit_complete) 
     69         
    6670 
    6771    def _on_fit_complete(self, event): 
     
    577581        """ 
    578582        #make sure all parameter values are updated. 
    579         
     583        if self.check_invalid_panel(): 
     584            return 
    580585        flag = self._update_paramv_on_fit()  
    581586                 
     
    708713            Check validity of value enter in the parameters range field 
    709714        """ 
    710          
     715        if self.check_invalid_panel(): 
     716            return 
    711717        tcrtl= event.GetEventObject() 
    712718        #Clear msg if previously shown. 
     
    740746            Check validity of value enter in the Q range field 
    741747        """ 
    742          
     748        if self.check_invalid_panel(): 
     749            return 
    743750        tcrtl= event.GetEventObject() 
    744751        #Clear msg if previously shown. 
     
    845852            data_max = "" 
    846853            data_name = "" 
     854            self.formfactorbox.Disable() 
     855            self.structurebox.Disable() 
    847856        else: 
     857            self.formfactorbox.Enable() 
     858            self.structurebox.Enable() 
    848859            data_name = self.data.name 
    849860            #set maximum range for x in linear scale 
     
    862873         
    863874        self.dataSource.SetValue(data_name) 
     875        self.qmin_x = data_min 
     876        self.qmax_x = data_max 
    864877        self.minimum_q.SetValue(str(data_min)) 
    865878        self.maximum_q.SetValue(str(data_max)) 
    866         self.qmin_x = data_min 
    867         self.qmax_x = data_max 
    868         self.state.data = data, data_max 
    869         print "set_data",data_min 
     879        self.qmin.SetValue(str(data_min)) 
     880        self.qmax.SetValue(str(data_max)) 
     881        self.qmin.SetBackgroundColour("white") 
     882        self.qmax.SetBackgroundColour("white") 
     883        self.state.data = data 
     884        self.state.qmin = self.qmin_x 
     885        self.state.qmax = self.qmax_x 
     886         
    870887         
    871888    def reset_page(self, state,first=False): 
     
    10631080            are compute when fitting 
    10641081        """ 
     1082        if self.check_invalid_panel(): 
     1083            return 
    10651084        if self.model ==None: 
    10661085            msg="Need model and data to smear plot" 
  • sansview/perspectives/fitting/fitpanel.py

    r2377cd4 rffa69b6  
    9898    """ 
    9999    data = None 
    100     model= None 
    101     manager= None 
     100    model = None 
     101    manager = None 
    102102    event_owner= None 
    103103    model_list_box = None 
    104     name=None 
     104    name = None 
    105105    ## Internal name for the AUI manager 
    106106    window_name = "Page" 
     
    157157     
    158158        #model page info 
    159         self.model_page_number=None 
     159        self.model_page_number = None 
    160160        ## fit page number for model plot 
    161         self.fit_page1D_number=None 
    162         self.fit_page2D_number=None 
    163         self.model_page=None 
    164         self.sim_page=None 
     161        self.fit_page1D_number = None 
     162        self.fit_page2D_number = None 
     163        self.model_page = None 
     164        self.sim_page = None 
     165        self.default_page = None 
     166        self.check_first_data = False 
    165167        ## get the state of a page 
    166168        self.Bind(basepage.EVT_PAGE_INFO, self._onGetstate) 
     
    172174        self.hint_page = HintFitPage(self)  
    173175        self.AddPage(page=self.hint_page, caption="Hint") 
     176        #Add the first fit page 
     177        self.default_page = self.add_fit_page(data=None) 
     178         
    174179        # increment number for model name 
    175180        self.count=0 
     
    243248        self.event_owner = owner 
    244249     
    245     def set_model_list(self,dict): 
     250    def set_model_list(self, dict): 
    246251         """  
    247252             copy a dictionary of model into its own dictionary 
     
    270275        return self.sim_page 
    271276         
    272     def add_fit_page( self,data, reset=False ): 
     277         
     278    def add_fit_page( self,data=None, reset=False ): 
    273279        """  
    274280            Add a fitting page on the notebook contained by fitpanel 
    275281            @param data: data to fit 
    276282            @return panel : page just added for further used. is used by fitting module 
    277         """      
    278         if data.is_data: 
    279             name = data.name  
    280         else: 
    281             if data.__class__.__name__=="Data2D": 
    282                 name = 'Model 2D Fit' 
     283        """     
     284        if data is not None: 
     285            if data.is_data: 
     286                name = data.name  
    283287            else: 
    284                 name = 'Model 1D Fit' 
    285         if not name in self.list_fitpage_name: 
     288                if data.__class__.__name__=="Data2D": 
     289                    name = 'Model 2D Fit' 
     290                else: 
     291                    name = 'Model 1D Fit' 
    286292            myinfo = PageInfo( data=data, name=name ) 
    287293            myinfo.model_list_box = self.model_list_box.get_list() 
     
    291297            myinfo.window_caption = name 
    292298         
    293             #if not name in self.fit_page_name : 
    294             from fitpage import FitPage 
    295             panel = FitPage(parent= self, page_info=myinfo) 
    296              
    297             self.AddPage(page=panel, caption=name, select=True) 
    298             if name == 'Model 1D Fit': 
    299                 self.fit_page1D_number= self.GetPageIndex(panel) 
    300             if name =='Model 2D Fit': 
    301                 self.fit_page2D_number= self.GetPageIndex(panel) 
     299        else : 
     300            name = "Fit Page"  
     301            myinfo = PageInfo( data=data, name=name ) 
     302         
     303        if not name in self.list_fitpage_name: 
     304            # the first data loading 
     305            if not self.check_first_data and self.default_page is not None: 
     306                page_number = self.GetPageIndex(self.default_page) 
     307                self.SetPageText(page_number , name) 
     308                self.default_page.set_data(data) 
     309                self.default_page.set_page_info(page_info=myinfo) 
     310                self.default_page.initialize_combox() 
     311                if  data is not None: 
     312                    self.check_first_data = True 
     313                panel = self.default_page 
     314            else: 
     315                #if not name in self.fit_page_name : 
     316                from fitpage import FitPage 
     317                panel = FitPage(parent=self, page_info=myinfo) 
    302318                 
    303             self.list_fitpage_name.append(name) 
    304             if reset: 
    305                 if name in self.fit_page_name.keys(): 
    306                     memento= self.fit_page_name[name][0] 
    307                     panel.reset_page(memento) 
    308             else: 
    309                 self.fit_page_name[name]=ListOfState() 
    310                  
    311                 #self.fit_page_name[name].appendItem(panel.createMemento()) 
     319                self.AddPage(page=panel, caption=name, select=True) 
     320                if name == 'Model 1D Fit': 
     321                    self.fit_page1D_number= self.GetPageIndex(panel) 
     322                if name =='Model 2D Fit': 
     323                    self.fit_page2D_number= self.GetPageIndex(panel) 
     324                     
     325                self.list_fitpage_name.append(name) 
     326                if data is not None: 
     327                    if reset: 
     328                        if name in self.fit_page_name.keys(): 
     329                            memento= self.fit_page_name[name][0] 
     330                            panel.reset_page(memento) 
     331                        else: 
     332                            self.fit_page_name[name]=ListOfState() 
     333                     
     334                    #self.fit_page_name[name].appendItem(panel.createMemento()) 
    312335            #GetPage(self, page_idx)  
    313336            return panel  
Note: See TracChangeset for help on using the changeset viewer.