Post processing¶
- class dynasor.post_processing.NeutronScatteringLengths(atom_types, abundances=None)[source]¶
A class for generating sample weights corresponding to neutron scattering lengths. By default, the coherent and incoherent scattering lengths are weighted by the natural abundance of each isotope of the considered atomic species. This weighting can, however, be overwritten by the
abundances
argument.The scattering lengths have been extracted from the following NIST database: https://www.ncnr.nist.gov/resources/n-lengths/list.html, which in turn have been extracted from Neutron News 3, 29 (1992).
- Parameters
atom_types (
List
[str
]) – List of atomic species for which to retrieve scattering lengths.abundances (
Optional
[Dict
[str
,Dict
[int
,float
]]]) – Dict of the desired fractional abundance of each isotope for each species in the sample. For example, to use an equal weighting of all isotopes of oxygen, one can writeabundances['O']=dict(16=1/3, 17=1/3, 18=1/3)
. Note that the abundance for any isotopes that are not included in this dict is automatically set to zero. In other words, you need to ensure that the abundances provided sum up to 1. By default the neutron scattering lengths are weighted proportionally to the natural abundance of each isotope.
- get_weight_coh(atom_type, q_norm=None)¶
Get the coherent weight for a given atom type and q-vector norm.
- get_weight_incoh(atom_type, q_norm=None)¶
Get the incoherent weight for a given atom type and q-vector norm.
- class dynasor.post_processing.Weights(weights_coh, weights_incoh=None, supports_currents=True)[source]¶
Class holding weights and support functions for weighting of samples
- Parameters
weights_coh (
Dict
[str
,float
]) – A dict with keys and values representing the atom types and their corresponding coherent scattering length,{'A': b_A }
.weights_incoh (
Optional
[Dict
[str
,float
]]) – A dict with keys and values representing the atom types and their corresponding incoherent scattering length,{'A': b_A }
.supports_currents (
bool
) – whether or not the coherent weights should be applied to current-correlation functions
- get_weight_coh(atom_type, q_norm=None)[source]¶
Get the coherent weight for a given atom type and q-vector norm.
- get_weight_incoh(atom_type, q_norm=None)[source]¶
Get the incoherent weight for a given atom type and q-vector norm.
- dynasor.post_processing.fourier_cos_filon(f, dt)[source]¶
Calculates the direct Fourier cosine transform \(F(w)\) of a function \(f(t)\) using Filon’s integration method.
- Parameters
f (
ndarray
[Any
,dtype
[float
]]) – function values as a 2D array. second axis will be transformed. must contain an odd number of elements along second axis.dt (
float
) – spacing of t-axis (\(\Delta t\))
- Return type
Tuple
[ndarray
[Any
,dtype
[float
]],ndarray
[Any
,dtype
[float
]]]- Returns
w – w containes values in the interval [0, pi/dt). length of w is f.shape[1] // 2 + 1. These frequencies corresponds to the frequencies from an fft. w == 2*np.pi*np.fft.rfftfreq(f.shape[1], dt)
F – transform of f along second axis. equivalent to np.fft.rfft(f, axis=1).real
Example
A common use case is
w, F = fourier_cos_filon(f, dt)
- dynasor.post_processing.get_sample_averaged_over_independent_runs(samples, live_dangerously=False)[source]¶
Compute an averaged sample from multiple samples obtained from identical independent runs.
Note, all the meta_data and dimensions in all samples must be the same, else ValueError is raised (unless
live_dangerously
is set to True).- Parameters
samples (
List
[Sample
]) – list of all sample objects to be averaged overlive_dangerously – setting True allows for averaging over samples which meta-data information is not identical.
- Return type
Sample
- dynasor.post_processing.get_spherically_averaged_sample_binned(sample, num_q_bins)[source]¶
Compute a spherical average over q-points for all the correlation functions in :attr:`sample.
Here, a q-binning method is used to conduct the spherical average, meaning all q-points are placed into spherical bins (shells). The corresponding function is calculated as the average of all q-points in a bin. If a q-bin does not contain any q-points, then its value is set to
np.nan
. The q_min and q_max are determined from min/max of|q_points|
, and will determine the q-bin range. These will be set as bin-centers for the first and last bins repsectivley. The input parameter is the number of q-bins to usenum_q_bins
.- Parameters
sample (
Sample
) – Input samplenum_q_bins (
int
) – number of q-bins to use
- Return type
Sample
- dynasor.post_processing.get_spherically_averaged_sample_smearing(sample, q_norms, q_width)[source]¶
Compute a spherical average over q-points for all the correlation functions in
sample
.In the gaussian average method each q-point contributes to the function value at given \(\vec{q}\) with a weight determined by a gaussian function. For example
\[F(q) = \sum_i w(\boldsymbol{q}_i, q) F(\boldsymbol{q}_i)\]where
\[w(\boldsymbol{q}_i, q) \propto \exp{\left [ -\frac{1}{2} \left ( \frac{|\boldsymbol{q}_i| - q}{q_{width}} \right)^2 \right ]}\]and
\[\sum_i w(\boldsymbol{q}_i, q) = 1.0\]This corresponds to a gaussian smearing or convolution. The input parameters are
q_norms
, setting to the values of \(|\vec{q}|\), for which the function is evaluated andq_width
specifying the standard deviation of the gaussian smearing.- Parameters
sample (
Sample
) – Input sample.q_norms (
ndarray
[Any
,dtype
[float
]]) – Values of \(|\vec{q}|\) at which to evaluate the correlation functions.q_width (
float
) – Standard deviation of the gaussian smearing.
- Return type
Sample
- dynasor.post_processing.get_weighted_sample(sample, weights)[source]¶
Weights correlation functions with atomic weighting factors
The weighting of a partial dynamic structure factor \(S_\mathrm{AB}(\boldsymbol{q}, \omega)\) for atom types \(A\) and \(B\) is carried out as
\[S_\mathrm{AB}(\boldsymbol{q}, \omega) = f_\mathrm{A}(\boldsymbol{q}) f_\mathrm{B}(\boldsymbol{q}) S_\mathrm{AB}(\boldsymbol{q}, \omega)\]\(f_\mathrm{A}(\boldsymbol{q})\) and \(f_\mathrm{B}(\boldsymbol{q})\) are atom-type and \(\boldsymbol{q}\)-point dependent weights.
If sample has incoherent correlation functions, but
weights
does not contain information on how to weight the incoherent part, then it will be dropped from the returnedSample
object (and analogously for current correlation functions).- Parameters
sample (
Sample
) – input sample to be weightedweights (
Weights
) – object containing the weights \(f_\mathrm{X}(\boldsymbol{q})\)
- Return type
Sample
- Returns
A
Sample
instance with the weighted partial and total structure factors.