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

File:
1 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() 
Note: See TracChangeset for help on using the changeset viewer.