Ignore:
Timestamp:
Mar 29, 2011 12:40:33 PM (14 years ago)
Author:
Jae Cho <jhjcho@…>
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:
e0e2c44f
Parents:
29ef718
Message:

moving features from the branch

File:
1 edited

Legend:

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

    r9466f2d6 r2296316  
    4141        ## draw sizer 
    4242        self._fill_datainfo_sizer() 
     43        self.is_2D = None 
    4344        # get smear info from data 
    4445        self._get_smear_info() 
     
    4849        self._set_smear(self.data) 
    4950        self.Bind(EVT_CHI2_UPDATE, self.on_complete_chisqr) 
     51        # bind key event 
     52        self.Bind(wx.EVT_RIGHT_DOWN, self.on_right_down) 
    5053        self._set_bookmark_flag(False) 
    5154        self._set_save_flag(False) 
     
    8285            self.Layout() 
    8386            return 
    84         for item in self.parameters: 
    85             if self.engine_type =="scipy" : 
    86                 item[5].SetValue("") 
    87                 item[5].Hide() 
    88                 item[6].SetValue("") 
    89                 item[6].Hide() 
    90                 self.text2_min.Hide() 
    91                 self.text2_max.Hide() 
    92  
    93             else: 
    94                 item[5].Show(True) 
    95                 item[6].Show(True) 
    96                 self.text2_min.Show(True) 
    97                 self.text2_max.Show(True) 
    98         for item in self.fittable_param: 
    99             if item[5]!=None and item[6]!=None and not \ 
    100                 item in self.orientation_params_disp: 
    101                 if self.engine_type =="scipy" and \ 
    102                     not item in self.orientation_params: 
    103                     item[5].SetValue("") 
    104                     item[5].Hide() 
    105                     item[6].SetValue("") 
    106                     item[6].Hide() 
    107                     self.text2_min.Hide() 
    108                     self.text2_max.Hide() 
    109                     self.text_disp_min.Hide() 
    110                     self.text_disp_max.Hide() 
    111                 else: 
    112                     item[5].Show(True) 
    113                     item[6].Show(True) 
    114                     self.text2_min.Show(True) 
    115                     self.text2_max.Show(True) 
    116                     self.text_disp_min.Show(True) 
    117                     self.text_disp_max.Show(True) 
    118              
    119         for item in self.orientation_params: 
    120             if item[5]!=None and item[6]!=None: 
    121                 if self.engine_type =="scipy" or \ 
    122                 self.data.__class__.__name__ !="Data2D": 
    123                     item[5].SetValue("") 
    124                     item[5].Hide() 
    125                     item[6].SetValue("") 
    126                     item[6].Hide() 
    127                 else: 
    128                     item[5].Show(True) 
    129                     item[6].Show(True) 
    130                      
    131         for item in self.orientation_params_disp:          
    132             if item[5]!=None and item[6]!=None: 
    133                 if self.engine_type =="scipy" or \ 
    134                     self.data.__class__.__name__ !="Data2D": 
    135                     item[5].SetValue("") 
    136                     item[5].Hide() 
    137                     item[6].SetValue("") 
    138                     item[6].Hide() 
    139                 else: 
    140                     item[5].Show(True) 
    141                     item[6].Show(True) 
    14287        self.Layout() 
    14388        self.Refresh() 
     
    163108        smear_message_new_ssmear  =  "Please enter only the value of interest to customize smearing..." 
    164109        smear_message_new_psmear  =  "Please enter both; the dQ will be generated by interpolation..." 
    165         smear_message_2d_x_title = "<dQx>[1/A]:" 
    166         smear_message_2d_y_title = "<dQy>[1/A]:" 
     110        smear_message_2d_x_title = "<dQp>[1/A]:" 
     111        smear_message_2d_y_title = "<dQs>[1/A]:"         
    167112        smear_message_pinhole_min_title = "dQ_low[1/A]:" 
    168113        smear_message_pinhole_max_title = "dQ_high[1/A]:" 
     
    253198        self.Npts_total  =  BGTextCtrl(self, -1, "-", size=(75,20), style=0) 
    254199        self.Npts_total.SetToolTipString(" Total Npts : total number of data points") 
     200        # Update and Draw button 
     201        self.draw_button = wx.Button(self,wx.NewId(),'Compute', size=(88,24)) 
     202        self.draw_button.Bind(wx.EVT_BUTTON, self._onDraw,id= self.draw_button.GetId()) 
     203        self.draw_button.SetToolTipString("Compute and Draw.") 
     204         
    255205        box_description_1= wx.StaticText(self, -1,'    Chi2/Npts') 
    256206        box_description_2= wx.StaticText(self, -1,'Fitted Npts') 
    257207        box_description_3= wx.StaticText(self, -1,'Data Npts') 
    258         box_description_4= wx.StaticText(self, -1,' ') 
     208        #box_description_4= wx.StaticText(self, -1,' ') 
    259209         
    260210         
     
    262212        sizer_fit.Add(box_description_2,0,0) 
    263213        sizer_fit.Add(box_description_3,0,0)        
    264         sizer_fit.Add(box_description_4,0,0) 
     214        sizer_fit.Add(self.draw_button,0,0) 
    265215        sizer_fit.Add(self.tcChi,0,0) 
    266216        sizer_fit.Add(self.Npts_fit ,0,0) 
     
    281231        self.smear_message_new_p = wx.StaticText(self, -1, smear_message_new_psmear  , style=wx.ALIGN_LEFT) 
    282232        self.smear_description_2d_x     =  wx.StaticText(self, -1, smear_message_2d_x_title  , style=wx.ALIGN_LEFT) 
     233        self.smear_description_2d_x.SetToolTipString("  dQp(parallel) in q_r direction.") 
    283234        self.smear_description_2d_y     =  wx.StaticText(self, -1, smear_message_2d_y_title  , style=wx.ALIGN_LEFT) 
     235        self.smear_description_2d_y.SetToolTipString(" dQs(perpendicular) in q_phi direction.") 
    284236        self.smear_description_pin_min     =  wx.StaticText(self, -1, smear_message_pinhole_min_title  , style=wx.ALIGN_LEFT) 
    285237        self.smear_description_pin_max     =  wx.StaticText(self, -1, smear_message_pinhole_max_title  , style=wx.ALIGN_LEFT) 
     
    570522        sizer.Layout() 
    571523         
    572     def _set_sizer_dispersion(self, dispersity): 
     524    def _set_sizer_dispersion(self): 
    573525        """ 
    574526        draw sizer with gaussian dispersity parameters 
     
    588540        self._reset_dispersity() 
    589541         
    590         # Create the dispersion objects 
    591         for item in self.model.dispersion.keys(): 
    592             #disp_model =  GaussianDispersion() 
    593             disp_model = dispersity() 
    594             self._disp_obj_dict[item] = disp_model 
    595             self.model.set_dispersion(item, disp_model) 
    596             self.state._disp_obj_dict[item]= disp_model 
    597  
    598  
    599         ix=0 
    600         iy=1 
     542        ## fill a sizer with the combobox to select dispersion type 
     543        #sizer_select_dispers = wx.BoxSizer(wx.HORIZONTAL)   
     544        model_disp = wx.StaticText(self, -1, 'Function') 
     545             
     546        import sans.models.dispersion_models  
     547        self.polydisp= sans.models.dispersion_models.models 
     548 
     549        ix = 0 
     550        iy = 0 
    601551        disp = wx.StaticText(self, -1, ' ') 
    602552        self.sizer4_4.Add(disp,( iy, ix),(1,1),  
    603553                           wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    604554        ix += 1  
    605         values = wx.StaticText(self, -1, 'PD[ratio] ') 
     555        values = wx.StaticText(self, -1, 'PD[ratio]') 
    606556        polytext = "Polydispersity (= STD/mean); " 
    607557        polytext +=  "the standard deviation over the mean value." 
     
    614564        self.sizer4_4.Add( self.text_disp_1,(iy, ix),(1,1),\ 
    615565                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    616         self.text_disp_1.Hide() 
    617566         
    618567         
     
    621570        self.sizer4_4.Add(self.text_disp_min,(iy, ix),(1,1),\ 
    622571                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    623         self.text_disp_min.Hide() 
     572 
    624573        ix +=1  
    625574        self.text_disp_max = wx.StaticText(self, -1, 'Max') 
     
    635584        self.sizer4_4.Add(npts,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    636585        ix += 1  
    637         nsigmas = wx.StaticText(self, -1, 'Nsigmas') 
     586        nsigmas = wx.StaticText(self, -1, 'Nsigs') 
    638587        nsigmas.SetToolTipString("   Number of sigmas between which the range\n\ 
    639588         of the distribution function will be used for weighting. \n\ 
     
    642591        self.sizer4_4.Add(nsigmas,( iy, ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 
    643592                           0) 
     593        ix +=1  
     594        self.sizer4_4.Add(model_disp,(iy, ix),(1,1),\ 
     595                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    644596         
    645597        if self.engine_type=="park": 
     
    664616                        ix = 0 
    665617                        cb = wx.CheckBox(self, -1, name0, (10, 10)) 
    666                         cb.SetToolTipString("Check for fitting") 
     618                        cb.SetToolTipString("Check mark to fit") 
    667619                        wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
    668620                        self.sizer4_4.Add( cb,( iy, ix),(1,1),   
    669621                                           wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE,  
    670                                            15) 
     622                                           5) 
    671623                        ix = 1 
    672624                        value= self.model.getParam(name1) 
    673                         ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20) 
     625                        ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/1.3,20) 
    674626                                                  ,style=wx.TE_PROCESS_ENTER) 
    675627                        ctl1.SetLabel('PD[ratio]') 
     
    678630                        poly_text += " from the mean value." 
    679631                        ctl1.SetToolTipString(poly_text) 
    680                         ctl1.SetValue(str (format_number(value))) 
     632                        ctl1.SetValue(str (format_number(value, True))) 
    681633                        self.sizer4_4.Add(ctl1, (iy,ix),(1,1),wx.EXPAND) 
    682634                        ## text to show error sign 
     
    688640 
    689641                        ix = 3 
    690                         ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),  
     642                        ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/1.3,20),  
    691643                                           style=0) 
    692644                   
     
    703655                        self.sizer4_4.Add(ctl3, (iy,ix),(1,1),  
    704656                                          wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    705                         ctl3.Hide() 
     657                        
    706658                 
    707659                        ix = 5 
     
    713665                                          wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    714666 
    715                         ctl4.Hide() 
    716667                         
    717668                        if self.engine_type=="park": 
    718669                            ctl3.Show(True) 
    719670                            ctl4.Show(True) 
    720                                            
    721                         self.fittable_param.append([cb,name1,ctl1,text2, 
    722                                                     ctl2, ctl3, ctl4,None])                     
    723                      
     671                                                               
    724672                    elif p=="npts": 
    725673                            ix = 6 
    726674                            value= self.model.getParam(name2) 
    727675                            Tctl = self.ModelTextCtrl(self, -1,  
    728                                                       size=(_BOX_WIDTH/2,20), 
     676                                                       size=(_BOX_WIDTH/2.2,20), 
    729677                                                style=wx.TE_PROCESS_ENTER) 
    730678                             
     
    738686                            value= self.model.getParam(name3) 
    739687                            Tct2 = self.ModelTextCtrl(self, -1,  
    740                                                       size=(_BOX_WIDTH/2,20), 
     688                                                      size=(_BOX_WIDTH/2.2,20), 
    741689                                                style=wx.TE_PROCESS_ENTER) 
    742690                             
     
    744692                            self.sizer4_4.Add(Tct2, (iy,ix),(1,1), 
    745693                                               wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    746                             ix +=1 
    747                             self.sizer4_4.Add((20,20), (iy,ix),(1,1), 
    748                                                wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     694                            #ix +=1 
     695                            #self.sizer4_4.Add((20,20), (iy,ix),(1,1), 
     696                            #                   wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    749697                             
    750                             self.fixed_param.append([None,name3, Tct2 
    751                                                      ,None,None,None,  
    752                                                      None,None]) 
    753                              
     698                            self.fixed_param.append([None, name3, Tct2, 
     699                                                     None, None, None,  
     700                                                     None, None]) 
     701 
     702 
     703                ix = 8       
     704                disp_box = wx.ComboBox(self, -1,size=(65,-1), 
     705                                style=wx.CB_READONLY, name = '%s'% name1) 
     706                for key, value in self.polydisp.iteritems(): 
     707                    name_disp = str(key) 
     708                    disp_box.Append(name_disp,value) 
     709                    disp_box.SetStringSelection("gaussian")  
     710                wx.EVT_COMBOBOX(disp_box,-1, self._on_disp_func)       
     711                self.sizer4_4.Add(disp_box,(iy,ix),(1,1), wx.EXPAND) 
     712                self.fittable_param.append([cb,name1,ctl1,text2, 
     713                                                    ctl2, ctl3, ctl4, disp_box])                      
     714                            
    754715        ix =0 
    755716        iy +=1  
     
    776737                        ix = 0 
    777738                        cb = wx.CheckBox(self, -1, name0, (10, 10)) 
    778                         cb.SetToolTipString("Check for fitting") 
     739                        cb.SetToolTipString("Check mark to fit") 
    779740                        wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
    780741                        self.sizer4_4.Add( cb,( iy, ix),(1,1),   
    781742                                           wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE,  
    782                                            15) 
     743                                           5) 
    783744                        if self.data.__class__.__name__ =="Data2D": 
    784745                            cb.Show(True) 
     
    787748                        ix = 1 
    788749                        value= self.model.getParam(name1) 
    789                         ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH, 
     750                        ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/1.3, 
    790751                                        20),style=wx.TE_PROCESS_ENTER) 
    791752                        poly_tip = "Absolute Sigma for %s." % item 
    792753                        ctl1.SetToolTipString(poly_tip) 
    793                         ctl1.SetValue(str (format_number(value))) 
     754                        ctl1.SetValue(str (format_number(value, True))) 
    794755                        if self.data.__class__.__name__ =="Data2D": 
    795756                            if first_orient: 
     
    817778 
    818779                        ix = 3 
    819                         ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20),  
     780                        ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/1.3,20),  
    820781                                           style=0) 
    821782                     
     
    842803                                          wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    843804                        ctl4.Hide() 
    844                         #if self.data.__class__.__name__ =="Data2D": 
    845                             #ctl4.Enable(True) 
    846                         #elif ctl4.Shown(): 
    847                             #ctl4.Hide() 
    848805                         
    849                         if self.engine_type=="park" and \ 
    850                                     self.data.__class__.__name__ =="Data2D": 
     806                        if self.data.__class__.__name__ =="Data2D": 
    851807                            ctl3.Show(True) 
    852808                            ctl4.Show(True)  
    853                              
    854                              
    855                              
    856                              
    857                         self.fittable_param.append([cb,name1,ctl1,text2, 
    858                                                     ctl2, ctl3, ctl4,None]) 
    859                         self.orientation_params_disp.append([cb,name1,ctl1, 
    860                                                   text2, ctl2, ctl3, ctl4,None]) 
     809                              
    861810                    elif p=="npts": 
    862811                            ix = 6 
    863812                            value= self.model.getParam(name2) 
    864813                            Tctl = self.ModelTextCtrl(self, -1,  
    865                                                       size=(_BOX_WIDTH/2,20), 
     814                                                     size=(_BOX_WIDTH/2.2, 20), 
    866815                                                style=wx.TE_PROCESS_ENTER) 
    867816                             
     
    882831                            value= self.model.getParam(name3) 
    883832                            Tct2 = self.ModelTextCtrl(self, -1,  
    884                                                       size=(_BOX_WIDTH/2,20), 
     833                                                      size=(_BOX_WIDTH/2.2,20), 
    885834                                                style=wx.TE_PROCESS_ENTER) 
    886835                             
     
    892841                            self.sizer4_4.Add(Tct2, (iy,ix),(1,1), 
    893842                                               wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    894                             ix +=1 
     843 
    895844 
    896845                            self.fixed_param.append([None,name3, Tct2 
     
    900849                                            Tct2 ,None,None, None, None,None]) 
    901850         
     851 
     852                ix = 8       
     853                disp_box = wx.ComboBox(self, -1,size=(65,-1), 
     854                                style=wx.CB_READONLY, name = '%s'% name1) 
     855                for key, value in self.polydisp.iteritems(): 
     856                    name_disp = str(key) 
     857                    disp_box.Append(name_disp,value) 
     858                    disp_box.SetStringSelection("gaussian")  
     859                wx.EVT_COMBOBOX(disp_box,-1, self._on_disp_func)       
     860                self.sizer4_4.Add(disp_box,(iy,ix),(1,1), wx.EXPAND) 
     861                self.fittable_param.append([cb,name1,ctl1,text2, 
     862                                            ctl2, ctl3, ctl4, disp_box]) 
     863                self.orientation_params_disp.append([cb,name1,ctl1, 
     864                                            text2, ctl2, ctl3, ctl4, disp_box]) 
     865                        
     866                if self.data.__class__.__name__ =="Data2D": 
     867                    disp_box.Show(True) 
     868                else: 
     869                    disp_box.Hide() 
     870         
     871 
    902872        self.state.disp_cb_dict = copy.deepcopy(self.disp_cb_dict)   
    903873           
     
    920890        self.Layout() 
    921891 
     892     
     893    def _onDraw(self, event): 
     894        """ 
     895        Update and Draw the model 
     896        """  
     897        if self.model ==None: 
     898            msg="Please select a Model first..." 
     899            wx.MessageBox(msg, 'Info') 
     900            wx.PostEvent(self.manager.parent, StatusEvent(status=\ 
     901                            "Draw model: %s"%msg)) 
     902            return 
     903        flag = self._update_paramv_on_fit()          
     904        self._onparamEnter_helper() 
     905        if not flag: 
     906            msg= "The parameters are invalid" 
     907            wx.PostEvent(self.parent.parent, StatusEvent(status= msg )) 
     908            return  
     909         
     910 
    922911    def _onFit(self, event):      
    923912        """ 
     
    934923            wx.MessageBox(msg, 'Info') 
    935924            wx.PostEvent(self._manager.parent, StatusEvent(status=\ 
    936                             "Fit: %s" % msg)) 
     925                            "Fit: %s"%msg, type="stop")) 
    937926            return 
    938927 
     
    941930        if not flag: 
    942931            msg= "Fitting range or parameters are invalid" 
    943             wx.PostEvent(self.parent.parent, StatusEvent(status= msg )) 
     932            wx.PostEvent(self.parent.parent, StatusEvent(status= msg,  
     933                                                         type="stop")) 
    944934            return  
    945935         
    946936        if len(self.param_toFit) <= 0: 
    947937            msg= "Select at least one parameter to fit" 
    948             wx.PostEvent(self.parent.parent, StatusEvent(status= msg )) 
     938            wx.PostEvent(self.parent.parent, StatusEvent(status= msg,  
     939                                                         type="stop" )) 
    949940            return  
    950941       
     
    12271218                    self.set_npts2fit()  
    12281219            else: 
    1229                 if self.data is not None: 
    1230                      
    1231                     index_data = ((self.qmin_x <= self.data.x)& \ 
    1232                                   (self.data.x <= self.qmax_x)) 
    1233                     self.Npts_fit.SetValue(str(len(self.data.x[index_data]))) 
    1234  
     1220                index_data = ((self.qmin_x <= self.data.x)& \ 
     1221                              (self.data.x <= self.qmax_x)) 
     1222                self.Npts_fit.SetValue(str(len(self.data.x[index_data]))) 
    12351223            
    12361224        else: 
     
    16981686            raise ValueError,"missing parameter to fit"     
    16991687       
    1700     def onsetValues(self,chisqr,p_name, out,cov): 
     1688    def onsetValues(self, chisqr, p_name, out, cov): 
    17011689        """ 
    17021690        Build the panel from the fit result 
     
    17181706         
    17191707        #Check if chi2 is finite 
    1720         if chisqr != None or numpy.isfinite(chisqr): 
     1708        if chisqr != None and numpy.isfinite(chisqr): 
    17211709        #format chi2   
    17221710            if self.engine_type == "park":   
     
    17241712                if npt_fit > 0: 
    17251713                    chisqr =chisqr/npt_fit     
    1726             chi2 = format_number(chisqr)     
     1714            chi2 = format_number(chisqr, True)     
    17271715            self.tcChi.SetValue(chi2)     
    17281716            self.tcChi.Refresh()     
     
    17351723       
    17361724        try: 
    1737             n = self.disp_box.GetCurrentSelection() 
    1738             dispersity= self.disp_box.GetClientData(n) 
    1739             if dispersity !=None and self.enable_disp.GetValue(): 
    1740                 name= dispersity.__name__ 
    1741                 if name == "GaussianDispersion": 
    1742                     if hasattr(self,"text_disp_1" ): 
    1743                         if self.text_disp_1 !=None: 
    1744                             self.text_disp_1.Hide() 
     1725            if self.enable_disp.GetValue(): 
     1726                if hasattr(self,"text_disp_1" ): 
     1727                    if self.text_disp_1 != None: 
     1728                        self.text_disp_1.Hide() 
    17451729        except: 
    17461730            dispersty = None 
     
    17481732        #set the panel when fit result are float not list 
    17491733        if out.__class__== numpy.float64: 
    1750             self.param_toFit[0][2].SetValue(format_number(out)) 
     1734            self.param_toFit[0][2].SetValue(format_number(out, True)) 
    17511735             
    17521736            if self.param_toFit[0][4].IsShown: 
     
    17551739                self.text2_3.Show(True) 
    17561740                try: 
    1757                     if dispersity !=None: 
    1758                         name= dispersity.__name__ 
    1759                         if name == "GaussianDispersion" and \ 
    1760                         self.enable_disp.GetValue(): 
    1761                             if hasattr(self,"text_disp_1" ): 
    1762                                 if self.text_disp_1 !=None: 
    1763                                     self.text_disp_1.Show(True) 
     1741                    if self.enable_disp.GetValue(): 
     1742                        if hasattr(self,"text_disp_1" ): 
     1743                            if self.text_disp_1 !=None: 
     1744                                self.text_disp_1.Show(True) 
    17641745                except: 
    17651746                    pass 
     
    17711752                    self.param_toFit[0][3].Show(True)                
    17721753                    self.param_toFit[0][4].Show(True) 
    1773                     self.param_toFit[0][4].SetValue(format_number(cov[0])) 
     1754                    self.param_toFit[0][4].SetValue(format_number(cov[0], True)) 
    17741755                    has_error = True 
    17751756        else: 
     
    17881769                            break         
    17891770                    if len(out)<=len(self.param_toFit) and out[ind] !=None:    
    1790                         val_out = format_number(out[ind])                   
     1771                        val_out = format_number(out[ind], True)                   
    17911772                        item[2].SetValue(val_out) 
    17921773 
     
    17951776                        try: 
    17961777                            if dispersity !=None: 
    1797                                 name= dispersity.__name__ 
    1798                                 if name == "GaussianDispersion" and \ 
    1799                                                 self.enable_disp.GetValue(): 
     1778                                if self.enable_disp.GetValue(): 
    18001779                                    if hasattr(self,"text_disp_1" ): 
    18011780                                        if self.text_disp_1!=None: 
     
    18071786                        if cov[ind]!=None : 
    18081787                            if numpy.isfinite(float(cov[ind])): 
    1809                                 val_err = format_number(cov[ind]) 
     1788                                val_err = format_number(cov[ind], True) 
    18101789                                item[3].Show(True) 
    18111790                                item[4].Show(True) 
     
    18211800        ## save current state   
    18221801        self.save_current_state()           
    1823         #plot model 
    1824         self._draw_model()    
    1825         self._lay_out()       
     1802        #plot model ( when drawing, do not update chisqr value again) 
     1803        self._draw_model(update_chisqr=False)    
     1804        self._lay_out()    
     1805        self.Refresh()     
    18261806        #PostStatusEvent      
    18271807        msg = "Fit completed! " 
     
    22672247            else: 
    22682248                output = event.output 
    2269             self.tcChi.SetValue(str(format_number(output))) 
     2249            self.tcChi.SetValue(str(format_number(output, True))) 
    22702250 
    22712251            self.state.tcChi = self.tcChi.GetValue() 
     
    22962276                        item[0].SetValue(True) 
    22972277                        self.param_toFit.append(item ) 
     2278                        try: 
     2279                            if len(self.values[item[1]]) > 0: 
     2280                                item[0].SetValue(False) 
     2281                        except: 
     2282                            pass 
     2283 
    22982284                    else: 
    22992285                        ## for 1D all parameters except orientation 
     
    23012287                            item[0].SetValue(True) 
    23022288                            self.param_toFit.append(item ) 
     2289                            try: 
     2290                                if len(self.values[item[1]]) > 0: 
     2291                                    item[0].SetValue(False) 
     2292                            except: 
     2293                                pass 
     2294 
    23032295            else: 
    23042296                for item in self.parameters: 
     
    24762468        sizer.Add(self.text2_min,(iy, ix),(1,1),\ 
    24772469                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    2478         self.text2_min.Hide() 
     2470        #self.text2_min.Hide() 
    24792471        ix +=1  
    24802472        self.text2_max = wx.StaticText(self, -1, 'Max') 
    24812473        sizer.Add(self.text2_max,(iy, ix),(1,1),\ 
    24822474                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    2483         self.text2_max.Hide() 
     2475        #self.text2_max.Hide() 
    24842476        ix += 1 
    24852477        self.text2_4 = wx.StaticText(self, -1, '[Units]') 
     
    24872479                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    24882480        self.text2_4.Hide() 
    2489         if self.engine_type=="park": 
    2490             self.text2_max.Show(True) 
    2491             self.text2_min.Show(True) 
    24922481         
    24932482        for item in keys: 
     
    25242513                                style=wx.TE_PROCESS_ENTER, name ='%s'% item) 
    25252514                        fun_box.SetToolTipString("Hit 'Enter' after typing.") 
    2526                         fun_box.SetValue(format_number(value)) 
     2515                        fun_box.SetValue(format_number(value, True)) 
    25272516                    sizer.Add(fun_box, (iy,ix),(1,1), wx.EXPAND) 
    25282517                    self.str_parameters.append([None,item, fun_box, 
    2529                                                 None,None,None,None,None]) 
     2518                                                None, None, None,  
     2519                                                None, None]) 
    25302520 
    25312521                     
     
    25332523                    ## add parameters name with checkbox for selecting to fit 
    25342524                    cb = wx.CheckBox(self, -1, item )               
    2535                     cb.SetToolTipString(" Check for fitting.") 
     2525                    cb.SetToolTipString(" Check mark to fit.") 
    25362526                    #cb.SetValue(True) 
    25372527                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
     
    25462536                                        style=wx.TE_PROCESS_ENTER) 
    25472537                    ctl1.SetToolTipString("Hit 'Enter' after typing.") 
    2548                     ctl1.SetValue(format_number(value)) 
     2538                    ctl1.SetValue(format_number(value, True)) 
    25492539                    sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
    25502540                    ## text to show error sign 
     
    25552545                    text2.Hide()  
    25562546                    ix += 1 
    2557                     ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=0) 
     2547                    ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/1.2,20), style=0) 
    25582548                    sizer.Add(ctl2, (iy,ix),(1,1),  
    25592549                              wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     
    25612551                     
    25622552                    ix += 1 
    2563                     ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), 
     2553                    ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/1.9,20), 
    25642554                                               style=wx.TE_PROCESS_ENTER, 
    25652555                                text_enter_callback = self._onparamRangeEnter) 
     
    25672557                    sizer.Add(ctl3, (iy,ix),(1,1),  
    25682558                              wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    2569                     ctl3.Hide() 
    25702559             
    25712560                    ix += 1 
    2572                     ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), 
     2561                    ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/1.9,20), 
    25732562                                               style=wx.TE_PROCESS_ENTER, 
    25742563                                text_enter_callback = self._onparamRangeEnter) 
    25752564                    sizer.Add(ctl4, (iy,ix),(1,1),  
    2576                               wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    2577            
    2578                     ctl4.Hide() 
     2565                              wx.EXPAND|wx.FIXED_MINSIZE, 0) 
    25792566     
    2580                     if self.engine_type=="park": 
    2581                         ctl3.Show(True) 
    2582                         ctl4.Show(True) 
    25832567                    ix +=1 
    25842568                    # Units 
     
    26322616                    cb = wx.CheckBox(self, -1, item ) 
    26332617                    cb.SetValue(False) 
    2634                     cb.SetToolTipString("Check for fitting") 
     2618                    cb.SetToolTipString("Check mark to fit") 
    26352619                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
    26362620                    if self.data.__class__.__name__ =="Data2D": 
     
    26472631                                        style=wx.TE_PROCESS_ENTER) 
    26482632                    ctl1.SetToolTipString("Hit 'Enter' after typing.") 
    2649                     ctl1.SetValue(format_number(value)) 
     2633                    ctl1.SetValue(format_number(value, True)) 
    26502634                    if self.data.__class__.__name__ =="Data2D": 
    26512635                        ctl1.Show(True) 
     
    26602644                    text2.Hide()  
    26612645                    ix += 1 
    2662                     ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=0) 
     2646                    ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH/1.2,20), style=0) 
    26632647                    sizer.Add(ctl2, (iy,ix),(1,1),  
    26642648                              wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     
    26672651                     
    26682652                    ix += 1 
    2669                     ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20),  
     2653                    ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/1.8,20),  
    26702654                                              style=wx.TE_PROCESS_ENTER, 
    26712655                                text_enter_callback = self._onparamRangeEnter) 
     
    26762660                  
    26772661                    ix += 1 
    2678                     ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), 
     2662                    ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/1.8,20), 
    26792663                                               style=wx.TE_PROCESS_ENTER, 
    26802664                            text_enter_callback = self._onparamRangeEnter) 
     
    26842668                    ctl4.Hide() 
    26852669                     
    2686                     if self.engine_type =="park" and \ 
    2687                             self.data.__class__.__name__ =="Data2D":                       
     2670                    if self.data.__class__.__name__ =="Data2D":                       
    26882671                        ctl3.Show(True) 
    26892672                        ctl4.Show(True) 
     
    27272710        self.Layout() 
    27282711        self.Refresh() 
    2729       
     2712         
     2713    def on_right_down(self, event): 
     2714        """ 
     2715        Get key stroke event 
     2716        """ 
     2717        if self.data == None: 
     2718            return 
     2719        # Figuring out key combo: Cmd for copy, Alt for paste 
     2720        if event.AltDown() and event.ShiftDown(): 
     2721            self._show_ftol_dialog() 
     2722            flag = True 
     2723        else: 
     2724            flag = False 
     2725        # make event free 
     2726        event.Skip() 
     2727        # messages depending on the flag 
     2728        if not flag: 
     2729            msg = " Could not open ftol dialog;" 
     2730            msg += " Check if the Scipy fit engine is selected in the menubar." 
     2731            infor = 'warning' 
     2732            # inform msg to wx 
     2733            wx.PostEvent( self.parent.parent,  
     2734                          StatusEvent(status= msg, info=infor)) 
     2735 
     2736 
     2737    def _show_ftol_dialog(self): 
     2738        """ 
     2739        Dialog to select ftol for Scipy 
     2740        """ 
     2741        from ftol_dialog import ChangeFtol 
     2742        panel = ChangeFtol(self) 
     2743        panel.ShowModal() 
     2744         
    27302745    def _onModel2D(self, event): 
    27312746        """ 
Note: See TracChangeset for help on using the changeset viewer.