Changeset 51a71a3 in sasview


Ignore:
Timestamp:
Apr 14, 2010 12:29:30 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:
6318298
Parents:
c5874f2
Message:

added masking feature for 2D

Location:
sansview/perspectives/fitting
Files:
3 edited

Legend:

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

    rda3f24c r51a71a3  
    10021002             use : _check_value_enter  
    10031003        """ 
    1004         # Flag to register when a parameter has changed.       
     1004        # Flag to register when a parameter has changed.    
    10051005        is_modified = False 
     1006        self.fitrange =True 
     1007        is_2Ddata = False 
    10061008        #self._undo.Enable(True) 
     1009        # check if 2d data 
     1010        if self.data.__class__.__name__ !="Data1D": 
     1011            is_2Ddata = True 
    10071012        if self.model !=None: 
    10081013            try: 
     
    10261031                    self.qmax_x = tempmax 
    10271032                    is_modified = True 
    1028                 self.fitrange = True 
     1033             
     1034                if is_2Ddata: 
     1035                    # set mask    
     1036                    is_modified = self._validate_Npts() 
     1037 
    10291038            else: 
    1030                 self.fitrange = False 
    1031             if self.npts != None: 
    1032                 if check_float(self.npts): 
    1033                     temp_npts = float(self.npts.GetValue()) 
    1034                     if temp_npts !=  self.num_points: 
    1035                         self.num_points = temp_npts 
    1036                         is_modified = True 
    1037                 else: 
    1038                     msg= "Cannot Plot :Must enter a number!!!  " 
    1039                     wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
    1040                  
    1041              
     1039                self.fitrange = False     
     1040 
    10421041            ## if any value is modify draw model with new value 
    1043             if is_modified: 
     1042            if not self.fitrange: 
     1043                self.btFit.Disable() 
     1044                if is_2Ddata: self.btEditMask.Disable() 
     1045            else: 
     1046                self.btFit.Enable(True) 
     1047                if is_2Ddata: self.btEditMask.Enable(True) 
     1048 
     1049            if is_modified and self.fitrange: 
    10441050                self.state_change= True 
    10451051                self._draw_model()  
     
    10531059        #flag for qmin qmax check values 
    10541060        flag = True 
     1061        self.fitrange = True 
    10551062        is_modified = False 
     1063        is_2Ddata = False 
     1064 
     1065        # check if 2d data 
     1066        if self.data.__class__.__name__ !="Data1D": 
     1067            is_2Ddata = True 
     1068         
    10561069        ##So make sure that update param values on_Fit. 
    10571070        #self._undo.Enable(True) 
     
    10661079            # If qmin and qmax have been modified, update qmin and qmax and  
    10671080            # set the is_modified flag to True 
    1068             if self._validate_qrange(self.qmin, self.qmax): 
     1081            self.fitrange = self._validate_qrange(self.qmin, self.qmax) 
     1082            if self.fitrange: 
    10691083                tempmin = float(self.qmin.GetValue()) 
    10701084                if tempmin != self.qmin_x: 
     
    10851099                        self.manager.set_smearer(smearer=temp_smearer, qmin= float(self.qmin_x), 
    10861100                                                 qmax= float(self.qmax_x)) 
    1087                 elif self.data.__class__.__name__ !="Data2D": 
     1101                elif not is_2Ddata: 
    10881102                    self.manager.set_smearer(smearer=temp_smearer, qmin= float(self.qmin_x), 
    10891103                                                 qmax= float(self.qmax_x)) 
     1104                    index_data = ((self.qmin_x <= self.data.x)&(self.data.x <= self.qmax_x)) 
     1105                    self.Npts_fit.SetValue(str(len(self.data.x[index_data==True]))) 
     1106                    flag = True 
     1107                if is_2Ddata: 
     1108                    # only 2D case set mask    
     1109                    flag = self._validate_Npts() 
     1110                    if not flag: 
     1111                        return flag 
    10901112            else: flag = False 
    10911113        else:  
    10921114            flag = False 
     1115 
     1116        #For invalid q range, disable the mask editor and fit button, vs.     
     1117        if not self.fitrange: 
     1118            self.btFit.Disable() 
     1119            self.btEditMask.Disable() 
     1120        else: 
     1121            self.btFit.Enable(True) 
     1122            self.btEditMask.Enable(True) 
     1123 
    10931124         
    10941125        if not flag: 
    1095             msg= "Cannot Fit :Must select a model or Fitting range is not valid!!!  " 
     1126            msg= "Cannot Plot or Fit :Must select a model or Fitting range is not valid!!!  " 
    10961127            wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
    1097              
     1128         
    10981129        self.save_current_state() 
     1130             
    10991131        return flag                            
    11001132                
     
    15971629            self.structurebox.Enable() 
    15981630            self.text2.Enable() 
    1599         if self.data.__class__.__name__ =="Data2D": 
     1631        if self.data.__class__.__name__ !="Data1D": 
    16001632            self.smear_description_2d.Show(True) 
    16011633             
     
    16521684                return False 
    16531685        return True 
    1654  
     1686     
     1687    def _validate_Npts(self):   
     1688        """ 
     1689            Validate the number of points for fitting is more than 10 points. 
     1690            If valid, setvalues Npts_fit otherwise post msg. 
     1691        """ 
     1692        #default flag 
     1693        flag = True 
     1694 
     1695        # q value from qx and qy 
     1696        radius= numpy.sqrt( self.data.qx_data*self.data.qx_data + self.data.qy_data*self.data.qy_data ) 
     1697        #get unmasked index 
     1698        index_data = (float(self.qmin.GetValue()) <= radius)&(radius<= float(self.qmax.GetValue())) 
     1699        index_data = (index_data)&(self.data.mask)  
     1700        index_data = (index_data)&(numpy.isfinite(self.data.data)) 
     1701 
     1702        if len(index_data[index_data]) < 10: 
     1703            # change the color pink. 
     1704            self.qmin.SetBackgroundColour("pink") 
     1705            self.qmin.Refresh() 
     1706            self.qmax.SetBackgroundColour("pink") 
     1707            self.qmax.Refresh() 
     1708            msg= "Cannot Plot :No or too little npts in that data range!!!  " 
     1709            wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
     1710            self.fitrange = False 
     1711            flag = False 
     1712        else: 
     1713            self.Npts_fit.SetValue(str(len(self.data.mask[index_data==True]))) 
     1714            self.fitrange = True 
     1715             
     1716        return flag 
     1717     
    16551718    def _check_value_enter(self, list, modified): 
    16561719        """ 
     
    16641727        for item in list: 
    16651728            #skip angle parameters for 1D 
    1666             if self.data.__class__.__name__ !="Data2D": 
     1729            if self.data.__class__.__name__ !="Data1D": 
    16671730                if item in self.orientation_params: 
    16681731                    continue 
     
    19301993                self.disp_cb_dict[p] = wx.RadioButton(self, -1, p, (10, 10)) 
    19311994                self.state.disp_cb_dict[p]=  self.disp_cb_dict[p].GetValue() 
    1932                 if not (self.enable2D or self.data.__class__.__name__ =="Data2D"): 
     1995                if not (self.enable2D or self.data.__class__.__name__ !="Data1D"): 
    19331996                    self.disp_cb_dict[p].Hide() 
    19341997                else: 
     
    19742037            Fill the Q range sizer 
    19752038        """ 
     2039        #2D data? default 
     2040        is_2Ddata = False 
     2041         
     2042        #check if it is 2D data 
     2043        if self.data.__class__.__name__ != 'Data1D': 
     2044            is_2Ddata = True 
     2045             
    19762046        self.sizer5.Clear(True) 
    19772047        #-------------------------------------------------------------- 
     
    19942064         
    19952065        id = wx.NewId() 
    1996         self.reset_qrange =wx.Button(self,id,'Reset',size=(70,23)) 
     2066        self.reset_qrange =wx.Button(self,id,'Reset',size=(77,20)) 
    19972067       
    19982068        self.reset_qrange.Bind(wx.EVT_BUTTON, self.on_reset_clicked,id=id) 
     
    20002070      
    20012071        sizer_horizontal=wx.BoxSizer(wx.HORIZONTAL) 
    2002         sizer= wx.GridSizer(3, 3,2, 5) 
    2003          
     2072        sizer= wx.GridSizer(2, 4,2, 6) 
     2073 
     2074        self.btEditMask = wx.Button(self,wx.NewId(),'Editor', size=(88,23)) 
     2075        self.btEditMask.Bind(wx.EVT_BUTTON, self._onMask,id= self.btEditMask.GetId()) 
     2076        self.btEditMask.SetToolTipString("Edit Mask.") 
     2077        self.EditMask_title = wx.StaticText(self, -1, ' Masking(2D)') 
     2078 
    20042079        sizer.Add(wx.StaticText(self, -1, '    Q range'))      
    2005         sizer.Add(wx.StaticText(self, -1, ' Min')) 
    2006         sizer.Add(wx.StaticText(self, -1, ' Max')) 
     2080        sizer.Add(wx.StaticText(self, -1, ' Min[1/A]')) 
     2081        sizer.Add(wx.StaticText(self, -1, ' Max[1/A]')) 
     2082        sizer.Add(self.EditMask_title) 
    20072083        sizer.Add(self.reset_qrange)    
    2008               
     2084         
    20092085        sizer.Add(self.qmin) 
    20102086        sizer.Add(self.qmax) 
    2011         sizer_horizontal.Add(sizer) 
     2087        sizer.Add(self.btEditMask) 
     2088        
     2089        if object1!=None: 
     2090             
     2091            boxsizer1.Add(object1)  
     2092            boxsizer1.Add((10,10)) 
     2093        boxsizer1.Add(sizer) 
    20122094        if object!=None: 
    2013             sizer_horizontal.Add(object) 
    2014          
    2015         if object1!=None: 
    2016            boxsizer1.Add(object1)  
    2017            boxsizer1.Add((10,10)) 
    2018         boxsizer1.Add(sizer_horizontal) 
     2095            boxsizer1.Add((10,15)) 
     2096            boxsizer1.Add(object) 
     2097        if not is_2Ddata: 
     2098            self.btEditMask.Disable()   
     2099            self.EditMask_title.Disable()    
    20192100        ## save state 
    20202101        self.save_current_state() 
     
    20772158            return 
    20782159        ##For 3 different cases: Data2D, Data1D, and theory 
    2079         if self.data.__class__.__name__ == "Data2D": 
     2160        if self.data.__class__.__name__ != "Data1D": 
    20802161            data_min= 0 
    20812162            x= max(math.fabs(self.data.xmin), math.fabs(self.data.xmax))  
     
    21052186            msg= "Cannot Plot :Must enter a number!!!  " 
    21062187            wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
     2188        else: 
     2189            # set relative text ctrs. 
     2190            self.qmin.SetValue(str(self.qmin_x)) 
     2191            self.qmax.SetValue(str(self.qmax_x)) 
     2192            self.set_npts2fit() 
     2193            # At this point, some button and variables satatus (disabled?) should be checked  
     2194            # such as color that should be reset to white in case that it was pink. 
     2195            self._onparamEnter_helper() 
     2196 
    21072197             
    21082198        self.save_current_state() 
  • sansview/perspectives/fitting/fitpage.py

    r6747217 r51a71a3  
    1212from sans.guicomm.events import StatusEvent    
    1313from sans.guiframe.utils import format_number,check_float 
     14#from sans.guiframe.local_perspectives.plotting.Masking import ModelPanel2D as panel2D 
    1415 
    1516## event to post model to fit to fitting plugins 
     
    4445            Initialization of the Panel 
    4546        """ 
    46         ## fit page does not content npts txtcrtl 
     47        ## total number of point: float 
    4748        self.npts=None 
    4849        ## thread for compute Chisqr 
     
    7778            if self.smearer ==None: 
    7879                self.enable_smearer.Disable() 
    79                 #self.disable_smearer.Disable() 
     80            if self.data.__class__.__name__ =="Data2D": 
     81                if self.model != None: 
     82                    self.smear_description_2d.Show(True) 
     83                    self.npts = len(self.data.data) 
     84            else: 
     85                self.npts = len(self.data.x) 
     86                 
    8087 
    8188        self.disp_cb_dict = {} 
     
    169176            add  access to npts 
    170177        """ 
     178        is_2Ddata = False 
     179         
     180        # Check if data is 2D 
     181        if self.data.__class__.__name__ != 'Data1D': 
     182            is_2Ddata = True 
     183             
    171184        title = "Fitting" 
    172185        #smear messages & titles 
     
    180193        smear_message_slit_height_title = "Slit height[1/A]:" 
    181194        smear_message_slit_width_title = "Slit width[1/A]:" 
     195        #Fit button 
     196        self.btFit = wx.Button(self,wx.NewId(),'Fit', size=(88,25)) 
     197        self.btFit.Bind(wx.EVT_BUTTON, self._onFit,id= self.btFit.GetId()) 
     198        self.btFit.SetToolTipString("Start fitting.") 
    182199         
    183200        self._get_smear_info() 
    184  
     201         
     202        #Sizers 
    185203        box_description_range = wx.StaticBox(self, -1,str(title)) 
    186         boxsizer_range = wx.StaticBoxSizer(box_description_range, wx.VERTICAL) 
    187  
    188         sizer_fit = wx.GridSizer(1, 1,0, 0) 
    189      
    190         self.btFit = wx.Button(self,wx.NewId(),'Fit', size=(80,23)) 
    191         self.btFit.Bind(wx.EVT_BUTTON, self._onFit,id= self.btFit.GetId()) 
    192         self.btFit.SetToolTipString("Perform fit.") 
    193        
    194          
    195  
     204        boxsizer_range = wx.StaticBoxSizer(box_description_range, wx.VERTICAL)       
    196205        self.sizer_set_smearer = wx.BoxSizer(wx.VERTICAL) 
    197206        sizer_smearer = wx.BoxSizer(wx.HORIZONTAL) 
     
    247256        sizer_smearer.Add((10,10))        
    248257         
    249         # static box for chi2 
    250         box_description= wx.StaticBox(self, -1,'Chi2/dof') 
    251         boxsizer1 = wx.StaticBoxSizer(box_description, wx.VERTICAL) 
    252         boxsizer1.SetMinSize((70,40)) 
    253          
    254          
    255          
    256         # StaticText for chi2 and smear 
    257         self.tcChi    =  wx.StaticText(self, -1, "-", style=wx.ALIGN_LEFT) 
     258        # StaticText for chi2, N(for fitting), Npts 
     259        self.tcChi    =  BGTextCtrl(self, -1, "-", size=(75,20), style=0) 
     260        self.tcChi.SetToolTipString("Chi2/Npts") 
     261        self.Npts_fit    =  BGTextCtrl(self, -1, "-", size=(75,20), style=0) 
     262        self.Npts_fit.SetToolTipString(" Npts : number of points selected for fitting") 
     263        self.Npts_total  =  BGTextCtrl(self, -1, "-", size=(75,20), style=0) 
     264        self.Npts_total.SetValue(str(self.npts)) 
     265        self.Npts_total.SetToolTipString(" Total Npts : total number of data points") 
     266        box_description_1= wx.StaticText(self, -1,'    Chi2/Npts') 
     267        box_description_2= wx.StaticText(self, -1,'  Npts') 
     268        box_description_3= wx.StaticText(self, -1,'  Total Npts') 
     269        box_description_4= wx.StaticText(self, -1,' ') 
     270         
     271        sizer_fit = wx.GridSizer(2, 4,2,6) 
     272        sizer_fit.Add(box_description_1,0,0) 
     273        sizer_fit.Add(box_description_2,0,0) 
     274        sizer_fit.Add(box_description_3,0,0)        
     275        sizer_fit.Add(box_description_4,0,0) 
     276        sizer_fit.Add(self.tcChi,0,0) 
     277        sizer_fit.Add(self.Npts_fit ,0,0) 
     278        sizer_fit.Add(self.Npts_total,0,0) 
     279        sizer_fit.Add(self.btFit,0,0)  
     280 
     281        # StaticText for smear 
     282        #self.tcChi    =  wx.StaticText(self, -1, "-", style=wx.ALIGN_LEFT) 
    258283        self.smear_description_none    =  wx.StaticText(self, -1, smear_message_none , style=wx.ALIGN_LEFT) 
    259284        self.smear_description_dqdata    =  wx.StaticText(self, -1, smear_message_dqdata , style=wx.ALIGN_LEFT) 
     
    271296         
    272297        #arrange sizers  
    273         boxsizer1.Add( self.tcChi )   
     298        #boxsizer1.Add( self.tcChi )   
    274299        self.sizer_set_smearer.Add(sizer_smearer ) 
    275300        self.sizer_set_smearer.Add((10,10)) 
     
    297322        self.sizer_set_smearer.Add( self.sizer_new_smear,0, wx.CENTER, 10 ) 
    298323         
    299         # add all to chi2 sizer 
    300          
    301         sizer_smearer_box.Add(self.sizer_set_smearer)  
    302          
     324        # add all to chi2 sizer  
     325        sizer_smearer_box.Add(self.sizer_set_smearer)        
    303326        sizer_chi2.Add(sizer_smearer_box) 
    304327        sizer_chi2.Add((-1,5)) 
    305         self.sizer_set_masking.Add((305,-1)) 
    306         #self.sizer_set_masking.Add(boxsizer1,0, wx.RIGHT, 10) 
    307         sizer_chi2.Add(self.sizer_set_masking ) 
    308            
    309         sizer_fit.Add(boxsizer1,0, wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 63) 
    310         #sizer_fit.Add((-1,1),0, wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 1)  
    311         sizer_fit.Add(self.btFit,0, wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 63)  
    312         sizer_fit.Layout() 
    313         #sizer_smearer_box.Add(sizer_chi2) 
     328 
    314329        # hide all smear messages and textctrl 
    315330        self._hide_all_smear_info() 
     
    320335        # Show only the relevant smear messages, etc 
    321336        if self.current_smearer == None: 
    322             if self.data.__class__.__name__ != 'Data2D': 
     337            if not is_2Ddata: 
    323338                self.smear_description_none.Show(True) 
    324339                self.enable_smearer.Disable()   
     
    329344                self.enable_smearer.Disable()  
    330345        else: self._show_smear_sizer() 
    331    
     346        boxsizer_range.Add(self.sizer_set_masking) 
    332347             
    333348        #Set sizer for Fitting section 
     
    814829            when enter value on panel redraw model according to changed 
    815830        """ 
     831        #default flag 
    816832        flag = False 
     833        self.fitrange = True 
     834        #get event object 
    817835        tcrtl= event.GetEventObject() 
    818836 
     
    822840 
    823841        if check_float(tcrtl): 
    824             flag = self._onparamEnter_helper()                 
    825             temp_smearer = None 
    826             if not self.disable_smearer.GetValue(): 
    827                 temp_smearer= self.current_smearer 
    828                 ## set smearing value whether or not the data contain the smearing info 
    829                 if self.slit_smearer.GetValue(): 
    830                     flag1 = self.update_slit_smear() 
    831                     flag = flag or flag1 
    832                 elif self.pinhole_smearer.GetValue(): 
    833                     flag1 = self.update_pinhole_smear() 
    834                     flag = flag or flag1 
    835             elif self.data.__class__.__name__ !="Data2D": 
    836                 self.manager.set_smearer(smearer=temp_smearer, qmin= float(self.qmin_x), 
    837                                                          qmax= float(self.qmax_x))  
    838             if flag:    
    839                 self.compute_chisqr(smearer= temp_smearer) 
    840      
    841                 ## new state posted 
    842                 if self.state_change: 
    843                     #self._undo.Enable(True) 
    844                     event = PageInfoEvent(page = self) 
    845                     wx.PostEvent(self.parent, event) 
    846                 self.state_change= False            
     842            flag = self._onparamEnter_helper()   
     843            if self.fitrange:              
     844                temp_smearer = None 
     845                if not self.disable_smearer.GetValue(): 
     846                    temp_smearer= self.current_smearer 
     847                    ## set smearing value whether or not the data contain the smearing info 
     848                    if self.slit_smearer.GetValue(): 
     849                        flag1 = self.update_slit_smear() 
     850                        flag = flag or flag1 
     851                    elif self.pinhole_smearer.GetValue(): 
     852                        flag1 = self.update_pinhole_smear() 
     853                        flag = flag or flag1 
     854                elif self.data.__class__.__name__ !="Data2D": 
     855                    self.manager.set_smearer(smearer=temp_smearer, qmin= float(self.qmin_x), 
     856                                                             qmax= float(self.qmax_x))  
     857                if flag:    
     858                    self.compute_chisqr(smearer= temp_smearer) 
     859         
     860                    ## new state posted 
     861                    if self.state_change: 
     862                        #self._undo.Enable(True) 
     863                        event = PageInfoEvent(page = self) 
     864                        wx.PostEvent(self.parent, event) 
     865                    self.state_change= False  
     866            else:  
     867                return    # invalid fit range: do nothing here: msg already displayed in validate     
    847868        else: 
    848869            self.save_current_state() 
     
    923944                return  
    924945            #Check if # of points for theory model are valid(>0). 
    925             if self.npts != None: 
    926                 if check_float(self.npts): 
    927                     temp_npts = float(self.npts.GetValue()) 
    928                     if temp_npts !=  self.num_points: 
    929                         self.num_points = temp_npts 
    930                         is_modified = True 
     946            # check for 2d 
     947            if self.data.__class__.__name__ =="Data2D": 
     948                # set mask    
     949                radius= numpy.sqrt( self.data.qx_data*self.data.qx_data + self.data.qy_data*self.data.qy_data ) 
     950                index_data = ((self.qmin <= radius)&(radius<= self.qmax)) 
     951                index_data = (index_data)&(self.data.mask) 
     952                index_data = (index_data)&(numpy.isfinite(self.data.data)) 
     953                if len(index_data[index_data]) < 10: 
     954                    msg= "Cannot Plot :No or too little npts in that data range!!!  " 
     955                    wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
     956                    return 
    931957                else: 
    932                     msg= "Cannot Plot :No npts in that Qrange!!!  " 
    933                     wx.PostEvent(self.parent.parent, StatusEvent(status = msg )) 
     958                    self.data.mask = index_data 
     959                    self.Npts_fit.Setvalue(str(len(self.data.mask))) 
     960            else: 
     961                index_data = ((self.qmin <= self.data.x)&(self.data.x <= self.qmax)) 
     962                self.Npts_fit.SetValue(str(len(self.data.x[index_data]))) 
    934963            
    935964        else: 
     
    945974        self.state_change= False 
    946975        self._draw_model() 
    947          
     976        return 
    948977    def _clear_Err_on_Fit(self): 
    949978        """ 
     
    10861115        self.smear_message_new_s.Hide() 
    10871116     
     1117    def _onMask(self, event):      
     1118        """ 
     1119            Build a panel to allow to edit Mask 
     1120        """ 
     1121         
     1122        from sans.guiframe.local_perspectives.plotting.masking import MaskPanel as MaskDialog 
     1123         
     1124        self.panel = MaskDialog(self, data=self.data,id =-1 ) 
     1125        self.panel.Bind(wx.EVT_CLOSE, self._draw_masked_model) 
     1126        self.panel.ShowModal() 
     1127        #wx.PostEvent(self.parent, event) 
     1128         
     1129    def _draw_masked_model(self,event): 
     1130        event.Skip() 
     1131 
     1132        is_valid_qrange = self._update_paramv_on_fit() 
     1133        if is_valid_qrange: 
     1134            self._draw_model() 
     1135            self.panel.Destroy() # frame 
     1136            self.set_npts2fit() 
     1137        else: 
     1138            msg = ' Please consider your Q range.' 
     1139            self.panel.ShowMessage(msg) 
    10881140         
    10891141    def set_data(self, data): 
     
    10921144        """ 
    10931145        self.data = data 
     1146 
     1147         
    10941148        if self.data is None: 
    10951149            data_min = "" 
     
    11051159            else: 
    11061160                self.enable_smearer.Enable() 
    1107  
     1161             
    11081162            # more disables for 2D 
    11091163            if self.data.__class__.__name__ =="Data2D": 
     
    11131167                self.pinhole_smearer.Disable() 
    11141168                self.slit_smearer.Disable() 
     1169                self.default_mask = copy.deepcopy(self.data.mask) 
    11151170                 
    11161171                 
     
    11241179                # Maximum value of data   
    11251180                data_max = max(self.data.x) 
     1181                #number of total data points 
     1182                self.Npts_total.SetValue(str(len(self.data.x))) 
     1183                #default:number of data points selected to fit 
     1184                self.Npts_fit.SetValue(str(len(self.data.x))) 
    11261185            else: 
    11271186                ## Minimum value of data  
     
    11311190                ## Maximum value of data   
    11321191                data_max = math.sqrt(x*x + y*y) 
    1133          
     1192                #number of total data points 
     1193                self.Npts_total.SetValue(str(len(self.data.data))) 
     1194                #default:number of data points selected to fit 
     1195                self.Npts_fit.SetValue(str(len(self.data.data))) 
     1196             
    11341197        self.dataSource.SetValue(data_name) 
    11351198        self.qmin_x = data_min 
     
    11771240        npts2fit = 0 
    11781241        qmin,qmax = self.get_range() 
    1179         if self.data.__class__.__name__ =="Data2D": 
    1180             npts2fit = len(self.data.data[self.mask]) 
     1242        if self.data.__class__.__name__ =="Data2D":  
     1243            radius= numpy.sqrt( self.data.qx_data*self.data.qx_data + self.data.qy_data*self.data.qy_data ) 
     1244            index_data = (self.qmin_x <= radius)&(radius<= self.qmax_x) 
     1245            index_data= (index_data)&(self.data.mask) 
     1246            index_data = (index_data)&(numpy.isfinite(self.data.data)) 
     1247            npts2fit = len(self.data.data[index_data]) 
    11811248        else: 
    11821249            for qx in self.data.x: 
     
    11851252        return npts2fit 
    11861253 
    1187  
     1254    def set_npts2fit(self): 
     1255        """ 
     1256            setValue Npts for fitting  
     1257        """ 
     1258        self.Npts_fit.SetValue(str(self.get_npts2fit())) 
     1259         
     1260         
    11881261    def get_chi2(self): 
    11891262        """ 
  • sansview/perspectives/fitting/model_thread.py

    r43e685d r51a71a3  
    8181        # so that must be mulitified by sqrt(2) to get actual max for 2d 
    8282        index_model = ((self.qmin <= radius)&(radius<= self.qmax)) 
    83         self.mask = (index_model)&(self.mask) 
    84         self.mask = (self.mask)&(numpy.isfinite(self.I_data)) 
     83        index_model = (index_model)&(self.mask) 
     84        index_model = (index_model)&(numpy.isfinite(self.I_data)) 
    8585        if self.data ==None: 
    8686            # Only qmin value will be consider for the detector 
    87             self.mask = index_data   
     87            index_model = index_data   
    8888              
    89         value = self.model.evalDistribution([self.qx_data[self.mask],self.qy_data[self.mask]] ) 
     89        value = self.model.evalDistribution([self.qx_data[index_model],self.qy_data[index_model]] ) 
    9090 
    91         output = numpy.zeros(len(self.mask)) 
     91        output = numpy.zeros(len(self.qx_data)) 
    9292         
    9393        # output default is None 
     
    9595        output = output/output 
    9696        # set value for self.mask==True, else still None to Plottools 
    97         output[self.mask] = value  
    98  
     97        output[index_model] = value  
    9998        elapsed = time.time()-self.starttime 
    10099        self.complete( image = output, 
Note: See TracChangeset for help on using the changeset viewer.