Ignore:
Timestamp:
Mar 31, 2017 5:20:15 AM (8 years ago)
Author:
wojciech
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.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
7b15990
Parents:
1a8e13f0 (diff), 7cbbacd (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of https://github.com/SasView/sasview into ticket-854

File:
1 edited

Legend:

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

    r1a8e13f0 r5156918  
    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() 
     
    19271906 
    19281907            # more disables for 2D 
     1908            di_flag = False 
     1909            dq_flag = False 
    19291910            if self.data.__class__.__name__ == "Data2D" or \ 
    19301911                        self.enable2D: 
     
    19321913                self.pinhole_smearer.Enable(True) 
    19331914                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() 
     1915                if self.data.err_data is not None \ 
     1916                        and numpy.any(self.data.err_data): 
     1917                    di_flag = True 
     1918                if self.data.dqx_data is not None \ 
     1919                        and numpy.any(self.data.dqx_data): 
     1920                    dq_flag = True 
    19441921            else: 
    19451922                self.slit_smearer.Enable(True) 
    19461923                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() 
     1924                if self.data.dy is not None and numpy.any(self.data.dy): 
     1925                    di_flag = True 
     1926                if self.data.dx is not None and numpy.any(self.data.dx): 
     1927                    dq_flag = True 
     1928                elif self.data.dxl is not None and numpy.any(self.data.dxl): 
     1929                    dq_flag = True 
     1930 
     1931            if dq_flag: 
     1932                self.enable_smearer.Enable(True) 
     1933                self.enable_smearer.SetValue(True) 
     1934                self.disable_smearer.SetValue(False) 
     1935            else: 
     1936                self.enable_smearer.Disable() 
     1937                self.disable_smearer.Enable(True) 
     1938                self.disable_smearer.SetValue(True) 
     1939 
     1940            if di_flag: 
     1941                self.dI_didata.Enable(True) 
     1942                self.dI_didata.SetValue(True) 
     1943                self.weightbt_string = self.dI_didata.GetLabelText() 
     1944            else: 
     1945                self.dI_didata.Enable(False) 
     1946                self.dI_noweight.SetValue(True) 
     1947                self.weightbt_string = self.dI_noweight.GetLabelText() 
     1948 
    19581949            # Enable weighting radio buttons 
    19591950            self.dI_noweight.Enable(True) 
     
    19971988            self.EditMask_title.Disable() 
    19981989 
     1990        self.on_smear_helper() 
    19991991        self.on_set_focus(None) 
    20001992        self.Refresh() 
     
    22282220            # event case of radio button 
    22292221            if tcrtl.GetValue(): 
    2230                 self.dx_min = 0.0 
    2231                 self.dx_max = 0.0 
     2222                self.dx_percent = 0.0 
    22322223                is_new_pinhole = True 
    22332224            else: 
     
    22662257        """ 
    22672258        # 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 
     2259        pin_percent = self.smear_pinhole_percent.GetValue() 
     2260 
     2261        # Check changes in slit heigth 
    22722262        try: 
    2273             dx_min = float(pin_min) 
     2263            dx_percent = float(pin_percent) 
    22742264        except: 
    22752265            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: 
     2266        if self.dx_percent != dx_percent: 
    22852267            return True 
    22862268        return False 
     
    23082290        msg = None 
    23092291 
    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") 
     2292        get_pin_percent = self.smear_pinhole_percent 
     2293 
     2294        if not check_float(get_pin_percent): 
     2295            get_pin_percent.SetBackgroundColour("pink") 
    23182296            msg = "Model Error:wrong value entered!!!" 
    23192297        else: 
    23202298            if len_data < 2: 
    23212299                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") 
     2300            self.dx_percent = float(get_pin_percent.GetValue()) 
     2301            if self.dx_percent < 0: 
     2302                get_pin_percent.SetBackgroundColour("pink") 
    23262303                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: 
     2304            elif self.dx_percent is not None: 
     2305                percent = self.dx_percent/100 
    23312306                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 
     2307                    data.dqx_data[data.dqx_data == 0] = percent * data.qx_data 
     2308                    data.dqy_data[data.dqy_data == 0] = percent * data.qy_data 
    23362309                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 
     2310                    data.dx = percent * data.x 
    23512311            self.current_smearer = smear_selection(data, self.model) 
    23522312            # 2D need to set accuracy 
     
    23582318            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
    23592319        else: 
    2360             get_pin_min.SetBackgroundColour("white") 
    2361             get_pin_max.SetBackgroundColour("white") 
     2320            get_pin_percent.SetBackgroundColour("white") 
    23622321        # set smearing value whether or not the data contain the smearing info 
    23632322 
Note: See TracChangeset for help on using the changeset viewer.