Ignore:
Timestamp:
Feb 2, 2009 7:28:06 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:
ca88b2e
Parents:
2cf2b87
Message:

redesign the model1D and madel page

File:
1 edited

Legend:

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

    r68dada4 r26bf293  
    55import copy 
    66 
     7 
    78from sans.guicomm.events import StatusEvent    
     9from sans.guiframe.utils import format_number 
    810(ModelEventbox, EVT_MODEL_BOX) = wx.lib.newevent.NewEvent() 
    911_BOX_WIDTH = 80 
    1012 
    11 def format_number(value, high=False): 
    12     """ 
    13         Return a float in a standardized, human-readable formatted string  
    14     """ 
    15     try:  
    16         value = float(value) 
    17     except: 
    18         print "returning 0" 
    19         return "0" 
    20      
    21     if high: 
    22         return "%-6.4g" % value 
    23     else: 
    24         return "%-5.3g" % value 
    25  
    26      
     13 
     14 
     15 
    2716class ModelPage(wx.ScrolledWindow): 
    2817    """ 
     
    4433            Initialization of the Panel 
    4534        """ 
    46         #self.scroll = wx.ScrolledWindow(self) 
     35        # model on which the fit would be performed 
     36        self.model=model 
     37        #list of dispersion paramaters 
     38        self.disp_list=self.model.getDispParamList() 
    4739        self.manager = None 
    4840        self.parent  = parent 
    49         self.event_owner=None 
     41        self.event_owner = None 
     42        # this panel does contain data .existing data allow a different drawing 
     43        #on set_model parameters 
     44        self.data=None 
    5045        #panel interface 
    5146        self.vbox  = wx.BoxSizer(wx.VERTICAL) 
    52         self.sizer3 = wx.GridBagSizer(5,5) 
    53         self.sizer1 = wx.GridBagSizer(5,5) 
    54         self.sizer2 = wx.GridBagSizer(5,5) 
     47        self.sizer10 = wx.GridBagSizer(5,5) 
     48        self.sizer9 = wx.GridBagSizer(5,5) 
     49        self.sizer8 = wx.GridBagSizer(5,5) 
     50        self.sizer7 = wx.GridBagSizer(5,5) 
     51        self.sizer6 = wx.GridBagSizer(5,5) 
     52        self.sizer5 = wx.GridBagSizer(5,5) 
    5553        self.sizer4 = wx.GridBagSizer(5,5) 
    56         self.sizer5 = wx.GridBagSizer(5,5) 
    57         self.static_line_1 = wx.StaticLine(self, -1) 
     54        
     55        #model selection 
     56        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
     57        self.vbox.Add(self.sizer4) 
     58        #model paramaters layer 
     59        self.vbox.Add(self.sizer5) 
     60        #polydispersion selected 
     61        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
     62        self.vbox.Add(self.sizer6) 
     63        #combox box for type of dispersion 
     64        self.vbox.Add(self.sizer7) 
     65        #dispersion parameters layer 
     66        self.vbox.Add(self.sizer8) 
     67        # plotting range 
     68        self.vbox.Add(self.sizer9) 
     69        #close layer 
     70        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
     71        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0) 
     72        self.vbox.Add(self.sizer10) 
     73         
     74       
     75        #------------------ sizer 4  draw------------------------   
     76        # model on which the fit would be performed 
     77        self.model=model  
     78        
     79        # define combox box 
    5880        self.modelbox = wx.ComboBox(self, -1) 
     81         # preview selected model name 
     82        self.prevmodel_name=name 
     83        #print "model view prev_model",name 
     84        self.modelbox.SetValue(self.prevmodel_name) 
     85        #enable model 2D draw 
     86        self.enable2D= False 
     87        #filling sizer2 
     88        ix = 0 
     89        iy = 1 
     90        self.sizer4.Add(wx.StaticText(self,-1,'Model'),(iy,ix),(1,1)\ 
     91                  , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     92        ix += 1 
     93        self.sizer4.Add(self.modelbox,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     94        ix += 1 
    5995        id = wx.NewId() 
    60         self.vbox.Add(self.sizer3) 
    61         self.vbox.Add(self.sizer1) 
    62         self.vbox.Add(self.sizer2) 
    63         self.vbox.Add(self.static_line_1, 0, wx.EXPAND, 0) 
    64         self.vbox.Add(self.sizer5) 
    65         self.vbox.Add(self.sizer4) 
    66          
    67         id = wx.NewId() 
    68         self.btClose =wx.Button(self,id,'Close') 
    69         self.btClose.Bind(wx.EVT_BUTTON, self.onClose,id=id) 
    70         self.btClose.SetToolTipString("Close page.") 
    71         ix = 1 
    72         iy = 1  
    73         self.sizer4.Add(wx.StaticText(self, -1, 'Min'),(iy, ix),(1,1),\ 
    74                             wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    75         ix += 1 
    76         self.sizer4.Add(wx.StaticText(self, -1, 'Max'),(iy, ix),(1,1),\ 
    77                             wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    78         ix += 1 
    79         self.sizer4.Add(wx.StaticText(self, -1, 'Npts'),(iy, ix),(1,1),\ 
    80                             wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    81         ix = 0 
    82         iy += 1 
    83         self.sizer4.Add(wx.StaticText(self, -1, 'x range'),(iy, ix),(1,1),\ 
    84                             wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    85         ## Q range 
    86         self.qmin= 0.001 
    87         self.qmax= 0.1 
     96        self.model_view =wx.Button(self,id,'View 2D') 
     97        self.model_view.Bind(wx.EVT_BUTTON, self.onModel2D,id=id) 
     98        self.model_view.SetToolTipString("View model in 2D") 
     99        self.sizer4.Add(self.model_view,(iy,ix),(1,1),\ 
     100                   wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     101        self.model_view.SetFocus() 
     102        #----------sizer6------------------------------------------------- 
     103        self.disable_disp = wx.RadioButton(self, -1, 'No', (10, 10), style=wx.RB_GROUP) 
     104        self.enable_disp = wx.RadioButton(self, -1, 'Yes', (10, 30)) 
     105        self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.disable_disp.GetId()) 
     106        self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.enable_disp.GetId()) 
     107        ix= 0 
     108        iy=1 
     109        self.sizer6.Add(wx.StaticText(self,-1,'Polydispersity: '),(iy,ix),(1,1)\ 
     110                  , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     111        ix += 1 
     112        self.sizer6.Add(self.enable_disp ,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     113        ix += 1 
     114        self.sizer6.Add(self.disable_disp ,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     115        ix =0 
     116        iy+=1 
     117        self.sizer6.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)   
     118 
     119         
     120        #---------sizer 9 draw---------------------------------------- 
     121        
     122         ## Q range 
     123        self.qmin_x= 0.001 
     124        self.qmax_x= 0.1 
    88125        self.num_points= 100 
    89126         
    90         ix += 1 
    91         self.xmin    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 
    92         self.xmin.SetValue(format_number(self.qmin)) 
    93         self.xmin.SetToolTipString("Minimun value of x in linear scale.") 
    94         self.xmin.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
    95         self.xmin.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 
    96         self.sizer4.Add(self.xmin,(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    97          
    98         
    99         ix += 1 
    100         self.xmax    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 
    101         self.xmax.SetValue(format_number(self.qmax)) 
    102         self.xmax.SetToolTipString("Maximum value of x in linear scale.") 
    103         self.xmax.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
    104         self.xmax.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 
    105         self.sizer4.Add(self.xmax,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    106         ix += 1 
     127         
     128        self.qmin    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 
     129        self.qmin.SetValue(format_number(self.qmin_x)) 
     130        self.qmin.SetToolTipString("Minimun value of x in linear scale.") 
     131        self.qmin.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
     132        self.qmin.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 
     133      
     134        self.qmax    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 
     135        self.qmax.SetValue(format_number(self.qmax_x)) 
     136        self.qmax.SetToolTipString("Maximum value of x in linear scale.") 
     137        self.qmax.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
     138        self.qmax.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 
     139      
     140 
    107141        self.npts    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20)) 
    108142        self.npts.SetValue(format_number(self.num_points)) 
     
    111145        self.npts.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 
    112146        
    113         self.sizer4.Add(self.npts,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     147        ix = 0 
     148        iy = 1  
     149        self.sizer9.Add(wx.StaticText(self, -1, 'Plotting Range'),(iy, ix),(1,1),\ 
     150                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     151        ix += 1  
     152        self.sizer9.Add(wx.StaticText(self, -1, 'Min'),(iy, ix),(1,1),\ 
     153                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     154        ix += 1 
     155        self.sizer9.Add(wx.StaticText(self, -1, 'Max'),(iy, ix),(1,1),\ 
     156                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     157        ix += 1 
     158        self.sizer9.Add(wx.StaticText(self, -1, 'Npts'),(iy, ix),(1,1),\ 
     159                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    114160        ix = 0 
    115161        iy += 1 
    116         self.sizer4.Add((20,20),(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    117         ix +=3 
    118         self.sizer4.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    119         ix = 0 
    120         iy = 1 
    121         self.sizer3.Add(wx.StaticText(self,-1,'Model'),(iy,ix),(1,1)\ 
    122                   , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    123         ix += 1 
    124         self.sizer3.Add(self.modelbox,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    125         #ix = 0 
    126         #iy += 1 
    127         ix += 1 
     162        self.sizer9.Add(wx.StaticText(self, -1, 'x range'),(iy, ix),(1,1),\ 
     163                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     164        ix += 1 
     165        self.sizer9.Add(self.qmin,(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     166        ix += 1 
     167        self.sizer9.Add(self.qmax,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     168        ix += 1 
     169        self.sizer9.Add(self.npts,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     170         
     171        ix =0 
     172        iy+=1  
     173        self.sizer9.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     174        #----------sizer 10 draw------------------------------------------------------ 
    128175        id = wx.NewId() 
    129         self.model_view =wx.Button(self,id,'View 2D') 
    130         self.model_view.Bind(wx.EVT_BUTTON, self.onModel2D,id=id) 
    131         self.model_view.SetToolTipString("View model in 2D") 
    132         self.sizer3.Add(self.model_view,(iy,ix),(1,1),\ 
    133                    wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     176        self.btClose =wx.Button(self,id,'Close') 
     177        self.btClose.Bind(wx.EVT_BUTTON, self.onClose,id=id) 
     178        self.btClose.SetToolTipString("Close page.") 
     179         
     180        ix= 3 
     181        iy= 1 
     182        self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     183        ix +=1 
     184        self.sizer10.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     185        ix =0 
     186        iy+=1 
     187        self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     188        
    134189        # contains link between  model ,all its parameters, and panel organization 
    135190        self.parameters=[] 
     191        self.fixed_param=[] 
    136192        #contains link between a model and selected parameters to fit  
    137193        self.param_toFit=[] 
    138         # model on which the fit would be performed 
    139         self.model=model 
    140         try: 
    141             #print"init modelpage",model.name 
    142             self.set_panel(model) 
    143         except: 
    144             raise 
    145         # preview selected model name 
    146         self.prevmodel_name=name 
    147         #print "model view prev_model",name 
    148         self.modelbox.SetValue(self.prevmodel_name) 
    149         # flag to check if the user has selected a new model in the combox box 
    150         self.model_hasChanged=False 
     194         
    151195        #dictionary of model name and model class 
    152196        self.model_list_box={} 
    153         
    154         #enable model 2D draw 
    155         self.enable2D= False 
    156         # Data1D to make a deep comparison between 2 Data1D for checking data 
    157         #change 
     197        #Draw initial panel 
     198        if self.model!=None: 
     199            self.set_panel(self.model) 
     200         
     201        
     202        
    158203        self.vbox.Layout() 
    159204        self.vbox.Fit(self)  
    160          
    161205        self.SetSizer(self.vbox) 
    162206        self.SetScrollbars(20,20,55,40) 
    163207         
    164208        self.Centre() 
    165         
    166     def set_range(self, qmin, qmax, npts): 
    167         """ 
    168             Set the range for the plotted models 
    169             @param qmin: minimum Q 
    170             @param qmax: maximum Q 
    171             @param npts: number of Q bins 
    172         """ 
    173         # Set the data members 
    174         self.qmin = qmin 
    175         self.qmax = qmax 
    176         self.num_points = npts 
    177          
    178         # Set the controls 
    179         self.xmin.SetValue(format_number(self.qmin)) 
    180         self.xmax.SetValue(format_number(self.qmax)) 
    181         self.npts.SetValue(format_number(self.num_points)) 
    182          
    183     def onClose(self,event): 
    184         """ close the page associated with this panel""" 
    185         self.GrandParent.onClose() 
     209        self.Layout() 
     210        self.parent.GetSizer().Layout() 
    186211         
    187212    def set_owner(self,owner): 
     
    198223             @param manager: instance of plugin fitting 
    199224        """ 
    200         self.manager = manager 
    201          
    202     def onModel2D(self, event): 
    203         """ 
    204          call manager to plot model in 2D 
    205         """ 
    206         # If the 2D display is not currently enabled, plot the model in 2D  
    207         # and set the enable2D flag. 
    208         if self.enable2D==False: 
    209             self.enable2D=True 
    210             self._draw_model() 
    211              
    212         else: 
    213             print "enable is true:",self.enable2D 
    214             #self.manager.parent. show_panel(147) 
    215             self.manager.show_panel2D( id=None ) 
    216             #self.manager.menu1.Append(event_id, new_panel.window_caption,  
    217             #             "Show %s plot panel" % new_panel.window_caption) 
    218              
     225        self.manager = manager   
     226         
    219227    def populate_box(self, dict): 
    220228        """ 
     
    230238                name = item.name 
    231239            list_name.append(name) 
    232         list_name.sort()    
     240        list_name.sort()  
     241          
    233242        for name in list_name: 
    234243            self.modelbox.Insert(name,int(id)) 
     
    236245        wx.EVT_COMBOBOX(self.modelbox,-1, self._on_select_model)  
    237246        return 0 
     247     
     248 
     249    def Set_DipersParam(self, event): 
     250        if self.enable_disp.GetValue(): 
     251            if len(self.disp_list)==0: 
     252                ix=0 
     253                iy=1 
     254                self.sizer8.Clear(True) 
     255                model_disp = wx.StaticText(self, -1, 'No PolyDispersity for this model') 
     256                self.sizer7.Add(model_disp,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     257                self.vbox.Layout() 
     258                self.SetScrollbars(20,20,55,40) 
     259                self.Layout() 
     260                self.parent.GetSizer().Layout() 
     261                return  
     262            else: 
     263                self.sizer8.Clear(True) 
     264                self.populate_disp_box() 
     265                self.set_panel_dispers(self.disp_list) 
     266                self.vbox.Layout() 
     267                self.SetScrollbars(20,20,55,40) 
     268                self.Layout() 
     269                self.parent.GetSizer().Layout()    
     270        else: 
     271            self.sizer7.Clear(True) 
     272            self.sizer8.Clear(True) 
     273            self.vbox.Layout() 
     274            self.SetScrollbars(20,20,55,40) 
     275            self.Layout() 
     276            self.parent.GetSizer().Layout() 
     277             
     278    def populate_disp_box(self): 
     279        self.sizer7.Clear(True) 
     280        if len(self.disp_list)>0: 
     281            ix=0 
     282            iy=1 
     283            model_disp = wx.StaticText(self, -1, 'Model Disp') 
     284            self.sizer7.Add(model_disp,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     285            ix += 1  
     286            # set up the combox box 
     287            id = 0 
     288            self.disp_box = wx.ComboBox(self, -1) 
     289            self.disp_box.SetValue("Gaussian") 
     290            self.disp_box.Insert("Gaussian",int(id)) 
     291            wx.EVT_COMBOBOX(self.disp_box,-1, self._on_select_Disp)  
     292            self.sizer7.Add(self.disp_box,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     293        
     294    def set_range(self, qmin_x, qmax_x, npts): 
     295        """ 
     296            Set the range for the plotted models 
     297            @param qmin: minimum Q 
     298            @param qmax: maximum Q 
     299            @param npts: number of Q bins 
     300        """ 
     301        # Set the data members 
     302        self.qmin_x = qmin_x 
     303        self.qmax_x = qmax_x 
     304        self.num_points = npts 
     305         
     306        # Set the controls 
     307        self.qmin.SetValue(format_number(self.qmin_x)) 
     308        self.qmax.SetValue(format_number(self.qmax_x)) 
     309        self.npts.SetValue(format_number(self.num_points)) 
     310    def checkFitRange(self): 
     311        """ 
     312            Check the validity of fitting range 
     313            @note: qmin should always be less than qmax or else each control box 
     314            background is colored in pink. 
     315        """ 
     316        
     317        flag = True 
     318        valueMin = self.qmin.GetValue() 
     319        valueMax = self.qmax.GetValue() 
     320        # Check for possible values entered 
     321        #print "fitpage: checkfitrange:",valueMin,valueMax 
     322        try: 
     323            if (float(valueMax)> float(valueMin)): 
     324                self.qmax.SetBackgroundColour(wx.WHITE) 
     325                self.qmin.SetBackgroundColour(wx.WHITE) 
     326            else: 
     327                flag = False 
     328                self.qmin.SetBackgroundColour("pink") 
     329                self.qmax.SetBackgroundColour("pink")       
     330        except: 
     331            flag = False 
     332            self.qmin.SetBackgroundColour("pink") 
     333            self.qmax.SetBackgroundColour("pink") 
     334             
     335        self.qmin.Refresh() 
     336        self.qmax.Refresh() 
     337        return flag 
     338     
     339 
     340         
     341    def onClose(self,event): 
     342        """ close the page associated with this panel""" 
     343        self.parent.onClose() 
     344         
     345   
     346         
     347    def onModel2D(self, event): 
     348        """ 
     349         call manager to plot model in 2D 
     350        """ 
     351        # If the 2D display is not currently enabled, plot the model in 2D  
     352        # and set the enable2D flag. 
     353        if self.enable2D==False: 
     354            self.enable2D=True 
     355            self._draw_model() 
     356             
     357        else: 
     358            print "enable is true:",self.enable2D 
     359            #self.manager.parent. show_panel(147) 
     360            self.manager.show_panel2D( id=None ) 
     361            #self.manager.menu1.Append(event_id, new_panel.window_caption,  
     362            #             "Show %s plot panel" % new_panel.window_caption) 
     363             
    238364     
    239365    def select_model(self, model, name): 
     
    254380            if items[i]==name: 
    255381                self.modelbox.SetSelection(i) 
    256          
     382                 
     383                 
     384    def _on_select_Disp(self,event): 
     385        """ 
     386             allow selecting different dispersion 
     387             self.disp_list should change type later .now only gaussian 
     388        """ 
     389        type = "Gaussian"  
     390        if type ==event.GetString(): 
     391            self.set_panel_dispers( self.disp_list,type ) 
     392                 
    257393    def _on_select_model(self,event): 
    258394        """ 
     
    260396            post an event to its owner to draw an appropriate theory 
    261397        """ 
    262         self.model_view.SetFocus() 
     398        self.disable_disp.SetValue(True) 
     399        self.sizer8.Clear(True) 
     400        self.sizer7.Clear(True)        
     401        self.vbox.Layout() 
     402        self.SetScrollbars(20,20,55,40) 
     403        self.Layout() 
     404        self.parent.GetSizer().Layout() 
    263405        for item in self.model_list_box.itervalues(): 
    264406            name = item.__name__ 
     
    298440            @param model: the model selected in combo box for fitting purpose 
    299441        """ 
    300          
    301         self.sizer2.Clear(True) 
    302         self.sizer1.Clear(True) 
     442        print "set_panel", model 
    303443        self.sizer5.Clear(True) 
    304444        self.parameters = [] 
    305445        self.param_toFit=[] 
     446        self.fixed_param=[] 
    306447        self.model = model 
    307448        keys = self.model.getParamList() 
     449        #list of dispersion paramaters 
     450        self.disp_list=self.model.getDispParamList() 
     451        
    308452        keys.sort() 
    309         description=None 
    310         if hasattr(self.model,'description'): 
    311             description =model.description 
    312         disp_list=self.model.getDispParamList() 
    313         ip=0 
    314         iq=1 
    315         if len(disp_list)>0: 
    316             disp = wx.StaticText(self, -1, 'Dispersion') 
    317             self.sizer5.Add(disp,( iq, ip),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    318             ip += 1  
    319             values = wx.StaticText(self, -1, 'Values') 
    320             self.sizer5.Add(values,( iq, ip),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    321              
    322         disp_list.sort() 
    323         #print "went here",self.model.name,model.description 
     453        ik=0 
     454        im=1 
     455         
    324456        iy = 1 
    325457        ix = 0 
    326         self.cb0 = wx.StaticText(self, -1,'Model Description:') 
    327         self.sizer1.Add(self.cb0,(iy, ix),(1,1),\ 
    328                           wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    329         iy += 1 
    330          
    331         self.cb01 = wx.StaticText(self, -1,str(description),style=wx.ALIGN_LEFT) 
    332         self.cb01.Wrap(400)  
    333         #self.cb01 = wx.StaticText(self, -1,str(description),(45, 25),style=wx.ALIGN_LEFT) 
    334          
    335         self.sizer1.Add(self.cb01,(iy, ix),(1,1),\ 
    336                           wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    337         ix = 0 
    338         iy = 1 
    339         self.cb1 = wx.StaticText(self, -1,'Parameters') 
    340         self.sizer2.Add(self.cb1,(iy, ix),(1,1),\ 
     458        self.cb1 = wx.CheckBox(self, -1,"Select all", (10, 10)) 
     459        if self.data!=None: 
     460            wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_param) 
     461            self.cb1.SetValue(False) 
     462        else: 
     463            self.cb1.Disable() 
     464            self.cb1.Hide() 
     465        
     466        self.sizer5.Add(self.cb1,(iy, ix),(1,1),\ 
    341467                          wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    342468        ix +=1 
    343469        self.text2_2 = wx.StaticText(self, -1, 'Values') 
    344         self.sizer2.Add(self.text2_2,(iy, ix),(1,1),\ 
     470        self.sizer5.Add(self.text2_2,(iy, ix),(1,1),\ 
    345471                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
     472        ix +=2 
     473        self.text2_3 = wx.StaticText(self, -1, 'Errors') 
     474        self.sizer5.Add(self.text2_3,(iy, ix),(1,1),\ 
     475                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     476        self.text2_3.Hide()  
    346477        ix +=1 
    347478        self.text2_4 = wx.StaticText(self, -1, 'Units') 
    348         self.sizer2.Add(self.text2_4,(iy, ix),(1,1),\ 
     479        self.sizer5.Add(self.text2_4,(iy, ix),(1,1),\ 
    349480                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    350481        self.text2_4.Hide() 
     482        disp_list=self.model.getDispParamList() 
    351483        for item in keys: 
    352484            if not item in disp_list: 
    353485                iy += 1 
    354486                ix = 0 
    355                 cb=wx.StaticText(self, -1, item) 
    356                 self.sizer2.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     487     
     488                cb = wx.CheckBox(self, -1, item, (10, 10)) 
     489                if self.data!=None: 
     490                    cb.SetValue(False) 
     491                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
     492                else: 
     493                    cb.Disable() 
     494                self.sizer5.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     495                
    357496                ix += 1 
    358497                value= self.model.getParam(item) 
     
    360499                ctl1.SetValue(str (format_number(value))) 
    361500                ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
    362                 ctl1.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter) 
    363                 self.sizer2.Add(ctl1, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     501                ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 
     502                self.sizer5.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
     503                 
     504                ix += 1 
     505                text2=wx.StaticText(self, -1, '+/-') 
     506                self.sizer5.Add(text2,(iy, ix),(1,1),\ 
     507                                wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
     508                text2.Hide()   
     509                ix += 1 
     510                ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
     511                self.sizer5.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     512                ctl2.Hide() 
    364513                ix +=1 
    365                  
    366514                # Units 
    367515                try: 
     
    369517                except: 
    370518                    units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT) 
    371                 self.sizer2.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    372             else: 
    373                 ip = 0 
    374                 iq += 1 
    375                 cb=wx.StaticText(self, -1, item) 
    376                 self.sizer5.Add( cb,( iq, ip),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    377                 wx.EVT_CHECKBOX(self, cb.GetId(), self._on_select_model) 
     519                self.sizer5.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     520            
     521            self.parameters.append([cb,ctl1,text2,ctl2]) 
    378522                 
    379                 ip += 1 
    380                 value= self.model.getParam(item) 
    381                 ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
    382                 ctl1.SetValue(str (format_number(value))) 
    383                 ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
    384                 ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 
    385                 self.sizer5.Add(ctl1, (iq,ip),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    386             #save data 
    387             self.parameters.append([cb,ctl1]) 
    388523        iy+=1 
    389         self.sizer2.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     524        self.sizer5.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    390525         
    391526        #Display units text on panel 
     
    396531            else: 
    397532                self.text2_4.Hide() 
     533        #Disable or enable fit button 
     534        """ 
     535        if not (len(self.param_toFit ) >0): 
     536            self.qmin.Disable() 
     537            self.qmax.Disable() 
     538        else: 
     539            self.qmin.Enable() 
     540            self.qmax.Enable() 
     541        """   
    398542        self.vbox.Layout() 
    399543        self.SetScrollbars(20,20,55,40) 
    400          
    401         self.GrandParent.GetSizer().Layout() 
    402         
     544        self.Layout() 
     545        self.parent.GetSizer().Layout() 
     546         
     547        
     548    def  set_panel_dispers(self, disp_list, type="Gaussian" ): 
     549         
     550         
     551        
     552        ix=0 
     553        iy=1 
     554        ### this will become a separate method 
     555        if type== "Gaussian" : 
     556            
     557            disp = wx.StaticText(self, -1, 'Dispersion') 
     558            self.sizer8.Add(disp,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     559            ix += 1  
     560            values = wx.StaticText(self, -1, 'Values') 
     561            self.sizer8.Add(values,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     562            ix +=2 
     563            self.text2_3 = wx.StaticText(self, -1, 'Errors') 
     564            self.sizer8.Add(self.text2_3,(iy, ix),(1,1),\ 
     565                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     566            self.text2_3.Hide()  
     567            
     568            ix += 1  
     569            npts = wx.StaticText(self, -1, 'Npts') 
     570            self.sizer8.Add(npts,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     571            ix += 1  
     572            nsigmas = wx.StaticText(self, -1, 'Nsigmas') 
     573            self.sizer8.Add(nsigmas,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     574             
     575            disp_list.sort() 
     576            #print disp_list,self.model.fixed,self.model.dispersion 
     577            for item in self.model.dispersion.keys(): 
     578                name1=item+".width" 
     579                name2=item+".npts" 
     580                name3=item+".nsigmas" 
     581                iy += 1 
     582                for p in self.model.dispersion[item].keys(): 
     583                    #print "name 1 2 3", name1, name2, name3 
     584                    if p=="width": 
     585                        ix = 0 
     586                        cb = wx.CheckBox(self, -1, name1, (10, 10)) 
     587                        if self.data !=None: 
     588                            cb.SetValue(False) 
     589                            wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
     590                        else: 
     591                            cb.Disable() 
     592                        self.sizer8.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     593                        ix = 1 
     594                        value= self.model.getParam(name1) 
     595                        ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
     596                        ctl1.SetValue(str (format_number(value))) 
     597                        ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
     598                        ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 
     599                        self.sizer8.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
     600                         
     601                        ix = 2 
     602                        text2=wx.StaticText(self, -1, '+/-') 
     603                        self.sizer8.Add(text2,(iy, ix),(1,1),\ 
     604                                        wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
     605                        text2.Hide()   
     606                        ix = 3 
     607                        ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
     608                        self.sizer8.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     609                        ctl2.Hide() 
     610                        
     611                        self.parameters.append([cb,ctl1,text2,ctl2]) 
     612                         
     613                    elif p=="npts": 
     614                            ix =4  
     615                            value= self.model.getParam(name2) 
     616                            Tctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER) 
     617                            Tctl.SetValue(str (format_number(value))) 
     618                            Tctl.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
     619                            Tctl.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 
     620                            self.sizer8.Add(Tctl, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     621                            self.fixed_param.append([name2, Tctl]) 
     622                    elif p=="nsigmas": 
     623                            ix =5  
     624                            value= self.model.getParam(name3) 
     625                            Tctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER) 
     626                            Tctl.SetValue(str (format_number(value))) 
     627                            Tctl.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter) 
     628                            Tctl.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter) 
     629                            self.sizer8.Add(Tctl, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     630                            self.fixed_param.append([name3, Tctl]) 
     631                             
     632            
     633          
     634            
    403635         
    404636    def _onparamEnter(self,event): 
     
    412644            # Flag to register when a parameter has changed. 
    413645            is_modified = False 
     646            for item in self.fixed_param: 
     647                try: 
     648                     name=str(item[0]) 
     649                     value= float(item[1].GetValue()) 
     650                     #print "model para", name,value,self.model.getParam(name) 
     651                     # If the value of the parameter has changed, 
     652                     # update the model and set the is_modified flag 
     653                     if value != self.model.getParam(name): 
     654                         #print "went hereee" 
     655                         self.model.setParam(name,value) 
     656                         is_modified = True 
     657                          
     658                except: 
     659                     wx.PostEvent(self.parent.parent, StatusEvent(status=\ 
     660                            "Model Drawing  Error:wrong value entered : %s"% sys.exc_value)) 
     661                 
    414662            for item in self.parameters: 
    415663                try: 
    416664                     name=str(item[0].GetLabelText()) 
    417665                     value= float(item[1].GetValue()) 
     666                     #print " fittable model para", name,value 
    418667                     # If the value of the parameter has changed, 
    419668                     # update the model and set the is_modified flag 
    420669                     if value != self.model.getParam(name): 
     670                         #print "went here", name,value 
    421671                         self.model.setParam(name,value) 
    422672                         is_modified = True 
    423673                except: 
    424                      wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\ 
     674                     wx.PostEvent(self.parent.parent, StatusEvent(status=\ 
    425675                            "Model Drawing  Error:wrong value entered : %s"% sys.exc_value)) 
    426676             
     
    428678            # If qmin and qmax have been modified, update qmin and qmax and  
    429679            # set the is_modified flag to True 
    430             if float(self.xmin.GetValue()) != self.qmin: 
    431                 self.qmin = float(self.xmin.GetValue()) 
     680            if float(self.qmin.GetValue()) != self.qmin_x: 
     681                self.qmin_x = float(self.qmin.GetValue()) 
    432682                is_modified = True 
    433             if float(self.xmax.GetValue()) != self.qmax: 
    434                 self.qmax = float(self.xmax.GetValue()) 
     683            if float(self.qmax.GetValue()) != self.qmax_x: 
     684                self.qmax_x = float(self.qmax.GetValue()) 
    435685                is_modified = True 
    436686             
     
    450700            [Note to coder: This way future changes will be done in only one place.]  
    451701        """ 
     702        #print "_draw_model",self.model 
    452703        if name==None: 
    453704            name= self.model.name 
    454         self.manager.draw_model(self.model, name,  
    455                                 qmin=self.qmin, qmax=self.qmax, 
     705        
     706        self.manager.draw_model(self.model, name, data=self.data, 
     707                                qmin=self.qmin_x, qmax=self.qmax_x, 
    456708                                qstep= self.num_points, 
    457709                                enable2D=self.enable2D) 
     
    462714                                    enable2D=self.enable2D) 
    463715        """ 
    464     
    465          
    466                
     716    def select_param(self,event): 
     717        pass 
     718    def select_all_param(self,event):  
     719        pass 
     720         
     721        
Note: See TracChangeset for help on using the changeset viewer.