Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/fitting/fitpage.py

    r1a8e13f0 rd85f1d8a  
    2929_BOX_WIDTH = 76 
    3030_DATA_BOX_WIDTH = 300 
    31 SMEAR_SIZE_L = 0.00 
    3231SMEAR_SIZE_H = 0.00 
    33  
     32CUSTOM_MODEL = 'Plugin Models' 
    3433 
    3534class FitPage(BasicPage): 
     
    164163        On_select_data 
    165164        """ 
    166         if event is None and self.dataSource.GetCount() > 0: 
    167             data = self.dataSource.GetClientData(0) 
    168             self.set_data(data) 
    169         elif self.dataSource.GetCount() > 0: 
    170             pos = self.dataSource.GetSelection() 
     165        if self.dataSource.GetCount() > 0: 
     166            pos = self.dataSource.GetSelection() if event is not None else 0 
    171167            data = self.dataSource.GetClientData(pos) 
    172168            self.set_data(data) 
     
    213209              "Please enter only the value of interest to customize smearing..." 
    214210        smear_message_new_psmear = \ 
    215               "Please enter both; the dQ will be generated by interpolation..." 
     211              "Please enter a fixed percentage to be applied to all Q values..." 
    216212        smear_message_2d_x_title = "<dQp>[1/A]:" 
    217213        smear_message_2d_y_title = "<dQs>[1/A]:" 
    218         smear_message_pinhole_min_title = "dQ_low[1/A]:" 
    219         smear_message_pinhole_max_title = "dQ_high[1/A]:" 
     214        smear_message_pinhole_percent_title = "dQ[%]:" 
    220215        smear_message_slit_height_title = "Slit height[1/A]:" 
    221216        smear_message_slit_width_title = "Slit width[1/A]:" 
     
    256251        self.Bind(wx.EVT_RADIOBUTTON, self.onWeighting, 
    257252                  id=self.dI_idata.GetId()) 
    258         self.dI_didata.SetValue(True) 
     253        self.dI_noweight.SetValue(True) 
    259254        # add 4 types of weighting to the sizer 
    260255        sizer_weighting.Add(self.dI_noweight, 0, wx.LEFT, 10) 
     
    266261        sizer_weighting.Add(self.dI_idata) 
    267262        sizer_weighting.Add((10, 10)) 
    268         self.dI_noweight.Enable(False) 
     263        self.dI_noweight.Enable(True) 
    269264        self.dI_didata.Enable(False) 
    270265        self.dI_sqrdata.Enable(False) 
     
    310305         
    311306        # textcntrl for custom resolution 
    312         self.smear_pinhole_max = ModelTextCtrl(self, wx.ID_ANY, 
    313                             size=(_BOX_WIDTH - 25, 20), 
    314                             style=wx.TE_PROCESS_ENTER, 
    315                             text_enter_callback=self.onPinholeSmear) 
    316         self.smear_pinhole_min = ModelTextCtrl(self, wx.ID_ANY, 
    317                             size=(_BOX_WIDTH - 25, 20), 
    318                             style=wx.TE_PROCESS_ENTER, 
    319                             text_enter_callback=self.onPinholeSmear) 
     307        self.smear_pinhole_percent = ModelTextCtrl(self, wx.ID_ANY, 
     308                                                   size=(_BOX_WIDTH - 25, 20), 
     309                                                   style=wx.TE_PROCESS_ENTER, 
     310                                                   text_enter_callback= 
     311                                                   self.onPinholeSmear) 
    320312        self.smear_slit_height = ModelTextCtrl(self, wx.ID_ANY, 
    321313                            size=(_BOX_WIDTH - 25, 20), 
     
    336328 
    337329        # set default values for smear 
    338         self.smear_pinhole_max.SetValue(str(self.dx_max)) 
    339         self.smear_pinhole_min.SetValue(str(self.dx_min)) 
     330        self.smear_pinhole_percent.SetValue(str(self.dx_percent)) 
    340331        self.smear_slit_height.SetValue(str(self.dxl)) 
    341332        self.smear_slit_width.SetValue(str(self.dxw)) 
     
    362353        self.Bind(wx.EVT_RADIOBUTTON, self.onSlitSmear, 
    363354                  id=self.slit_smearer.GetId()) 
    364         self.enable_smearer.SetValue(True) 
     355        self.disable_smearer.SetValue(True) 
    365356 
    366357        sizer_smearer.Add(self.disable_smearer, 0, wx.LEFT, 10) 
     
    429420        self.smear_description_2d_y.SetToolTipString( 
    430421                                    " dQs(perpendicular) in q_phi direction.") 
    431         self.smear_description_pin_min = wx.StaticText(self, wx.ID_ANY, 
    432                         smear_message_pinhole_min_title, style=wx.ALIGN_LEFT) 
    433         self.smear_description_pin_max = wx.StaticText(self, wx.ID_ANY, 
    434                         smear_message_pinhole_max_title, style=wx.ALIGN_LEFT) 
     422        self.smear_description_pin_percent = wx.StaticText(self, wx.ID_ANY, 
     423                                            smear_message_pinhole_percent_title, 
     424                                            style=wx.ALIGN_LEFT) 
    435425        self.smear_description_slit_height = wx.StaticText(self, wx.ID_ANY, 
    436426                        smear_message_slit_height_title, style=wx.ALIGN_LEFT) 
     
    456446        self.sizer_new_smear.Add((15, -1)) 
    457447        self.sizer_new_smear.Add(self.smear_description_2d_x, 0, wx.CENTER, 10) 
    458         self.sizer_new_smear.Add(self.smear_description_pin_min, 
    459                                  0, wx.CENTER, 10) 
    460448        self.sizer_new_smear.Add(self.smear_description_slit_height, 
    461449                                 0, wx.CENTER, 10) 
    462450 
    463         self.sizer_new_smear.Add(self.smear_pinhole_min, 0, wx.CENTER, 10) 
    464451        self.sizer_new_smear.Add(self.smear_slit_height, 0, wx.CENTER, 10) 
    465452        self.sizer_new_smear.Add(self.smear_data_left, 0, wx.CENTER, 10) 
     
    467454        self.sizer_new_smear.Add(self.smear_description_2d_y, 
    468455                                 0, wx.CENTER, 10) 
    469         self.sizer_new_smear.Add(self.smear_description_pin_max, 
     456        self.sizer_new_smear.Add(self.smear_description_pin_percent, 
    470457                                 0, wx.CENTER, 10) 
    471458        self.sizer_new_smear.Add(self.smear_description_slit_width, 
    472459                                 0, wx.CENTER, 10) 
    473460 
    474         self.sizer_new_smear.Add(self.smear_pinhole_max, 0, wx.CENTER, 10) 
     461        self.sizer_new_smear.Add(self.smear_pinhole_percent, 0, wx.CENTER, 10) 
    475462        self.sizer_new_smear.Add(self.smear_slit_width, 0, wx.CENTER, 10) 
    476463        self.sizer_new_smear.Add(self.smear_data_right, 0, wx.CENTER, 10) 
     
    12491236            wx.PostEvent(self.parent, new_event) 
    12501237            # update list of plugins if new plugin is available 
    1251             custom_model = 'Customized Models' 
     1238            custom_model = CUSTOM_MODEL 
    12521239            mod_cat = self.categorybox.GetStringSelection() 
    12531240            if mod_cat == custom_model: 
     
    12711258            if copy_flag: 
    12721259                self.get_paste_params(copy_flag) 
    1273                 wx.CallAfter(self._onDraw, None) 
     1260            wx.CallAfter(self._onDraw, None) 
    12741261 
    12751262        else: 
     
    15841571        if self.dxw is None: 
    15851572            self.dxw = "" 
    1586         if self.dx_min is None: 
    1587             self.dx_min = SMEAR_SIZE_L 
    1588         if self.dx_max is None: 
    1589             self.dx_max = SMEAR_SIZE_H 
     1573        if self.dx_percent is None: 
     1574            self.dx_percent = SMEAR_SIZE_H 
    15901575 
    15911576    def _get_smear_info(self): 
     
    16271612        elif data.dxl is not None or data.dxw is not None: 
    16281613            self.smear_type = "Slit" 
    1629             if data.dxl is not None and not numpy.all(data.dxl, 0): 
     1614            if data.dxl is not None and numpy.all(data.dxl, 0): 
    16301615                self.dq_l = data.dxl[0] 
    1631             if data.dxw is not None and not numpy.all(data.dxw, 0): 
     1616            if data.dxw is not None and numpy.all(data.dxw, 0): 
    16321617                self.dq_r = data.dxw[0] 
    16331618        # return self.smear_type,self.dq_l,self.dq_r 
     
    16491634            self.smear_description_2d_y.Show(True) 
    16501635            if self.pinhole_smearer.GetValue(): 
    1651                 self.smear_pinhole_min.Show(True) 
    1652                 self.smear_pinhole_max.Show(True) 
     1636                self.smear_pinhole_percent.Show(True) 
    16531637        # smear from data 
    16541638        elif self.enable_smearer.GetValue(): 
     
    16611645                    self.smear_description_slit_width.Show(True) 
    16621646                elif self.smear_type == 'Pinhole': 
    1663                     self.smear_description_pin_min.Show(True) 
    1664                     self.smear_description_pin_max.Show(True) 
     1647                    self.smear_description_pin_percent.Show(True) 
    16651648                self.smear_description_smear_type.Show(True) 
    16661649                self.smear_description_type.Show(True) 
     
    16711654            if self.smear_type == 'Pinhole': 
    16721655                self.smear_message_new_p.Show(True) 
    1673                 self.smear_description_pin_min.Show(True) 
    1674                 self.smear_description_pin_max.Show(True) 
    1675  
    1676             self.smear_pinhole_min.Show(True) 
    1677             self.smear_pinhole_max.Show(True) 
     1656                self.smear_description_pin_percent.Show(True) 
     1657 
     1658            self.smear_pinhole_percent.Show(True) 
    16781659        # custom slit smear 
    16791660        elif self.slit_smearer.GetValue(): 
     
    17001681        self.smear_data_left.Hide() 
    17011682        self.smear_data_right.Hide() 
    1702         self.smear_description_pin_min.Hide() 
    1703         self.smear_pinhole_min.Hide() 
    1704         self.smear_description_pin_max.Hide() 
    1705         self.smear_pinhole_max.Hide() 
     1683        self.smear_description_pin_percent.Hide() 
     1684        self.smear_pinhole_percent.Hide() 
    17061685        self.smear_description_slit_height.Hide() 
    17071686        self.smear_slit_height.Hide() 
     
    18291808        if not flag: 
    18301809            self.onSmear(None) 
     1810 
     1811    def _mac_sleep(self, sec=0.2): 
     1812        """ 
     1813        Give sleep to MAC 
     1814        """ 
     1815        if self.is_mac: 
     1816            time.sleep(sec) 
    18311817 
    18321818    def get_view_mode(self): 
     
    19271913 
    19281914            # more disables for 2D 
     1915            di_flag = False 
     1916            dq_flag = False 
    19291917            if self.data.__class__.__name__ == "Data2D" or \ 
    19301918                        self.enable2D: 
     
    19321920                self.pinhole_smearer.Enable(True) 
    19331921                self.default_mask = copy.deepcopy(self.data.mask) 
    1934                 if self.data.err_data is None or\ 
    1935                         numpy.all(err == 1 for err in self.data.err_data) or \ 
    1936                         not numpy.any(self.data.err_data): 
    1937                     self.dI_didata.Enable(False) 
    1938                     self.dI_noweight.SetValue(True) 
    1939                     self.weightbt_string = self.dI_noweight.GetLabelText() 
    1940                 else: 
    1941                     self.dI_didata.Enable(True) 
    1942                     self.dI_didata.SetValue(True) 
    1943                     self.weightbt_string = self.dI_didata.GetLabelText() 
     1922                if self.data.err_data is not None \ 
     1923                        and numpy.any(self.data.err_data): 
     1924                    di_flag = True 
     1925                if self.data.dqx_data is not None \ 
     1926                        and numpy.any(self.data.dqx_data): 
     1927                    dq_flag = True 
    19441928            else: 
    19451929                self.slit_smearer.Enable(True) 
    19461930                self.pinhole_smearer.Enable(True) 
    1947  
    1948                 if self.data.dy is None or\ 
    1949                      numpy.all(self.data.dy == 1) or\ 
    1950                      not numpy.any(self.data.dy): 
    1951                     self.dI_didata.Enable(False) 
    1952                     self.dI_noweight.SetValue(True) 
    1953                     self.weightbt_string = self.dI_noweight.GetLabelText() 
    1954                 else: 
    1955                     self.dI_didata.Enable(True) 
    1956                     self.dI_didata.SetValue(True) 
    1957                     self.weightbt_string = self.dI_didata.GetLabelText() 
     1931                if self.data.dy is not None and numpy.any(self.data.dy): 
     1932                    di_flag = True 
     1933                if self.data.dx is not None and numpy.any(self.data.dx): 
     1934                    dq_flag = True 
     1935                elif self.data.dxl is not None and numpy.any(self.data.dxl): 
     1936                    dq_flag = True 
     1937 
     1938            if dq_flag: 
     1939                self.enable_smearer.Enable(True) 
     1940                self.enable_smearer.SetValue(True) 
     1941                self.disable_smearer.SetValue(False) 
     1942            else: 
     1943                self.enable_smearer.Disable() 
     1944                self.disable_smearer.Enable(True) 
     1945                self.disable_smearer.SetValue(True) 
     1946 
     1947            if di_flag: 
     1948                self.dI_didata.Enable(True) 
     1949                self.dI_didata.SetValue(True) 
     1950                self.weightbt_string = self.dI_didata.GetLabelText() 
     1951            else: 
     1952                self.dI_didata.Enable(False) 
     1953                self.dI_noweight.SetValue(True) 
     1954                self.weightbt_string = self.dI_noweight.GetLabelText() 
     1955 
    19581956            # Enable weighting radio buttons 
    19591957            self.dI_noweight.Enable(True) 
     
    19971995            self.EditMask_title.Disable() 
    19981996 
     1997        self.on_smear_helper() 
    19991998        self.on_set_focus(None) 
    20001999        self.Refresh() 
     
    21892188        self.save_current_state() 
    21902189 
     2190        if not self.is_mac: 
     2191            self.Layout() 
     2192            self.Refresh() 
     2193        self._mac_sleep(0.1) 
    21912194        # plot model ( when drawing, do not update chisqr value again) 
    21922195        self._draw_model(update_chisqr=False, source='fit') 
     
    22282231            # event case of radio button 
    22292232            if tcrtl.GetValue(): 
    2230                 self.dx_min = 0.0 
    2231                 self.dx_max = 0.0 
     2233                self.dx_percent = 0.0 
    22322234                is_new_pinhole = True 
    22332235            else: 
     
    22662268        """ 
    22672269        # get the values 
    2268         pin_min = self.smear_pinhole_min.GetValue() 
    2269         pin_max = self.smear_pinhole_max.GetValue() 
    2270  
    2271         # Check changes in slit width 
     2270        pin_percent = self.smear_pinhole_percent.GetValue() 
     2271 
     2272        # Check changes in slit heigth 
    22722273        try: 
    2273             dx_min = float(pin_min) 
     2274            dx_percent = float(pin_percent) 
    22742275        except: 
    22752276            return True 
    2276         if self.dx_min != dx_min: 
    2277             return True 
    2278  
    2279         # Check changes in slit heigth 
    2280         try: 
    2281             dx_max = float(pin_max) 
    2282         except: 
    2283             return True 
    2284         if self.dx_max != dx_max: 
     2277        if self.dx_percent != dx_percent: 
    22852278            return True 
    22862279        return False 
     
    23082301        msg = None 
    23092302 
    2310         get_pin_min = self.smear_pinhole_min 
    2311         get_pin_max = self.smear_pinhole_max 
    2312  
    2313         if not check_float(get_pin_min): 
    2314             get_pin_min.SetBackgroundColour("pink") 
    2315             msg = "Model Error:wrong value entered!!!" 
    2316         elif not check_float(get_pin_max): 
    2317             get_pin_max.SetBackgroundColour("pink") 
     2303        get_pin_percent = self.smear_pinhole_percent 
     2304 
     2305        if not check_float(get_pin_percent): 
     2306            get_pin_percent.SetBackgroundColour("pink") 
    23182307            msg = "Model Error:wrong value entered!!!" 
    23192308        else: 
    23202309            if len_data < 2: 
    23212310                len_data = 2 
    2322             self.dx_min = float(get_pin_min.GetValue()) 
    2323             self.dx_max = float(get_pin_max.GetValue()) 
    2324             if self.dx_min < 0: 
    2325                 get_pin_min.SetBackgroundColour("pink") 
     2311            self.dx_percent = float(get_pin_percent.GetValue()) 
     2312            if self.dx_percent < 0: 
     2313                get_pin_percent.SetBackgroundColour("pink") 
    23262314                msg = "Model Error:This value can not be negative!!!" 
    2327             elif self.dx_max < 0: 
    2328                 get_pin_max.SetBackgroundColour("pink") 
    2329                 msg = "Model Error:This value can not be negative!!!" 
    2330             elif self.dx_min is not None and self.dx_max is not None: 
     2315            elif self.dx_percent is not None: 
     2316                percent = self.dx_percent/100 
    23312317                if self._is_2D(): 
    2332                     data.dqx_data[data.dqx_data == 0] = self.dx_min 
    2333                     data.dqy_data[data.dqy_data == 0] = self.dx_max 
    2334                 elif self.dx_min == self.dx_max: 
    2335                     data.dx[data.dx == 0] = self.dx_min 
     2318                    data.dqx_data[data.dqx_data == 0] = percent * data.qx_data 
     2319                    data.dqy_data[data.dqy_data == 0] = percent * data.qy_data 
    23362320                else: 
    2337                     step = (self.dx_max - self.dx_min) / (len_data - 1) 
    2338                     data.dx = numpy.arange(self.dx_min, 
    2339                                            self.dx_max + step / 1.1, 
    2340                                            step) 
    2341             elif self.dx_min is not None: 
    2342                 if self._is_2D(): 
    2343                     data.dqx_data[data.dqx_data == 0] = self.dx_min 
    2344                 else: 
    2345                     data.dx[data.dx == 0] = self.dx_min 
    2346             elif self.dx_max is not None: 
    2347                 if self._is_2D(): 
    2348                     data.dqy_data[data.dqy_data == 0] = self.dx_max 
    2349                 else: 
    2350                     data.dx[data.dx == 0] = self.dx_max 
     2321                    data.dx = percent * data.x 
    23512322            self.current_smearer = smear_selection(data, self.model) 
    23522323            # 2D need to set accuracy 
     
    23582329            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    23592330        else: 
    2360             get_pin_min.SetBackgroundColour("white") 
    2361             get_pin_max.SetBackgroundColour("white") 
     2331            get_pin_percent.SetBackgroundColour("white") 
    23622332        # set smearing value whether or not the data contain the smearing info 
    23632333 
Note: See TracChangeset for help on using the changeset viewer.