- Timestamp:
- Dec 15, 2016 4:16:17 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.1.1, release-4.1.2, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- 55bc5a7f, a840efb
- Parents:
- c6728e1 (diff), ec57735 (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
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sascalc/dataloader/manipulations.py
rb699768 rb2b36932 143 143 :return: Data1D object 144 144 """ 145 if len(data2D.detector) !=1:145 if len(data2D.detector) > 1: 146 146 msg = "_Slab._avg: invalid number of " 147 147 msg += " detectors: %g" % len(data2D.detector) … … 299 299 error on number of counts, number of entries summed 300 300 """ 301 if len(data2D.detector) !=1:301 if len(data2D.detector) > 1: 302 302 msg = "Circular averaging: invalid number " 303 303 msg += "of detectors: %g" % len(data2D.detector) -
src/sas/sasgui/guiframe/local_perspectives/plotting/Plotter2D.py
r1a696bf rb2b36932 316 316 317 317 slicerpop.AppendSeparator() 318 if len(self.data2D.detector) == 1:318 if len(self.data2D.detector) <= 1: 319 319 item_list = self.parent.get_current_context_menu(self) 320 320 if (not item_list == None) and (not len(item_list) == 0) and\ -
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 -
src/sas/sascalc/data_util/qsmearing.py
rf8aa738 rc6728e1 5 5 #This software was developed by the University of Tennessee as part of the 6 6 #Distributed Data Analysis of Neutron Scattering Experiments (DANSE) 7 #project funded by the US National Science Foundation. 7 #project funded by the US National Science Foundation. 8 8 #See the license text in license.txt 9 9 #copyright 2008, University of Tennessee … … 13 13 import logging 14 14 import sys 15 from sasmodels import sesans 16 import numpy as np # type: ignore 17 from numpy import pi, exp # type: ignore 15 18 16 19 from sasmodels.resolution import Slit1D, Pinhole1D 20 from sasmodels.sesans import SESANS1D 17 21 from sasmodels.resolution2d import Pinhole2D 22 from src.sas.sascalc.data_util.nxsunit import Converter 23 18 24 19 25 def smear_selection(data, model = None): … … 36 42 # Sanity check. If we are not dealing with a SAS Data1D 37 43 # object, just return None 44 45 # This checks for 2D data (does not throw exception because fail is common) 38 46 if data.__class__.__name__ not in ['Data1D', 'Theory1D']: 39 47 if data == None: … … 42 50 return None 43 51 return Pinhole2D(data) 44 52 # This checks for 1D data with smearing info in the data itself (again, fail is likely; no exceptions) 45 53 if not hasattr(data, "dx") and not hasattr(data, "dxl")\ 46 54 and not hasattr(data, "dxw"): … … 48 56 49 57 # Look for resolution smearing data 58 # This is the code that checks for SESANS data; it looks for the file loader 59 # TODO: change other sanity checks to check for file loader instead of data structure? 60 _found_sesans = False 61 #if data.dx is not None and data.meta_data['loader']=='SESANS': 62 if data.dx is not None and data.isSesans: 63 #if data.dx[0] > 0.0: 64 if numpy.size(data.dx[data.dx <= 0]) == 0: 65 _found_sesans = True 66 #if data.dx[0] <= 0.0: 67 if numpy.size(data.dx[data.dx <= 0]) > 0: 68 raise ValueError('one or more of your dx values are negative, please check the data file!') 69 if _found_sesans == True: 70 #Pre-compute the Hankel matrix (H) 71 qmax, qunits = data.sample.zacceptance 72 hankel=sesans.SesansTransform() 73 sesans.SesansTransform.set_transform(hankel, 74 SE = Converter(data._xunit)(data.x, "A"), 75 zaccept = Converter(qunits)(qmax, "1/A"), 76 Rmax = 10000000) 77 # Then return the actual transform, as if it were a smearing function 78 return PySmear(SESANS1D(data, hankel._H0, hankel._H, hankel.q), model) 79 50 80 _found_resolution = False 51 81 if data.dx is not None and len(data.dx) == len(data.x): … … 92 122 self.model = model 93 123 self.resolution = resolution 94 self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0]) 124 if hasattr(self.resolution, 'data'): 125 if self.resolution.data.meta_data['loader'] == 'SESANS': # Always True if file extension is '.ses'! 126 self.offset = 0 127 # This is default behaviour, for future resolution/transform functions this needs to be revisited. 128 else: 129 self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0]) 130 else: 131 self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0]) 132 133 #self.offset = numpy.searchsorted(self.resolution.q_calc, self.resolution.q[0]) 95 134 96 135 def apply(self, iq_in, first_bin=0, last_bin=None): … … 126 165 q[first:last+1]. 127 166 """ 167 128 168 q = self.resolution.q 129 169 first = numpy.searchsorted(q, q_min) -
src/sas/sascalc/dataloader/data_info.py
r1b1a1c1 r1fac6c0 25 25 import numpy 26 26 import math 27 28 class plottable_sesans1D(object):29 """30 SESANS is a place holder for 1D SESANS plottables.31 32 #TODO: This was directly copied from the plottables_1D. Modified Somewhat.33 #Class has been updated.34 """35 # The presence of these should be mutually36 # exclusive with the presence of Qdev (dx)37 x = None38 y = None39 lam = None40 dx = None41 dy = None42 dlam = None43 ## Slit smearing length44 dxl = None45 ## Slit smearing width46 dxw = None47 48 # Units49 _xaxis = ''50 _xunit = ''51 _yaxis = ''52 _yunit = ''53 54 def __init__(self, x, y, lam, dx=None, dy=None, dlam=None):55 # print "SESANS plottable working"56 self.x = numpy.asarray(x)57 self.y = numpy.asarray(y)58 self.lam = numpy.asarray(lam)59 if dx is not None:60 self.dx = numpy.asarray(dx)61 if dy is not None:62 self.dy = numpy.asarray(dy)63 if dlam is not None:64 self.dlam = numpy.asarray(dlam)65 66 def xaxis(self, label, unit):67 """68 set the x axis label and unit69 """70 self._xaxis = label71 self._xunit = unit72 73 def yaxis(self, label, unit):74 """75 set the y axis label and unit76 """77 self._yaxis = label78 self._yunit = unit79 80 81 27 class plottable_1D(object): 82 28 """ … … 94 40 dxw = None 95 41 42 ## SESANS specific params (wavelengths for spin echo length calculation) 43 44 lam = None 45 dlam = None 46 96 47 # Units 97 48 _xaxis = '' … … 100 51 _yunit = '' 101 52 102 def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None ):53 def __init__(self, x, y, dx=None, dy=None, dxl=None, dxw=None, lam=None, dlam=None): 103 54 self.x = numpy.asarray(x) 104 55 self.y = numpy.asarray(y) … … 111 62 if dxw is not None: 112 63 self.dxw = numpy.asarray(dxw) 64 if lam is not None: 65 self.lam = numpy.asarray(lam) 66 if dlam is not None: 67 self.dlam = numpy.asarray(dlam) 113 68 114 69 def xaxis(self, label, unit): … … 736 691 return self._perform_union(other) 737 692 738 class SESANSData1D(plottable_sesans1D, DataInfo): 739 """ 740 SESANS 1D data class 741 """ 742 x_unit = 'nm' 743 y_unit = 'pol' 744 745 def __init__(self, x=None, y=None, lam=None, dx=None, dy=None, dlam=None): 693 class Data1D(plottable_1D, DataInfo): 694 """ 695 1D data class 696 """ 697 #if plottable_1D.lam is None: # This means it's SANS data! 698 # x_unit = '1/A' 699 # y_unit = '1/cm' 700 #elif plottable_1D.lam is not None: # This means it's SESANS data! 701 # x_unit = 'A' 702 # y_unit = 'pol' 703 #else: # and if it's neither, you get punished! 704 # raise(TypeError,'This is neither SANS nor SESANS data, what the hell are you doing??') 705 706 def __init__(self, x=None, y=None, dx=None, dy=None, lam=None, dlam=None, isSesans=False): 707 self.isSesans = isSesans 746 708 DataInfo.__init__(self) 747 plottable_sesans1D.__init__(self, x, y, lam, dx, dy, dlam) 709 plottable_1D.__init__(self, x, y, dx, dy,None, None, lam, dlam) 710 if self.isSesans: 711 x_unit = 'A' 712 y_unit = 'pol' 713 elif not self.isSesans: # it's SANS data! (Could also be simple else statement, but i prefer exhaustive conditionals...-JHB) 714 x_unit = '1/A' 715 y_unit = '1/cm' 716 else: # and if it's neither, you get punished! 717 raise(TypeError,'This is neither SANS nor SESANS data, what the hell are you doing??') 748 718 749 719 def __str__(self): … … 759 729 return _str 760 730 761 def clone_without_data(self, length=0, clone=None):762 """763 Clone the current object, without copying the data (which764 will be filled out by a subsequent operation).765 The data arrays will be initialized to zero.766 767 :param length: length of the data array to be initialized768 :param clone: if provided, the data will be copied to clone769 """770 from copy import deepcopy771 if clone is None or not issubclass(clone.__class__, Data1D):772 x = numpy.zeros(length)773 dx = numpy.zeros(length)774 y = numpy.zeros(length)775 dy = numpy.zeros(length)776 clone = Data1D(x, y, dx=dx, dy=dy)777 778 clone.title = self.title779 clone.run = self.run780 clone.filename = self.filename781 clone.instrument = self.instrument782 clone.notes = deepcopy(self.notes)783 clone.process = deepcopy(self.process)784 clone.detector = deepcopy(self.detector)785 clone.sample = deepcopy(self.sample)786 clone.source = deepcopy(self.source)787 clone.collimation = deepcopy(self.collimation)788 clone.trans_spectrum = deepcopy(self.trans_spectrum)789 clone.meta_data = deepcopy(self.meta_data)790 clone.errors = deepcopy(self.errors)791 792 return clone793 794 class Data1D(plottable_1D, DataInfo):795 """796 1D data class797 """798 x_unit = '1/A'799 y_unit = '1/cm'800 801 def __init__(self, x, y, dx=None, dy=None):802 DataInfo.__init__(self)803 plottable_1D.__init__(self, x, y, dx, dy)804 805 def __str__(self):806 """807 Nice printout808 """809 _str = "%s\n" % DataInfo.__str__(self)810 _str += "Data:\n"811 _str += " Type: %s\n" % self.__class__.__name__812 _str += " X-axis: %s\t[%s]\n" % (self._xaxis, self._xunit)813 _str += " Y-axis: %s\t[%s]\n" % (self._yaxis, self._yunit)814 _str += " Length: %g\n" % len(self.x)815 return _str816 817 731 def is_slit_smeared(self): 818 732 """ … … 843 757 y = numpy.zeros(length) 844 758 dy = numpy.zeros(length) 845 clone = Data1D(x, y, dx=dx, dy=dy) 759 lam = numpy.zeros(length) 760 dlam = numpy.zeros(length) 761 clone = Data1D(x, y, lam=lam, dx=dx, dy=dy, dlam=dlam ) 846 762 847 763 clone.title = self.title -
src/sas/sascalc/dataloader/readers/sesans_reader.py
r1c0e3b0 ra01af35 8 8 import numpy 9 9 import os 10 from sas.sascalc.dataloader.data_info import SESANSData1D10 from sas.sascalc.dataloader.data_info import Data1D 11 11 12 12 # Check whether we have a converter available … … 59 59 raise RuntimeError, "sesans_reader: cannot open %s" % path 60 60 buff = input_f.read() 61 # print buff62 61 lines = buff.splitlines() 63 # print lines64 #Jae could not find python universal line spliter:65 #keep the below for now66 # some ascii data has \r line separator,67 # try it when the data is on only one long line68 # if len(lines) < 2 :69 # lines = buff.split('\r')70 71 62 x = numpy.zeros(0) 72 63 y = numpy.zeros(0) … … 83 74 tdlam = numpy.zeros(0) 84 75 tdx = numpy.zeros(0) 85 # print "all good" 86 output = SESANSData1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam) 87 # print output 76 output = Data1D(x=x, y=y, lam=lam, dy=dy, dx=dx, dlam=dlam, isSesans=True ) 88 77 self.filename = output.filename = basename 89 78 90 # #Initialize counters for data lines and header lines.91 # is_data = False # Has more than 5 lines92 # # More than "5" lines of data is considered as actual93 # # data unless that is the only data94 # mum_data_lines = 595 # # To count # of current data candidate lines96 # i = -197 # # To count total # of previous data candidate lines98 # i1 = -199 # # To count # of header lines100 # j = -1101 # # Helps to count # of header lines102 # j1 = -1103 # #minimum required number of columns of data; ( <= 4).104 # lentoks = 2105 79 paramnames=[] 106 80 paramvals=[] … … 111 85 Pvals=[] 112 86 dPvals=[] 113 # print x114 # print zvals115 87 for line in lines: 116 88 # Initial try for CSV (split on ,) … … 122 94 if len(toks)>5: 123 95 zvals.append(toks[0]) 124 dzvals.append(toks[ 1])125 lamvals.append(toks[ 2])126 dlamvals.append(toks[ 3])127 Pvals.append(toks[ 4])128 dPvals.append(toks[ 5])96 dzvals.append(toks[3]) 97 lamvals.append(toks[4]) 98 dlamvals.append(toks[5]) 99 Pvals.append(toks[1]) 100 dPvals.append(toks[2]) 129 101 else: 130 102 continue … … 140 112 default_z_unit = "A" 141 113 data_conv_P = None 142 default_p_unit = " " 114 default_p_unit = " " # Adjust unit for axis (L^-3) 143 115 lam_unit = lam_header[1].replace("[","").replace("]","") 116 if lam_unit == 'AA': 117 lam_unit = 'A' 144 118 varheader=[zvals[0],dzvals[0],lamvals[0],dlamvals[0],Pvals[0],dPvals[0]] 145 119 valrange=range(1, len(zvals)) … … 161 135 output.x, output.x_unit = self._unit_conversion(x, lam_unit, default_z_unit) 162 136 output.y = y 137 output.y_unit = '\AA^{-2} cm^{-1}' # output y_unit erbij 163 138 output.dx, output.dx_unit = self._unit_conversion(dx, lam_unit, default_z_unit) 164 139 output.dy = dy … … 166 141 output.dlam, output.dlam_unit = self._unit_conversion(dlam, lam_unit, default_z_unit) 167 142 168 output.xaxis("\ rm{z}", output.x_unit)169 output.yaxis("\\rm{ P/P0}", output.y_unit)143 output.xaxis("\\rm{z}", output.x_unit) 144 output.yaxis("\\rm{ln(P)/(t \lambda^2)}", output.y_unit) # Adjust label to ln P/(lam^2 t), remove lam column refs 170 145 # Store loading process information 171 146 output.meta_data['loader'] = self.type_name 172 output.sample.thickness = float(paramvals[6])147 #output.sample.thickness = float(paramvals[6]) 173 148 output.sample.name = paramvals[1] 174 149 output.sample.ID = paramvals[0] 175 150 zaccept_unit_split = paramnames[7].split("[") 176 151 zaccept_unit = zaccept_unit_split[1].replace("]","") 177 if zaccept_unit.strip() == '\AA^-1' :152 if zaccept_unit.strip() == '\AA^-1' or zaccept_unit.strip() == '\A^-1': 178 153 zaccept_unit = "1/A" 179 154 output.sample.zacceptance=(float(paramvals[7]),zaccept_unit) -
src/sas/sascalc/fit/AbstractFitEngine.py
rfc18690 r7988501 131 131 a way to get residuals from data. 132 132 """ 133 def __init__(self, x, y, dx=None, dy=None, smearer=None, data=None ):133 def __init__(self, x, y, dx=None, dy=None, smearer=None, data=None, lam=None, dlam=None): 134 134 """ 135 135 :param smearer: is an object of class QSmearer or SlitSmearer … … 152 152 153 153 """ 154 Data1D.__init__(self, x=x, y=y, dx=dx, dy=dy )154 Data1D.__init__(self, x=x, y=y, dx=dx, dy=dy, lam=lam,dlam=dlam) 155 155 self.num_points = len(x) 156 156 self.sas_data = data -
src/sas/sascalc/fit/BumpsFitting.py
r1a5d5f2 rf668101 27 27 from bumps import parameter 28 28 from bumps.fitproblem import FitProblem 29 30 29 31 30 from sas.sascalc.fit.AbstractFitEngine import FitEngine -
src/sas/sasgui/guiframe/dataFitting.py
r9b6d62d r1fac6c0 17 17 """ 18 18 """ 19 def __init__(self, x=None, y=None, dx=None, dy=None ):19 def __init__(self, x=None, y=None, dx=None, dy=None, lam=None, dlam=None, isSesans=False): 20 20 """ 21 21 """ … … 24 24 if y is None: 25 25 y = [] 26 PlotData1D.__init__(self, x, y, dx, dy) 27 LoadData1D.__init__(self, x, y, dx, dy) 26 self.isSesans = isSesans 27 PlotData1D.__init__(self, x, y, dx, dy, lam, dlam) 28 LoadData1D.__init__(self, x, y, dx, dy, lam, dlam, isSesans) 28 29 self.id = None 29 30 self.list_group_id = [] … … 68 69 # First, check the data compatibility 69 70 dy, dy_other = self._validity_check(other) 70 result = Data1D(x=[], y=[], dx=None, dy=None)71 result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=None) 71 72 result.clone_without_data(length=len(self.x), clone=self) 72 73 result.copy_from_datainfo(data1d=self) … … 115 116 # First, check the data compatibility 116 117 self._validity_check_union(other) 117 result = Data1D(x=[], y=[], dx=None, dy=None)118 result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=None) 118 119 tot_length = len(self.x) + len(other.x) 119 120 result = self.clone_without_data(length=tot_length, clone=result) 121 if self.dlam == None or other.dlam is None: 122 result.dlam = None 123 else: 124 result.dlam = numpy.zeros(tot_length) 120 125 if self.dy == None or other.dy is None: 121 126 result.dy = None … … 141 146 result.y = numpy.append(self.y, other.y) 142 147 result.y = result.y[ind] 148 result.lam = numpy.append(self.lam, other.lam) 149 result.lam = result.lam[ind] 150 if result.dlam != None: 151 result.dlam = numpy.append(self.dlam, other.dlam) 152 result.dlam = result.dlam[ind] 143 153 if result.dy != None: 144 154 result.dy = numpy.append(self.dy, other.dy) … … 260 270 # First, check the data compatibility 261 271 self._validity_check_union(other) 262 result = Data1D(x=[], y=[], dx=None, dy=None)272 result = Data1D(x=[], y=[], lam=[], dx=None, dy=None, dlam=[]) 263 273 tot_length = len(self.x)+len(other.x) 264 274 result.clone_without_data(length=tot_length, clone=self) 275 if self.dlam == None or other.dlam is None: 276 result.dlam = None 277 else: 278 result.dlam = numpy.zeros(tot_length) 265 279 if self.dy == None or other.dy is None: 266 280 result.dy = None … … 285 299 result.y = numpy.append(self.y, other.y) 286 300 result.y = result.y[ind] 301 result.lam = numpy.append(self.lam, other.lam) 302 result.lam = result.lam[ind] 287 303 if result.dy != None: 288 304 result.dy = numpy.append(self.dy, other.dy) -
src/sas/sasgui/guiframe/data_manager.py
rd85c194 r1fac6c0 62 62 if issubclass(Data2D, data.__class__): 63 63 new_plot = Data2D(image=None, err_image=None) 64 else: 65 new_plot = Data1D(x=[], y=[], dx=None, dy=None) 64 elif data.meta_data['loader'] == 'SESANS': 65 new_plot = Data1D(x=[], y=[], dx=None, dy=None, lam=None, dlam=None, isSesans=True) 66 else: 67 new_plot = Data1D(x=[], y=[], dx=None, dy=None, lam=None, dlam=None) #SESANS check??? 66 68 67 69 new_plot.copy_from_datainfo(data) -
src/sas/sasgui/perspectives/fitting/basepage.py
rc8e1996 rf668101 143 143 self.theory_qmin_x = None 144 144 self.theory_qmax_x = None 145 self.cb1 = None 145 146 self.btEditMask = None 146 147 self.btFit = None … … 281 282 num=self.npts_x, endpoint=True) 282 283 self.data = Data1D(x=x) 283 self.data.xaxis('\\rm{Q}', "A^{-1}") 284 self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 284 #self.data.xaxis('\\rm{Q}', "A^{-1}") 285 self.data.xaxis('\\rm{X}', "") 286 #self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 287 self.data.yaxis('\\rm{Y}', "") 285 288 self.data.is_data = False 286 289 self.data.id = str(self.uid) + " data" … … 307 310 num=self.npts_x, endpoint=True, base=10.0) 308 311 self.data = Data1D(x=x) 309 self.data.xaxis('\\rm{Q}', "A^{-1}") 310 self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 312 #self.data.xaxis('\\rm{Q}', "A^{-1}") 313 #self.data.yaxis('\\rm{Intensity}', "cm^{-1}") 314 self.data.xaxis('\\rm{X}', "") 315 self.data.yaxis('\\rm{Y}', "") 311 316 self.data.is_data = False 312 317 self.data.id = str(self.uid) + " data" … … 1124 1129 # set data, etc. from the state 1125 1130 # reset page between theory and fitting from bookmarking 1131 #if state.data == None: 1132 # data = None 1133 #else: 1126 1134 data = state.data 1127 1135 … … 1340 1348 except Exception: 1341 1349 logging.error(traceback.format_exc()) 1350 1351 # Make sure the check box updated when all checked 1352 if self.cb1.GetValue(): 1353 self.select_all_param(None) 1342 1354 1343 1355 def _selectDlg(self): … … 2481 2493 item[2].Enable() 2482 2494 2483 # Make sure the check box updated 2484 self.get_all_checked_params() 2495 # Make sure the check box updated when all checked 2496 if self.cb1.GetValue(): 2497 #self.select_all_param(None) 2498 self.get_all_checked_params() 2485 2499 2486 2500 # update params … … 3661 3675 call back for model selection if implemented 3662 3676 """ 3677 def select_all_param(self, event): 3678 """ 3679 set to true or false all checkBox if implemented 3680 """ 3663 3681 def get_weight_flag(self): 3664 3682 """ -
src/sas/sasgui/perspectives/fitting/fitpage.py
rc8e1996 rf668101 168 168 self.set_data(data) 169 169 elif self.dataSource.GetCount() > 0: 170 170 171 pos = self.dataSource.GetSelection() 171 172 data = self.dataSource.GetClientData(pos) … … 617 618 # fill a sizer with the combobox to select dispersion type 618 619 model_disp = wx.StaticText(self, wx.ID_ANY, 'Function') 619 CHECK_STATE = False620 CHECK_STATE = self.cb1.GetValue() 620 621 621 622 ix = 0 … … 961 962 962 963 self.state.model = self.model.clone() 964 963 965 # save state into 964 966 self._copy_parameters_state(self.parameters, self.state.parameters) … … 971 973 wx.PostEvent(self.parent, 972 974 StatusEvent(status=" Selected Distribution: Gaussian")) 975 973 976 # Fill the list of fittable parameters 974 977 self.get_all_checked_params() … … 2682 2685 self._manager.set_param2fit(self.uid, param2fit) 2683 2686 2687 2684 2688 def select_param(self, event=None): 2685 2689 """ … … 2728 2732 if len(self.fittable_param) > 0: 2729 2733 len_orient_para *= 2 2734 #Set the value of checkbox that selected every checkbox or not 2735 if len(self.parameters) + len(self.fittable_param) - len_orient_para \ 2736 == len(self.param_toFit): 2737 self.cb1.SetValue(True) 2738 else: 2739 self.cb1.SetValue(False) 2730 2740 2731 2741 self.save_current_state_fit() … … 2829 2839 iy = 0 2830 2840 ix = 0 2831 sizer.Add(wx.StaticText(self, wx.ID_ANY, 'Parameter'), 2832 (iy, ix), (1, 1), wx.EXPAND | wx.ADJUST_MINSIZE, 0) 2841 select_text = "Select All" 2842 self.cb1 = wx.CheckBox(self, wx.ID_ANY, str(select_text), (10, 10)) 2843 wx.EVT_CHECKBOX(self, self.cb1.GetId(), self.select_all_param) 2844 self.cb1.SetToolTipString("To check/uncheck all the boxes below.") 2845 self.cb1.SetValue(True) 2846 2847 sizer.Add(self.cb1, (iy, ix), (1, 1), \ 2848 wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 2833 2849 ix += 1 2834 2850 self.text2_2 = wx.StaticText(self, wx.ID_ANY, 'Value') … … 2857 2873 self.text2_4.Hide() 2858 2874 2859 CHECK_STATE = False2875 CHECK_STATE = self.cb1.GetValue() 2860 2876 for item in keys: 2861 2877 -
src/sas/sasgui/plottools/plottables.py
r80f4684 rf668101 1023 1023 """ 1024 1024 1025 def __init__(self, x, y, dx=None, dy=None ):1025 def __init__(self, x, y, dx=None, dy=None, lam=None, dlam=None): 1026 1026 """ 1027 1027 Draw points specified by x[i],y[i] in the current color/symbol. … … 1037 1037 self.x = x 1038 1038 self.y = y 1039 self.lam = lam 1039 1040 self.dx = dx 1040 1041 self.dy = dy 1042 self.dlam = dlam 1041 1043 self.source = None 1042 1044 self.detector = None
Note: See TracChangeset
for help on using the changeset viewer.