Changeset c99a6c5 in sasview


Ignore:
Timestamp:
Nov 5, 2009 6:17:31 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:
c660493
Parents:
cf76ca74
Message:

removed extra sizer updates and fixed gui toward mac

Location:
sansview/perspectives/fitting
Files:
6 edited

Legend:

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

    r77f6a8b rc99a6c5  
    1919#Control panel width  
    2020if sys.platform.count("win32")>0: 
    21     PANEL_WIDTH = 420 
     21    PANEL_WIDTH = 430 
    2222else: 
    23     PANEL_WIDTH = 490 
     23    PANEL_WIDTH = 500 
    2424     
    2525class BasicPage(wx.ScrolledWindow): 
     
    113113        #wx.EVT_MENU(self, id, self.onRedo)        
    114114        #self.popUpMenu.AppendSeparator() 
    115                  
    116         id = wx.NewId() 
    117         self._keep = wx.MenuItem(self.popUpMenu,id,"BookMark"," Keep the panel status to recall it later") 
    118         self.popUpMenu.AppendItem(self._keep) 
    119         self._keep.Enable(True) 
    120         wx.EVT_MENU(self, id, self.onSave) 
    121         self.popUpMenu.AppendSeparator() 
     115        if sys.platform.count("win32")>0:         
     116            id = wx.NewId() 
     117            self._keep = wx.MenuItem(self.popUpMenu,id,"BookMark"," Keep the panel status to recall it later") 
     118            self.popUpMenu.AppendItem(self._keep) 
     119            self._keep.Enable(True) 
     120            wx.EVT_MENU(self, id, self.onSave) 
     121            self.popUpMenu.AppendSeparator() 
    122122         
    123123        ## Default locations 
     
    491491        #self.model._persistency_dict = {} 
    492492        #self.state.model._persistency_dict= copy.deepcopy(self.model._persistency_dict) 
    493                          
     493         
     494        #Remember fit engine_type for fit panel 
     495        if self.engine_type == None and self.manager !=None: 
     496            self.engine_type = self.manager._return_engine_type() 
     497         
     498        self.state.engine_type = self.engine_type 
     499        
    494500        new_state = self.state.clone() 
    495501        new_state.model.name = self.state.model.name 
     
    516522        wx.EVT_MENU(self, id, self.onResetModel) 
    517523         
    518          
    519524    def onSetFocus(self, evt): 
    520525        """ 
    521526            highlight the current textcrtl and hide the error text control shown  
    522527            after fitting 
    523         """ 
    524         if hasattr(self,"text2_3"): 
    525             self.text2_3.Hide() 
    526         if len(self.parameters)>0: 
    527             for item in self.parameters: 
    528                 ## hide statictext +/-     
    529                 if item[3]!=None: 
    530                     item[3].Hide() 
    531                 ## hide textcrtl  for error after fit 
    532                 if item[4]!=None: 
    533                     item[4].Clear() 
    534                     item[4].Hide() 
    535         if len(self.fittable_param)>0: 
    536             for item in self.fittable_param: 
    537                 ## hide statictext +/-     
    538                 if item[3]!=None: 
    539                     item[3].Hide() 
    540                 ## hide textcrtl  for error after fit 
    541                 if item[4]!=None: 
    542                     item[4].Clear() 
    543                     item[4].Hide() 
    544         ##Is this layout necessary? Had a problem w/MAC. 
    545         #self.Layout() 
     528            :Not implemented. 
     529        """ 
    546530        return 
    547      
    548531     
    549532    def read_file(self, path): 
     
    594577            self.state.disp_list= copy.deepcopy(self.disp_list) 
    595578            self.state.model = self.model.clone() 
    596              
     579 
    597580        self.state.enable2D = copy.deepcopy(self.enable2D) 
    598581        self.state.values= copy.deepcopy(self.values) 
     
    665648    def save_current_state_fit(self): 
    666649        """ 
    667             Store current state 
     650            Store current state for fit_page 
    668651        """ 
    669652        ## save model option 
     
    672655            self.state.disp_list= copy.deepcopy(self.disp_list) 
    673656            self.state.model = self.model.clone() 
    674              
     657        #if hasattr(self,self.engine_type)> 0: 
     658            #self.state.engine_type = self.engine_type.clone()  
    675659        self.state.enable2D = copy.deepcopy(self.enable2D) 
    676660        self.state.values= copy.deepcopy(self.values) 
     
    758742            self.smearer= smear_selection( self.data ) 
    759743        self.enable2D= state.enable2D 
    760          
     744        self.engine_type = state.engine_type 
    761745        #??? 
    762746        self.disp_cb_dict = state.disp_cb_dict 
     
    866850        self._draw_model() 
    867851        
    868          
     852    def _clear_Err_on_Fit(self): 
     853        """ 
     854            hide the error text control shown  
     855            after fitting 
     856        """ 
     857         
     858        if hasattr(self,"text2_3"): 
     859            self.text2_3.Hide() 
     860 
     861        if len(self.parameters)>0: 
     862            for item in self.parameters: 
     863                ## hide statictext +/-     
     864                if item[3]!=None and item[3].IsShown(): 
     865                    item[3].Hide() 
     866                ## hide textcrtl  for error after fit 
     867                if item[4]!=None and item[4].IsShown():                    
     868                    item[4].Clear() 
     869                    item[4].Hide() 
     870        if len(self.fittable_param)>0: 
     871            for item in self.fittable_param: 
     872                ## hide statictext +/-     
     873                if item[3]!=None and item[3].IsShown(): 
     874                    item[3].Hide() 
     875                ## hide textcrtl  for error after fit 
     876                if item[4]!=None and item[4].IsShown(): 
     877                    item[4].Clear() 
     878                    item[4].Hide() 
     879        ##Is this layout necessary? Had a problem w/MAC. 
     880        #self.Layout() 
     881         
     882        return         
    869883    def _selectDlg(self): 
    870884        """ 
     
    913927        self.state.structurebox= self.structurebox.GetCurrentSelection() 
    914928        self.state.formfactorbox = self.formfactorbox.GetCurrentSelection() 
    915          
     929        
    916930        #self._undo.Enable(True) 
    917931        ## post state to fit panel 
     
    945959            is_modified =self._check_value_enter( self.fixed_param ,is_modified) 
    946960            is_modified =self._check_value_enter( self.parameters ,is_modified)  
    947                     
     961      
    948962            if is_modified: 
    949963                self.sizer3.Layout() 
    950964                self.Layout() 
    951965                self.Refresh() 
     966 
    952967            # Here we should check whether the boundaries have been modified. 
    953968            # If qmin and qmax have been modified, update qmin and qmax and  
     
    972987                    msg= "Cannot Plot :Must enter a number!!!  " 
    973988                    wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
    974                      
     989                 
    975990             
    976991            ## if any value is modify draw model with new value 
     
    978993                self.state_change= True 
    979994                self._draw_model()  
    980                 self.save_current_state() 
    981                  
    982             self.is_modified = is_modified   
     995                self.save_current_state()  
    983996                
    984     def _is_modified(self): 
     997    def _is_modified(self, is_modified): 
    985998        """ 
    986999            return to self._is_modified 
    9871000        """ 
    988         return self.is_modified 
     1001        return is_modified 
    9891002                        
    9901003    def _reset_parameters_state(self, listtorestore,statelist): 
     
    9961009        if len(statelist)!=  len(listtorestore) : 
    9971010            return 
     1011 
    9981012        for j in range(len(listtorestore)): 
    9991013            item_page = listtorestore[j] 
     
    12451259        self.Bind( wx.EVT_RADIOBUTTON, self._show_combox, 
    12461260                            id= self.plugin_rbutton.GetId() )   
    1247                 #MAC needs SetValue 
     1261        #MAC needs SetValue 
    12481262        self.shape_rbutton.SetValue(True) 
    12491263       
     
    14381452            when enter value on panel redraw model according to changed 
    14391453        """ 
     1454 
    14401455        tcrtl= event.GetEventObject() 
     1456         
    14411457        ## save current state 
    14421458        self.save_current_state() 
     
    14451461            event = PageInfoEvent(page = self) 
    14461462            wx.PostEvent(self.parent, event) 
    1447              
     1463               
    14481464        if check_float(tcrtl): 
    14491465             
    14501466            self._onparamEnter_helper() 
     1467             
    14511468        else: 
    14521469            msg= "Cannot Plot :Must enter a number!!!  " 
     
    14611478            item=[cb state, name, value, "+/-", error of fit, min, max , units] 
    14621479        """   
    1463         self.is_modified =  modified 
     1480        is_modified =  modified 
    14641481        if len(list)==0: 
    1465             return self.is_modified 
     1482            return is_modified 
    14661483        for item in list: 
    14671484            try: 
    14681485                name = str(item[1]) 
    1469                 if hasattr(self,"text2_3"): 
    1470                     self.text2_3.Hide() 
     1486                if hasattr(self,"text2_3") and self.text2_3.IsShown(): 
     1487                    if hasattr(self,"item[4]")and self.item[4] == None: 
     1488                        self.text2_3.Hide() 
    14711489                ## check model parameters range 
    14721490                ## check minimun value 
     
    14761494                    if item[5].GetValue().lstrip().rstrip()!="": 
    14771495                        param_min = float(item[5].GetValue()) 
    1478                      
    14791496                ## check maximum value 
    14801497                if item[6]!= None: 
     
    14891506                        wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
    14901507                if name in self.model.details.keys():    
    1491                     self.model.details[name][1:]= param_min,param_max 
    1492                  
     1508                    self.model.details[name][1:3]= param_min,param_max 
     1509                                     
    14931510                ## hide statictext +/-     
    1494                 if item[3]!=None: 
    1495                     item[3].Hide() 
     1511                #if item[3]!=None and item[3].IsShown(): 
     1512                #    item[3].Hide() 
    14961513                ## hide textcrtl  for error after fit 
    1497                 if item[4]!=None: 
    1498                     item[4].Clear() 
    1499                     item[4].Hide() 
    1500                      
     1514                #if item[4]!=None and item[4].IsShown(): 
     1515                #    item[4].Clear() 
     1516                #    item[4].Hide() 
     1517 
    15011518                value= float(item[2].GetValue()) 
    1502                  
    15031519                # If the value of the parameter has changed, 
    15041520                # +update the model and set the is_modified flag 
    15051521                if value != self.model.getParam(name): 
    15061522                    self.model.setParam(name,value) 
    1507                     self.is_modified = True    
    1508              
     1523                    is_modified = True    
     1524 
    15091525            except: 
    15101526                msg= "Model Drawing  Error:wrong value entered : %s"% sys.exc_value 
    15111527                wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
    15121528                return  
    1513          
    1514         return self.is_modified  
     1529        return is_modified  
    15151530         
    15161531  
     
    15331548            return 
    15341549        #remove previous added details for dispersion parameters. 
    1535         for item in self.model.details.keys(): 
    1536             if item in self.model.fixed: 
    1537                 del self.model.details [item]                            
     1550        #for item in self.model.dispersion.keys():#for item in self.model.details.keys(): 
     1551        #    if item in self.model.fixed and item in self.model.details.keys(): 
     1552        #        del self.model.details [item]                            
    15381553     
    15391554        if self.enable_disp.GetValue(): 
     
    18221837        self.sizer5.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10) 
    18231838        self.sizer5.Layout() 
    1824         self.Layout() 
    1825         self.SetScrollbars(20,20,25,65) 
     1839        #self.Layout() 
     1840        #self.SetScrollbars(20,20,25,65) 
    18261841     
    18271842     
  • sansview/perspectives/fitting/fitpage.py

    r77f6a8b rc99a6c5  
    4444        ## default fitengine type 
    4545        self.engine_type = None 
    46         #self.smearer = None 
    4746        ## draw sizer 
    4847        self._fill_datainfo_sizer() 
     
    138137                    item[6].Show(True) 
    139138      
    140  
    141139        self.SetScrollbars(20,20,25,65) 
    142140         
     
    343341                name2=item+".npts" 
    344342                name3=item+".nsigmas" 
     343                if not self.model.details.has_key(name1): 
     344                    self.model.details [name1] = ["",None, None, None]                             
     345 
    345346                iy += 1 
    346347                for p in self.model.dispersion[item].keys():  
     
    365366                        text2.Hide()  
    366367                        ## txtcrtl to add error from fit 
     368                        fit_errs = self.model.details[item][3] 
     369                      
    367370                        ix = 3 
    368371                        ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
     372                        ctl2.SetValue(str(format_number(fit_errs))) 
    369373                        self.sizer4_4.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    370                         ctl2.Hide() 
    371                          
     374                        if fit_errs==None or not numpy.isfinite(fit_errs): 
     375                            ctl2.Hide() 
     376                        else: 
     377                            if not text2.IsShown(): 
     378                                text2.Show(True) 
     379                            ctl2.Show(True) 
    372380                        #Prepare add min and max in model.details.(Maybe Not correct way) 
    373                         if not self.model.details.has_key(name1): 
    374                             self.model.details [name1] = ["",None, None]                             
    375                         param_min, param_max= self.model.details[name1][1:] 
     381                        param_min, param_max= self.model.details[name1][1:3] 
    376382                        ix = 4 
    377383                        ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    378384                                                       kill_focus_callback = self._on_paramRangeEnter, 
    379385                                                       set_focus_callback  = self._on_paramRangeEnter) 
    380                         if param_min ==None: 
     386                        if param_min ==None or not numpy.isfinite(param_min): 
    381387                            ctl3.SetValue("") 
    382388                        else: 
     
    390396                                                       set_focus_callback  = self._on_paramRangeEnter) 
    391397                        self.sizer4_4.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    392                         if param_max==None: 
     398                        if param_max==None or not numpy.isfinite(param_max): 
    393399                            ctl4.SetValue("") 
    394400                        else: 
     
    401407                                           
    402408                        self.fittable_param.append([cb,name1,ctl1,text2, 
    403                                                     ctl2, ctl3, ctl4,None]) 
    404                         #self.parameters.append([cb,name1, ctl1,text2,ctl2, ctl3, ctl4,None]) 
    405                         #self.orientation_params.append([cb,name1, ctl1,text2,ctl2, ctl3, ctl4,None]) 
    406                      
     409                                                    ctl2, ctl3, ctl4,None])                     
    407410                     
    408411                    elif p=="npts": 
     
    441444                name2=item+".npts" 
    442445                name3=item+".nsigmas" 
     446                if not self.model.details.has_key(name1): 
     447                    self.model.details [name1] = ["",None, None, None]                   
    443448                iy += 1 
    444449                for p in self.model.dispersion[item].keys():  
     
    452457                        if self.data.__class__.__name__ =="Data2D": 
    453458                            cb.Show(True) 
    454                         else: 
     459                        elif cb.IsShown(): 
    455460                            cb.Hide() 
    456461                        ix = 1 
     
    461466                        if self.data.__class__.__name__ =="Data2D": 
    462467                            ctl1.Show(True) 
    463                         else: 
     468                        elif ctl1.IsShown(): 
    464469                            ctl1.Hide() 
    465470                        self.sizer4_4.Add(ctl1, (iy,ix),(1,1),wx.EXPAND) 
     
    470475                                          wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    471476                        text2.Hide()  
    472                         ## txtcrtl to add error from fit 
     477                        ## txtcrtl to add error from fit                        
     478                        fit_errs = self.model.details[item][3]                     
    473479                        ix = 3 
    474480                        ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
     481                        ctl2.SetValue(str(format_number(fit_errs))) 
    475482                        self.sizer4_4.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    476                         ctl2.Hide() 
    477                         if self.data.__class__.__name__ =="Data2D": 
    478                             ctl2.Enable() 
     483                        if fit_errs==None or not numpy.isfinite(fit_errs) or self.data.__class__.__name__ !="Data2D": 
     484                            ctl2.Hide() 
    479485                        else: 
    480                             ctl2.Disable() 
     486                            if not text2.IsShown(): 
     487                                text2.Show(True) 
     488                            ctl2.Show(True) 
     489                        #if self.data.__class__.__name__ =="Data2D": 
     490                            #ctl2.Show(True) 
     491                        #elif ctl2.IsShown(): 
     492                            #ctl2.Hide() 
    481493                             
    482                              
    483                         if not self.model.details.has_key(name1): 
    484                             self.model.details [name1] = ["",None, None]                             
    485                  
    486                         param_min, param_max= self.model.details[name1][1:] 
     494                        param_min, param_max= self.model.details[name1][1:3] 
    487495                        ix = 4 
    488496                        ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    489497                                                       kill_focus_callback = self._onparamRangeEnter, 
    490498                                                       set_focus_callback  = self._onparamRangeEnter) 
    491                         if param_min ==None: 
     499                        if param_min ==None or not numpy.isfinite(param_min): 
    492500                            ctl3.SetValue("") 
    493501                        else: 
    494502                            ctl3.SetValue(str(param_min)) 
    495503                        self.sizer4_4.Add(ctl3, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     504 
    496505                        ctl3.Hide() 
    497                         if self.data.__class__.__name__ =="Data2D": 
    498                             ctl3.Enable() 
    499                         else: 
    500                             ctl3.Disable() 
    501506                 
    502507                        ix = 5 
     
    505510                                                       set_focus_callback  = self._onparamRangeEnter) 
    506511                        self.sizer4_4.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    507                         if param_max==None: 
     512                        if param_max==None or not numpy.isfinite(param_max): 
    508513                            ctl4.SetValue("") 
    509514                        else: 
    510515                            ctl4.SetValue(str(param_max)) 
    511516                        ctl4.Hide() 
    512                         if self.data.__class__.__name__ =="Data2D": 
    513                             ctl4.Enable() 
    514                         else: 
    515                             ctl4.Disable() 
     517                        #if self.data.__class__.__name__ =="Data2D": 
     518                            #ctl4.Enable(True) 
     519                        #elif ctl4.Shown(): 
     520                            #ctl4.Hide() 
    516521                         
    517522                        if self.engine_type=="park" and self.data.__class__.__name__ =="Data2D": 
    518523                            ctl3.Show(True) 
    519                             ctl4.Show(True)                             
     524                            ctl3.Enable(True) 
     525                            ctl4.Show(True)  
     526                            ctl4.Enable(True)                            
    520527                             
    521528                             
     
    524531                        self.fittable_param.append([cb,name1,ctl1,text2, 
    525532                                                    ctl2, ctl3, ctl4,None]) 
    526                         #self.parameters.append([cb,name1, ctl1,text2,ctl2, ctl3, ctl4,None]) 
    527                         #self.orientation_params.append([cb,name1,ctl1,text2, ctl2, ctl3, ctl4,None]) 
    528533                        self.orientation_params_disp.append([cb,name1,ctl1,text2, 
    529534                                                    ctl2, ctl3, ctl4,None]) 
     
    565570                            self.orientation_params_disp.append([None,name3, Tctl 
    566571                                                     ,None,None, None, None,None]) 
     572        #Display units text on panel 
     573        for item in self.model.dispersion.keys():    
     574            if self.model.details[item][3]!= None and numpy.isfinite(self.model.details[item][3]): 
     575                if not self.text2_3.IsShown(): 
     576                    self.text2_3.Show() 
     577                break 
     578            else: 
     579                self.text2_3.Hide() 
    567580    
    568581        self.state.disp_cb_dict = copy.deepcopy(self.disp_cb_dict)       
     
    581594        ix =0 
    582595        iy +=1  
    583         #self.sizer4_4.Add((20,20),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15)         
    584596        self.sizer4_4.Layout() 
    585597        self.sizer4.Layout() 
     
    594606        """ 
    595607        from sans.guiframe.utils import check_value 
     608        self.select_param(event =None) 
    596609        flag = check_value( self.qmin, self.qmax)  
    597610                 
     
    606619            return  
    607620         
    608              
     621        #Clear errors if exist from previous fitting 
     622        self._clear_Err_on_Fit()     
    609623 
    610624        # Remove or do not allow fitting on the Q=0 point, especially when y(q=0)=None at x[0]. 
     
    640654        
    641655             
    642         self.btFit.SetFocus()     
    643         self.sizer5.Layout() 
     656        #self.btFit.SetFocus()     
     657        #self.sizer5.Layout() 
    644658        #self.SetScrollbars(20,20,55,40)     
    645659             
     
    670684                                     qmax= float(self.qmax_x))  
    671685            evt = ModelEventbox(model=self.model) 
    672             wx.PostEvent(self.event_owner, evt)    
     686            wx.PostEvent(self.event_owner, evt)   
    673687             
    674688        self.btFit.SetFocus()  
     
    728742        """ 
    729743        tcrtl= event.GetEventObject() 
    730         
     744 
    731745        if check_float(tcrtl): 
    732746            self._onparamEnter_helper() 
     
    735749            if self.enable_smearer.GetValue(): 
    736750                temp_smearer= self.smearer 
    737              
    738751            self.compute_chisqr(smearer= temp_smearer) 
     752 
    739753            ## new state posted 
    740754            if self.state_change: 
     
    794808            reset the state 
    795809        """ 
    796         #if first: 
    797         #    self._undo.Enable(False) 
    798             
     810        import sans.guiframe.gui_manager 
     811         
    799812        self.reset_page_helper(state) 
    800813        evt = ModelEventbox(model=state.model) 
    801         wx.PostEvent(self.event_owner, evt)    
    802              
     814        wx.PostEvent(self.event_owner, evt) 
     815        self.manager._on_change_engine(engine=self.engine_type) 
     816        #Not improving anything yet. 
     817        #self.set_model_param_sizer(model=state.model) 
    803818             
    804819    def get_range(self): 
     
    832847        is_modified = False 
    833848        has_error = False 
    834         self.text2_3.Hide() 
    835849        try: 
    836850            n = self.disp_box.GetCurrentSelection() 
     
    844858            pass 
    845859        #set the panel when fit result are float not list 
    846         if out.__class__==numpy.float64: 
     860        if out.__class__== numpy.float64: 
    847861            self.param_toFit[0][2].SetValue(format_number(out)) 
    848862            self.param_toFit[0][2].Refresh() 
     
    860874                except: 
    861875                    pass 
     876 
    862877                if cov[0]==None or  not numpy.isfinite(cov[0]):  
    863878                    self.param_toFit[0][3].Hide() 
    864879                    self.param_toFit[0][4].Clear() 
    865                     self.param_toFit[0][4].Hide() 
     880                    #self.param_toFit[0][4].Hide() 
    866881                    self.param_toFit[0][4].Refresh() 
    867882                else: 
     
    874889            i=0 
    875890            j=0 
     891            k=0 
     892             
     893            if self.text2_3.IsShown(): 
     894                self.text2_3.Hide() 
     895                 
    876896            #Set the panel when fit result are list 
    877             for item in self.param_toFit: 
     897            for item in self.param_toFit:                
    878898                ## reset error value to initial state 
    879                 item[4].Clear() 
    880                 item[4].Hide() 
    881                 item[4].Refresh() 
     899                if item[3].IsShown(): 
     900                    item[3].Hide() 
     901                if item[4].IsShown(): 
     902                    item[4].Hide() 
     903        
    882904                if( out != None ) and len(out)<=len(self.param_toFit)and i < len(out): 
    883905                    item[2].SetValue(format_number(self.model.getParam(item[1]))) 
    884906                    item[2].Refresh() 
    885                 if(cov !=None)and len(cov)<=len(self.param_toFit)and i < len(cov): 
    886                     self.text2_3.Show(True)  
     907 
     908                if(cov !=None)  and len(cov)<=len(self.param_toFit)and i < len(cov): 
    887909                    try: 
    888910                        name= dispersity.__name__ 
     
    892914                                    self.text_disp_1.Show(True) 
    893915                    except: 
    894                         pass 
    895                     item[3].Show(True) 
    896                     item[4].Clear() 
     916                        pass                    
    897917                    for j in range(len(out)): 
    898918                        if out[j]==self.model.getParam(item[1]): 
     919                             
    899920                            break 
    900                     ## unable to compare cov[j]==numpy.nan so switch to None 
    901                     if cov[j]==None or not numpy.isfinite(cov[j]): 
    902                         item[3].Hide() 
     921                        ## unable to compare cov[j]==numpy.nan so switch to None 
     922                    #Save errors to model.details[item][3] 
     923                    self.model.details[item[1]][3] = cov[i] 
     924                                        
     925                     
     926                    if cov[i]==None or not numpy.isfinite(cov[i]): 
     927 
     928                        if item[3].IsShown: 
     929                            item[3].Hide() 
     930                        if item[4].IsShown: 
     931                            item[4].Hide()            
     932                        #k += 1 
     933     
     934 
     935                    else: 
     936                        k += 1 
     937                        item[3].Show(True) 
     938                        item[3].Refresh() 
     939                        item[4].Show(True) 
     940                        item[4].SetValue(format_number(cov[i])) 
    903941                        item[4].Refresh() 
    904                         item[4].Clear() 
    905                         item[4].Hide() 
    906                     else: 
    907                         item[4].SetValue(format_number(cov[j])) 
    908                         item[4].Refresh() 
    909                         item[4].Show(True)    
    910                 i+=1 
    911          
    912         self.sizer3.Layout() 
    913         self.sizer4.Layout() 
     942                     
     943  
     944                i+=1   
     945        #Show error title when any errors displayed 
     946        if k != 0: # len(self.param_toFit): 
     947            if not self.text2_3.IsShown(): 
     948                self.text2_3.Show(True)                             
     949 
     950        self.text2_3.Refresh()              
    914951        self.Layout() 
    915         self.Refresh() 
    916         self.SetScrollbars(20,20,25,65) 
    917952         
    918953         
     
    960995            
    961996            self.sizer5.Layout() 
    962             self.Layout() 
    963             self.Refresh 
    964             ## post state to fit panel 
    965997            self.state.tcChi =output 
    966998           
     
    10931125                    item[0].SetValue(False) 
    10941126                self.param_toFit=[] 
    1095                  
    1096         #self._copy_parameters_state(self.orientation_params, 
    1097         #                             self.state.orientation_params) 
    1098         #self._copy_parameters_state(self.orientation_params_disp, 
    1099         #                            self.state.orientation_params_disp) 
    1100         #self._copy_parameters_state(self.parameters, self.state.parameters) 
    1101         #self._copy_parameters_state(self.fittable_param, self.state.fittable_param) 
    1102         #self._copy_parameters_state(self.fixed_param, self.state.fixed_param) 
    11031127            
    11041128        self.save_current_state_fit()   
     
    11401164        else: 
    11411165            self.cb1.SetValue(False) 
    1142         ## save current state of the page 
    1143         #self.state.cb1 = self.cb1.GetValue() 
    1144         #self._copy_parameters_state(self.orientation_params, 
    1145         #                             self.state.orientation_params) 
    1146         #self._copy_parameters_state(self.orientation_params_disp, 
    1147         #                             self.state.orientation_params_disp) 
    1148         #self._copy_parameters_state(self.parameters, self.state.parameters) 
    1149         #self._copy_parameters_state(self.fittable_param, self.state.fittable_param) 
    1150         #self._copy_parameters_state(self.fixed_param, self.state.fixed_param) 
    1151          
    11521166        self.save_current_state_fit() 
    11531167        if event !=None: 
     
    11791193        if self.engine_type==None and self.manager !=None: 
    11801194            self.engine_type= self.manager._return_engine_type() 
     1195 
    11811196             
    11821197        box_description= wx.StaticBox(self, -1,str("Model Parameters")) 
     
    12301245        for item in keys: 
    12311246            if not item in self.disp_list and not item in self.model.orientation_params: 
    1232                 
     1247                ##prepare a spot for error 
     1248                if len(self.model.details[item])<4: 
     1249                    self.model.details[item].append(numpy.nan)                 
    12331250                iy += 1 
    12341251                ix = 0 
     
    12551272                text2.Hide()  
    12561273                ## txtcrtl to add error from fit 
     1274                fit_errs = self.model.details[item][3] 
     1275 
    12571276                ix += 1 
    12581277                ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
     1278 
     1279                 
     1280                ctl2.SetValue(str(format_number(fit_errs))) 
    12591281                sizer.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    1260                 ctl2.Hide() 
     1282                if fit_errs==None or not numpy.isfinite(fit_errs):                    
     1283                    ctl2.Hide() 
     1284                else: 
     1285                    if not self.text2_3.IsShown(): 
     1286                        self.text2_3.Show(True) 
     1287                    if not text2.IsShown(): 
     1288                        text2.Show(True)  
     1289                    ctl2.Show(True) 
    12611290                 
    1262                 param_min, param_max= self.model.details[item][1:] 
     1291                param_min, param_max= self.model.details[item][1:3] 
    12631292                ix += 1 
    12641293                ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    12651294                                               kill_focus_callback = self._on_paramRangeEnter, 
    12661295                                               set_focus_callback  = self._on_paramRangeEnter) 
    1267                 if param_min ==None: 
     1296                if param_min ==None or not numpy.isfinite(param_min): 
    12681297                    ctl3.SetValue("") 
    12691298                else: 
     
    12771306                                               set_focus_callback  = self._on_paramRangeEnter) 
    12781307                sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    1279                 if param_max==None: 
     1308                if param_max==None or not numpy.isfinite(param_max): 
    12801309                    ctl4.SetValue("") 
    12811310                else: 
     
    13241353            for item in self.model.orientation_params: 
    13251354                if not item in self.disp_list: 
     1355                    if len(self.model.details[item])<4: 
     1356                        self.model.details[item].append(numpy.nan)     
    13261357                    iy += 1 
    13271358                    ix = 0 
     
    13321363                    if self.data.__class__.__name__ =="Data2D": 
    13331364                        cb.Show(True) 
    1334                         #cb.Enable() 
    13351365                    else: 
    13361366                        cb.Hide() 
    1337                         #cb.Disable() 
    13381367                    sizer.Add( cb,( iy, ix),(1,1), 
    13391368                                 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 
     
    13481377                    if self.data.__class__.__name__ =="Data2D": 
    13491378                        ctl1.Show(True) 
    1350                         #ctl1.Enable() 
    13511379                    else: 
    13521380                        ctl1.Hide() 
    1353                         #ctl1.Disable() 
    13541381                    sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
    13551382                    ## text to show error sign 
     
    13601387                    text2.Hide()  
    13611388                    ## txtcrtl to add error from fit 
     1389                    fit_errs = self.model.details[item][3] 
    13621390                    ix += 1 
    13631391                    ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=wx.TE_PROCESS_ENTER) 
     1392                    ctl2.SetValue(str(format_number(fit_errs))) 
    13641393                    sizer.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    13651394                    ctl2.Hide() 
    1366                     if self.data.__class__.__name__ =="Data2D": 
    1367                         ctl1.Show(True) 
    1368                         #ctl1.Enable() 
     1395                    if self.data.__class__.__name__ !="Data2D": 
     1396                            ctl2.Hide() 
    13691397                    else: 
    1370                         ctl1.Hide() 
    1371                         #ctl1.Disable() 
    1372                     param_min, param_max= self.model.details[item][1:] 
     1398                        if fit_errs!=None and numpy.isfinite(fit_errs): 
     1399                            if not text2.IsShown(): 
     1400                                text2.Show(True) 
     1401                            ctl2.Show(True) 
     1402                     
     1403                    param_min, param_max= self.model.details[item][1:3] 
    13731404                    ix += 1 
    13741405                    ctl3 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    13751406                                                   kill_focus_callback = self._onparamRangeEnter, 
    13761407                                                   set_focus_callback  = self._onparamRangeEnter) 
    1377                     if param_min ==None: 
     1408                    if param_min ==None or not numpy.isfinite(param_min): 
    13781409                        ctl3.SetValue("") 
    13791410                    else: 
     
    13831414                    if self.data.__class__.__name__ =="Data2D": 
    13841415                        ctl3.Show(True) 
    1385                         #ctl3.Enable() 
     1416                      
    13861417                    else: 
    13871418                        ctl3.Hide() 
    1388                         #ctl3.Disable() 
     1419                 
    13891420                    ix += 1 
    13901421                    ctl4 = BasicPage.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
     
    13921423                                                   set_focus_callback  = self._onparamRangeEnter) 
    13931424                    sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    1394                     if param_max ==None: 
     1425                    if param_max ==None or not numpy.isfinite(param_max): 
    13951426                        ctl4.SetValue("") 
    13961427                    else: 
     
    13991430                    if self.data.__class__.__name__ =="Data2D": 
    14001431                        ctl4.Show(True) 
    1401                         #ctl4.Enable() 
     1432                   
    14021433                    else: 
    14031434                        ctl4.Hide() 
    1404                         #ctl4.Disable() 
     1435                    
    14051436                    if self.engine_type !="park" or self.data.__class__.__name__ !="Data2D":                       
    14061437                        ctl3.Hide() 
     
    14181449                    if self.data.__class__.__name__ =="Data2D": 
    14191450                        units.Show(True) 
    1420                         #units.Enable() 
     1451                     
    14211452                    else: 
    14221453                        units.Hide() 
    1423                         #units.Disable() 
     1454                     
    14241455                    sizer.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    14251456                         
  • sansview/perspectives/fitting/modelpage.py

    racd0bda3 rc99a6c5  
    3131        """ 
    3232        self._fill_model_sizer( self.sizer1)   
    33         self._fill_range_sizer()  
     33        self._fill_range_sizer() 
     34        self.engine_type = None  
    3435          
    3536        description="" 
  • sansview/perspectives/fitting/pagestate.py

    r3b9e023 rc99a6c5  
    1919        #Data used for fitting  
    2020        self.data = data 
     21        #engine type 
     22        self.engine_type = None 
    2123        # flag to allow data2D plot 
    2224        self.enable2D = False 
     
    101103        obj.data = copy.deepcopy(self.data) 
    102104        obj.model_list_box = copy.deepcopy(self.model_list_box) 
     105        obj.engine_type = copy.deepcopy(self.engine_type) 
    103106         
    104107        obj.formfactorcombobox= self.formfactorcombobox 
  • sansview/perspectives/fitting/simfitpage.py

    r17c5868 rc99a6c5  
    22import sys,re,string, wx   
    33import wx.lib.newevent  
    4 from sans.guicomm.events import StatusEvent     
     4from sans.guicomm.events import StatusEvent  
     5    
     6#Control panel width  
     7if sys.platform.count("win32")>0: 
     8    PANEL_WID = 420 
     9else: 
     10    PANEL_WID = 490 
    511 
    612             
     
    6773        self.sizer2 = wx.BoxSizer(wx.VERTICAL) 
    6874        self.sizer3 = wx.BoxSizer(wx.VERTICAL) 
    69         self.sizer1.SetMinSize((375,-1)) 
    70         self.sizer2.SetMinSize((375,-1)) 
    71         self.sizer3.SetMinSize((375,-1)) 
     75 
     76        self.sizer1.SetMinSize((PANEL_WID,-1)) 
     77        self.sizer2.SetMinSize((PANEL_WID,-1)) 
     78        self.sizer3.SetMinSize((PANEL_WID,-1)) 
    7279        self.vbox.Add(self.sizer1) 
    7380        self.vbox.Add(self.sizer2) 
     
    7582         
    7683    def set_scroll(self): 
    77         self.SetScrollbars(20,20,200,100) 
     84        self.SetScrollbars(20,20,25,65) 
    7885        self.Layout()   
    7986          
     
    107114               
    108115                self.sizer2.Layout() 
    109                 self.SetScrollbars(20,20,200,100) 
     116                self.SetScrollbars(20,20,25,65) 
    110117                self.constraints_list.remove(item) 
    111118                self.nb_constraint -= 1 
     
    226233        #------------------------------------------------------ 
    227234        if len(self.page_finder)==0: 
    228             sizer_title.Add(wx.StaticText(self,-1," No fit combination available !")) 
     235            sizer_title.Add(wx.StaticText(self,-1," No fit combinations are found!")) 
    229236        else: 
    230237            ## store model   
     
    253260        self.sizer1.Add(boxsizer1,1, wx.EXPAND | wx.ALL, 10) 
    254261        self.sizer1.Layout() 
    255         self.SetScrollbars(20,20,200,100) 
     262        self.SetScrollbars(20,20,25,65) 
    256263        self.AdjustScrollbars() 
    257264         
     
    302309                self.sizer_constraints.Layout() 
    303310                self.sizer2.Layout() 
    304                 self.SetScrollbars(20,20,200,100) 
     311                self.SetScrollbars(20,20,25,65) 
    305312                return 
    306313             
     
    310317            self.sizer_constraints.Layout() 
    311318            self.sizer2.Layout() 
    312             self.SetScrollbars(20,20,200,100) 
     319            self.SetScrollbars(20,20,25,65) 
    313320            return 
    314321             
     
    357364        self.sizer_constraints.Layout() 
    358365        self.sizer2.Layout() 
    359         self.SetScrollbars(20,20,200,100) 
     366        self.SetScrollbars(20,20,25,65) 
    360367         
    361368    def _hide_constraint(self):  
     
    376383        self.sizer_constraints.Layout()     
    377384        self.sizer2.Layout() 
    378         self.SetScrollbars(20,20,200,100) 
     385        self.SetScrollbars(20,20,25,65) 
    379386        self.AdjustScrollbars()     
    380387                 
     
    404411        
    405412        self.sizer2.Layout() 
    406         self.SetScrollbars(20,20,200,100) 
     413        self.SetScrollbars(20,20,25,65) 
    407414         
    408415         
     
    427434         
    428435        self.sizer2.Layout() 
    429         self.SetScrollbars(20,20,200,100) 
     436        self.SetScrollbars(20,20,25,65) 
    430437         
    431438         
     
    486493        self.sizer3.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10) 
    487494        self.sizer3.Layout() 
    488         self.SetScrollbars(20,20,200,100) 
     495        self.SetScrollbars(20,20,25,65) 
    489496         
    490497    def _fill_sizer_constraint(self): 
     
    539546        self.sizer2.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10) 
    540547        self.sizer2.Layout() 
    541         self.SetScrollbars(20,20,200,100) 
     548        self.SetScrollbars(20,20,25,65) 
    542549         
    543550         
  • sansview/perspectives/fitting/sldPanel.py

    r6c5239c rc99a6c5  
    1414_STATICBOX_WIDTH = 350 
    1515_SCALE = 1e-6 
     16 
     17#SLD panel size  
     18if sys.platform.count("win32")>0: 
     19    _STATICBOX_WIDTH = 350 
     20    PANEL_SIZE = 400 
     21else: 
     22    _STATICBOX_WIDTH = 380 
     23    PANEL_SIZE = 430 
    1624 
    1725class SldPanel(wx.Panel): 
     
    3543            Draw window content 
    3644        """ 
     45        unit_a = '[A]' 
     46        unit_density = '[g/cm^(3)]' 
     47        unit_sld= '[1/A^(2)]' 
     48        unit_cm1='[1/cm]' 
     49        unit_cm='[cm]' 
    3750        sizer_input = wx.GridBagSizer(5,5) 
    3851        sizer_output = wx.GridBagSizer(5,5) 
     
    4659        boxsizer1.SetMinSize((_STATICBOX_WIDTH,-1)) 
    4760         
    48         compound_txt = wx.StaticText(self, -1, 'Compound') 
     61        compound_txt = wx.StaticText(self, -1, 'Compound ') 
    4962        self.compound_ctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,-1)) 
    50         density_txt = wx.StaticText(self, -1, 'Density(g/cm^3)') 
     63        density_txt = wx.StaticText(self, -1, 'Density ') 
    5164        self.density_ctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,-1)) 
    52         wavelength_txt = wx.StaticText(self, -1, 'Wavelength (A)') 
     65        unit_density_txt = wx.StaticText(self, -1, unit_density) 
     66        wavelength_txt = wx.StaticText(self, -1, 'Wavelength ') 
    5367        self.wavelength_ctl = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,-1)) 
    5468        self.wavelength_ctl.SetValue(str(self.wavelength)) 
     69        unit_a_txt = wx.StaticText(self, -1, unit_a) 
    5570        iy = 0 
    5671        ix = 0 
     
    6782        sizer_input.Add(self.density_ctl,(iy, ix),(1,1),\ 
    6883                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
     84        ix +=1 
     85        sizer_input.Add(unit_density_txt,(iy, ix),(1,1),\ 
     86                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    6987        iy += 1 
    7088        ix = 0 
     
    7391        ix +=1 
    7492        sizer_input.Add(self.wavelength_ctl,(iy, ix),(1,1),\ 
     93                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
     94        ix +=1 
     95        sizer_input.Add(unit_a_txt,(iy, ix),(1,1),\ 
    7596                            wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    7697        boxsizer1.Add( sizer_input ) 
     
    81102        boxsizer2.SetMinSize((_STATICBOX_WIDTH,-1)) 
    82103         
    83         unit_a= '[A^(-2)]' 
    84         unit_cm1='[cm^(-1)]' 
    85         unit_cm='[cm]' 
    86104        i_complex= '+ i' 
    87105        neutron_sld_txt = wx.StaticText(self, -1, 'Neutron SLD') 
     
    92110        self.neutron_sld_im_ctl.SetEditable(False) 
    93111        self.neutron_sld_im_ctl.SetToolTipString("Neutron SLD imaginary.") 
    94         neutron_sld_units_txt = wx.StaticText(self, -1, unit_a) 
     112        neutron_sld_units_txt = wx.StaticText(self, -1, unit_sld) 
    95113         
    96114        cu_ka_sld_txt = wx.StaticText(self, -1, 'Cu Ka SLD') 
     
    101119        self.cu_ka_sld_im_ctl.SetEditable(False) 
    102120        self.cu_ka_sld_im_ctl.SetToolTipString("Cu Ka SLD imaginary.") 
    103         cu_ka_sld_units_txt = wx.StaticText(self, -1, unit_a) 
     121        cu_ka_sld_units_txt = wx.StaticText(self, -1, unit_sld) 
    104122         
    105123        mo_ka_sld_txt = wx.StaticText(self, -1, 'Mo Ka SLD') 
     
    110128        self.mo_ka_sld_im_ctl.SetEditable(False) 
    111129        self.mo_ka_sld_im_ctl.SetToolTipString("Mo Ka SLD reel.") 
    112         mo_ka_sld_units_txt = wx.StaticText(self, -1, unit_a) 
     130        mo_ka_sld_units_txt = wx.StaticText(self, -1, unit_sld) 
    113131         
    114132        neutron_inc_txt = wx.StaticText(self, -1, 'Neutron Inc. Xs') 
     
    339357class SldWindow(wx.Frame): 
    340358    def __init__(self, parent=None, id=1, title="SLD Calculator",base=None): 
    341         wx.Frame.__init__(self, parent, id, title, size=(400, 400)) 
     359        wx.Frame.__init__(self, parent, id, title, size=( PANEL_SIZE,  PANEL_SIZE)) 
    342360         
    343361        self.panel = SldPanel(self, base=base) 
Note: See TracChangeset for help on using the changeset viewer.