source: sasview/sansview/perspectives/fitting/new_modelpage.py @ 0d9dae8

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 0d9dae8 was c80c06f, checked in by Gervaise Alina <gervyh@…>, 16 years ago

refactore panels

  • Property mode set to 100644
File size: 23.3 KB
Line 
1import sys
2import wx
3import wx.lib
4import numpy
5import copy
6
7
8from sans.guicomm.events import StatusEvent   
9(ModelEventbox, EVT_MODEL_BOX) = wx.lib.newevent.NewEvent()
10_BOX_WIDTH = 80
11
12def format_number(value, high=False):
13    """
14        Return a float in a standardized, human-readable formatted string
15    """
16    try: 
17        value = float(value)
18    except:
19        print "returning 0"
20        return "0"
21   
22    if high:
23        return "%-6.4g" % value
24    else:
25        return "%-5.3g" % value
26
27
28class ModelPage(wx.ScrolledWindow):
29    """
30        FitPanel class contains fields allowing to display results when
31        fitting  a model and one data
32        @note: For Fit to be performed the user should check at least one parameter
33        on fit Panel window.
34 
35    """
36    ## Internal name for the AUI manager
37    window_name = "Fit page"
38    ## Title to appear on top of the window
39    window_caption = "Fit Page"
40   
41   
42    def __init__(self, parent,model,name, *args, **kwargs):
43        wx.ScrolledWindow.__init__(self, parent, *args, **kwargs)
44        """
45            Initialization of the Panel
46        """
47        #self.scroll = wx.ScrolledWindow(self)
48       
49        self.manager = None
50        self.parent  = parent
51        self.event_owner = None
52        # this panel does contain data .existing data allow a different drawing
53        #on set_model parameters
54        self.data=None
55        #panel interface
56        self.vbox  = wx.BoxSizer(wx.VERTICAL)
57        self.sizer10 = wx.GridBagSizer(5,5)
58        self.sizer9 = wx.GridBagSizer(5,5)
59        self.sizer8 = wx.GridBagSizer(5,5)
60        self.sizer7 = wx.GridBagSizer(5,5)
61        self.sizer6 = wx.GridBagSizer(5,5)
62        self.sizer5 = wx.GridBagSizer(5,5)
63        self.sizer4 = wx.GridBagSizer(5,5)
64       
65        #model selection
66        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0)
67        self.vbox.Add(self.sizer4)
68        #model paramaters layer
69        self.vbox.Add(self.sizer5)
70        #polydispersion selected
71        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0)
72        self.vbox.Add(self.sizer6)
73        #combox box for type of dispersion
74        self.vbox.Add(self.sizer7)
75        #dispersion parameters layer
76        self.vbox.Add(self.sizer8)
77        # plotting range
78        self.vbox.Add(self.sizer9)
79        #close layer
80        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0)
81        self.vbox.Add(wx.StaticLine(self, -1), 0, wx.EXPAND, 0)
82        self.vbox.Add(self.sizer10)
83       
84     
85        #------------------ sizer 4  draw------------------------   
86        self.modelbox = wx.ComboBox(self, -1)
87         # preview selected model name
88        self.prevmodel_name=name
89        #print "model view prev_model",name
90        self.modelbox.SetValue(self.prevmodel_name)
91        #filling sizer2
92        ix = 0
93        iy = 1
94        self.sizer4.Add(wx.StaticText(self,-1,'Model'),(iy,ix),(1,1)\
95                  , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
96        ix += 1
97        self.sizer4.Add(self.modelbox,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0)
98        ix += 1
99        id = wx.NewId()
100        self.model_view =wx.Button(self,id,'View 2D')
101        self.model_view.Bind(wx.EVT_BUTTON, self.onModel2D,id=id)
102        self.model_view.SetToolTipString("View model in 2D")
103        self.sizer4.Add(self.model_view,(iy,ix),(1,1),\
104                   wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
105        self.model_view.SetFocus()
106        #----------sizer6-------------------------------------------------
107        self.disable_disp = wx.RadioButton(self, -1, 'No', (10, 10), style=wx.RB_GROUP)
108        self.enable_disp = wx.RadioButton(self, -1, 'Yes', (10, 30))
109        self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.disable_disp.GetId())
110        self.Bind(wx.EVT_RADIOBUTTON, self.Set_DipersParam, id=self.enable_disp.GetId())
111        ix= 0
112        iy=1
113        self.sizer6.Add(wx.StaticText(self,-1,'Polydispersity: '),(iy,ix),(1,1)\
114                  , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
115        ix += 1
116        self.sizer6.Add(self.enable_disp ,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0)
117        ix += 1
118        self.sizer6.Add(self.disable_disp ,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0)
119        ix =0
120        iy+=1
121        self.sizer6.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
122
123       
124        #---------sizer 9 draw----------------------------------------
125       
126         ## Q range
127        self.qmin= 0.001
128        self.qmax= 0.1
129        self.num_points= 100
130       
131       
132        self.xmin    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20))
133        self.xmin.SetValue(format_number(self.qmin))
134        self.xmin.SetToolTipString("Minimun value of x in linear scale.")
135        self.xmin.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
136        self.xmin.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter)
137        self.xmin.Disable()
138       
139        self.xmax    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20))
140        self.xmax.SetValue(format_number(self.qmax))
141        self.xmax.SetToolTipString("Maximum value of x in linear scale.")
142        self.xmax.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
143        self.xmax.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter)
144        self.xmax.Disable()
145
146        self.npts    = wx.TextCtrl(self, -1,size=(_BOX_WIDTH,20))
147        self.npts.SetValue(format_number(self.num_points))
148        self.npts.SetToolTipString("Number of point to plot.")
149        self.npts.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
150        self.npts.Bind(wx.EVT_TEXT_ENTER, self._onparamEnter)
151        self.npts.Disable()
152        ix = 0
153        iy = 1 
154        self.sizer9.Add(wx.StaticText(self, -1, 'Plotting Range'),(iy, ix),(1,1),\
155                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
156        ix += 1 
157        self.sizer9.Add(wx.StaticText(self, -1, 'Min'),(iy, ix),(1,1),\
158                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)
159        ix += 1
160        self.sizer9.Add(wx.StaticText(self, -1, 'Max'),(iy, ix),(1,1),\
161                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)
162        ix += 1
163        self.sizer9.Add(wx.StaticText(self, -1, 'Npts'),(iy, ix),(1,1),\
164                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)
165        ix = 0
166        iy += 1
167        self.sizer9.Add(wx.StaticText(self, -1, 'x range'),(iy, ix),(1,1),\
168                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
169        ix += 1
170        self.sizer9.Add(self.xmin,(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
171        ix += 1
172        self.sizer9.Add(self.xmax,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
173        ix += 1
174        self.sizer9.Add(self.npts,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
175       
176        ix =0
177        iy+=1 
178        self.sizer9.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
179        #----------sizer 10 draw------------------------------------------------------
180        id = wx.NewId()
181        self.btClose =wx.Button(self,id,'Close')
182        self.btClose.Bind(wx.EVT_BUTTON, self.onClose,id=id)
183        self.btClose.SetToolTipString("Close page.")
184       
185        ix= 3
186        iy= 1
187        self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
188        ix +=1
189        self.sizer10.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
190        ix =0
191        iy+=1
192        self.sizer10.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
193       
194        # contains link between  model ,all its parameters, and panel organization
195        self.parameters=[]
196        self.fixed_param=[]
197        #contains link between a model and selected parameters to fit
198        self.param_toFit=[]
199        # model on which the fit would be performed
200        self.model=None
201        #dictionary of model name and model class
202        self.model_list_box={}
203       
204        ## Q range
205        self.qmin= 0.001
206        self.qmax= 0.1
207       
208        self.vbox.Layout()
209        self.vbox.Fit(self) 
210        self.SetSizer(self.vbox)
211        self.SetScrollbars(20,20,55,40)
212       
213        self.Centre()
214        self.Layout()
215        self.GrandParent.GetSizer().Layout()
216       
217    def set_owner(self,owner):
218        """
219            set owner of fitpage
220            @param owner: the class responsible of plotting
221        """
222        self.event_owner=owner   
223   
224 
225    def set_manager(self, manager):
226        """
227             set panel manager
228             @param manager: instance of plugin fitting
229        """
230        self.manager = manager 
231       
232    def populate_box(self, dict):
233        """
234            Populate each combox box of each page
235            @param page: the page to populate
236        """
237        id=0
238        self.model_list_box=dict
239        list_name=[]
240        for item in  self.model_list_box.itervalues():
241            name = item.__name__
242            if hasattr(item, "name"):
243                name = item.name
244            list_name.append(name)
245        list_name.sort() 
246         
247        for name in list_name:
248            self.modelbox.Insert(name,int(id))
249            id+=1
250        wx.EVT_COMBOBOX(self.modelbox,-1, self._on_select_model) 
251        return 0
252   
253
254    def Set_DipersParam(self, event):
255        if self.enable_disp.GetValue():
256            self.set_panel_dispers()
257        else:
258            self.sizer7.Clear(True)
259            self.sizer8.Clear(True)
260   
261    def set_range(self, qmin, qmax, npts):
262        """
263            Set the range for the plotted models
264            @param qmin: minimum Q
265            @param qmax: maximum Q
266            @param npts: number of Q bins
267        """
268        # Set the data members
269        self.qmin = qmin
270        self.qmax = qmax
271        self.num_points = npts
272       
273        # Set the controls
274        self.xmin.SetValue(format_number(self.qmin))
275        self.xmax.SetValue(format_number(self.qmax))
276        self.npts.SetValue(format_number(self.num_points))
277    def checkFitRange(self):
278        """
279            Check the validity of fitting range
280            @note: xmin should always be less than xmax or else each control box
281            background is colored in pink.
282        """
283       
284        flag = True
285        valueMin = self.xmin.GetValue()
286        valueMax = self.xmax.GetValue()
287        # Check for possible values entered
288        #print "fitpage: checkfitrange:",valueMin,valueMax
289        try:
290            if (float(valueMax)> float(valueMin)):
291                self.xmax.SetBackgroundColour(wx.WHITE)
292                self.xmin.SetBackgroundColour(wx.WHITE)
293            else:
294                flag = False
295                self.xmin.SetBackgroundColour("pink")
296                self.xmax.SetBackgroundColour("pink")     
297        except:
298            flag = False
299            self.xmin.SetBackgroundColour("pink")
300            self.xmax.SetBackgroundColour("pink")
301           
302        self.xmin.Refresh()
303        self.xmax.Refresh()
304        return flag
305   
306
307       
308    def onClose(self,event):
309        """ close the page associated with this panel"""
310        self.GrandParent.onClose()
311       
312 
313       
314    def onModel2D(self, event):
315        """
316         call manager to plot model in 2D
317        """
318        # If the 2D display is not currently enabled, plot the model in 2D
319        # and set the enable2D flag.
320        if self.enable2D==False:
321            self.enable2D=True
322            self._draw_model()
323           
324        else:
325            print "enable is true:",self.enable2D
326            #self.manager.parent. show_panel(147)
327            self.manager.show_panel2D( id=None )
328            #self.manager.menu1.Append(event_id, new_panel.window_caption,
329            #             "Show %s plot panel" % new_panel.window_caption)
330           
331   
332    def select_model(self, model, name):
333        """
334            Select a new model
335            @param model: model object
336        """
337        self.model= model
338        print "select_model", model.__class__
339        self.set_panel(model)
340        self._draw_model(name)
341       
342        # Select the model from the combo box
343        items = self.modelbox.GetItems()
344        for i in range(len(items)):
345            print "model name",items[i],model.name, model.__class__.__name__
346            #if items[i]==model.__class__.__name__:
347            if items[i]==name:
348                self.modelbox.SetSelection(i)
349       
350    def _on_select_model(self,event):
351        """
352            react when a model is selected from page's combo box
353            post an event to its owner to draw an appropriate theory
354        """
355       
356        for item in self.model_list_box.itervalues():
357            name = item.__name__
358            if hasattr(item, "name"):
359                name = item.name
360            if name ==event.GetString():
361                model=item()
362                self.model= model
363                self.set_panel(model)
364                self.name= name
365                #self.manager.draw_model(model, name)
366                self.enable2D=False
367                self._draw_model(name)
368           
369           
370    def get_model_box(self): 
371        """ return reference to combox box self.model"""
372        return self.modelbox
373
374   
375    def get_param_list(self):
376        """
377            @return self.param_toFit: list containing  references to TextCtrl
378            checked.Theses TextCtrl will allow reference to parameters to fit.
379            @raise: if return an empty list of parameter fit will nnote work
380            properly so raise ValueError,"missing parameter to fit"
381        """
382        if self.param_toFit !=[]:
383            return self.param_toFit
384        else:
385            raise ValueError,"missing parameter to fit"
386       
387       
388    def set_panel(self,model):
389        """
390            Build the panel from the model content
391            @param model: the model selected in combo box for fitting purpose
392        """
393        self.sizer5.Clear(True)
394        self.parameters = []
395        self.param_toFit=[]
396        self.model = model
397        keys = self.model.getParamList()
398        #print "fitpage1D : dispersion list",self.model.getDispParamList()
399        keys.sort()
400        ik=0
401        im=1
402       
403        iy = 1
404        ix = 0
405        self.cb1 = wx.CheckBox(self, -1,"Select all", (10, 10))
406        if self.data!=None:
407            wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_param)
408            self.cb1.SetValue(False)
409        else:
410            self.cb1.Disable()
411            self.cb1.Hide()
412       
413        self.sizer5.Add(self.cb1,(iy, ix),(1,1),\
414                          wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
415        ix +=1
416        self.text2_2 = wx.StaticText(self, -1, 'Values')
417        self.sizer5.Add(self.text2_2,(iy, ix),(1,1),\
418                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
419        ix +=2
420        self.text2_3 = wx.StaticText(self, -1, 'Errors')
421        self.sizer5.Add(self.text2_3,(iy, ix),(1,1),\
422                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)
423        self.text2_3.Hide() 
424        ix +=1
425        self.text2_4 = wx.StaticText(self, -1, 'Units')
426        self.sizer5.Add(self.text2_4,(iy, ix),(1,1),\
427                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
428        self.text2_4.Hide()
429        disp_list=self.model.getDispParamList()
430        for item in keys:
431            if not item in disp_list:
432                iy += 1
433                ix = 0
434   
435                cb = wx.CheckBox(self, -1, item, (10, 10))
436                if self.data!=None:
437                    cb.SetValue(False)
438                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param)
439                else:
440                    cb.Disable()
441                self.sizer5.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
442               
443                ix += 1
444                value= self.model.getParam(item)
445                ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER)
446                ctl1.SetValue(str (format_number(value)))
447                ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
448                ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
449                self.sizer5.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
450               
451                ix += 1
452                text2=wx.StaticText(self, -1, '+/-')
453                self.sizer5.Add(text2,(iy, ix),(1,1),\
454                                wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
455                text2.Hide() 
456                ix += 1
457                ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER)
458                self.sizer5.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
459                ctl2.Hide()
460                ix +=1
461                # Units
462                try:
463                    units = wx.StaticText(self, -1, self.model.details[item][0], style=wx.ALIGN_LEFT)
464                except:
465                    units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT)
466                self.sizer5.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0)
467           
468            self.parameters.append([cb,ctl1,text2,ctl2])
469               
470        iy+=1
471        self.sizer5.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
472       
473        #Display units text on panel
474        for item in keys:   
475            if self.model.details[item][0]!='':
476                self.text2_4.Show()
477                break
478            else:
479                self.text2_4.Hide()
480        #Disable or enable fit button
481       
482        if not (len(self.param_toFit ) >0):
483            self.xmin.Disable()
484            self.xmax.Disable()
485        else:
486            self.xmin.Enable()
487            self.xmax.Enable()
488           
489        self.vbox.Layout()
490        self.SetScrollbars(20,20,55,40)
491        self.Layout()
492        self.GrandParent.GetSizer().Layout()
493       
494       
495    def  set_panel_dispers(self):
496        self.sizer7.Clear(True)
497        self.sizer8.Clear(True)
498        disp_list=self.model.getDispParamList()
499        ix=0
500        iy=1
501        if len(disp_list)>0:
502            model_disp = wx.StaticText(self, -1, 'Model Disp')
503            self.sizer7.Add(model_disp,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
504            ix += 1 
505            self.disp_box = wx.ComboBox(self, -1)
506            self.sizer7.Add(self.disp_box,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
507            ix = 0 
508            iy = 1 
509            disp = wx.StaticText(self, -1, 'Dispersion')
510            self.sizer8.Add(disp,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
511            ix += 1 
512            values = wx.StaticText(self, -1, 'Values')
513            self.sizer8.Add(values,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
514            ix += 1 
515            npts = wx.StaticText(self, -1, 'Npts')
516            self.sizer8.Add(npts,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
517            ix += 1 
518            nsigmas = wx.StaticText(self, -1, 'Nsigmas')
519            self.sizer8.Add(nsigmas,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
520           
521            disp_list.sort()
522            print disp_list,self.model.fixed
523            for item in disp_list:
524                if item in self.model.fixed:
525                    ix = 0
526                    iy += 1
527                    cb = wx.CheckBox(self, -1, item, (10, 10))
528                    if self.data !=None:
529                        cb.SetValue(False)
530                        wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param)
531                    else:
532                        cb.Disable()
533                    self.sizer7.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
534                   
535                   
536                    ix += 1
537                    value= self.model.getParam(item)
538                    ctl1 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER)
539                    ctl1.SetValue(str (format_number(value)))
540                    ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
541                    ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
542                    self.sizer7.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
543                   
544                    self.parameters.append([cb,ctl1])
545                iy+= 1
546        self.vbox.Layout()
547        self.SetScrollbars(20,20,55,40)
548        self.Layout()
549        self.GrandParent.GetSizer().Layout()
550           
551       
552    def _onparamEnter(self,event):
553        """
554            when enter value on panel redraw model according to changed
555        """
556        self.set_model_parameter()
557       
558    def set_model_parameter(self):
559        if len(self.parameters) !=0 and self.model !=None:
560            # Flag to register when a parameter has changed.
561            is_modified = False
562            for item in self.parameters:
563                try:
564                     name=str(item[0].GetLabelText())
565                     value= float(item[1].GetValue())
566                     # If the value of the parameter has changed,
567                     # update the model and set the is_modified flag
568                     if value != self.model.getParam(name):
569                         self.model.setParam(name,value)
570                         is_modified = True
571                except:
572                     wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\
573                            "Model Drawing  Error:wrong value entered : %s"% sys.exc_value))
574           
575            # Here we should check whether the boundaries have been modified.
576            # If qmin and qmax have been modified, update qmin and qmax and
577            # set the is_modified flag to True
578            if float(self.xmin.GetValue()) != self.qmin:
579                self.qmin = float(self.xmin.GetValue())
580                is_modified = True
581            if float(self.xmax.GetValue()) != self.qmax:
582                self.qmax = float(self.xmax.GetValue())
583                is_modified = True
584           
585            if float(self.npts.GetValue()) !=  self.num_points:
586                self.num_points = float(self.npts.GetValue())
587                is_modified = True
588         
589            if is_modified:
590                self._draw_model()           
591           
592    def _draw_model(self, name=None):
593        """
594            Method to draw or refresh a plotted model.
595            The method will use the data member from the model page
596            to build a call to the fitting perspective manager.
597           
598            [Note to coder: This way future changes will be done in only one place.]
599        """
600        if name==None:
601            name= self.model.name
602        self.manager.draw_model(self.model, name, data=self.data,
603                                qmin=self.qmin, qmax=self.qmax,
604                                qstep= self.num_points,
605                                enable2D=self.enable2D)
606        """
607            self.manager.draw_model(self.model, self.model.name,
608                                    qmin=self.qmin, qmax=self.qmax,
609                                    qstep= self.num_points,
610                                    enable2D=self.enable2D)
611        """
612    def select_param(self,event):
613        pass
614    def select_all_param(self,event): 
615        pass
616       
617       
Note: See TracBrowser for help on using the repository browser.