Changeset 668c38b in sasmodels
- Timestamp:
- Apr 6, 2017 5:27:16 AM (8 years ago)
- Branches:
- master, core_shell_microgels, costrafo411, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 133103b
- Parents:
- 9f91afe (diff), 650c6d2 (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. - Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
.travis.yml
rbec0e75 r01e551a 1 # Test Travis CL2 3 1 language: python 4 2 python: 5 - "2.7" 6 # whitelist 3 - '2.7' 7 4 branches: 8 5 only: 9 - master 10 # command to install dependencies 6 - master 11 7 virtualenv: 12 8 system_site_packages: true 13 9 before_install: 14 - sudo apt-get update; 15 - sudo apt-get install python-numpy python-scipy 16 # - sudo apt-get install opencl-headers 17 10 - sudo apt-get update; 11 - sudo apt-get install python-numpy python-scipy 18 12 install: 19 # - pip install pyopencl 20 - pip install bumps 21 - pip install unittest-xml-reporting 13 - pip install bumps 14 - pip install unittest-xml-reporting 22 15 script: 23 - export WORKSPACE=/home/travis/build/SasView/sasmodels/ 24 - python -m sasmodels.model_test dll all 16 - export WORKSPACE=/home/travis/build/SasView/sasmodels/ 17 - python -m sasmodels.model_test dll all 18 notifications: 19 slack: 20 secure: xNAUeSu1/it/x9Q2CSg79aw1LLc7d6mLpcqSCTeKROp71RhkFf8VjJnJm/lEbKHNC8yj5H9UHrz5DmzwJzI+6oMt4NdEeS6WvGhwGY/wCt2IcJKxw0vj1DAU04qFMS041Khwclo6jIqm76DloinXvmvsS+K/nSyQkF7q4egSlwA= -
LICENSE.txt
rc8de1bd rf68e2a5 1 This program is in the public domain. 1 Copyright (c) 2009-2017, SasView Developers 2 All rights reserved. 2 3 3 Individual files may be copyright different authors, with licences that 4 allow modification and redistribution in source or binary form with or 5 without modification, and a disclaimer of warranty. 4 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 5 6 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 7 8 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 9 10 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 11 12 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -
sasmodels/compare.py
rf72d70a r650c6d2 30 30 31 31 import sys 32 import os 32 33 import math 33 34 import datetime … … 40 41 from . import kerneldll 41 42 from . import exception 42 from .data import plot_theory, empty_data1D, empty_data2D 43 from .data import plot_theory, empty_data1D, empty_data2D, load_data 43 44 from .direct_model import DirectModel 44 45 from .convert import revert_name, revert_pars, constrain_new_to_old … … 85 86 -html shows the model docs instead of running the model 86 87 -title="note" adds note to the plot title, after the model name 88 -data="path" uses q, dq from the data file 87 89 88 90 Any two calculation engines can be selected for comparison: … … 544 546 'f32': '32', 545 547 'f64': '64', 548 'float16': '16', 549 'float32': '32', 550 'float64': '64', 551 'float128': '128', 546 552 'longdouble': '128', 547 553 } … … 747 753 comp = opts['engines'][1] if have_comp else None 748 754 data = opts['data'] 755 use_data = have_base ^ have_comp 749 756 750 757 # Plot if requested … … 763 770 if have_base: 764 771 if have_comp: plt.subplot(131) 765 plot_theory(data, base_value, view=view, use_data= False, limits=limits)772 plot_theory(data, base_value, view=view, use_data=use_data, limits=limits) 766 773 plt.title("%s t=%.2f ms"%(base.engine, base_time)) 767 774 #cbar_title = "log I" … … 769 776 if have_base: plt.subplot(132) 770 777 if not opts['is2d'] and have_base: 771 plot_theory(data, base_value, view=view, use_data= False, limits=limits)772 plot_theory(data, comp_value, view=view, use_data= False, limits=limits)778 plot_theory(data, base_value, view=view, use_data=use_data, limits=limits) 779 plot_theory(data, comp_value, view=view, use_data=use_data, limits=limits) 773 780 plt.title("%s t=%.2f ms"%(comp.engine, comp_time)) 774 781 #cbar_title = "log I" … … 784 791 err[err>cutoff] = cutoff 785 792 #err,errstr = base/comp,"ratio" 786 plot_theory(data, None, resid=err, view=errview, use_data= False)793 plot_theory(data, None, resid=err, view=errview, use_data=use_data) 787 794 if view == 'linear': 788 795 plt.xscale('linear') … … 834 841 VALUE_OPTIONS = [ 835 842 # Note: random is both a name option and a value option 836 'cutoff', 'random', 'nq', 'res', 'accuracy', 'title', 843 'cutoff', 'random', 'nq', 'res', 'accuracy', 'title', 'data', 837 844 ] 838 845 … … 951 958 'html' : False, 952 959 'title' : None, 960 'data' : None, 953 961 } 954 962 engines = [] … … 971 979 elif arg.startswith('-cutoff='): opts['cutoff'] = float(arg[8:]) 972 980 elif arg.startswith('-random='): opts['seed'] = int(arg[8:]) 973 elif arg.startswith('-title'): opts['title'] = arg[7:] 981 elif arg.startswith('-title='): opts['title'] = arg[7:] 982 elif arg.startswith('-data='): opts['data'] = arg[6:] 974 983 elif arg == '-random': opts['seed'] = np.random.randint(1000000) 975 984 elif arg == '-preset': opts['seed'] = -1 … … 1112 1121 1113 1122 # Create the computational engines 1114 data, _ = make_data(opts) 1123 if opts['data'] is not None: 1124 data = load_data(os.path.expanduser(opts['data'])) 1125 else: 1126 data, _ = make_data(opts) 1115 1127 if n1: 1116 1128 base = make_engine(model_info, data, engines[0], opts['cutoff']) … … 1142 1154 show html docs for the model 1143 1155 """ 1144 import wx # type: ignore 1145 from .generate import view_html_from_info 1146 app = wx.App() if wx.GetApp() is None else None 1147 view_html_from_info(opts['def'][0]) 1148 if app: app.MainLoop() 1149 1156 import os 1157 from .generate import make_html 1158 from . import rst2html 1159 1160 info = opts['def'][0] 1161 html = make_html(info) 1162 path = os.path.dirname(info.filename) 1163 url = "file://"+path.replace("\\","/")[2:]+"/" 1164 rst2html.view_html_qtapp(html, url) 1150 1165 1151 1166 def explore(opts): -
sasmodels/core.py
r5124c969 r650c6d2 250 250 dtype = "longdouble" 251 251 elif dtype == "half": 252 dtype = "f 16"252 dtype = "float16" 253 253 254 254 # Convert dtype string to numpy dtype. -
sasmodels/data.py
r40a87fa ra769b54 54 54 if data is None: 55 55 raise IOError("Data %r could not be loaded" % filename) 56 if hasattr(data, 'x'): 57 data.qmin, data.qmax = data.x.min(), data.x.max() 58 data.mask = (np.isnan(data.y) if data.y is not None 59 else np.zeros_like(data.x, dtype='bool')) 56 60 return data 57 61 … … 348 352 # data, but they already handle the masking and graph markup already, so 349 353 # do not repeat. 350 if hasattr(data, ' lam'):354 if hasattr(data, 'isSesans') and data.isSesans: 351 355 _plot_result_sesans(data, None, None, use_data=True, limits=limits) 352 356 elif hasattr(data, 'qx_data'): … … 376 380 *Iq_calc* is the raw theory values without resolution smearing 377 381 """ 378 if hasattr(data, ' lam'):382 if hasattr(data, 'isSesans') and data.isSesans: 379 383 _plot_result_sesans(data, theory, resid, use_data=True, limits=limits) 380 384 elif hasattr(data, 'qx_data'): -
sasmodels/direct_model.py
rb397165 ra769b54 192 192 193 193 # interpret data 194 if hasattr(data, ' lam'):194 if hasattr(data, 'isSesans') and data.isSesans: 195 195 self.data_type = 'sesans' 196 196 elif hasattr(data, 'qx_data'): -
sasmodels/generate.py
r1e7b0db0 rc4e3215 928 928 from . import rst2html 929 929 url = "file://"+dirname(info.filename)+"/" 930 rst2html. wxview(make_html(info), url=url)930 rst2html.view_html(make_html(info), url=url) 931 931 932 932 def demo_time(): -
sasmodels/models/hayter_msa.py
ra807206 r5702f52 74 74 ["radius_effective", "Ang", 20.75, [0, inf], "volume", "effective radius of charged sphere"], 75 75 ["volfraction", "None", 0.0192, [0, 0.74], "", "volume fraction of spheres"], 76 ["charge", "e", 19.0, [0, inf], "", "charge on sphere (in electrons)"],77 ["temperature", "K", 318.16, [0, inf], "", "temperature, in Kelvin, for Debye length calculation"],78 ["concentration_salt", "M", 0.0, [ -inf, inf], "", "conc of salt, moles/litre, 1:1 electolyte, for Debye length"],76 ["charge", "e", 19.0, [0, 200], "", "charge on sphere (in electrons)"], 77 ["temperature", "K", 318.16, [0, 450], "", "temperature, in Kelvin, for Debye length calculation"], 78 ["concentration_salt", "M", 0.0, [0, inf], "", "conc of salt, moles/litre, 1:1 electolyte, for Debye length"], 79 79 ["dielectconst", "None", 71.08, [-inf, inf], "", "dielectric constant (relative permittivity) of solvent, default water, for Debye length"] 80 80 ] -
sasmodels/rst2html.py
r0890871 rc4e3215 29 29 from docutils.writers.html4css1 import HTMLTranslator 30 30 from docutils.nodes import SkipNode 31 32 def wxview(html, url="", size=(850, 540)):33 import wx34 from wx.html2 import WebView35 frame = wx.Frame(None, -1, size=size)36 view = WebView.New(frame)37 view.SetPage(html, url)38 frame.Show()39 return frame40 41 def view_rst(filename):42 from os.path import expanduser43 with open(expanduser(filename)) as fid:44 rst = fid.read()45 html = rst2html(rst)46 wxview(html)47 31 48 32 def rst2html(rst, part="whole", math_output="mathjax"): … … 155 139 assert replace_dollar(u"a (again $in parens$) a") == u"a (again :math:`in parens`) a" 156 140 157 def view_rst_app(filename): 141 def load_rst_as_html(filename): 142 from os.path import expanduser 143 with open(expanduser(filename)) as fid: 144 rst = fid.read() 145 html = rst2html(rst) 146 return html 147 148 def wxview(html, url="", size=(850, 540)): 149 import wx 150 from wx.html2 import WebView 151 frame = wx.Frame(None, -1, size=size) 152 view = WebView.New(frame) 153 view.SetPage(html, url) 154 frame.Show() 155 return frame 156 157 def qtview(html, url=""): 158 try: 159 from PyQt5.QtWebKitWidgets import QWebView 160 from PyQt5.QtCore import QUrl 161 except ImportError: 162 from PyQt4.QtWebkit import QWebView 163 from PyQt4.QtCore import QUrl 164 helpView = QWebView() 165 helpView.setHtml(html, QUrl(url)) 166 helpView.show() 167 return helpView 168 169 def view_html_wxapp(html, url=""): 158 170 import wx # type: ignore 159 171 app = wx.App() 160 view_rst(filename)172 frame = wxview(html, url) 161 173 app.MainLoop() 162 174 175 def view_html_qtapp(html, url=""): 176 import sys 177 try: 178 from PyQt5.QtWidgets import QApplication 179 except ImportError: 180 from PyQt4.QtGui import QApplication 181 app = QApplication([]) 182 frame = qtview(html, url) 183 sys.exit(app.exec_()) 184 185 def view_rst_app(filename, qt=False): 186 import os 187 html = load_rst_as_html(filename) 188 url="file://"+os.path.abspath(filename)+"/" 189 if qt: 190 view_html_qtapp(html, url) 191 else: 192 view_html_wxapp(html, url) 163 193 164 194 if __name__ == "__main__": 165 195 import sys 166 view_rst_app(sys.argv[1] )196 view_rst_app(sys.argv[1], qt=True) 167 197 -
sasmodels/sesans.py
r94d13f1 r9f91afe 41 41 _H0 = None # type: np.ndarray 42 42 43 def __init__(self, z, SElength, zaccept, Rmax):43 def __init__(self, z, SElength, lam, zaccept, Rmax): 44 44 # type: (np.ndarray, float, float) -> None 45 45 #import logging; logging.info("creating SESANS transform") 46 46 self.q = z 47 self._set_hankel(SElength, zaccept, Rmax)47 self._set_hankel(SElength, lam, zaccept, Rmax) 48 48 49 49 def apply(self, Iq): … … 54 54 return P 55 55 56 def _set_hankel(self, SElength, zaccept, Rmax):56 def _set_hankel(self, SElength, lam, zaccept, Rmax): 57 57 # type: (np.ndarray, float, float) -> None 58 58 # Force float32 arrays, otherwise run into memory problems on some machines … … 71 71 H = np.float32(dq/(2*pi)) * j0(repSE*repq) * repq 72 72 73 replam = np.tile(lam, (q.size, 1)) 74 reptheta = np.arcsin(repq*replam/2*np.pi) 75 mask = reptheta > zaccept 76 H[mask] = 0 77 73 78 self.q_calc = q 74 79 self._H, self._H0 = H, H0
Note: See TracChangeset
for help on using the changeset viewer.