Changes in src/sas/sasgui/perspectives/fitting/fitpage.py [1a8e13f0:d85f1d8a] in sasview
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sasgui/perspectives/fitting/fitpage.py
r1a8e13f0 rd85f1d8a 29 29 _BOX_WIDTH = 76 30 30 _DATA_BOX_WIDTH = 300 31 SMEAR_SIZE_L = 0.0032 31 SMEAR_SIZE_H = 0.00 33 32 CUSTOM_MODEL = 'Plugin Models' 34 33 35 34 class FitPage(BasicPage): … … 164 163 On_select_data 165 164 """ 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 171 167 data = self.dataSource.GetClientData(pos) 172 168 self.set_data(data) … … 213 209 "Please enter only the value of interest to customize smearing..." 214 210 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..." 216 212 smear_message_2d_x_title = "<dQp>[1/A]:" 217 213 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[%]:" 220 215 smear_message_slit_height_title = "Slit height[1/A]:" 221 216 smear_message_slit_width_title = "Slit width[1/A]:" … … 256 251 self.Bind(wx.EVT_RADIOBUTTON, self.onWeighting, 257 252 id=self.dI_idata.GetId()) 258 self.dI_ didata.SetValue(True)253 self.dI_noweight.SetValue(True) 259 254 # add 4 types of weighting to the sizer 260 255 sizer_weighting.Add(self.dI_noweight, 0, wx.LEFT, 10) … … 266 261 sizer_weighting.Add(self.dI_idata) 267 262 sizer_weighting.Add((10, 10)) 268 self.dI_noweight.Enable( False)263 self.dI_noweight.Enable(True) 269 264 self.dI_didata.Enable(False) 270 265 self.dI_sqrdata.Enable(False) … … 310 305 311 306 # 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) 320 312 self.smear_slit_height = ModelTextCtrl(self, wx.ID_ANY, 321 313 size=(_BOX_WIDTH - 25, 20), … … 336 328 337 329 # 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)) 340 331 self.smear_slit_height.SetValue(str(self.dxl)) 341 332 self.smear_slit_width.SetValue(str(self.dxw)) … … 362 353 self.Bind(wx.EVT_RADIOBUTTON, self.onSlitSmear, 363 354 id=self.slit_smearer.GetId()) 364 self. enable_smearer.SetValue(True)355 self.disable_smearer.SetValue(True) 365 356 366 357 sizer_smearer.Add(self.disable_smearer, 0, wx.LEFT, 10) … … 429 420 self.smear_description_2d_y.SetToolTipString( 430 421 " 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) 435 425 self.smear_description_slit_height = wx.StaticText(self, wx.ID_ANY, 436 426 smear_message_slit_height_title, style=wx.ALIGN_LEFT) … … 456 446 self.sizer_new_smear.Add((15, -1)) 457 447 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)460 448 self.sizer_new_smear.Add(self.smear_description_slit_height, 461 449 0, wx.CENTER, 10) 462 450 463 self.sizer_new_smear.Add(self.smear_pinhole_min, 0, wx.CENTER, 10)464 451 self.sizer_new_smear.Add(self.smear_slit_height, 0, wx.CENTER, 10) 465 452 self.sizer_new_smear.Add(self.smear_data_left, 0, wx.CENTER, 10) … … 467 454 self.sizer_new_smear.Add(self.smear_description_2d_y, 468 455 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, 470 457 0, wx.CENTER, 10) 471 458 self.sizer_new_smear.Add(self.smear_description_slit_width, 472 459 0, wx.CENTER, 10) 473 460 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) 475 462 self.sizer_new_smear.Add(self.smear_slit_width, 0, wx.CENTER, 10) 476 463 self.sizer_new_smear.Add(self.smear_data_right, 0, wx.CENTER, 10) … … 1249 1236 wx.PostEvent(self.parent, new_event) 1250 1237 # update list of plugins if new plugin is available 1251 custom_model = 'Customized Models'1238 custom_model = CUSTOM_MODEL 1252 1239 mod_cat = self.categorybox.GetStringSelection() 1253 1240 if mod_cat == custom_model: … … 1271 1258 if copy_flag: 1272 1259 self.get_paste_params(copy_flag) 1273 1260 wx.CallAfter(self._onDraw, None) 1274 1261 1275 1262 else: … … 1584 1571 if self.dxw is None: 1585 1572 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 1590 1575 1591 1576 def _get_smear_info(self): … … 1627 1612 elif data.dxl is not None or data.dxw is not None: 1628 1613 self.smear_type = "Slit" 1629 if data.dxl is not None and n ot numpy.all(data.dxl, 0):1614 if data.dxl is not None and numpy.all(data.dxl, 0): 1630 1615 self.dq_l = data.dxl[0] 1631 if data.dxw is not None and n ot numpy.all(data.dxw, 0):1616 if data.dxw is not None and numpy.all(data.dxw, 0): 1632 1617 self.dq_r = data.dxw[0] 1633 1618 # return self.smear_type,self.dq_l,self.dq_r … … 1649 1634 self.smear_description_2d_y.Show(True) 1650 1635 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) 1653 1637 # smear from data 1654 1638 elif self.enable_smearer.GetValue(): … … 1661 1645 self.smear_description_slit_width.Show(True) 1662 1646 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) 1665 1648 self.smear_description_smear_type.Show(True) 1666 1649 self.smear_description_type.Show(True) … … 1671 1654 if self.smear_type == 'Pinhole': 1672 1655 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) 1678 1659 # custom slit smear 1679 1660 elif self.slit_smearer.GetValue(): … … 1700 1681 self.smear_data_left.Hide() 1701 1682 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() 1706 1685 self.smear_description_slit_height.Hide() 1707 1686 self.smear_slit_height.Hide() … … 1829 1808 if not flag: 1830 1809 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) 1831 1817 1832 1818 def get_view_mode(self): … … 1927 1913 1928 1914 # more disables for 2D 1915 di_flag = False 1916 dq_flag = False 1929 1917 if self.data.__class__.__name__ == "Data2D" or \ 1930 1918 self.enable2D: … … 1932 1920 self.pinhole_smearer.Enable(True) 1933 1921 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 1944 1928 else: 1945 1929 self.slit_smearer.Enable(True) 1946 1930 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 1958 1956 # Enable weighting radio buttons 1959 1957 self.dI_noweight.Enable(True) … … 1997 1995 self.EditMask_title.Disable() 1998 1996 1997 self.on_smear_helper() 1999 1998 self.on_set_focus(None) 2000 1999 self.Refresh() … … 2189 2188 self.save_current_state() 2190 2189 2190 if not self.is_mac: 2191 self.Layout() 2192 self.Refresh() 2193 self._mac_sleep(0.1) 2191 2194 # plot model ( when drawing, do not update chisqr value again) 2192 2195 self._draw_model(update_chisqr=False, source='fit') … … 2228 2231 # event case of radio button 2229 2232 if tcrtl.GetValue(): 2230 self.dx_min = 0.0 2231 self.dx_max = 0.0 2233 self.dx_percent = 0.0 2232 2234 is_new_pinhole = True 2233 2235 else: … … 2266 2268 """ 2267 2269 # 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 2272 2273 try: 2273 dx_ min = float(pin_min)2274 dx_percent = float(pin_percent) 2274 2275 except: 2275 2276 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: 2285 2278 return True 2286 2279 return False … … 2308 2301 msg = None 2309 2302 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") 2318 2307 msg = "Model Error:wrong value entered!!!" 2319 2308 else: 2320 2309 if len_data < 2: 2321 2310 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") 2326 2314 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 2331 2317 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 2336 2320 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 2351 2322 self.current_smearer = smear_selection(data, self.model) 2352 2323 # 2D need to set accuracy … … 2358 2329 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 2359 2330 else: 2360 get_pin_min.SetBackgroundColour("white") 2361 get_pin_max.SetBackgroundColour("white") 2331 get_pin_percent.SetBackgroundColour("white") 2362 2332 # set smearing value whether or not the data contain the smearing info 2363 2333
Note: See TracChangeset
for help on using the changeset viewer.