Changes in / [c036ddb:7e923c2] in sasmodels
- Files:
-
- 1 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/guide/gpu_setup.rst
r59485a4 r63602b1 139 139 the compiler. 140 140 141 On Windows, set *SAS COMPILER=tinycc* for the tinycc compiler,142 *SAS COMPILER=msvc* for the Microsoft Visual C compiler,143 or *SAS COMPILER=mingw* for the MinGW compiler. If TinyCC is available141 On Windows, set *SAS_COMPILER=tinycc* for the tinycc compiler, 142 *SAS_COMPILER=msvc* for the Microsoft Visual C compiler, 143 or *SAS_COMPILER=mingw* for the MinGW compiler. If TinyCC is available 144 144 on the python path (it is provided with SasView), that will be the 145 145 default. If you want one of the other compilers, be sure to have it -
example/model_ellipsoid_hayter_msa.py
r8a5f021 r9a99993 16 16 17 17 # DEFINE THE MODEL 18 kernel = load_model('ellipsoid *hayter_msa')18 kernel = load_model('ellipsoid@hayter_msa') 19 19 20 20 pars = dict(scale=6.4, background=0.06, sld=0.33, sld_solvent=2.15, radius_polar=14.0, -
sasmodels/compare.py
r1e7b202a raf7a97c 112 112 -edit starts the parameter explorer 113 113 -help/-html shows the model docs instead of running the model 114 115 === environment variables === 116 -DSAS_MODELPATH=path sets directory containing custom models 117 -DSAS_OPENCL=vendor:device|none sets the target OpenCL device 118 -DXDG_CACHE_HOME=~/.cache sets the pyopencl cache root (linux only) 119 -DSAS_COMPILER=tinycc|msvc|mingw|unix sets the DLL compiler 120 -DSAS_OPENMP=1 turns on OpenMP for the DLLs 121 -DSAS_DLL_PATH=path sets the path to the compiled modules 114 122 115 123 The interpretation of quad precision depends on architecture, and may … … 1113 1121 1114 1122 invalid = [o[1:] for o in flags 1115 if o[1:] not in NAME_OPTIONS 1116 and not any(o.startswith('-%s='%t) for t in VALUE_OPTIONS)] 1123 if not (o[1:] in NAME_OPTIONS 1124 or any(o.startswith('-%s='%t) for t in VALUE_OPTIONS) 1125 or o.startswith('-D'))] 1117 1126 if invalid: 1118 1127 print("Invalid options: %s"%(", ".join(invalid))) … … 1215 1224 elif arg == '-html': opts['html'] = True 1216 1225 elif arg == '-help': opts['html'] = True 1226 elif arg.startswith('-D'): 1227 var, val = arg[2:].split('=') 1228 os.environ[var] = val 1217 1229 # pylint: enable=bad-whitespace,C0321 1218 1230 -
sasmodels/core.py
rc036ddb rc036ddb 37 37 if CUSTOM_MODEL_PATH == "": 38 38 CUSTOM_MODEL_PATH = joinpath(os.path.expanduser("~"), ".sasmodels", "custom_models") 39 if not os.path.isdir(CUSTOM_MODEL_PATH):40 os.makedirs(CUSTOM_MODEL_PATH)39 #if not os.path.isdir(CUSTOM_MODEL_PATH): 40 # os.makedirs(CUSTOM_MODEL_PATH) 41 41 42 42 # TODO: refactor composite model support … … 232 232 if not callable(model_info.Iq): 233 233 source = generate.make_source(model_info)['dll'] 234 old_path = kerneldll. DLL_PATH234 old_path = kerneldll.SAS_DLL_PATH 235 235 try: 236 kerneldll. DLL_PATH = path236 kerneldll.SAS_DLL_PATH = path 237 237 dll = kerneldll.make_dll(source, model_info, dtype=numpy_dtype) 238 238 finally: 239 kerneldll. DLL_PATH = old_path239 kerneldll.SAS_DLL_PATH = old_path 240 240 compiled_dlls.append(dll) 241 241 return compiled_dlls -
sasmodels/data.py
rc036ddb rc036ddb 502 502 # Note: masks merge, so any masked theory points will stay masked, 503 503 # and the data mask will be added to it. 504 mtheory = masked_array(theory, data.mask.copy()) 504 #mtheory = masked_array(theory, data.mask.copy()) 505 theory_x = data.x[data.mask == 0] 506 mtheory = masked_array(theory) 505 507 mtheory[~np.isfinite(mtheory)] = masked 506 508 if view is 'log': 507 509 mtheory[mtheory <= 0] = masked 508 plt.plot( data.x, scale*mtheory, '-')510 plt.plot(theory_x, scale*mtheory, '-') 509 511 all_positive = all_positive and (mtheory > 0).all() 510 512 some_present = some_present or (mtheory.count() > 0) … … 542 544 543 545 if use_resid: 544 mresid = masked_array(resid, data.mask.copy()) 546 theory_x = data.x[data.mask == 0] 547 mresid = masked_array(resid) 545 548 mresid[~np.isfinite(mresid)] = masked 546 549 some_present = (mresid.count() > 0) … … 548 551 if num_plots > 1: 549 552 plt.subplot(1, num_plots, use_calc + 2) 550 plt.plot( data.x, mresid, '.')553 plt.plot(theory_x, mresid, '.') 551 554 plt.xlabel("$q$/A$^{-1}$") 552 555 plt.ylabel('residuals') -
sasmodels/direct_model.py
rd18d6dd r1a8c11c 250 250 qmax = getattr(data, 'qmax', np.inf) 251 251 accuracy = getattr(data, 'accuracy', 'Low') 252 index = ~data.mask& (q >= qmin) & (q <= qmax)252 index = (data.mask == 0) & (q >= qmin) & (q <= qmax) 253 253 if data.data is not None: 254 254 index &= ~np.isnan(data.data) … … 263 263 elif self.data_type == 'Iq': 264 264 index = (data.x >= data.qmin) & (data.x <= data.qmax) 265 mask = getattr(data, 'mask', None) 266 if mask is not None: 267 index &= (mask == 0) 265 268 if data.y is not None: 266 269 index &= ~np.isnan(data.y) -
sasmodels/kerneldll.py
rc036ddb rc036ddb 99 99 pass 100 100 # pylint: enable=unused-import 101 102 if "SAS_DLL_PATH" in os.environ: 103 SAS_DLL_PATH = os.environ["SAS_DLL_PATH"] 104 else: 105 # Assume the default location of module DLLs is in .sasmodels/compiled_models. 106 SAS_DLL_PATH = os.path.join(os.path.expanduser("~"), ".sasmodels", "compiled_models") 101 107 102 108 if "SAS_COMPILER" in os.environ: … … 161 167 return CC + [source, "-o", output, "-lm"] 162 168 163 # Assume the default location of module DLLs is in .sasmodels/compiled_models.164 DLL_PATH = os.path.join(os.path.expanduser("~"), ".sasmodels", "compiled_models")165 166 169 ALLOW_SINGLE_PRECISION_DLLS = True 167 170 … … 200 203 return path 201 204 202 return joinpath( DLL_PATH, basename)205 return joinpath(SAS_DLL_PATH, basename) 203 206 204 207 … … 209 212 exist yet if it hasn't been compiled. 210 213 """ 211 return os.path.join( DLL_PATH, dll_name(model_info, dtype))214 return os.path.join(SAS_DLL_PATH, dll_name(model_info, dtype)) 212 215 213 216 … … 228 231 models are not allowed as DLLs. 229 232 230 Set *sasmodels.kerneldll.DLL_PATH* to the compiled dll output path. 233 Set *sasmodels.kerneldll.SAS_DLL_PATH* to the compiled dll output path. 234 Alternatively, set the environment variable *SAS_DLL_PATH*. 231 235 The default is in ~/.sasmodels/compiled_models. 232 236 """ … … 247 251 if need_recompile: 248 252 # Make sure the DLL path exists 249 if not os.path.exists( DLL_PATH):250 os.makedirs( DLL_PATH)253 if not os.path.exists(SAS_DLL_PATH): 254 os.makedirs(SAS_DLL_PATH) 251 255 basename = splitext(os.path.basename(dll))[0] + "_" 252 256 system_fd, filename = tempfile.mkstemp(suffix=".c", prefix=basename) -
sasmodels/model_test.py
- Property mode changed from 100644 to 100755
r3221de0 r012cd34 376 376 stream.writeln(traceback.format_exc()) 377 377 return 378 # Run the test suite379 suite.run(result)380 381 # Print the failures and errors382 for _, tb in result.errors:383 stream.writeln(tb)384 for _, tb in result.failures:385 stream.writeln(tb)386 378 387 379 # Warn if there are no user defined tests. … … 393 385 # iterator since we don't have direct access to the list of tests in the 394 386 # test suite. 387 # In Qt5 suite.run() will clear all tests in the suite after running 388 # with no way of retaining them for the test below, so let's check 389 # for user tests before running the suite. 395 390 for test in suite: 396 391 if not test.info.tests: … … 399 394 else: 400 395 stream.writeln("Note: no test suite created --- this should never happen") 396 397 # Run the test suite 398 suite.run(result) 399 400 # Print the failures and errors 401 for _, tb in result.errors: 402 stream.writeln(tb) 403 for _, tb in result.failures: 404 stream.writeln(tb) 401 405 402 406 output = stream.getvalue() -
sasmodels/modelinfo.py
rc036ddb rc036ddb 585 585 Parameter('up:frac_f', '', 0., [0., 1.], 586 586 'magnetic', 'fraction of spin up final'), 587 Parameter('up:angle', 'degre ss', 0., [0., 360.],587 Parameter('up:angle', 'degrees', 0., [0., 360.], 588 588 'magnetic', 'spin up angle'), 589 589 ]) -
sasmodels/models/guinier.py
r2d81cfe rc9fc873 7 7 .. math:: 8 8 9 I(q) = \text{scale} \cdot \exp{\left[ \frac{-Q^2 R_g^2}{3} \right]}9 I(q) = \text{scale} \cdot \exp{\left[ \frac{-Q^2 R_g^2 }{3} \right]} 10 10 + \text{background} 11 11 … … 19 19 20 20 .. math:: q = \sqrt{q_x^2 + q_y^2} 21 22 In scattering, the radius of gyration $R_g$ quantifies the objects's 23 distribution of SLD (not mass density, as in mechanics) from the objects's 24 SLD centre of mass. It is defined by 25 26 .. math:: R_g^2 = \frac{\sum_i\rho_i\left(r_i-r_0\right)^2}{\sum_i\rho_i} 27 28 where $r_0$ denotes the object's SLD centre of mass and $\rho_i$ is the SLD at 29 a point $i$. 30 31 Notice that $R_g^2$ may be negative (since SLD can be negative), which happens 32 when a form factor $P(Q)$ is increasing with $Q$ rather than decreasing. This 33 can occur for core/shell particles, hollow particles, or for composite 34 particles with domains of different SLDs in a solvent with an SLD close to the 35 average match point. (Alternatively, this might be regarded as there being an 36 internal inter-domain "structure factor" within a single particle which gives 37 rise to a peak in the scattering). 38 39 To specify a negative value of $R_g^2$ in SasView, simply give $R_g$ a negative 40 value ($R_g^2$ will be evaluated as $R_g |R_g|$). Note that the physical radius 41 of gyration, of the exterior of the particle, will still be large and positive. 42 It is only the apparent size from the small $Q$ data that will give a small or 43 negative value of $R_g^2$. 21 44 22 45 References … … 42 65 43 66 # ["name", "units", default, [lower, upper], "type","description"], 44 parameters = [["rg", "Ang", 60.0, [ 0, inf], "", "Radius of Gyration"]]67 parameters = [["rg", "Ang", 60.0, [-inf, inf], "", "Radius of Gyration"]] 45 68 46 69 Iq = """ 47 double exponent = rg*rg*q*q/3.0;70 double exponent = fabs(rg)*rg*q*q/3.0; 48 71 double value = exp(-exponent); 49 72 return value; … … 66 89 67 90 # parameters for demo 68 demo = dict(scale=1.0, rg=60.0)91 demo = dict(scale=1.0, background=0.001, rg=60.0 ) 69 92 70 93 # parameters for unit tests -
sasmodels/resolution.py
r0b9c6df r9e7837a 20 20 MINIMUM_RESOLUTION = 1e-8 21 21 MINIMUM_ABSOLUTE_Q = 0.02 # relative to the minimum q in the data 22 PINHOLE_N_SIGMA = 2.5 # From: Barker & Pedersen 1995 JAC 22 # According to (Barker & Pedersen 1995 JAC), 2.5 sigma is a good limit. 23 # According to simulations with github.com:scattering/sansresolution.git 24 # it is better to use asymmetric bounds (2.5, 3.0) 25 PINHOLE_N_SIGMA = (2.5, 3.0) 23 26 24 27 class Resolution(object): … … 90 93 # from the geometry, they may appear since we are using a truncated 91 94 # gaussian to represent resolution rather than a skew distribution. 92 cutoff = MINIMUM_ABSOLUTE_Q*np.min(self.q)93 self.q_calc = self.q_calc[self.q_calc >= cutoff]95 #cutoff = MINIMUM_ABSOLUTE_Q*np.min(self.q) 96 #self.q_calc = self.q_calc[self.q_calc >= cutoff] 94 97 95 98 # Build weight matrix from calculated q values … … 188 191 cdf = erf((edges[:, None] - q[None, :]) / (sqrt(2.0)*q_width)[None, :]) 189 192 weights = cdf[1:] - cdf[:-1] 190 # Limit q range to +/- 2.5 sigma 191 qhigh = q + nsigma*q_width 192 #qlow = q - nsigma*q_width # linear limits 193 qlow = q*q/qhigh # log limits 193 # Limit q range to (-2.5,+3) sigma 194 try: 195 nsigma_low, nsigma_high = nsigma 196 except TypeError: 197 nsigma_low = nsigma_high = nsigma 198 qhigh = q + nsigma_high*q_width 199 qlow = q - nsigma_low*q_width # linear limits 200 ##qlow = q*q/qhigh # log limits 194 201 weights[q_calc[:, None] < qlow[None, :]] = 0. 195 202 weights[q_calc[:, None] > qhigh[None, :]] = 0. … … 365 372 366 373 367 def pinhole_extend_q(q, q_width, nsigma= 3):374 def pinhole_extend_q(q, q_width, nsigma=PINHOLE_N_SIGMA): 368 375 """ 369 376 Given *q* and *q_width*, find a set of sampling points *q_calc* so … … 371 378 function. 372 379 """ 373 q_min, q_max = np.min(q - nsigma*q_width), np.max(q + nsigma*q_width) 380 try: 381 nsigma_low, nsigma_high = nsigma 382 except TypeError: 383 nsigma_low = nsigma_high = nsigma 384 q_min, q_max = np.min(q - nsigma_low*q_width), np.max(q + nsigma_high*q_width) 374 385 return linear_extrapolation(q, q_min, q_max) 375 386
Note: See TracChangeset
for help on using the changeset viewer.