- Timestamp:
- Apr 6, 2017 5:27:16 AM (7 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. - Location:
- sasmodels
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
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.