Changeset 33844bf in sasview for src/sas/sasgui/perspectives/fitting
- Timestamp:
- Dec 20, 2016 5:07:27 AM (8 years ago)
- Children:
- ebaaf05
- Parents:
- 4139147 (diff), 06a4306 (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. - Location:
- src/sas/sasgui/perspectives/fitting
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sasgui/perspectives/fitting/basepage.py
rc8e1996 r06a4306 52 52 FONT_VARIANT = 1 53 53 ON_MAC = True 54 55 54 56 55 class BasicPage(ScrolledPanel, PanelBase): … … 1435 1434 self.qmax_x = tempmax 1436 1435 is_modified = True 1437 1438 1436 if is_2Ddata: 1439 # set mask1440 1437 is_modified = self._validate_Npts() 1441 1438 else: 1439 is_modified = self._validate_Npts_1D() 1442 1440 else: 1443 1441 self.fitrange = False … … 1454 1452 # Theory case: need to get npts value to draw 1455 1453 self.npts_x = float(self.Npts_total.GetValue()) 1454 self.Npts_fit.SetValue(str(self.Npts_total.GetValue())) 1455 self._save_plotting_range() 1456 1456 self.create_default_data() 1457 1457 self.state_change = True 1458 1458 self._draw_model() 1459 # Time delay has been introduced to prevent _handle error 1460 # on Windows 1461 # This part of code is executed when model is selected and 1462 # it's parameters are changed (with respect to previously 1463 # selected model). There are two Iq evaluations occuring one 1464 # after another and therefore there may be compilation error 1465 # if model is calculated for the first time. 1466 # This seems to be Windows only issue - haven't tested on Linux 1467 # though.The proper solution (other than time delay) requires 1468 # more fundemental code refatoring 1469 # Wojtek P. Nov 7, 2016 1470 if not ON_MAC: 1471 time.sleep(0.1) 1459 1472 self.Refresh() 1460 1473 … … 1528 1541 index_data = ((self.qmin_x <= self.data.x) & 1529 1542 (self.data.x <= self.qmax_x)) 1530 val = str(len(self.data.x[index_data is True])) 1531 self.Npts_fit.SetValue(val) 1543 val = self.data.x[index_data is True] 1544 val = len(val) if isinstance(val, list) else 1 1545 self.Npts_fit.SetValue(str(val)) 1546 1532 1547 else: 1533 1548 # No data in the panel … … 2167 2182 flag = False 2168 2183 else: 2169 self.Npts_fit.SetValue(str(len(index_data[index_data is True]))) 2184 val = index_data[index_data is True] 2185 val = len(val) if isinstance(val, list) else 1 2186 self.Npts_fit.SetValue(str(val)) 2170 2187 self.fitrange = True 2171 2188 … … 2391 2408 2392 2409 # Redraw the model 2393 self._draw_model() 2410 # Wojtek P. Nov 7, 2016: Redrawing seems to be unnecessary here 2411 # self._draw_model() 2394 2412 # self._undo.Enable(True) 2395 2413 event = PageInfoEvent(page=self) -
src/sas/sasgui/perspectives/fitting/fitpage.py
rc8e1996 rbf44249e 81 81 flag = check_data_validity(self.data) & (self.model is not None) 82 82 self.btFit.Enable(flag) 83 83 84 84 def on_set_focus(self, event): 85 85 """ 86 Override the basepage focus method to ensure the save flag is set 86 Override the basepage focus method to ensure the save flag is set 87 87 properly when focusing on the fit page. 88 88 """ … … 238 238 239 239 weighting_set_box = wx.StaticBox(self, wx.ID_ANY, 240 'Set Weighting by Selecting dI Source')240 'Set Weighting by Selecting dI Source') 241 241 weighting_box = wx.StaticBoxSizer(weighting_set_box, wx.HORIZONTAL) 242 242 sizer_weighting = wx.BoxSizer(wx.HORIZONTAL) … … 1164 1164 if event is not None: 1165 1165 if (event.GetEventObject() == self.formfactorbox 1166 1167 1168 1166 and self.structurebox.GetLabel() != 'None')\ 1167 or event.GetEventObject() == self.structurebox\ 1168 or event.GetEventObject() == self.multifactorbox: 1169 1169 copy_flag = self.get_copy_params() 1170 1170 is_poly_enabled = self.enable_disp.GetValue() … … 1205 1205 self._keep.Enable(not self.batch_on) 1206 1206 self._set_save_flag(True) 1207 self._set_smear(self.data) 1207 #Setting smearing for cases with and without data. 1208 self._set_smear(self.data) 1208 1209 1209 1210 # more disables for 2D … … 1212 1213 try: 1213 1214 # update smearer sizer 1214 self.onSmear(None) 1215 #This call for smearing set up caused double evaluation of 1216 #I(q) and double compilation as results 1217 #self.onSmear(None) 1215 1218 temp_smear = None 1216 1219 if not self.disable_smearer.GetValue(): … … 1226 1229 # set smearing value whether or not data contain the smearing info 1227 1230 evt = ModelEventbox(model=self.model, 1228 smearer=temp_smear,1229 enable_smearer=not self.disable_smearer.GetValue(),1230 qmin=float(self.qmin_x),1231 uid=self.uid,1232 caption=self.window_caption,1233 qmax=float(self.qmax_x))1231 smearer=temp_smear, 1232 enable_smearer=not self.disable_smearer.GetValue(), 1233 qmin=float(self.qmin_x), 1234 uid=self.uid, 1235 caption=self.window_caption, 1236 qmax=float(self.qmax_x)) 1234 1237 1235 1238 self._manager._on_model_panel(evt=evt) -
src/sas/sasgui/perspectives/fitting/fitpanel.py
rc8e1996 r67b0a99 189 189 # use while-loop, for-loop will not do the job well. 190 190 while (self.GetPageCount() > 0): 191 # delete the first page until no page exists 192 page = self.GetPage(0) 191 page = self.GetPage(self.GetPageCount() - 1) 193 192 if self._manager.parent.panel_on_focus == page: 194 193 self._manager.parent.panel_on_focus = None 195 194 self._close_helper(selected_page=page) 196 self.DeletePage( 0)195 self.DeletePage(self.GetPageCount() - 1) 197 196 # Clear list of names 198 197 self.fit_page_name = {} … … 400 399 temp = self.GetSelection() 401 400 self.DeletePage(temp) 401 if self.sim_page is not None: 402 if len(self.sim_page.model_list) == 0: 403 pos = self.GetPageIndex(self.sim_page) 404 self.SetSelection(pos) 405 self.on_close_page(event=None) 406 temp = self.GetSelection() 407 self.DeletePage(temp) 408 self.sim_page = None 409 self.batch_on = False 402 410 if self.GetPageCount() == 0: 403 411 self._manager.on_add_new_page(event=None) -
src/sas/sasgui/perspectives/fitting/fitting.py
r8f02f7f r33844bf 876 876 enable1D=enable1D, enable2D=enable2D, 877 877 qmin=qmin, qmax=qmax, weight=weight) 878 self._mac_sleep(0.2)879 878 880 879 def _mac_sleep(self, sec=0.2): … … 1533 1532 for uid in page_id: 1534 1533 res = result[index] 1534 fit_msg = res.mesg 1535 1535 if res.fitness is None or \ 1536 1536 not numpy.isfinite(res.fitness) or \ 1537 1537 numpy.any(res.pvec == None) or \ 1538 1538 not numpy.all(numpy.isfinite(res.pvec)): 1539 msg = "Fitting did not converge!!!" 1540 evt = StatusEvent(status=msg, info="warning", type="stop") 1541 wx.PostEvent(self.parent, evt) 1539 fit_msg += "\nFitting did not converge!!!" 1542 1540 wx.CallAfter(self._update_fit_button, page_id) 1543 1541 else: … … 1562 1560 wx.CallAfter(cpage._on_fit_complete) 1563 1561 except KeyboardInterrupt: 1564 msg = "Singular point: Fitting Stoped." 1565 evt = StatusEvent(status=msg, info="info", type="stop") 1566 wx.PostEvent(self.parent, evt) 1562 fit_msg += "\nSingular point: Fitting stopped." 1567 1563 except: 1568 msg = "Singular point: Fitting Error occurred." 1569 evt = StatusEvent(status=msg, info="error", type="stop") 1570 wx.PostEvent(self.parent, evt) 1564 fit_msg += "\nSingular point: Fitting error occurred." 1565 if fit_msg: 1566 evt = StatusEvent(status=fit_msg, info="warning", type="stop") 1567 wx.PostEvent(self.parent, evt) 1571 1568 1572 1569 except: … … 1978 1975 ## May need rethinking 1979 1976 ## 1980 ## -PDB August 12, 2014 1977 ## -PDB August 12, 2014 1981 1978 while self.calc_1D.isrunning(): 1982 1979 time.sleep(0.1) -
src/sas/sasgui/perspectives/fitting/media/plugin.rst
r20cfa23 rca1eaeb 560 560 561 561 M_PI_180, M_4PI_3: 562 $\ pi/{180}$, $\tfrac{4}{3}\pi$562 $\frac{\pi}{180}$, $\frac{4\pi}{3}$ 563 563 SINCOS(x, s, c): 564 564 Macro which sets s=sin(x) and c=cos(x). The variables *c* and *s* … … 596 596 These functions have been tuned to be fast and numerically stable down 597 597 to $q=0$ even in single precision. In some cases they work around bugs 598 which appear on some platforms but not others. So use them where needed!!! 598 which appear on some platforms but not others, so use them where needed. 599 Add the files listed in :code:`source = ["lib/file.c", ...]` to your *model.py* 600 file in the order given, otherwise these functions will not be available. 599 601 600 602 polevl(x, c, n): 601 Polynomial evaluation $p(x) = \sum_{i=0}^n c_i x^ {n-i}$ using Horner's603 Polynomial evaluation $p(x) = \sum_{i=0}^n c_i x^i$ using Horner's 602 604 method so it is faster and more accurate. 603 605 606 $c = \{c_n, c_{n-1}, \ldots, c_0 \}$ is the table of coefficients, 607 sorted from highest to lowest. 608 609 :code:`source = ["lib/polevl.c", ...]` (`link to code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/polevl.c>`_) 610 611 p1evl(x, c, n): 612 Evaluation of normalized polynomial $p(x) = x^n + \sum_{i=0}^{n-1} c_i x^i$ 613 using Horner's method so it is faster and more accurate. 614 615 $c = \{c_{n-1}, c_{n-2} \ldots, c_0 \}$ is the table of coefficients, 616 sorted from highest to lowest. 617 604 618 :code:`source = ["lib/polevl.c", ...]` 605 606 sas_gamma: 607 Gamma function $\text{sas_gamma}(x) = \Gamma(x)$. The standard math 608 library gamma function, tgamma(x) is unstable below 1 on some platforms. 619 (`link to code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/polevl.c>`_) 620 621 sas_gamma(x): 622 Gamma function $\text{sas_gamma}(x) = \Gamma(x)$. 623 624 The standard math function, tgamma(x) is unstable for $x < 1$ 625 on some platforms. 609 626 610 627 :code:`source = ["lib/sasgamma.c", ...]` 611 612 erf, erfc: 628 (`link to code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sas_gamma.c>`_) 629 630 sas_erf(x), sas_erfc(x): 613 631 Error function 614 $\text{ erf}(x) = \frac{1}{\sqrt\pi}\int_0^x e^{-t^2}\,dt$632 $\text{sas_erf}(x) = \frac{2}{\sqrt\pi}\int_0^x e^{-t^2}\,dt$ 615 633 and complementary error function 616 $\text{erfc}(x) = \frac{1}{\sqrt\pi}\int_x^\inf e^{-t^2}\,dt$. 617 The standard math library erf and erfc are slower and broken 634 $\text{sas_erfc}(x) = \frac{2}{\sqrt\pi}\int_x^{\infty} e^{-t^2}\,dt$. 635 636 The standard math functions erf(x) and erfc(x) are slower and broken 618 637 on some platforms. 619 638 620 639 :code:`source = ["lib/polevl.c", "lib/sas_erf.c", ...]` 621 622 sas_J0: 623 Bessel function of the first kind where 640 (`link to error functions' code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sas_erf.c>`_) 641 642 sas_J0(x): 643 Bessel function of the first kind $\text{sas_J0}(x)=J_0(x)$ where 624 644 $J_0(x) = \frac{1}{\pi}\int_0^\pi \cos(x\sin(\tau))\,d\tau$. 625 645 646 The standard math function j0(x) is not available on all platforms. 647 626 648 :code:`source = ["lib/polevl.c", "lib/sas_J0.c", ...]` 627 628 sas_J1: 629 Bessel function of the first kind where 649 (`link to Bessel function's code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sas_J0.c>`_) 650 651 sas_J1(x): 652 Bessel function of the first kind $\text{sas_J1}(x)=J_1(x)$ where 630 653 $J_1(x) = \frac{1}{\pi}\int_0^\pi \cos(\tau - x\sin(\tau))\,d\tau$. 631 654 655 The standard math function j1(x) is not available on all platforms. 656 632 657 :code:`source = ["lib/polevl.c", "lib/sas_J1.c", ...]` 633 634 sas_JN: 635 Bessel function of the first kind where 658 (`link to Bessel function's code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sas_J1.c>`_) 659 660 sas_JN(n, x): 661 Bessel function of the first kind and integer order $n$: 662 $\text{sas_JN}(n, x)=J_n(x)$ where 636 663 $J_n(x) = \frac{1}{\pi}\int_0^\pi \cos(n\tau - x\sin(\tau))\,d\tau$. 664 If $n$ = 0 or 1, it uses sas_J0(x) or sas_J1(x), respectively. 665 666 The standard math function jn(n, x) is not available on all platforms. 637 667 638 668 :code:`source = ["lib/polevl.c", "lib/sas_J0.c", "lib/sas_J1.c", "lib/sas_JN.c", ...]` 639 640 Si: 669 (`link to Bessel function's code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sas_JN.c>`_) 670 671 Si(x): 641 672 Sine integral $\text{Si}(x) = \int_0^x \tfrac{\sin t}{t}\,dt$. 642 673 643 :code:`soure = ["lib/Si.c", ...]` 644 645 sph_j1c(qr): 674 This function uses Taylor series for small and large arguments: 675 676 For large arguments, 677 678 .. math:: 679 680 \text{Si}(x) \sim \frac{\pi}{2} 681 - \frac{\cos(x)}{x}\left(1 - \frac{2!}{x^2} + \frac{4!}{x^4} - \frac{6!}{x^6} \right) 682 - \frac{\sin(x)}{x}\left(\frac{1}{x} - \frac{3!}{x^3} + \frac{5!}{x^5} - \frac{7!}{x^7}\right) 683 684 For small arguments, 685 686 .. math:: 687 688 \text{Si}(x) \sim x 689 - \frac{x^3}{3\times 3!} + \frac{x^5}{5 \times 5!} - \frac{x^7}{7 \times 7!} 690 + \frac{x^9}{9\times 9!} - \frac{x^{11}}{11\times 11!} 691 692 :code:`source = ["lib/Si.c", ...]` 693 (`link to code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/Si.c>`_) 694 695 sph_j1c(x): 646 696 Spherical Bessel form 647 $F(qr) = 3 j_1(qr)/(qr) = 3 (\sin(qr) - qr \cos(qr))/{(qr)^3}$, 648 with a limiting value of 1 at $qr=0$. This function uses a Taylor 649 series for small $qr$ for numerical accuracy. 697 $\text{sph_j1c}(x) = 3 j_1(x)/x = 3 (\sin(x) - x \cos(x))/x^3$, 698 with a limiting value of 1 at $x=0$, where $j_1(x)$ is the spherical 699 Bessel function of the first kind and first order. 700 701 This function uses a Taylor series for small $x$ for numerical accuracy. 650 702 651 703 :code:`source = ["lib/sph_j1c.c", ...]` 652 653 sas_J1c(qr): 654 Bessel form $F(qr) = 2 J_1(qr)/{(qr)}$, with a limiting value of 1 at $qr=0$. 704 (`link to code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sph_j1c.c>`_) 705 706 707 sas_J1c(x): 708 Bessel form $\text{sas_J1c}(x) = 2 J_1(x)/x$, with a limiting value 709 of 1 at $x=0$, where $J_1(x)$ is the Bessel function of first kind 710 and first order. 655 711 656 712 :code:`source = ["lib/polevl.c", "lib/sas_J1.c", ...]` 657 658 Gauss76z[i], Gauss76Wt[i]: 659 Points $z_i$ and weights $w_i$ for 76-point Gaussian quadrature, 660 computing $\int_{-1}^1 f(z)\,dz \approx \sum_{i=1}^{76} w_i f(z_i)$. 661 Similar arrays are available in :code:`gauss20.c` for 20 point 662 quadrature and in :code:`gauss150.c` for 150 point quadrature. 663 664 :code:`source = ["gauss76.c", ...]` 713 (`link to Bessel form's code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sas_J1.c>`_) 714 715 716 Gauss76Z[i], Gauss76Wt[i]: 717 Points $z_i$ and weights $w_i$ for 76-point Gaussian quadrature, respectively, 718 computing $\int_{-1}^1 f(z)\,dz \approx \sum_{i=1}^{76} w_i\,f(z_i)$. 719 720 Similar arrays are available in :code:`gauss20.c` for 20-point 721 quadrature and in :code:`gauss150.c` for 150-point quadrature. 722 723 :code:`source = ["lib/gauss76.c", ...]` 724 (`link to code <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/gauss76.c>`_) 725 726 665 727 666 728 Problems with C models
Note: See TracChangeset
for help on using the changeset viewer.