Ignore:
Timestamp:
Mar 6, 2009 9:19:16 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:
bdb27e6
Parents:
0b99881
Message:

go back to version 1617 for fitpage1D and modelpage.py

File:
1 edited

Legend:

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

    r0b99881 rfbc3e04  
    1414 
    1515 
     16 
    1617class ModelPage(wx.ScrolledWindow): 
    1718    """ 
    18         ModelPage is a panel that allows the user to view information related to a  
    19         model.  
     19        FitPanel class contains fields allowing to display results when 
     20        fitting  a model and one data 
     21        @note: For Fit to be performed the user should check at least one parameter 
     22        on fit Panel window. 
    2023   
    2124    """ 
     
    2427    ## Title to appear on top of the window 
    2528    window_caption = "Fit Page" 
    26     # name of the panel directly related to the model name selected 
    27     name =" " 
    28  
    29     def __init__(self, parent,model=None,name=None,data=None, *args, **kwargs): 
     29    name="" 
     30     
     31    def __init__(self, parent,model,name, *args, **kwargs): 
    3032        wx.ScrolledWindow.__init__(self, parent, *args, **kwargs) 
    3133        """  
     
    3739        ## Data member to store the dispersion object created 
    3840        self._disp_obj_dict = {} 
    39          
    40         #list of dispersion parameters 
     41 
     42        #list of dispersion paramaters 
    4143        self.disp_list=[] 
    4244        try: 
     
    4951        # this panel does contain data .existing data allow a different drawing 
    5052        #on set_model parameters 
    51         self.data=data 
    52          
    53          
    54         # contains link between  model ,all its parameters, and panel organization 
    55         self.parameters=[] 
    56         #list of parameters that cannot be fitted and panel object related to this parameters 
    57         #values 
    58         self.fixed_param=[] 
    59         # 
    60         self.fittable_param=[] 
    61         self.polydisp= {} 
    62         #contains link between a model and selected parameters to fit  
    63         self.param_toFit=[] 
    64          
    65         self.prevmodel_name=name 
    66         self.draw_panel() 
    67         #dictionary of model name and model class 
    68         self.model_list_box={} 
    69         #Draw initial panel 
    70         if self.model!=None: 
    71             self.set_panel(self.model) 
    72         self.theta_cb=None 
    73         # flag to allow data2D plot 
    74         self.enable2D=False 
    75          
    76      
    77         self.Centre() 
    78         self.Layout() 
    79         self.parent.GetSizer().Layout() 
    80          
    81     def draw_panel(self):    
     53        self.data=None 
    8254        #panel interface 
    8355        self.vbox  = wx.BoxSizer(wx.VERTICAL) 
     
    9062        self.sizer5 = wx.GridBagSizer(5,5) 
    9163        self.sizer4 = wx.GridBagSizer(5,5) 
     64        
    9265        #model selection 
    9366        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
     
    10679        # plotting range 
    10780        self.vbox.Add(self.sizer9) 
    108      
     81        #close layer 
     82        #self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
     83        #self.vbox.Add(self.sizer10) 
     84         
     85       
    10986        #------------------ sizer 4  draw------------------------   
     87        
     88        
    11089        # define combox box 
    11190        self.modelbox = wx.ComboBox(self, -1) 
    11291         # preview selected model name 
    113          
     92        self.prevmodel_name=name 
    11493        #print "model view prev_model",name 
    11594        self.modelbox.SetValue(self.prevmodel_name) 
     
    142121        self.disable_disp = wx.RadioButton(self, -1, 'No', (10, 10), style=wx.RB_GROUP) 
    143122        self.enable_disp = wx.RadioButton(self, -1, 'Yes', (10, 30)) 
    144         self.Bind(wx.EVT_RADIOBUTTON, self.set_Dispers_Param, id=self.disable_disp.GetId()) 
    145         self.Bind(wx.EVT_RADIOBUTTON, self.set_Dispers_Param, id=self.enable_disp.GetId()) 
     123        self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.disable_disp.GetId()) 
     124        self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.enable_disp.GetId()) 
    146125        ix= 0 
    147126        iy=1 
     
    155134        iy+=1 
    156135        self.sizer6.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)   
     136 
     137         
    157138        #---------sizer 9 draw---------------------------------------- 
    158         ## Q range 
     139        
     140         ## Q range 
    159141        self.qmin_x= 0.001 
    160142        self.qmax_x= 0.1 
     
    208190        iy+=1  
    209191        self.sizer9.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     192        #----------sizer 10 draw------------------------------------------------------ 
     193        """ 
     194        id = wx.NewId() 
     195        self.btClose =wx.Button(self,id,'Close') 
     196        self.btClose.Bind(wx.EVT_BUTTON, self.onClose,id=id) 
     197        self.btClose.SetToolTipString("Close page.") 
     198         
     199        ix= 3 
     200        iy= 1 
     201        self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     202        ix +=1 
     203        self.sizer10.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     204        ix =0 
     205        iy+=1 
     206        self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     207        """ 
     208        # contains link between  model ,all its parameters, and panel organization 
     209        self.parameters=[] 
     210        self.fixed_param=[] 
     211        self.fittable_param=[] 
     212        self.polydisp= {} 
     213        #contains link between a model and selected parameters to fit  
     214        self.param_toFit=[] 
     215         
     216        #dictionary of model name and model class 
     217        self.model_list_box={} 
     218        #Draw initial panel 
     219         #-----sizer 11--------------------model description------ 
     220        if self.model!=None: 
     221            self.set_panel(self.model) 
     222        self.theta_cb=None 
     223        
     224        
    210225        self.vbox.Layout() 
    211226        self.vbox.Fit(self)  
     
    213228        self.SetScrollbars(20,20,55,40) 
    214229         
    215          
     230        self.Centre() 
     231        self.Layout() 
     232        self.parent.GetSizer().Layout() 
    216233    def set_model_description(self, model): 
    217         """ 
    218             Set a sizer with model description field 
    219             @param model: the model select that provides the description 
    220         """ 
     234         
    221235        if model !=None and str(model.description)!=""and self.data==None: 
    222236            self.sizer11.Clear(True) 
     
    266280     
    267281 
    268     def set_Dispers_Param(self, event): 
    269         """ 
    270              set a sizer with dispersion parameters  
     282    def Set_DipersParam(self, event): 
     283        """ 
     284            This method is called when the user changes the state  
     285            of the "dispersity" radio buttons. 
     286             
     287            #TODO: correct the spelling mistake in the name of this method, start name with lowercase. 
    271288        """ 
    272289        if self.enable_disp.GetValue(): 
     
    287304                return  
    288305            else: 
    289                 # allow to recognize data panel from model panel 
    290                 if self.data !=None and self.model !=None:  
    291                      
    292                     self.cb1.SetValue(False) 
    293                     self.select_all_param_helper() 
    294                  
     306                # Show the default dispersion/averaging sub-panel 
    295307                self.populate_disp_box() 
    296308                self.set_panel_dispers(self.disp_list) 
     
    323335             
    324336    def populate_disp_box(self): 
    325         """ 
    326             populate polydispersion combo box  
    327         """ 
    328337        self.sizer7.Clear(True) 
    329338        if len(self.disp_list)>0: 
     
    341350            for k,v in self.polydisp.iteritems(): 
    342351                if str(v)=="MyModel": 
    343                                 # Remove the option until the rest of the code is ready for it 
     352                    # Remove the option until the rest of the code is ready for it 
    344353                    #self.disp_box.Insert("Select customized Model",id) 
    345354                    pass   
     
    372381        self.qmax.SetValue(format_number(self.qmax_x)) 
    373382        self.npts.SetValue(format_number(self.num_points)) 
    374          
    375          
    376383    def checkFitRange(self): 
    377384        """ 
     
    380387            background is colored in pink. 
    381388        """ 
     389        
    382390        flag = True 
    383391        valueMin = self.qmin.GetValue() 
    384392        valueMax = self.qmax.GetValue() 
    385393        # Check for possible values entered 
     394        #print "fitpage: checkfitrange:",valueMin,valueMax 
    386395        try: 
    387396            if (float(valueMax)> float(valueMin)): 
     
    401410        return flag 
    402411     
     412 
     413         
     414    def onClose(self,event): 
     415        """ close the page associated with this panel""" 
     416        self.parent.onClose() 
     417         
     418   
    403419         
    404420    def onModel2D(self, event): 
     
    440456        type =event.GetString() 
    441457        self.set_panel_dispers( self.disp_list,type ) 
    442            
    443       
     458                 
    444459    def _on_select_model(self,event): 
    445460        """ 
     
    532547        self.text2_3.Hide()  
    533548         
     549        
    534550        ix +=1 
    535551        self.text2_4 = wx.StaticText(self, -1, 'Units') 
     
    538554        self.text2_4.Hide() 
    539555        disp_list=self.model.getDispParamList() 
    540         #  
    541556        for item in keys: 
    542557            if not item in disp_list: 
     
    599614         
    600615    def _selectDlg(self): 
    601         """ 
    602             Create a dialog to select files 
    603         """ 
    604616        import os 
    605617        dlg = wx.FileDialog(self, "Choose a weight file", os.getcwd(), "", "*.*", wx.OPEN) 
     
    609621        dlg.Destroy() 
    610622        return path 
    611      
    612      
    613623    def read_file(self, path): 
    614         """ 
    615             Read a file  of 2 colons 
    616             @param path: the path to the file 
    617             @return 2 numpy arrays containing numbers 
    618         """ 
    619624        try: 
    620625            if path==None: 
     
    641646            return numpy.array(angles), numpy.array(weights) 
    642647        except: 
    643              msg= "Simultaneous Fit completed but Following error occurred: " 
    644              msg+= "%s"%sys.exc_value 
    645              wx.PostEvent(self.parent.parent, StatusEvent(status=msg)) 
    646              return   
     648            raise  
    647649         
    648650           
     
    652654            @param event: check box event 
    653655        """ 
     656         
     657         
    654658        # Go through the list of dispersion check boxes to identify which one has changed  
    655659        for p in self.disp_cb_dict: 
     
    713717                    self._draw_model() 
    714718        return 
    715         
     719 
     720                       
     721                       
    716722                       
    717723    def set_panel_dispers(self, disp_list, type="GaussianModel" ): 
    718724        """ 
    719             Fill sizer with disperstion info 
    720725        """ 
    721726         
     
    838843            self.parent.GetSizer().Layout()   
    839844           
    840            
    841845    def checkFitValues(self,val_min, val_max): 
    842846        """ 
     
    894898        self.set_model_parameter() 
    895899         
    896          
    897          
    898900    def set_model_parameter(self): 
    899901        """ 
    900             Value Enter by the user on the parameter fields are used to reset the model 
    901             and model will be drawn again if the user enters different values 
    902902        """ 
    903903        if len(self.parameters) !=0 and self.model !=None: 
     
    915915                          
    916916                except: 
     917                    #raise 
    917918                    wx.PostEvent(self.parent.parent, StatusEvent(status=\ 
    918919                            "Model Drawing  Error:wrong value entered : %s"% sys.exc_value)) 
     
    931932                          
    932933                except: 
     934                    raise 
    933935                    wx.PostEvent(self.parent.parent, StatusEvent(status=\ 
    934                             "Model Drawing Error:wrong value entered : %s"% sys.exc_value)) 
     936                            "Model Drawing  Error:wrong value entered : %s"% sys.exc_value)) 
    935937                 
    936938            for item in self.parameters: 
     
    947949                    #raise  
    948950                    wx.PostEvent(self.parent.parent, StatusEvent(status=\ 
    949                            "Model Drawing Error:wrong value entered : %s"% sys.exc_value)) 
     951                           "Model Drawing  Error:wrong value entered : %s"% sys.exc_value)) 
    950952                    return 
    951953                 
     
    968970                self._draw_model()             
    969971             
    970              
    971972    def _draw_model(self, name=None): 
    972973        """ 
     
    985986                                enable2D=self.enable2D) 
    986987        
    987         
    988988    def select_param(self,event): 
    989989        """ 
    990             Select_parameter is implemented in fitpage.py  
     990         
    991991        """ 
    992992        pass 
    993      
    994      
    995993    def select_all_param(self,event):  
    996994        """ 
    997             Implemented in fitpage.py 
     995         
    998996        """ 
    999997        pass 
    1000      
    1001      
    1002998    def select_all_param_helper(self): 
    1003999        """ 
    1004              Allows selecting or unselecting  checkbutton 
     1000             Allows selecting or delecting button 
    10051001        """ 
    10061002        self.param_toFit=[] 
Note: See TracChangeset for help on using the changeset viewer.