# Home

## 34. Distribution functions

## `sasmodels.weights`

SAS distributions for polydispersity.

class sasmodels.weights.ArrayDispersion(npts=None, width=None, nsigmas=None)

  Bases: `Dispersion`

  Empirical dispersion curve.

  Use `set_weights()` to set \(w = f(x)\).

  get_pars()

    Return the parameters to the disperser as a dictionary.

  get_weights(center, lb, ub, relative)

    Return the weights for the distribution.

    center is the center of the distribution

    lb, ub are the min and max allowed values

    relative is True if the distribution width is proportional to the center value instead of absolute. For polydispersity use relative. For orientation parameters use absolute.

  set_weights(values, weights)

    Set the weights for the given x values.

  default = {'npts': 35, 'nsigmas': 1, 'width': 0}
  type = 'array'

class sasmodels.weights.BoltzmannDispersion(npts=None, width=None, nsigmas=None)

  Bases: `Dispersion`

  Boltzmann dispersion, with \(\sigma=k T/E\).

  \[w = \exp\left( -|x - c|/\sigma\right)\]
  get_pars()

    Return the parameters to the disperser as a dictionary.

  get_weights(center, lb, ub, relative)

    Return the weights for the distribution.

    center is the center of the distribution

    lb, ub are the min and max allowed values

    relative is True if the distribution width is proportional to the center value instead of absolute. For polydispersity use relative. For orientation parameters use absolute.

  set_weights(values, weights)

    Set the weights on the disperser if it is `ArrayDispersion`.

  default = {'npts': 35, 'nsigmas': 3, 'width': 0}
  type = 'boltzmann'

class sasmodels.weights.Dispersion(npts=None, width=None, nsigmas=None)

  Bases: `object`

  Base dispersion object.

  Subclasses should define _weights(center, sigma, lb, ub) which returns the x points and their corresponding weights.

  get_pars()

    Return the parameters to the disperser as a dictionary.

  get_weights(center, lb, ub, relative)

    Return the weights for the distribution.

    center is the center of the distribution

    lb, ub are the min and max allowed values

    relative is True if the distribution width is proportional to the center value instead of absolute. For polydispersity use relative. For orientation parameters use absolute.

  set_weights(values, weights)

    Set the weights on the disperser if it is `ArrayDispersion`.

  default = {'npts': 35, 'nsigmas': 3, 'width': 0}
  type = 'base disperser'

class sasmodels.weights.GaussianDispersion(npts=None, width=None, nsigmas=None)

  Bases: `Dispersion`

  Gaussian dispersion, with 1-\(\sigma\) width.

  \[w = \exp\left(-\tfrac12 (x - c)^2/\sigma^2\right)\]
  get_pars()

    Return the parameters to the disperser as a dictionary.

  get_weights(center, lb, ub, relative)

    Return the weights for the distribution.

    center is the center of the distribution

    lb, ub are the min and max allowed values

    relative is True if the distribution width is proportional to the center value instead of absolute. For polydispersity use relative. For orientation parameters use absolute.

  set_weights(values, weights)

    Set the weights on the disperser if it is `ArrayDispersion`.

  default = {'npts': 35, 'nsigmas': 3, 'width': 0}
  type = 'gaussian'

class sasmodels.weights.LogNormalDispersion(npts=None, width=None, nsigmas=None)

  Bases: `Dispersion`

  log Gaussian dispersion, with 1-\(\sigma\) width.

  \[w = \frac{\exp\left(-\tfrac12 (\ln x - c)^2/\sigma^2\right)}{x\sigma}\]
  get_pars()

    Return the parameters to the disperser as a dictionary.

  get_weights(center, lb, ub, relative)

    Return the weights for the distribution.

    center is the center of the distribution

    lb, ub are the min and max allowed values

    relative is True if the distribution width is proportional to the center value instead of absolute. For polydispersity use relative. For orientation parameters use absolute.

  set_weights(values, weights)

    Set the weights on the disperser if it is `ArrayDispersion`.

  default = {'npts': 80, 'nsigmas': 8, 'width': 0}
  type = 'lognormal'

class sasmodels.weights.RectangleDispersion(npts=None, width=None, nsigmas=None)

  Bases: `Dispersion`

  Uniform dispersion, with width \(\sqrt{3}\sigma\).

  \[w = 1\]
  get_pars()

    Return the parameters to the disperser as a dictionary.

  get_weights(center, lb, ub, relative)

    Return the weights for the distribution.

    center is the center of the distribution

    lb, ub are the min and max allowed values

    relative is True if the distribution width is proportional to the center value instead of absolute. For polydispersity use relative. For orientation parameters use absolute.

  set_weights(values, weights)

    Set the weights on the disperser if it is `ArrayDispersion`.

  default = {'npts': 35, 'nsigmas': 1.73205, 'width': 0}
  type = 'rectangle'

class sasmodels.weights.SchulzDispersion(npts=None, width=None, nsigmas=None)

  Bases: `Dispersion`

  Schultz dispersion, with 1-\(\sigma\) width.

  \[w = \frac{z^z\,R^{z-1}}{e^{Rz}\,c \Gamma(z)}\]

  where \(c\) is the center of the distribution, \(R = x/c\) and \(z=(c/\sigma)^2\).

  This is evaluated using logarithms as

  \[w = \exp\left(z \ln z + (z-1)\ln R - Rz - \ln c - \ln \Gamma(z) \right)\]
  get_pars()

    Return the parameters to the disperser as a dictionary.

  get_weights(center, lb, ub, relative)

    Return the weights for the distribution.

    center is the center of the distribution

    lb, ub are the min and max allowed values

    relative is True if the distribution width is proportional to the center value instead of absolute. For polydispersity use relative. For orientation parameters use absolute.

  set_weights(values, weights)

    Set the weights on the disperser if it is `ArrayDispersion`.

  default = {'npts': 80, 'nsigmas': 8, 'width': 0}
  type = 'schulz'

class sasmodels.weights.UniformDispersion(npts=None, width=None, nsigmas=None)

  Bases: `Dispersion`

  Uniform dispersion, with width \(\sigma\).

  \[w = 1\]
  get_pars()

    Return the parameters to the disperser as a dictionary.

  get_weights(center, lb, ub, relative)

    Return the weights for the distribution.

    center is the center of the distribution

    lb, ub are the min and max allowed values

    relative is True if the distribution width is proportional to the center value instead of absolute. For polydispersity use relative. For orientation parameters use absolute.

  set_weights(values, weights)

    Set the weights on the disperser if it is `ArrayDispersion`.

  default = {'npts': 35, 'nsigmas': None, 'width': 0}
  type = 'uniform'

sasmodels.weights.get_weights(disperser, n, width, nsigmas, value, limits, relative)

  Return the set of values and weights for a polydisperse parameter.

  disperser is the name of the disperser.

  n is the number of points in the weight vector.

  width is the width of the disperser distribution.

  nsigmas is the number of sigmas to span for the dispersion convolution.

  value is the value of the parameter in the model.

  limits is [lb, ub], the lower and upper bound on the possible values.

  relative is true if width is defined in proportion to the value of the parameter, and false if it is an absolute width.

  Returns (value, weight), where value and weight are vectors.

sasmodels.weights.load_weights(pattern: str = None) → None

  Load dispersion distributions matching the given glob pattern

sasmodels.weights.plot_weights(model_info: ModelInfo, mesh: list[tuple[float, ndarray, ndarray]]) → None

  Plot the weights returned by `get_weights()`.

  model_info defines model parameters, etc.

  mesh is a list of tuples containing (value, dispersity, weights) for each parameter, where (dispersity, weights) pairs are the distributions to be plotted.