invertor

sans.pr.invertor

Module to perform P(r) inversion. The module contains the Invertor class.

class sans.pr.invertor.Invertor

Bases: Cinvertor

Invertor class to perform P(r) inversion

The problem is solved by posing the problem as Ax = b, where x is the set of coefficients we are looking for.

Npts is the number of points.

In the following i refers to the ith base function coefficient. The matrix has its entries j in its first Npts rows set to

A[j][i] = (Fourier transformed base function for point j)

We them choose a number of r-points, n_r, to evaluate the second derivative of P(r) at. This is used as our regularization term. For a vector r of length n_r, the following n_r rows are set to

A[j+Npts][i] = (2nd derivative of P(r), d**2(P(r))/d(r)**2, evaluated at r[j])
The vector b has its first Npts entries set to
b[j] = (I(q) observed for point j)

The following n_r entries are set to zero.

The result is found by using scipy.linalg.basic.lstsq to invert the matrix and find the coefficients x.

Methods inherited from Cinvertor: - get_peaks(pars): returns the number of P(r) peaks - oscillations(pars): returns the oscillation parameters for the output P(r) - get_positive(pars): returns the fraction of P(r) that is above zero - get_pos_err(pars): returns the fraction of P(r) that is 1-sigma above zero

__class__

alias of type

__delattr__

x.__delattr__(‘name’) <==> del x.name

__dict__ = <dictproxy object at 0x01CA22F0>
__getattr__()

Return the value of an attribute

__getattribute__

x.__getattribute__(‘name’) <==> x.name

__hash__

x.__hash__() <==> hash(x)

__init__()
__module__ = 'sans.pr.invertor'
static __new__(S, ...) → a new object with type S, a subtype of T
__reduce__()

helper for pickle

__reduce_ex__()

Overwrite the __reduce_ex__

__repr__

x.__repr__() <==> repr(x)

__setattr__()

Set the value of an attribute. Access the parent class methods for x, y, err, d_max, q_min, q_max and alpha

__setstate__()

restore the state of invertor for pickle

__str__

x.__str__() <==> str(x)

__weakref__

list of weak references to the object (if defined)

_accept_q()

Check q-value against user-defined range

_get_invcov_matrix()

Compute the inverse covariance matrix, defined as inv_cov = a_transposed x a. @param nfunc: number of base functions @param nr: number of r-points used when evaluating reg term. @param a: A array to fill @param inv_cov: inverse covariance array to be filled @return: 0

_get_matrix()

Returns A matrix and b vector for least square problem. @param nfunc: number of base functions @param nr: number of r-points used when evaluating reg term. @param a: A array to fill @param b: b vector to fill @return: 0

_get_reg_size()

Compute the covariance matrix, defined as inv_cov = a_transposed x a. @param nfunc: number of base functions @param nr: number of r-points used when evaluating reg term. @param a: A array to fill @param inv_cov: inverse covariance array to be filled @return: 0

background = 0
basefunc_ft()

Returns the value of the nth Fourier transofrmed base function @param args: c-parameters, n and q @return: nth Fourier transformed base function, evaluated at q

chi2 = 0
clone()

Return a clone of this instance

cov = None
elapsed = 0
estimate_alpha()

Returns a reasonable guess for the regularization constant alpha

Parameters:nfunc – number of terms to use in the expansion.
Returns:alpha, message, elapsed

where alpha is the estimate for alpha, message is a message for the user, elapsed is the computation time

estimate_numterms()

Returns a reasonable guess for the number of terms

Parameters:isquit_func – reference to thread function to call to check whether the computation needs to be stopped.
Returns:number of terms, alpha, message
from_file()

Load the state of the Invertor from a file, to be able to generate P(r) from a set of parameters.

Parameters:path – path of the file to load
get_alpha()

Gets the alpha parameter

get_dmax()

Gets the maximum distance

get_err()

Function to get the err data Takes an array of doubles as input. @return: number of entries found

get_has_bck()

Gets background flag

get_nerr()

Gets the number of err points

get_nx()

Gets the number of x points

get_ny()

Gets the number of y points

get_peaks()

Returns the number of peaks in the output P(r) distrubution for the given set of coefficients. @param args: c-parameters @return: number of P(r) peaks

get_pos_err()

Returns the fraction of P(r) that is 1 standard deviation above zero over the full range of r for the given set of coefficients. @param args: c-parameters @return: fraction of P(r) that is positive

get_positive()

Returns the fraction of P(r) that is positive over the full range of r for the given set of coefficients. @param args: c-parameters @return: fraction of P(r) that is positive

get_pr_err()

Function to call to evaluate P(r) with errors @param args: c-parameters and r @return: (P(r),dP(r))

get_qmax()

Gets the maximum q

get_qmin()

Gets the minimum q

get_slit_height()

Gets the slit height

get_slit_width()

Gets the slit width

get_x()

Function to get the x data Takes an array of doubles as input. @return: number of entries found

get_y()

Function to get the y data Takes an array of doubles as input. @return: number of entries found

info = {}
invert()

Perform inversion to P(r)

The problem is solved by posing the problem as Ax = b, where x is the set of coefficients we are looking for.

Npts is the number of points.

In the following i refers to the ith base function coefficient. The matrix has its entries j in its first Npts rows set to

A[i][j] = (Fourier transformed base function for point j)

We them choose a number of r-points, n_r, to evaluate the second derivative of P(r) at. This is used as our regularization term. For a vector r of length n_r, the following n_r rows are set to

A[i+Npts][j] = (2nd derivative of P(r), d**2(P(r))/d(r)**2, evaluated at r[j])
The vector b has its first Npts entries set to
b[j] = (I(q) observed for point j)

The following n_r entries are set to zero.

The result is found by using scipy.linalg.basic.lstsq to invert the matrix and find the coefficients x.

Parameters:
  • nfunc – number of base functions to use.
  • nr – number of r points to evaluate the 2nd derivative at for the reg. term.
Returns:

c_out, c_cov - the coefficients with covariance matrix

invert_optimize()

Slower version of the P(r) inversion that uses scipy.optimize.leastsq.

This probably produce more reliable results, but is much slower. The minimization function is set to sum_i[ (I_obs(q_i) - I_theo(q_i))/err**2 ] + alpha * reg_term, where the reg_term is given by Svergun: it is the integral of the square of the first derivative of P(r), d(P(r))/dr, integrated over the full range of r.

Parameters:
  • nfunc – number of base functions to use.
  • nr – number of r points to evaluate the 2nd derivative at for the reg. term.
Returns:

c_out, c_cov - the coefficients with covariance matrix

iq()

Function to call to evaluate the scattering intensity

Parameters:args – c-parameters, and q
Returns:I(q)
iq0()

Returns the value of I(q=0). @param args: c-parameters @return: I(q=0)

iq_smeared()

Function to call to evaluate the scattering intensity. The scattering intensity is slit-smeared. @param args: c-parameters, and q @return: I(q)

is_valid()

Check the validity of the stored data @return: Returns the number of points if it’s all good, -1 otherwise

lstsq()

The problem is solved by posing the problem as Ax = b, where x is the set of coefficients we are looking for.

Npts is the number of points.

In the following i refers to the ith base function coefficient. The matrix has its entries j in its first Npts rows set to

A[i][j] = (Fourier transformed base function for point j)

We them choose a number of r-points, n_r, to evaluate the second derivative of P(r) at. This is used as our regularization term. For a vector r of length n_r, the following n_r rows are set to

A[i+Npts][j] = (2nd derivative of P(r), d**2(P(r))/d(r)**2, evaluated at r[j])
The vector b has its first Npts entries set to
b[j] = (I(q) observed for point j)

The following n_r entries are set to zero.

The result is found by using scipy.linalg.basic.lstsq to invert the matrix and find the coefficients x.

Parameters:
  • nfunc – number of base functions to use.
  • nr – number of r points to evaluate the 2nd derivative at for the reg. term.

If the result does not allow us to compute the covariance matrix, a matrix filled with zeros will be returned.

nfunc = 10
oscillations()

Returns the value of the oscillation figure of merit for the given set of coefficients. For a sphere, the oscillation figure of merit is 1.1.

@param args: c-parameters @return: oscillation figure of merit
out = None
pr()

Function to call to evaluate P(r) @param args: c-parameters and r @return: P(r)

pr_err()

Returns the value of P(r) for a given r, and base function coefficients, with error.

Parameters:
  • c – base function coefficients
  • c_cov – covariance matrice of the base function coefficients
  • r – r-value to evaluate P(r) at
Returns:

P(r)

pr_fit()

This is a direct fit to a given P(r). It assumes that the y data is set to some P(r) distribution that we are trying to reproduce with a set of base functions.

This method is provided as a test.

pr_residuals()

Function to call to evaluate the residuals for P(r) minimization (for testing purposes) @param args: input parameters @return: list of residuals

residuals()

Function to call to evaluate the residuals for P(r) inversion @param args: input parameters @return: list of residuals

rg()

Returns the value of the radius of gyration Rg. @param args: c-parameters @return: Rg

set_alpha()

Sets the alpha parameter

set_dmax()

Sets the maximum distance

set_err()

Function to set the err data Takes an array of doubles as input. @return: number of entries found

set_has_bck()

Sets background flag

set_qmax()

Sets the maximum q

set_qmin()

Sets the minimum q

set_slit_height()

Sets the slit height in units of q [A-1]

set_slit_width()

Sets the slit width in units of q [A-1]

set_x()

Function to set the x data Takes an array of doubles as input. @return: number of entries found

set_y()

Function to set the y data Takes an array of doubles as input. @return: number of entries found

suggested_alpha = 0
to_file()

Save the state to a file that will be readable by SliceView.

Parameters:
  • path – path of the file to write
  • npts – number of P(r) points to be written
sans.pr.invertor.help()

Provide general online help text Future work: extend this function to allow topic selection

Table Of Contents

Previous topic

distance_explorer

Next topic

num_term

This Page