Changeset 571bf4b in sasview for src/sas/sasgui/perspectives/fitting
- Timestamp:
- Apr 4, 2017 11:42:02 AM (8 years ago)
- 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:
- b2b3009d, 7b15990
- Parents:
- a8d79fd (diff), 05d167e (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. - git-author:
- Andrew Jackson <andrew.jackson@…> (04/04/17 11:42:02)
- git-committer:
- GitHub <noreply@…> (04/04/17 11:42:02)
- Location:
- src/sas/sasgui/perspectives/fitting
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sasgui/perspectives/fitting/basepage.py
r7a5aedd r5156918 120 120 self.dxw = None 121 121 # pinhole smear 122 self.dx_min = None 123 self.dx_max = None 122 self.dx_percent = None 124 123 # smear attrbs 125 124 self.enable_smearer = None … … 849 848 self.state.pinhole_smearer = \ 850 849 copy.deepcopy(self.pinhole_smearer.GetValue()) 851 self.state.dx_max = copy.deepcopy(self.dx_max) 852 self.state.dx_min = copy.deepcopy(self.dx_min) 850 self.state.dx_percent = copy.deepcopy(self.dx_percent) 853 851 self.state.dxl = copy.deepcopy(self.dxl) 854 852 self.state.dxw = copy.deepcopy(self.dxw) … … 1247 1245 # we have two more options for smearing 1248 1246 if self.pinhole_smearer.GetValue(): 1249 self.dx_min = state.dx_min 1250 self.dx_max = state.dx_max 1251 if self.dx_min is not None: 1252 self.smear_pinhole_min.SetValue(str(self.dx_min)) 1253 if self.dx_max is not None: 1254 self.smear_pinhole_max.SetValue(str(self.dx_max)) 1247 self.dx_percent = state.dx_percent 1248 if self.dx_percent is not None: 1249 if state.dx_old: 1250 self.dx_percent = 100 * (self.dx_percent / self.data.x[0]) 1251 self.smear_pinhole_percent.SetValue("%.2f" % self.dx_percent) 1255 1252 self.onPinholeSmear(event=None) 1256 1253 elif self.slit_smearer.GetValue(): … … 1452 1449 self.state_change = True 1453 1450 self._draw_model() 1454 # Time delay has been introduced to prevent _handle error1455 # on Windows1456 # This part of code is executed when model is selected and1457 # it's parameters are changed (with respect to previously1458 # selected model). There are two Iq evaluations occuring one1459 # after another and therefore there may be compilation error1460 # if model is calculated for the first time.1461 # This seems to be Windows only issue - haven't tested on Linux1462 # though.The proper solution (other than time delay) requires1463 # more fundemental code refatoring1464 # Wojtek P. Nov 7, 20161465 if not ON_MAC:1466 time.sleep(0.1)1467 1451 self.Refresh() 1468 1452 … … 2612 2596 Layout is called after fitting. 2613 2597 """ 2614 self._sleep4sec()2615 2598 self.Layout() 2616 2599 return 2617 2618 def _sleep4sec(self):2619 """2620 sleep for 1 sec only applied on Mac2621 Note: This 1sec helps for Mac not to crash on self.2622 Layout after self._draw_model2623 """2624 if ON_MAC:2625 time.sleep(1)2626 2600 2627 2601 def _find_polyfunc_selection(self, disp_func=None): -
src/sas/sasgui/perspectives/fitting/fitpage.py
r8c0d9eb r5156918 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' … … 210 209 "Please enter only the value of interest to customize smearing..." 211 210 smear_message_new_psmear = \ 212 "Please enter both; the dQ will be generated by interpolation..."211 "Please enter a fixed percentage to be applied to all Q values..." 213 212 smear_message_2d_x_title = "<dQp>[1/A]:" 214 213 smear_message_2d_y_title = "<dQs>[1/A]:" 215 smear_message_pinhole_min_title = "dQ_low[1/A]:" 216 smear_message_pinhole_max_title = "dQ_high[1/A]:" 214 smear_message_pinhole_percent_title = "dQ[%]:" 217 215 smear_message_slit_height_title = "Slit height[1/A]:" 218 216 smear_message_slit_width_title = "Slit width[1/A]:" … … 307 305 308 306 # textcntrl for custom resolution 309 self.smear_pinhole_max = ModelTextCtrl(self, wx.ID_ANY, 310 size=(_BOX_WIDTH - 25, 20), 311 style=wx.TE_PROCESS_ENTER, 312 text_enter_callback=self.onPinholeSmear) 313 self.smear_pinhole_min = ModelTextCtrl(self, wx.ID_ANY, 314 size=(_BOX_WIDTH - 25, 20), 315 style=wx.TE_PROCESS_ENTER, 316 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) 317 312 self.smear_slit_height = ModelTextCtrl(self, wx.ID_ANY, 318 313 size=(_BOX_WIDTH - 25, 20), … … 333 328 334 329 # set default values for smear 335 self.smear_pinhole_max.SetValue(str(self.dx_max)) 336 self.smear_pinhole_min.SetValue(str(self.dx_min)) 330 self.smear_pinhole_percent.SetValue(str(self.dx_percent)) 337 331 self.smear_slit_height.SetValue(str(self.dxl)) 338 332 self.smear_slit_width.SetValue(str(self.dxw)) … … 426 420 self.smear_description_2d_y.SetToolTipString( 427 421 " dQs(perpendicular) in q_phi direction.") 428 self.smear_description_pin_min = wx.StaticText(self, wx.ID_ANY, 429 smear_message_pinhole_min_title, style=wx.ALIGN_LEFT) 430 self.smear_description_pin_max = wx.StaticText(self, wx.ID_ANY, 431 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) 432 425 self.smear_description_slit_height = wx.StaticText(self, wx.ID_ANY, 433 426 smear_message_slit_height_title, style=wx.ALIGN_LEFT) … … 453 446 self.sizer_new_smear.Add((15, -1)) 454 447 self.sizer_new_smear.Add(self.smear_description_2d_x, 0, wx.CENTER, 10) 455 self.sizer_new_smear.Add(self.smear_description_pin_min,456 0, wx.CENTER, 10)457 448 self.sizer_new_smear.Add(self.smear_description_slit_height, 458 449 0, wx.CENTER, 10) 459 450 460 self.sizer_new_smear.Add(self.smear_pinhole_min, 0, wx.CENTER, 10)461 451 self.sizer_new_smear.Add(self.smear_slit_height, 0, wx.CENTER, 10) 462 452 self.sizer_new_smear.Add(self.smear_data_left, 0, wx.CENTER, 10) … … 464 454 self.sizer_new_smear.Add(self.smear_description_2d_y, 465 455 0, wx.CENTER, 10) 466 self.sizer_new_smear.Add(self.smear_description_pin_ max,456 self.sizer_new_smear.Add(self.smear_description_pin_percent, 467 457 0, wx.CENTER, 10) 468 458 self.sizer_new_smear.Add(self.smear_description_slit_width, 469 459 0, wx.CENTER, 10) 470 460 471 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) 472 462 self.sizer_new_smear.Add(self.smear_slit_width, 0, wx.CENTER, 10) 473 463 self.sizer_new_smear.Add(self.smear_data_right, 0, wx.CENTER, 10) … … 1581 1571 if self.dxw is None: 1582 1572 self.dxw = "" 1583 if self.dx_min is None: 1584 self.dx_min = SMEAR_SIZE_L 1585 if self.dx_max is None: 1586 self.dx_max = SMEAR_SIZE_H 1573 if self.dx_percent is None: 1574 self.dx_percent = SMEAR_SIZE_H 1587 1575 1588 1576 def _get_smear_info(self): … … 1646 1634 self.smear_description_2d_y.Show(True) 1647 1635 if self.pinhole_smearer.GetValue(): 1648 self.smear_pinhole_min.Show(True) 1649 self.smear_pinhole_max.Show(True) 1636 self.smear_pinhole_percent.Show(True) 1650 1637 # smear from data 1651 1638 elif self.enable_smearer.GetValue(): … … 1658 1645 self.smear_description_slit_width.Show(True) 1659 1646 elif self.smear_type == 'Pinhole': 1660 self.smear_description_pin_min.Show(True) 1661 self.smear_description_pin_max.Show(True) 1647 self.smear_description_pin_percent.Show(True) 1662 1648 self.smear_description_smear_type.Show(True) 1663 1649 self.smear_description_type.Show(True) … … 1668 1654 if self.smear_type == 'Pinhole': 1669 1655 self.smear_message_new_p.Show(True) 1670 self.smear_description_pin_min.Show(True) 1671 self.smear_description_pin_max.Show(True) 1672 1673 self.smear_pinhole_min.Show(True) 1674 self.smear_pinhole_max.Show(True) 1656 self.smear_description_pin_percent.Show(True) 1657 1658 self.smear_pinhole_percent.Show(True) 1675 1659 # custom slit smear 1676 1660 elif self.slit_smearer.GetValue(): … … 1697 1681 self.smear_data_left.Hide() 1698 1682 self.smear_data_right.Hide() 1699 self.smear_description_pin_min.Hide() 1700 self.smear_pinhole_min.Hide() 1701 self.smear_description_pin_max.Hide() 1702 self.smear_pinhole_max.Hide() 1683 self.smear_description_pin_percent.Hide() 1684 self.smear_pinhole_percent.Hide() 1703 1685 self.smear_description_slit_height.Hide() 1704 1686 self.smear_slit_height.Hide() … … 1826 1808 if not flag: 1827 1809 self.onSmear(None) 1828 1829 def _mac_sleep(self, sec=0.2):1830 """1831 Give sleep to MAC1832 """1833 if self.is_mac:1834 time.sleep(sec)1835 1810 1836 1811 def get_view_mode(self): … … 2206 2181 self.save_current_state() 2207 2182 2208 if not self.is_mac:2209 self.Layout()2210 self.Refresh()2211 self._mac_sleep(0.1)2212 2183 # plot model ( when drawing, do not update chisqr value again) 2213 2184 self._draw_model(update_chisqr=False, source='fit') … … 2249 2220 # event case of radio button 2250 2221 if tcrtl.GetValue(): 2251 self.dx_min = 0.0 2252 self.dx_max = 0.0 2222 self.dx_percent = 0.0 2253 2223 is_new_pinhole = True 2254 2224 else: … … 2287 2257 """ 2288 2258 # get the values 2289 pin_min = self.smear_pinhole_min.GetValue() 2290 pin_max = self.smear_pinhole_max.GetValue() 2291 2292 # Check changes in slit width 2259 pin_percent = self.smear_pinhole_percent.GetValue() 2260 2261 # Check changes in slit heigth 2293 2262 try: 2294 dx_ min = float(pin_min)2263 dx_percent = float(pin_percent) 2295 2264 except: 2296 2265 return True 2297 if self.dx_min != dx_min: 2298 return True 2299 2300 # Check changes in slit heigth 2301 try: 2302 dx_max = float(pin_max) 2303 except: 2304 return True 2305 if self.dx_max != dx_max: 2266 if self.dx_percent != dx_percent: 2306 2267 return True 2307 2268 return False … … 2329 2290 msg = None 2330 2291 2331 get_pin_min = self.smear_pinhole_min 2332 get_pin_max = self.smear_pinhole_max 2333 2334 if not check_float(get_pin_min): 2335 get_pin_min.SetBackgroundColour("pink") 2336 msg = "Model Error:wrong value entered!!!" 2337 elif not check_float(get_pin_max): 2338 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") 2339 2296 msg = "Model Error:wrong value entered!!!" 2340 2297 else: 2341 2298 if len_data < 2: 2342 2299 len_data = 2 2343 self.dx_min = float(get_pin_min.GetValue()) 2344 self.dx_max = float(get_pin_max.GetValue()) 2345 if self.dx_min < 0: 2346 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") 2347 2303 msg = "Model Error:This value can not be negative!!!" 2348 elif self.dx_max < 0: 2349 get_pin_max.SetBackgroundColour("pink") 2350 msg = "Model Error:This value can not be negative!!!" 2351 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 2352 2306 if self._is_2D(): 2353 data.dqx_data[data.dqx_data == 0] = self.dx_min 2354 data.dqy_data[data.dqy_data == 0] = self.dx_max 2355 elif self.dx_min == self.dx_max: 2356 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 2357 2309 else: 2358 step = (self.dx_max - self.dx_min) / (len_data - 1) 2359 data.dx = numpy.arange(self.dx_min, 2360 self.dx_max + step / 1.1, 2361 step) 2362 elif self.dx_min is not None: 2363 if self._is_2D(): 2364 data.dqx_data[data.dqx_data == 0] = self.dx_min 2365 else: 2366 data.dx[data.dx == 0] = self.dx_min 2367 elif self.dx_max is not None: 2368 if self._is_2D(): 2369 data.dqy_data[data.dqy_data == 0] = self.dx_max 2370 else: 2371 data.dx[data.dx == 0] = self.dx_max 2310 data.dx = percent * data.x 2372 2311 self.current_smearer = smear_selection(data, self.model) 2373 2312 # 2D need to set accuracy … … 2379 2318 wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 2380 2319 else: 2381 get_pin_min.SetBackgroundColour("white") 2382 get_pin_max.SetBackgroundColour("white") 2320 get_pin_percent.SetBackgroundColour("white") 2383 2321 # set smearing value whether or not the data contain the smearing info 2384 2322 -
src/sas/sasgui/perspectives/fitting/fitting.py
rddbac66 r5156918 876 876 qmin=qmin, qmax=qmax, weight=weight) 877 877 878 def _mac_sleep(self, sec=0.2):879 """880 Give sleep to MAC881 """882 if ON_MAC:883 time.sleep(sec)884 885 878 def draw_model(self, model, page_id, data=None, smearer=None, 886 879 enable1D=True, enable2D=False, … … 1030 1023 manager=self, 1031 1024 improvement_delta=0.1) 1032 self._mac_sleep(0.2)1033 1025 1034 1026 # batch fit … … 1270 1262 :param elapsed: time spent at the fitting level 1271 1263 """ 1272 self._mac_sleep(0.2)1273 1264 uid = page_id[0] 1274 1265 if uid in self.fit_thread_list.keys(): … … 1520 1511 page_id = [] 1521 1512 ## fit more than 1 model at the same time 1522 self._mac_sleep(0.2)1523 1513 try: 1524 1514 index = 0 … … 1755 1745 data_id="Data " + data.name + " unsmeared", 1756 1746 dy=unsmeared_error) 1757 1758 if sq_model is not None and pq_model is not None: 1759 self.create_theory_1D(x, sq_model, page_id, model, data, state, 1760 data_description=model.name + " S(q)", 1761 data_id=str(page_id) + " " + data.name + " S(q)") 1762 self.create_theory_1D(x, pq_model, page_id, model, data, state, 1763 data_description=model.name + " P(q)", 1764 data_id=str(page_id) + " " + data.name + " P(q)") 1765 1747 # Comment this out until we can get P*S models with correctly populated parameters 1748 #if sq_model is not None and pq_model is not None: 1749 # self.create_theory_1D(x, sq_model, page_id, model, data, state, 1750 # data_description=model.name + " S(q)", 1751 # data_id=str(page_id) + " " + data.name + " S(q)") 1752 # self.create_theory_1D(x, pq_model, page_id, model, data, state, 1753 # data_description=model.name + " P(q)", 1754 # data_id=str(page_id) + " " + data.name + " P(q)") 1766 1755 1767 1756 current_pg = self.fit_panel.get_page_by_id(page_id) -
src/sas/sasgui/perspectives/fitting/media/plugin.rst
r5295cf5 r984f3fc 364 364 - the limits will show up as the default limits for the fit making it easy, 365 365 for example, to force the radius to always be greater than zero. 366 367 - these are hard limits defining the valid range of parameter values; 368 polydisperity distributions will be truncated at the limits. 366 369 367 370 - **"type"** can be one of: "", "sld", "volume", or "orientation". -
src/sas/sasgui/perspectives/fitting/pagestate.py
r71601312 r27109e5 74 74 ["dq_l", "dq_l", "float"], 75 75 ["dq_r", "dq_r", "float"], 76 ["dx_max", "dx_max", "float"], 77 ["dx_min", "dx_min", "float"], 76 ["dx_percent", "dx_percent", "float"], 78 77 ["dxl", "dxl", "float"], 79 78 ["dxw", "dxw", "float"]] … … 215 214 self.dq_l = None 216 215 self.dq_r = None 217 self.dx_ max= None218 self.dx_ min = None216 self.dx_percent = None 217 self.dx_old = False 219 218 self.dxl = None 220 219 self.dxw = None … … 343 342 obj.dq_l = copy.deepcopy(self.dq_l) 344 343 obj.dq_r = copy.deepcopy(self.dq_r) 345 obj.dx_ max = copy.deepcopy(self.dx_max)346 obj.dx_ min = copy.deepcopy(self.dx_min)344 obj.dx_percent = copy.deepcopy(self.dx_percent) 345 obj.dx_old = copy.deepcopy(self.dx_old) 347 346 obj.dxl = copy.deepcopy(self.dxl) 348 347 obj.dxw = copy.deepcopy(self.dxw) … … 562 561 rep += "dq_l : %s\n" % self.dq_l 563 562 rep += "dq_r : %s\n" % self.dq_r 564 rep += "dx_max : %s\n" % str(self.dx_max) 565 rep += "dx_min : %s\n" % str(self.dx_min) 563 rep += "dx_percent : %s\n" % str(self.dx_percent) 566 564 rep += "dxl : %s\n" % str(self.dxl) 567 565 rep += "dxw : %s\n" % str(self.dxw) … … 821 819 822 820 attr = newdoc.createAttribute("version") 823 import sasview821 from sas import sasview 824 822 attr.nodeValue = sasview.__version__ 825 823 # attr.nodeValue = '1.0' … … 1048 1046 setattr(self, item[0], parse_entry_helper(node, item)) 1049 1047 1048 dx_old_node = get_content('ns:%s' % 'dx_min', entry) 1050 1049 for item in LIST_OF_STATE_ATTRIBUTES: 1051 node = get_content('ns:%s' % item[0], entry) 1052 setattr(self, item[0], parse_entry_helper(node, item)) 1050 if item[0] == "dx_percent" and dx_old_node is not None: 1051 dxmin = ["dx_min", "dx_min", "float"] 1052 setattr(self, item[0], parse_entry_helper(dx_old_node, 1053 dxmin)) 1054 self.dx_old = True 1055 else: 1056 node = get_content('ns:%s' % item[0], entry) 1057 setattr(self, item[0], parse_entry_helper(node, item)) 1053 1058 1054 1059 for item in LIST_OF_STATE_PARAMETERS:
Note: See TracChangeset
for help on using the changeset viewer.