source: sasview/sansview/perspectives/fitting/fitpage1D.py @ b5847bd8

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 b5847bd8 was b5847bd8, checked in by Gervaise Alina <gervyh@…>, 15 years ago

working on scrolling windows

  • Property mode set to 100644
File size: 23.7 KB
Line 
1import sys
2import wx
3import wx.lib
4import numpy,math
5import copy
6
7from sans.guicomm.events import StatusEvent   
8(ModelEventbox, EVT_MODEL_BOX) = wx.lib.newevent.NewEvent()
9_BOX_WIDTH = 80
10
11def 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   
27class FitPage1D(wx.Panel):
28    """
29        FitPanel class contains fields allowing to display results when
30        fitting  a model and one data
31        @note: For Fit to be performed the user should check at least one parameter
32        on fit Panel window.
33 
34    """
35    ## Internal name for the AUI manager
36    window_name = "Fit page"
37    ## Title to appear on top of the window
38    window_caption = "Fit Page"
39   
40   
41    def __init__(self, parent,data, *args, **kwargs):
42        wx.Panel.__init__(self, parent, *args, **kwargs)
43        """
44            Initialization of the Panel
45        """
46        self.scroll = wx.ScrolledWindow(self)
47       
48        self.manager = None
49        self.parent  = parent
50        self.event_owner = None
51        #panel interface
52        self.vbox  = wx.BoxSizer(wx.VERTICAL)
53        self.sizer5 = wx.GridBagSizer(5,5)
54        self.sizer4 = wx.GridBagSizer(5,5)
55        self.sizer3 = wx.GridBagSizer(5,5)
56        self.sizer2 = wx.GridBagSizer(5,5)
57        self.sizer1 = wx.GridBagSizer(5,5)
58       
59       
60        self.DataSource  =wx.StaticText(self.scroll, -1,str(data.name))
61       
62        self.modelbox = wx.ComboBox(self.scroll, -1)
63        id = wx.NewId()
64        self.btFit =wx.Button(self.scroll,id,'Fit')
65        self.btFit.Bind(wx.EVT_BUTTON, self.onFit,id=id)
66        self.btFit.SetToolTipString("Perform fit.")
67        self.static_line_1 = wx.StaticLine(self.scroll, -1)
68       
69        self.vbox.Add(self.sizer3)
70       
71        self.vbox.Add(self.sizer2)
72        self.vbox.Add(self.static_line_1, 0, wx.EXPAND, 0)
73        self.vbox.Add(self.sizer5)
74       
75        self.vbox.Add(self.sizer4)
76        self.vbox.Add(self.sizer1)
77       
78        id = wx.NewId()
79        self.btClose =wx.Button(self.scroll,id,'Close')
80        self.btClose.Bind(wx.EVT_BUTTON, self.onClose,id=id)
81        self.btClose.SetToolTipString("Close page.")
82        ix = 0
83        iy = 1
84        self.sizer3.Add(wx.StaticText(self.scroll, -1, 'Data Source Name : '),(iy,ix),\
85                 (1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
86        ix += 1
87        self.sizer3.Add(self.DataSource,(iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
88        ix += 1
89        self.sizer3.Add((20,20),(iy,ix),(1,1),wx.RIGHT|wx.EXPAND|wx.ADJUST_MINSIZE,0)
90        ix = 0
91        iy += 1
92        self.sizer3.Add(wx.StaticText(self.scroll,-1,'Model'),(iy,ix),(1,1)\
93                  , wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
94        ix += 1
95        self.sizer3.Add(self.modelbox,(iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0)
96       
97        ix = 0
98        iy = 1
99        #set maximum range for x in linear scale
100        self.text4_3 = wx.StaticText(self.scroll, -1, 'Maximum Data Range(Linear)', style=wx.ALIGN_LEFT)
101        self.sizer4.Add(self.text4_3,(iy,ix),(1,1),\
102                   wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
103        ix += 1
104        self.sizer4.Add(wx.StaticText(self.scroll, -1, 'Min'),(iy, ix),(1,1),\
105                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
106        ix += 2
107        self.sizer4.Add(wx.StaticText(self.scroll, -1, 'Max'),(iy, ix),(1,1),\
108                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)
109        ix = 0
110        iy += 1
111        self.sizer4.Add(wx.StaticText(self.scroll, -1, 'x range'),(iy, ix),(1,1),\
112                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
113        ix += 1
114        self.xmin    = wx.TextCtrl(self.scroll, -1,size=(_BOX_WIDTH,20))
115        self.xmin.SetValue(format_number(numpy.min(data.x)))
116        self.xmin.SetToolTipString("Minimun value of x in linear scale.")
117        self.xmin.Bind(wx.EVT_KILL_FOCUS, self._onTextEnter)
118        self.xmin.Bind(wx.EVT_TEXT_ENTER, self._onTextEnter)
119        self.xmin.Disable()
120        self.sizer4.Add(self.xmin,(iy, ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
121       
122       
123        ix += 2
124        self.xmax    = wx.TextCtrl(self.scroll, -1,size=(_BOX_WIDTH,20))
125        self.xmax.SetValue(format_number(numpy.max(data.x)))
126        self.xmax.SetToolTipString("Maximum value of x in linear scale.")
127        self.xmax.Bind(wx.EVT_KILL_FOCUS, self._onTextEnter)
128        self.xmax.Bind(wx.EVT_TEXT_ENTER, self._onTextEnter)
129        self.xmax.Disable()
130        self.sizer4.Add(self.xmax,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
131        ix =0
132        iy+=1
133        self.sizer4.Add((20,20),(iy,ix),(1,1),wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
134        #Set chisqr  result into TextCtrl
135        ix = 0
136        iy = 1
137        self.smear= wx.CheckBox(self.scroll, -1, "Fit with Smear", (10, 10))
138        wx.EVT_CHECKBOX(self.scroll, self.smear.GetId(), self.onSmear)
139        self.sizer1.Add(self.smear,(iy,ix),(1,1),\
140                   wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
141        iy+=1
142        self.text1_1 = wx.StaticText(self.scroll, -1, 'Chi2/dof', style=wx.ALIGN_LEFT)
143        #self.sizer1.Add(self.text1_1,1)
144        self.sizer1.Add(self.text1_1,(iy,ix),(1,1),\
145                   wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
146        ix += 1
147        self.tcChi    = wx.TextCtrl(self.scroll, -1,size=(_BOX_WIDTH,20))
148        self.tcChi.SetToolTipString("Chi^2 over degrees of freedom.")
149        #self.sizer1.Add(self.tcChi, 1, wx.R | wx.BOTTOM , 5)
150        self.sizer1.Add(self.tcChi,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
151        ix +=2
152        #self.sizer1.Add(self.btFit, 1, wx.LEFT | wx.BOTTOM , 5)
153        self.sizer1.Add(self.btFit,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
154        ix+= 2
155        self.sizer1.Add( self.btClose,(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
156        #self.sizer1.Add( self.btClose,1, wx.LEFT | wx.BOTTOM , 5)
157
158        ix= 0
159        iy+=1
160        self.sizer1.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 0)
161        #self.sizer1.Add((20,20), 0)
162        # contains link between  model ,all its parameters, and panel organization
163        self.parameters=[]
164        #contains link between a model and selected parameters to fit
165        self.param_toFit=[]
166        # model on which the fit would be performed
167        self.model=None
168        #dictionary of model name and model class
169        self.model_list_box={}
170        self.data = data
171        self.vbox.Layout()
172       
173        bs = wx.BoxSizer(wx.VERTICAL)
174        bs.Add(self.scroll, 1, wx.EXPAND)
175       
176        self.SetSizer(bs)
177
178        self.scroll.SetSizer(self.vbox)       
179       
180        self.scroll.SetScrollbars(20,20,55,40)
181   
182        self.Centre()
183        self.Layout()
184        self.GrandParent.GetSizer().Layout()
185        print self.GetSize()
186        print self.scroll.GetSize()
187
188       
189       
190       
191       
192       
193       
194    def set_owner(self,owner):
195        """
196            set owner of fitpage
197            @param owner: the class responsible of plotting
198        """
199        self.event_owner = owner   
200   
201 
202    def set_manager(self, manager):
203        """
204             set panel manager
205             @param manager: instance of plugin fitting
206        """
207        self.manager = manager
208 
209       
210    def onClose(self,event):
211        """ close the page associated with this panel"""
212        self.GrandParent.onClose()
213       
214       
215    def compute_chisqr(self):
216        """ @param fn: function that return model value
217            @return residuals
218        """
219       
220        flag=self.checkFitRange()
221        if flag== True:
222            try:
223                qmin = float(self.xmin.GetValue())
224                qmax = float(self.xmax.GetValue())
225                x,y,dy = [numpy.asarray(v) for v in (self.data.x,self.data.y,self.data.dy)]
226                if qmin==None and qmax==None: 
227                    fx =numpy.asarray([self.model.run(v) for v in x])
228                    res=(y - fx)/dy
229                else:
230                    idx = (x>= qmin) & (x <=qmax)
231                    fx = numpy.asarray([self.model.run(item)for item in x[idx ]])
232                    res= (y[idx] - fx)/dy[idx] 
233               
234               
235                sum=0
236                for item in res:
237                    if numpy.isfinite(item):
238                        sum +=item
239                self.tcChi.SetValue(format_number(math.fabs(sum)))
240            except:
241                wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\
242                            "Chisqr cannot be compute: %s"% sys.exc_value))
243           
244           
245    def onFit(self,event):
246        """ signal for fitting"""
247         
248        flag=self.checkFitRange()
249        self.set_manager(self.manager)
250     
251        qmin=float(self.xmin.GetValue())
252        qmax =float( self.xmax.GetValue())
253        if len(self.param_toFit) >0 and flag==True:
254            self.manager.schedule_for_fit( value=1,fitproblem =None) 
255            self.manager._on_single_fit(qmin=qmin,qmax=qmax)
256        else:
257              wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\
258                            "Select at least on parameter to fit "))
259    def populate_box(self, dict):
260        """
261            Populate each combox box of each page
262            @param page: the page to populate
263        """
264        id=0
265        self.model_list_box=dict
266        list_name=[]
267        for item in  self.model_list_box.itervalues():
268            name = item.__name__
269            if hasattr(item, "name"):
270                name = item.name
271            list_name.append(name)
272        list_name.sort()   
273        for name in list_name:
274            self.modelbox.Insert(name,int(id))
275            id+=1
276        wx.EVT_COMBOBOX(self.modelbox,-1, self._on_select_model) 
277        return 0
278   
279   
280    def _on_select_model(self,event):
281        """
282            react when a model is selected from page's combo box
283            post an event to its owner to draw an appropriate theory
284        """
285        self.btFit.SetFocus()
286        for item in self.model_list_box.itervalues():
287            name = item.__name__
288            if hasattr(item, "name"):
289                name = item.name
290            #print "fitpage: _on_select_model model name",name ,event.GetString()
291            if name ==event.GetString():
292                try:
293                    evt = ModelEventbox(model=item(),name=name)
294                    wx.PostEvent(self.event_owner, evt)
295                except:
296                    raise #ValueError,"model.name is not equal to model class name"
297                break
298   
299    def _onTextEnter(self,event):
300        """
301            set a flag to determine if the fitting range entered by the user is valid
302        """
303     
304        try:
305            flag=self.checkFitRange()
306            if flag==True and self.model!=None:
307                print"fit page",self.xmin.GetValue(),self.xmax.GetValue()
308                self.manager.redraw_model(float(self.xmin.GetValue())\
309                                               ,float(self.xmax.GetValue()))
310        except:
311
312            wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\
313                            "Drawing  Error:wrong value entered %s"% sys.exc_value))
314       
315    def checkFitRange(self):
316        """
317            Check the validity of fitting range
318            @note: xmin should always be less than xmax or else each control box
319            background is colored in pink.
320        """
321       
322        flag = True
323        valueMin = self.xmin.GetValue()
324        valueMax = self.xmax.GetValue()
325        # Check for possible values entered
326        #print "fitpage: checkfitrange:",valueMin,valueMax
327        try:
328            if (float(valueMax)> float(valueMin)):
329                self.xmax.SetBackgroundColour(wx.WHITE)
330                self.xmin.SetBackgroundColour(wx.WHITE)
331            else:
332                flag = False
333                self.xmin.SetBackgroundColour("pink")
334                self.xmax.SetBackgroundColour("pink")     
335        except:
336            flag = False
337            self.xmin.SetBackgroundColour("pink")
338            self.xmax.SetBackgroundColour("pink")
339           
340        self.xmin.Refresh()
341        self.xmax.Refresh()
342        return flag
343   
344
345    def get_model_box(self): 
346        """ return reference to combox box self.model"""
347        return self.modelbox
348
349   
350    def get_param_list(self):
351        """
352            @return self.param_toFit: list containing  references to TextCtrl
353            checked.Theses TextCtrl will allow reference to parameters to fit.
354            @raise: if return an empty list of parameter fit will nnote work
355            properly so raise ValueError,"missing parameter to fit"
356        """
357        if self.param_toFit !=[]:
358            return self.param_toFit
359        else:
360            raise ValueError,"missing parameter to fit"
361       
362       
363    def set_panel(self,model):
364        """
365            Build the panel from the model content
366            @param model: the model selected in combo box for fitting purpose
367        """
368        self.sizer2.Clear(True)
369        self.sizer5.Clear(True)
370        self.parameters = []
371        self.param_toFit=[]
372        self.model = model
373        keys = self.model.getParamList()
374        #print "fitpage1D : dispersion list",self.model.getDispParamList()
375        keys.sort()
376        disp_list=self.model.getDispParamList()
377        ip=0
378        iq=1
379        if len(disp_list)>0:
380            disp = wx.StaticText(self.scroll, -1, 'Dispersion')
381            self.sizer5.Add(disp,( iq, ip),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
382            ip += 1 
383            values = wx.StaticText(self.scroll, -1, 'Values')
384            self.sizer5.Add(values,( iq, ip),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
385           
386        disp_list.sort()
387        iy = 1
388        ix = 0
389        self.cb1 = wx.CheckBox(self.scroll, -1,'Parameters', (10, 10))
390        wx.EVT_CHECKBOX(self.scroll, self.cb1.GetId(), self.select_all_param)
391        self.sizer2.Add(self.cb1,(iy, ix),(1,1),\
392                          wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
393        ix +=1
394        self.text2_2 = wx.StaticText(self.scroll, -1, 'Values')
395        self.sizer2.Add(self.text2_2,(iy, ix),(1,1),\
396                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
397        ix +=2
398        self.text2_3 = wx.StaticText(self.scroll, -1, 'Errors')
399        self.sizer2.Add(self.text2_3,(iy, ix),(1,1),\
400                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)
401        self.text2_3.Hide() 
402        ix +=1
403        self.text2_4 = wx.StaticText(self.scroll, -1, 'Units')
404        self.sizer2.Add(self.text2_4,(iy, ix),(1,1),\
405                            wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
406        self.text2_4.Hide()
407       
408        for item in keys:
409            if not item in disp_list:
410                iy += 1
411                ix = 0
412   
413                cb = wx.CheckBox(self.scroll, -1, item, (10, 10))
414                cb.SetValue(False)
415                self.sizer2.Add( cb,( iy, ix),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
416                wx.EVT_CHECKBOX(self.scroll, cb.GetId(), self.select_param)
417               
418                ix += 1
419                value= self.model.getParam(item)
420                ctl1 = wx.TextCtrl(self.scroll, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER)
421                ctl1.SetValue(str (format_number(value)))
422                ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
423                ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
424                self.sizer2.Add(ctl1, (iy,ix),(1,1), wx.EXPAND)
425                ix += 1
426                text2=wx.StaticText(self.scroll, -1, '+/-')
427                self.sizer2.Add(text2,(iy, ix),(1,1),\
428                                wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
429                text2.Hide() 
430                ix += 1
431                ctl2 = wx.TextCtrl(self.scroll, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER)
432                self.sizer2.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
433                ctl2.Hide()
434                ix +=1
435                # Units
436                try:
437                    units = wx.StaticText(self.scroll, -1, self.model.details[item][0], style=wx.ALIGN_LEFT)
438                except:
439                    units = wx.StaticText(self.scroll, -1, "", style=wx.ALIGN_LEFT)
440                self.sizer2.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0)
441            else:
442                ip = 0
443                iq += 1
444                cb = wx.CheckBox(self.scroll, -1, item, (10, 10))
445                cb.SetValue(False)
446                self.sizer5.Add( cb,( iq, ip),(1,1),  wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
447                wx.EVT_CHECKBOX(self.scroll, cb.GetId(), self.select_param)
448               
449                ip += 1
450                value= self.model.getParam(item)
451                ctl1 = wx.TextCtrl(self.scroll, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER)
452                ctl1.SetValue(str (format_number(value)))
453                ctl1.Bind(wx.EVT_KILL_FOCUS, self._onparamEnter)
454                ctl1.Bind(wx.EVT_TEXT_ENTER,self._onparamEnter)
455                self.sizer5.Add(ctl1, (iq,ip),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0)
456               
457            #save data
458            self.parameters.append([cb,ctl1,text2,ctl2])
459               
460        iy+=1
461        self.sizer2.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)
462       
463        #Display units text on panel
464        for item in keys:   
465            if self.model.details[item][0]!='':
466                self.text2_4.Show()
467                break
468            else:
469                self.text2_4.Hide()
470        #Disable or enable fit button
471       
472        if not (len(self.param_toFit ) >0):
473            self.xmin.Disable()
474            self.xmax.Disable()
475        else:
476            self.xmin.Enable()
477            self.xmax.Enable()
478       
479        self.compute_chisqr()
480        self.vbox.Layout()
481        self.GrandParent.GetSizer().Layout()
482       
483       
484       
485    def _onparamEnter(self,event):
486        """
487            when enter value on panel redraw model according to changed
488        """
489        self.set_model_parameter()
490        self.compute_chisqr()
491       
492     
493    def set_model_parameter(self):
494        """
495            this method redraws the model according to parameters values changes
496            and the reset model according to paramaters changes
497        """
498        if len(self.parameters) !=0 and self.model !=None:
499            for item in self.parameters:
500                try:
501                    item[2].Hide()
502                    item[3].Clear()
503                    item[3].Hide()
504                    name=str(item[0].GetLabelText())
505                    value= float(item[1].GetValue())
506                    self.model.setParam(name,value) 
507                except:
508                     wx.PostEvent(self.parent.GrandParent, StatusEvent(status=\
509                            "Drawing  Error:wrong value entered : %s"% sys.exc_value))
510           
511            self.manager.redraw_model(float(self.xmin.GetValue())\
512                                               ,float(self.xmax.GetValue()))     
513                     
514    def select_all_param(self,event): 
515        """
516             set to true or false all checkBox given the main checkbox value cb1
517        """
518        self.param_toFit=[]
519        if  self.parameters !=[]:
520            if  self.cb1.GetValue()==True:
521                for item in self.parameters:
522                    item[0].SetValue(True)
523                    list= [item[0],item[1],item[2],item[3]]
524                    self.param_toFit.append(list )
525               
526                if not (len(self.param_toFit ) >0):
527                    self.xmin.Disable()
528                    self.xmax.Disable()
529                else:
530                    self.xmin.Enable()
531                    self.xmax.Enable()
532            else:
533                for item in self.parameters:
534                    item[0].SetValue(False)
535                self.param_toFit=[]
536             
537                self.xmin.Disable()
538                self.xmax.Disable()
539               
540               
541    def select_param(self,event):
542        """
543            Select TextCtrl  checked for fitting purpose and stores them
544            in  self.param_toFit=[] list
545        """
546        self.param_toFit=[]
547        for item in self.parameters:
548            if item[0].GetValue()==True:
549                list= [item[0],item[1],item[2],item[3]]
550                self.param_toFit.append(list ) 
551            else:
552                if item in self.param_toFit:
553                    self.param_toFit.remove(item)
554        if len(self.parameters)==len(self.param_toFit):
555            self.cb1.SetValue(True)
556        else:
557            self.cb1.SetValue(False)
558       
559        if not (len(self.param_toFit ) >0):
560            self.xmin.Disable()
561            self.xmax.Disable()
562        else:
563            self.xmin.Enable()
564            self.xmax.Enable()
565 
566   
567       
568 
569    def onsetValues(self,chisqr, out,cov):
570        """
571            Build the panel from the fit result
572            @param chisqr:Value of the goodness of fit metric
573            @param out:list of parameter with the best value found during fitting
574            @param cov:Covariance matrix
575       
576        """
577        #print "fitting : onsetvalues out",out
578        self.tcChi.Clear()
579        self.tcChi.SetValue(format_number(chisqr))
580        params = {}
581        is_modified = False
582        has_error = False
583        if out.__class__==numpy.float64:
584            self.param_toFit[0][1].SetValue(format_number(out))
585            self.param_toFit[0][1].Refresh()
586            if cov !=None :
587                self.text2_3.Show()
588                self.param_toFit[0][2].Show()
589                self.param_toFit[0][3].Clear()
590                self.param_toFit[0][3].SetValue(format_number(cov[0]))
591                self.param_toFit[0][3].Show()
592        #out is a list : set parameters and errors in TextCtrl
593        else:
594            i=0
595            #print "fitpage: list param  model",list
596            #for item in self.param_toFit:
597            #    print "fitpage: list display",item[0].GetLabelText()
598            for item in self.param_toFit:
599                if( out != None ) and len(out)<=len(self.param_toFit)and i < len(out):
600                    #item[1].SetValue(format_number(out[i]))
601                    item[1].SetValue(format_number(self.model.getParam(item[0].GetLabelText())))
602                    item[1].Refresh() 
603                if (cov !=None)and len(cov)<=len(self.param_toFit)and i < len(cov):
604                    self.text2_3.Show() 
605                    item[2].Show()
606                    item[3].Clear()
607                    item[3].SetValue(format_number(cov[i]))
608                    item[3].Show()   
609                i+=1
610       
611        self.vbox.Layout()
612        self.GrandParent.GetSizer().Layout()
613    def onSmear(self, event):
614        if self.smear.GetValue()==True:
615            from DataLoader.qsmearing import smear_selection
616            smear =smear_selection( self.data )
617            self.data.smearer= smear
618            #print "on smearing", self.data.smearer._compute_matrix()
619        else:
620            self.data.smearer=None
621       
Note: See TracBrowser for help on using the repository browser.