Changes in / [7eb2a4d:eeb772e] in sasmodels
- Files:
-
- 6 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/guide/index.rst
rda5536f rbc69321 12 12 pd/polydispersity.rst 13 13 resolution.rst 14 plugin.rst 15 fitting_sq.rst 14 16 magnetism/magnetism.rst 15 17 orientation/orientation.rst 16 18 sesans/sans_to_sesans.rst 17 19 sesans/sesans_fitting.rst 18 plugin.rst19 20 scripting.rst 20 21 refs.rst -
doc/guide/pd/polydispersity.rst
rd089a00 ra5cb9bc 11 11 -------------------------------------------- 12 12 13 For some models we can calculate the average intensity for a population of 14 particles that possess size and/or orientational (ie, angular) distributions. 15 In SasView we call the former *polydispersity* but use the parameter *PD* to 16 parameterise both. In other words, the meaning of *PD* in a model depends on 13 For some models we can calculate the average intensity for a population of 14 particles that possess size and/or orientational (ie, angular) distributions. 15 In SasView we call the former *polydispersity* but use the parameter *PD* to 16 parameterise both. In other words, the meaning of *PD* in a model depends on 17 17 the actual parameter it is being applied too. 18 18 19 The resultant intensity is then normalized by the average particle volume such 19 The resultant intensity is then normalized by the average particle volume such 20 20 that 21 21 … … 24 24 P(q) = \text{scale} \langle F^* F \rangle / V + \text{background} 25 25 26 where $F$ is the scattering amplitude and $\langle\cdot\rangle$ denotes an 26 where $F$ is the scattering amplitude and $\langle\cdot\rangle$ denotes an 27 27 average over the distribution $f(x; \bar x, \sigma)$, giving 28 28 29 29 .. math:: 30 30 31 P(q) = \frac{\text{scale}}{V} \int_\mathbb{R} 31 P(q) = \frac{\text{scale}}{V} \int_\mathbb{R} 32 32 f(x; \bar x, \sigma) F^2(q, x)\, dx + \text{background} 33 33 34 34 Each distribution is characterized by a center value $\bar x$ or 35 35 $x_\text{med}$, a width parameter $\sigma$ (note this is *not necessarily* 36 the standard deviation, so read the description of the distribution carefully), 37 the number of sigmas $N_\sigma$ to include from the tails of the distribution, 38 and the number of points used to compute the average. The center of the 39 distribution is set by the value of the model parameter. 40 41 The distribution width applied to *volume* (ie, shape-describing) parameters 42 is relative to the center value such that $\sigma = \mathrm{PD} \cdot \bar x$. 43 However, the distribution width applied to *orientation* parameters is just 44 $\sigma = \mathrm{PD}$. 36 the standard deviation, so read the description carefully), the number of 37 sigmas $N_\sigma$ to include from the tails of the distribution, and the 38 number of points used to compute the average. The center of the distribution 39 is set by the value of the model parameter. The meaning of a polydispersity 40 parameter *PD* (not to be confused with a molecular weight distributions 41 in polymer science) in a model depends on the type of parameter it is being 42 applied too. 43 44 The distribution width applied to *volume* (ie, shape-describing) parameters 45 is relative to the center value such that $\sigma = \mathrm{PD} \cdot \bar x$. 46 However, the distribution width applied to *orientation* (ie, angle-describing) 47 parameters is just $\sigma = \mathrm{PD}$. 45 48 46 49 $N_\sigma$ determines how far into the tails to evaluate the distribution, … … 52 55 53 56 Users should note that the averaging computation is very intensive. Applying 54 polydispersion and/or orientational distributions to multiple parameters at 55 the same time, or increasing the number of points in the distribution, will 56 require patience! However, the calculations are generally more robust with 57 polydispersion and/or orientational distributions to multiple parameters at 58 the same time, or increasing the number of points in the distribution, will 59 require patience! However, the calculations are generally more robust with 57 60 more data points or more angles. 58 61 … … 66 69 * *Schulz Distribution* 67 70 * *Array Distribution* 71 * *User-defined Distributions* 68 72 69 73 These are all implemented as *number-average* distributions. 70 74 71 Additional distributions are under consideration.72 75 73 76 **Beware: when the Polydispersity & Orientational Distribution panel in SasView is** … … 75 78 **This may not be suitable. See Suggested Applications below.** 76 79 77 .. note:: In 2009 IUPAC decided to introduce the new term 'dispersity' to replace 78 the term 'polydispersity' (see `Pure Appl. Chem., (2009), 81(2), 79 351-353 <http://media.iupac.org/publications/pac/2009/pdf/8102x0351.pdf>`_ 80 in order to make the terminology describing distributions of chemical 81 properties unambiguous. However, these terms are unrelated to the 82 proportional size distributions and orientational distributions used in 80 .. note:: In 2009 IUPAC decided to introduce the new term 'dispersity' to replace 81 the term 'polydispersity' (see `Pure Appl. Chem., (2009), 81(2), 82 351-353 <http://media.iupac.org/publications/pac/2009/pdf/8102x0351.pdf>`_ 83 in order to make the terminology describing distributions of chemical 84 properties unambiguous. However, these terms are unrelated to the 85 proportional size distributions and orientational distributions used in 83 86 SasView models. 84 87 … … 92 95 or angular orientations, consider using the Gaussian or Boltzmann distributions. 93 96 94 If applying polydispersion to parameters describing angles, use the Uniform 95 distribution. Beware of using distributions that are always positive (eg, the 97 If applying polydispersion to parameters describing angles, use the Uniform 98 distribution. Beware of using distributions that are always positive (eg, the 96 99 Lognormal) because angles can be negative! 97 100 98 The array distribution allows a user-defined distribution to be applied. 101 The array distribution provides a very simple means of implementing a user- 102 defined distribution, but without any fittable parameters. Greater flexibility 103 is conferred by the user-defined distribution. 99 104 100 105 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 334 339 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 335 340 341 User-defined Distributions 342 ^^^^^^^^^^^^^^^^^^^^^^^^^^ 343 344 You can also define your own distribution by creating a python file defining a 345 *Distribution* object with a *_weights* method. The *_weights* method takes 346 *center*, *sigma*, *lb* and *ub* as arguments, and can access *self.npts* 347 and *self.nsigmas* from the distribution. They are interpreted as follows: 348 349 * *center* the value of the shape parameter (for size dispersity) or zero 350 if it is an angular dispersity. This parameter may be fitted. 351 352 * *sigma* the width of the distribution, which is the polydispersity parameter 353 times the center for size dispersity, or the polydispersity parameter alone 354 for angular dispersity. This parameter may be fitted. 355 356 * *lb*, *ub* are the parameter limits (lower & upper bounds) given in the model 357 definition file. For example, a radius parameter has *lb* equal to zero. A 358 volume fraction parameter would have *lb* equal to zero and *ub* equal to one. 359 360 * *self.nsigmas* the distance to go into the tails when evaluating the 361 distribution. For a two parameter distribution, this value could be 362 co-opted to use for the second parameter, though it will not be available 363 for fitting. 364 365 * *self.npts* the number of points to use when evaluating the distribution. 366 The user will adjust this to trade calculation time for accuracy, but the 367 distribution code is free to return more or fewer, or use it for the third 368 parameter in a three parameter distribution. 369 370 As an example, the code following wraps the Laplace distribution from scipy stats:: 371 372 import numpy as np 373 from scipy.stats import laplace 374 375 from sasmodels import weights 376 377 class Dispersion(weights.Dispersion): 378 r""" 379 Laplace distribution 380 381 .. math:: 382 383 w(x) = e^{-\sigma |x - \mu|} 384 """ 385 type = "laplace" 386 default = dict(npts=35, width=0, nsigmas=3) # default values 387 def _weights(self, center, sigma, lb, ub): 388 x = self._linspace(center, sigma, lb, ub) 389 wx = laplace.pdf(x, center, sigma) 390 return x, wx 391 392 You can plot the weights for a given value and width using the following:: 393 394 from numpy import inf 395 from matplotlib import pyplot as plt 396 from sasmodels import weights 397 398 # reload the user-defined weights 399 weights.load_weights() 400 x, wx = weights.get_weights('laplace', n=35, width=0.1, nsigmas=3, value=50, 401 limits=[0, inf], relative=True) 402 403 # plot the weights 404 plt.interactive(True) 405 plt.plot(x, wx, 'x') 406 407 The *self.nsigmas* and *self.npts* parameters are normally used to control 408 the accuracy of the distribution integral. The *self._linspace* function 409 uses them to define the *x* values (along with the *center*, *sigma*, 410 *lb*, and *ub* which are passed as parameters). If you repurpose npts or 411 nsigmas you will need to generate your own *x*. Be sure to honour the 412 limits *lb* and *ub*, for example to disallow a negative radius or constrain 413 the volume fraction to lie between zero and one. 414 415 To activate a user-defined distribution, put it in a file such as *distname.py* 416 in the *SAS_WEIGHTS_PATH* folder. This is defined with an environment 417 variable, defaulting to:: 418 419 SAS_WEIGHTS_PATH=~/.sasview/weights 420 421 The weights path is loaded on startup. To update the distribution definition 422 in a running application you will need to enter the following python commands:: 423 424 import sasmodels.weights 425 sasmodels.weights.load_weights('path/to/distname.py') 426 427 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 428 336 429 Note about DLS polydispersity 337 430 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 338 431 339 Several measures of polydispersity abound in Dynamic Light Scattering (DLS) and 340 it should not be assumed that any of the following can be simply equated with 432 Several measures of polydispersity abound in Dynamic Light Scattering (DLS) and 433 it should not be assumed that any of the following can be simply equated with 341 434 the polydispersity *PD* parameter used in SasView. 342 435 343 The dimensionless **Polydispersity Index (PI)** is a measure of the width of the 344 distribution of autocorrelation function decay rates (*not* the distribution of 345 particle sizes itself, though the two are inversely related) and is defined by 436 The dimensionless **Polydispersity Index (PI)** is a measure of the width of the 437 distribution of autocorrelation function decay rates (*not* the distribution of 438 particle sizes itself, though the two are inversely related) and is defined by 346 439 ISO 22412:2017 as 347 440 … … 350 443 PI = \mu_{2} / \bar \Gamma^2 351 444 352 where $\mu_\text{2}$ is the second cumulant, and $\bar \Gamma^2$ is the 445 where $\mu_\text{2}$ is the second cumulant, and $\bar \Gamma^2$ is the 353 446 intensity-weighted average value, of the distribution of decay rates. 354 447 … … 359 452 PI = \sigma^2 / 2\bar \Gamma^2 360 453 361 where $\sigma$ is the standard deviation, allowing a **Relative Polydispersity (RP)** 454 where $\sigma$ is the standard deviation, allowing a **Relative Polydispersity (RP)** 362 455 to be defined as 363 456 … … 366 459 RP = \sigma / \bar \Gamma = \sqrt{2 \cdot PI} 367 460 368 PI values smaller than 0.05 indicate a highly monodisperse system. Values 461 PI values smaller than 0.05 indicate a highly monodisperse system. Values 369 462 greater than 0.7 indicate significant polydispersity. 370 463 371 The **size polydispersity P-parameter** is defined as the relative standard 372 deviation coefficient of variation 464 The **size polydispersity P-parameter** is defined as the relative standard 465 deviation coefficient of variation 373 466 374 467 .. math:: … … 377 470 378 471 where $\nu$ is the variance of the distribution and $\bar R$ is the mean 379 value of $R$. Here, the product $P \bar R$ is *equal* to the standard 472 value of $R$. Here, the product $P \bar R$ is *equal* to the standard 380 473 deviation of the Lognormal distribution. 381 474 -
doc/guide/plugin.rst
rdb1d9d5 re15a822 456 456 ............. 457 457 458 .. note:: 459 460 Pure python models do not yet support direct computation of $<F(Q)^2>$ or 461 $<F(Q)>^2$. Neither do they support orientational distributions or magnetism 462 (use C models if these are required). 463 458 464 For pure python models, define the *Iq* function:: 459 465 … … 516 522 is automatically scaled by *form_volume/shell_volume* prior to calling the 517 523 structure factor. 518 519 **Note: Pure python models do not yet support direct computation of the**520 **average of $F(q)$ and $F^2(q)$. Neither do they support orientational**521 **distributions or magnetism (use C models if these are required).**522 524 523 525 Embedded C Models -
sasmodels/compare.py
rb297ba9 rb297ba9 39 39 40 40 from . import core 41 from . import weights 41 42 from . import kerneldll 42 43 from . import kernelcl … … 45 46 from .direct_model import DirectModel, get_mesh 46 47 from .generate import FLOAT_RE, set_integration_size 47 from .weights import plot_weights48 48 49 49 # pylint: disable=unused-import … … 115 115 116 116 === environment variables === 117 -DSAS_MODELPATH=path sets directory containing custom models 117 -DSAS_MODELPATH=~/.sasmodels/custom_models sets path to custom models 118 -DSAS_WEIGHTS_PATH=~/.sasview/weights sets path to custom distributions 118 119 -DSAS_OPENCL=vendor:device|cuda:device|none sets the target GPU device 119 120 -DXDG_CACHE_HOME=~/.cache sets the pyopencl cache root (linux only) 120 121 -DSAS_COMPILER=tinycc|msvc|mingw|unix sets the DLL compiler 121 -DSAS_OPENMP= 1 turnson OpenMP for the DLLs122 -DSAS_DLL_PATH= path sets the path to the compiled modules122 -DSAS_OPENMP=0 set to 1 to turn on OpenMP for the DLLs 123 -DSAS_DLL_PATH=~/.sasmodels/compiled_models sets the DLL cache 123 124 124 125 The interpretation of quad precision depends on architecture, and may … … 784 785 model_info = base._kernel.info 785 786 dim = base._kernel.dim 786 plot_weights(model_info, get_mesh(model_info, base_pars, dim=dim))787 weights.plot_weights(model_info, get_mesh(model_info, base_pars, dim=dim)) 787 788 if opts['show_profile']: 788 789 import pylab … … 1441 1442 #import pprint; pprint.pprint(model_info) 1442 1443 1444 # Hack to load user-defined distributions; run through all parameters 1445 # and make sure any pd_type parameter is a defined distribution. 1446 if (any(p.endswith('pd_type') and v not in weights.MODELS 1447 for p, v in pars.items()) or 1448 any(p.endswith('pd_type') and v not in weights.MODELS 1449 for p, v in pars2.items())): 1450 weights.load_weights() 1451 1443 1452 if opts['show_pars']: 1444 1453 if model_info.name != model_info2.name or pars != pars2: -
sasmodels/kernelcl.py
ra34b811 r9fac5f5 158 158 ENV = None 159 159 def reset_environment(): 160 # type: () -> None161 """ 162 Call to createa new OpenCL context, such as after a change to SAS_OPENCL.160 # type: () -> "GpuEnvironment" 161 """ 162 Return a new OpenCL context, such as after a change to SAS_OPENCL. 163 163 """ 164 164 global ENV 165 165 ENV = GpuEnvironment() if use_opencl() else None 166 166 return ENV 167 167 168 168 def environment(): -
sasmodels/models/__init__.py
r2d81cfe rd827c5e 1 1 """ 2 1D Modeling for SAS 2 Model definition files 3 ---------------------- 4 5 The models below are grouped by type. The list is a snapshot at a particular 6 time and may be out of date. 7 8 Models with pure form factor (all of which define *F(Q)*): 9 10 :mod:`barbell` 11 :mod:`capped_cylinder` 12 :mod:`core_multi_shell` 13 :mod:`core_shell_bicelle` 14 :mod:`core_shell_bicelle_elliptical` 15 :mod:`core_shell_bicelle_elliptical_belt_rough` 16 :mod:`core_shell_cylinder` 17 :mod:`core_shell_ellipsoid` 18 :mod:`core_shell_parallelepipied` 19 :mod:`core_shell_sphere` 20 :mod:`cylinder` [limiting conditions (long rods, thin disks) not implemented] 21 :mod:`ellipsoid` 22 :mod:`elliptical_cylinder` 23 :mod:`fuzzy_sphere` 24 :mod:`hollow_cylinder` 25 :mod:`hollow_rectangular_prism` 26 :mod:`hollow_rectangular_prism_thin_walls` 27 :mod:`multilayer_vesicle` 28 :mod:`onion` 29 :mod:`parallelepiped` 30 :mod:`rectangular_prism` 31 :mod:`sphere` 32 :mod:`spherical_sld` 33 :mod:`triaxial_ellipsoid` 34 :mod:`vesicle` 35 36 Models with local structure factor: 37 38 :mod:`flexible_cylinder` 39 :mod:`flexible_cylinder_elliptical` 40 :mod:`linear_pearls` 41 :mod:`mono_gauss_coil` 42 :mod:`pearl_necklace` 43 :mod:`poly_gauss_coil` 44 :mod:`polymer_micelle` 45 :mod:`pringle` 46 :mod:`raspberry` 47 :mod:`stacked_disks` 48 :mod:`star_polymer` 49 50 Models with long range structure factor: 51 52 :mod:`binary_hard_sphere` 53 :mod:`bcc_paracrystal` 54 :mod:`fcc_paracrystal` 55 :mod:`fractal` 56 :mod:`fractal_core_shell` 57 :mod:`lamellar` 58 :mod:`lamellar_hg` 59 :mod:`lamellar_hg_stack_caille` 60 :mod:`lamellar_stack_caille` 61 :mod:`lamellar_stack_paracrystal` 62 :mod:`mass_fractal` 63 :mod:`mass_surface_fractal` 64 :mod:`rpa` 65 :mod:`sc_paracrystal` 66 :mod:`surface_fractal` 67 68 Models which are pure structure factors:: 69 70 :mod:`hardsphere` 71 :mod:`hayter_msa` 72 :mod:`squarewell` 73 :mod:`stickyhardsphere` 74 75 Other models: 76 77 :mod:`adsorbed_layer` 78 :mod:`be_polyelectrolyte` 79 :mod:`broad_peak` 80 :mod:`correlation_length` 81 :mod:`dab` 82 :mod:`gauss_lorentz_gel` 83 :mod:`gaussian_peak` 84 :mod:`gel_fit` 85 :mod:`guinier_porod` 86 :mod:`guinier` 87 :mod:`line` 88 :mod:`lorentz` 89 :mod:`peak_lorentz` 90 :mod:`polymer_excl_volume` 91 :mod:`porod` 92 :mod:`power_law` 93 :mod:`spinodal` 94 :mod:`teubner_strey` 95 :mod:`two_lorentzian` 96 :mod:`unified_power_Rg` 97 3 98 """ -
sasmodels/models/hardsphere.py
rdb1d9d5 r4d00de6 16 16 Earlier versions of SasView did not incorporate the so-called 17 17 $\beta(q)$ ("beta") correction [1] for polydispersity and non-sphericity. 18 This is only available in SasView versions 4.2.2and higher.18 This is only available in SasView versions 5.0 and higher. 19 19 20 20 radius_effective is the effective hard sphere radius. -
sasmodels/models/hayter_msa.py
rdb1d9d5 r4d00de6 18 18 Earlier versions of SasView did not incorporate the so-called 19 19 $\beta(q)$ ("beta") correction [3] for polydispersity and non-sphericity. 20 This is only available in SasView versions 4.2.2and higher.20 This is only available in SasView versions 5.0 and higher. 21 21 22 22 The salt concentration is used to compute the ionic strength of the solution -
sasmodels/models/sphere.py
ra34b811 r934a001 36 36 References 37 37 ---------- 38 39 .. [#] A Guinier and G. Fournet, *Small-Angle Scattering of X-Rays*, John Wiley and Sons, New York, (1955) 38 39 .. [#] A Guinier and G. Fournet, *Small-Angle Scattering of X-Rays*, 40 John Wiley and Sons, New York, (1955) 40 41 41 42 Source … … 90 91 ) 91 92 return pars 92 93 #2345678901234567890123456789012345678901234567890123456789012345678901234567890 93 94 tests = [ 94 [{}, 0.2, 0.726362], # each test starts with default parameter values inside { }, unless modified. Then Q and expected value of I(Q) 95 [{}, 0.2, 0.726362], # each test starts with default parameter values 96 # inside { }, unless modified. Then Q and expected value of I(Q) 97 # putting None for an expected result will pass the test if there are no 98 # errors from the routine, but without any check on the value of the result 99 [{"scale": 1., "background": 0., "sld": 6., "sld_solvent": 1., 100 "radius": 120.}, [0.01,0.1,0.2], 101 [1.34836265e+04, 6.20114062e+00, 1.04733914e-01]], 95 102 [{"scale": 1., "background": 0., "sld": 6., "sld_solvent": 1., 103 # careful tests here R=120 Pd=.2, then with S(Q) at default Reff=50 104 # (but this gets changed to 120) phi=0,2 96 105 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 97 0.2, 0.2288431], 98 [{"radius": 120., "radius_pd": 0.02, "radius_pd_n":45}, 99 0.2, 792.0646662454202, 1166737.0473152, 120.0, 7246723.820358589, 1.0], # the longer list here checks F1, F2, R_eff, volume, volume_ratio = call_Fq(kernel, pars) 106 [0.01,0.1,0.2], [1.74395295e+04, 3.68016987e+00, 2.28843099e-01]], 107 # a list of Q values and list of expected results is also possible 108 [{"scale": 1., "background": 0., "sld": 6., "sld_solvent": 1., 109 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 110 0.01, 335839.88055473, 1.41045057e+11, 120.0, 8087664.122641933, 1.0], 111 # the longer list here checks F1, F2, R_eff, volume, volume_ratio 112 [{"radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 113 0.1, 482.93824329, 29763977.79867414, 120.0, 8087664.122641933, 1.0], 114 [{"radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 115 0.2, 1.23330406, 1850806.1197361, 120.0, 8087664.122641933, 1.0], 100 116 # But note P(Q) = F2/volume 101 # F and F^2 are "unscaled", with for n <F F*>S(q) or for beta approx I(q) = n [<F F*> + <F><F*> (S(q) - 1)] 102 # for n the number density and <.> the orientation average, and F = integral rho(r) exp(i q . r) dr. 117 # F and F^2 are "unscaled", with for n <F F*>S(q) or for beta approx 118 # I(q) = n [<F F*> + <F><F*> (S(q) - 1)] 119 # for n the number density and <.> the orientation average, and 120 # F = integral rho(r) exp(i q . r) dr. 103 121 # The number density is volume fraction divided by particle volume. 104 # Effectively, this leaves F = V drho form, where form is the usual 3 j1(qr)/(qr) or whatever depending on the shape. 105 # [{"@S": "hardsphere"}, 106 # 0.01, 55.881884232102124], # this is current value, not verified elsewhere yet 107 # [{"radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 108 # 0.2, 1.233304061, [1850806.119736], 120.0, 8087664.1226, 1.0], # the longer list here checks F1, F2, R_eff, volume, volume_ratio = call_Fq(kernel, pars) 109 # [{"@S": "hardsphere"}, 110 # 0.2, 0.14730859242492958], # this is current value, not verified elsewhere yet 111 # [{"@S": "hardsphere"}, 112 # 0.1, 0.7940350343811906], # this is current value, not verified elsewhere yet 122 # Effectively, this leaves F = V drho form, where form is the usual 123 # 3 j1(qr)/(qr) or whatever depending on the shape. 124 # @S RESULTS using F1 and F2 from the longer test strng above: 125 # 126 # I(Q) = (F2 + F1^2*(S(Q) -1))*volfraction*scale/Volume + background 127 # 128 # with by default scale=1.0, background=0.001 129 # NOTE currently S(Q) volfraction is also included in scaling 130 # structure_factor_mode 0 = normal decoupling approx, 131 # 1 = beta(Q) approx 132 # radius_effective_mode 0 is for free choice, 133 # 1 is use radius from F2(Q) 134 # (sphere only has two choices, other models may have more) 135 [{"@S": "hardsphere", 136 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45,"volfraction":0.2, 137 #"radius_effective":50.0, # hard sphere structure factor 138 "structure_factor_mode": 1, # mode 0 = normal decoupling approx, 139 # 1 = beta(Q) approx 140 "radius_effective_mode": 0 # this used default hardsphere Reff=50 141 }, [0.01,0.1,0.2], [1.32473756e+03, 7.36633631e-01, 4.67686201e-02] ], 113 142 [{"@S": "hardsphere", 114 143 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45, 115 144 "volfraction":0.2, 116 "radius_effective":45.0, # uses this (check)117 "structure_factor_mode": 1, # 0 = normal decoupling approximation, 1 = beta(Q)approx118 "radius_effective_mode": 0 # equivalent sphere, there is only one valid mode for sphere. says -this used r_eff =0 or default 50?145 "radius_effective":45.0, # explicit Reff over rides either 50 or 120 146 "structure_factor_mode": 1, # beta approx 147 "radius_effective_mode": 0 # 119 148 }, 0.01, 1316.2990966463444 ], 120 149 [{"@S": "hardsphere", 121 150 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45, 122 151 "volfraction":0.2, 123 "radius_effective": 50.0, # hard sphere structure factor124 "structure_factor_mode": 1, # 0 = normal decoupling approximation, 1 = beta(Q)approx125 "radius_effective_mode": 0 # this used r_eff =0 or default 50?126 }, 0.01, 1324.7375636587356],152 "radius_effective":120.0, # over ride Reff 153 "structure_factor_mode": 1, # beta approx 154 "radius_effective_mode": 0 # (mode=1 here also uses 120) 155 }, [0.01,0.1,0.2], [1.57928589e+03, 7.37067923e-01, 4.67686197e-02 ]], 127 156 [{"@S": "hardsphere", 128 157 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45, 129 158 "volfraction":0.2, 130 "radius_effective":50.0, # hard sphere structure factor 131 "structure_factor_mode": 1, # 0 = normal decoupling approximation, 1 = beta(Q) approx 132 "radius_effective_mode": 1 # this used 120 ??? 133 }, 0.01, 1579.2858949296565 ] 159 #"radius_effective":120.0, # hard sphere structure factor 160 "structure_factor_mode": 0, # normal decoupling approximation 161 "radius_effective_mode": 1 # this uses 120 from the form factor 162 }, [0.01,0.1,0.2], [1.10112335e+03, 7.41366536e-01, 4.66630207e-02]], 163 [{"@S": "hardsphere", 164 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45, 165 "volfraction":0.2, 166 #"radius_effective":50.0, # hard sphere structure factor 167 "structure_factor_mode": 0, # normal decoupling approximation 168 "radius_effective_mode": 0 # this used 50 the default for hardsphere 169 }, [0.01,0.1,0.2], [7.82803598e+02, 6.85943611e-01, 4.71586457e-02 ]] 134 170 ] 135 # putting None for expected result will pass the test if there are no errors from the routine, but without any check on the value of the result171 # -
sasmodels/models/squarewell.py
rdb1d9d5 r4d00de6 20 20 Earlier versions of SasView did not incorporate the so-called 21 21 $\beta(q)$ ("beta") correction [2] for polydispersity and non-sphericity. 22 This is only available in SasView versions 4.2.2and higher.22 This is only available in SasView versions 5.0 and higher. 23 23 24 24 The well width $(\lambda)$ is defined as multiples of the particle diameter -
sasmodels/models/stickyhardsphere.py
rdb1d9d5 r4d00de6 56 56 Earlier versions of SasView did not incorporate the so-called 57 57 $\beta(q)$ ("beta") correction [3] for polydispersity and non-sphericity. 58 This is only available in SasView versions 4.2.2and higher.58 This is only available in SasView versions 5.0 and higher. 59 59 60 60 In SasView the effective radius may be calculated from the parameters -
sasmodels/sasview_model.py
ra34b811 ra34b811 31 31 from . import modelinfo 32 32 from .details import make_kernel_args, dispersion_mesh 33 34 # Hack: load in any custom distributions 35 # Uses ~/.sasview/weights/*.py unless SASMODELS_WEIGHTS is set in the environ. 36 # Override with weights.load_weights(pattern="<weights_path>/*.py") 37 weights.load_weights() 33 38 34 39 # pylint: disable=unused-import -
sasmodels/sesans.py
rb297ba9 rda33725 15 15 from numpy import pi # type: ignore 16 16 from scipy.special import j0 17 17 18 18 19 class SesansTransform(object): … … 38 39 39 40 # transform arrays 40 _H = None # type: np.ndarray41 _H0 = None # type: np.ndarray41 _H = None # type: np.ndarray 42 _H0 = None # type: np.ndarray 42 43 43 def __init__(self, z, SElength, lam, zaccept, Rmax ):44 def __init__(self, z, SElength, lam, zaccept, Rmax, log_spacing=1.0003): 44 45 # type: (np.ndarray, float, float) -> None 45 #import logging; logging.info("creating SESANS transform")46 46 self.q = z 47 self.log_spacing = log_spacing 47 48 self._set_hankel(SElength, lam, zaccept, Rmax) 48 49 … … 59 60 def _set_hankel(self, SElength, lam, zaccept, Rmax): 60 61 # type: (np.ndarray, float, float) -> None 61 # Force float32 arrays, otherwise run into memory problems on some machines 62 SElength = np.asarray(SElength, dtype='float32') 63 64 #Rmax = #value in text box somewhere in FitPage? 62 SElength = np.asarray(SElength) 65 63 q_max = 2*pi / (SElength[1] - SElength[0]) 66 64 q_min = 0.1 * 2*pi / (np.size(SElength) * SElength[-1]) 67 q = np. arange(q_min, q_max, q_min, dtype='float32')68 dq = q_min65 q = np.exp(np.arange(np.log(q_min), np.log(q_max), 66 np.log(self.log_spacing))) 69 67 70 H0 = np.float32(dq/(2*pi)) * q 68 dq = np.diff(q) 69 dq = np.insert(dq, 0, dq[0]) 71 70 72 repq = np.tile(q, (SElength.size, 1)).T 73 repSE = np.tile(SElength, (q.size, 1)) 74 H = np.float32(dq/(2*pi)) * j0(repSE*repq) * repq 71 H0 = dq/(2*pi) * q 75 72 76 replam = np.tile(lam, (q.size, 1)) 77 reptheta = np.arcsin(repq*replam/2*np.pi) 73 H = np.outer(q, SElength) 74 j0(H, out=H) 75 H *= (dq * q / (2*pi)).reshape((-1, 1)) 76 77 reptheta = np.outer(q, lam/(2*pi)) 78 np.arcsin(reptheta, out=reptheta) 78 79 mask = reptheta > zaccept 79 80 H[mask] = 0 -
sasmodels/weights.py
rb297ba9 rb297ba9 230 230 )) 231 231 232 SAS_WEIGHTS_PATH = "~/.sasview/weights" 233 def load_weights(pattern=None): 234 # type: (str) -> None 235 """ 236 Load dispersion distributions matching the given glob pattern 237 """ 238 import logging 239 import os 240 import os.path 241 import glob 242 import traceback 243 from .custom import load_custom_kernel_module 244 if pattern is None: 245 path = os.environ.get("SAS_WEIGHTS_PATH", SAS_WEIGHTS_PATH) 246 pattern = os.path.join(path, "*.py") 247 for filename in sorted(glob.glob(os.path.expanduser(pattern))): 248 try: 249 #print("loading weights from", filename) 250 module = load_custom_kernel_module(filename) 251 MODELS[module.Dispersion.type] = module.Dispersion 252 except Exception as exc: 253 logging.error(traceback.format_exc(exc)) 232 254 233 255 def get_weights(disperser, n, width, nsigmas, value, limits, relative):
Note: See TracChangeset
for help on using the changeset viewer.