Python interface¶
This section includes documentation of some of the internal methods and classes can be useful for further analysis.
Fourier transformations¶
This module provides an implementation of Filon’s integration formula. For information about Filon’s formula, see e.g. Abramowitz and Stegun, Handbook of Mathematical Functions, section 25 or Allen and Tildesley, Computer Simulation of Liquids, Appendix D.
Integration is performed along one dimension (default axis=0
), e.g.,
[F0[0] F1[0] .. FN[0] ] [f0[0] f1[0] .. fN[0] ]
[ . . . ] [ . . . ]
[F0[.] F1[.] .. FN[.] ] = I([f0[.] f1[.] .. fN[.] ], dx, [k[0] .. k[Nk]])
[ . . . ] [ . . . ]
[F0[Nk] F1[Nk] .. FN[Nk]] [f0[Nx] f1[Nx] .. fN[Nx]]
where k
and Fj
have end index Nk
, and fj
has end index Nx
.
Nk
is automatically set by the length of k
. Due to the algorithm,
fj[Nx]
must be of odd length (Nx
must be an even number), and should
correspond to a linearly spaced set of data points (separated by dx along the
integration axis).
sin_integral()
and cos_integral()
allow for shifted integration
intervals by the optional argument x0
.
- dsf.filon.cos_integral(f, dx, k, x0=0.0, axis=0)¶
Calculates the integral \(\int_{x_0}^{2n\Delta x} f(x) \cos(k x) dx\).
- Parameters
f (array) – function values; must contain an odd number of elements
dx (float) – spacing of x-axis (\(\Delta x\))
k (array) – values of reciprocal axis, at which to evaluate transform; if
k
is not provided,linspace(0.0, 2*pi/dx, f.shape[axis])
, will be used.x0 (float) – offset for integration interval
axis (int) – axis along which to carry out integration
- Returns
tuple of
k
andF
values- Return type
float
- dsf.filon.fourier_cos(f, dx, k=None, axis=0)¶
Calculates the direct Fourier cosine transform \(F(k)\) of a function \(f(x)\) using Filon’s integration method.
The array values
f[0]..f[2n]
are expected to correspond to \(f(0.0)\ldots f(2n\Delta x)\). Hence,f
should contain an odd number of elements.The transform is approximated by the integral \(F(k) = 2\int_{0}^{x_{max}} f(x) \cos(k x) dx\), where \(x_{max} = 2n \Delta x\).
- Parameters
f (array) – function values; must contain an odd number of elements
dx (float) – spacing of x-axis (\(\Delta x\))
k (array) – values of reciprocal axis, at which to evaluate transform; if
k
is not provided,linspace(0.0, 2*pi/dx, f.shape[axis])
, will be used.axis (int) – axis along which to carry out integration
- Returns
tuple of
k
andF
values- Return type
(array, array)
Example
A common use case is
k, F = fourier_cos(f, dx)
- dsf.filon.sin_integral(f, dx, k, x0=0.0, axis=0)¶
Calculates the integral \(\int_{x_0}^{2n\Delta x} f(x) \sin(k x) dx\).
- Parameters
f (array) – function values; must contain an odd number of elements
dx (float) – spacing of x-axis (\(\Delta x\))
k (array) – values of reciprocal axis, at which to evaluate transform; if
k
is not provided,linspace(0.0, 2*pi/dx, f.shape[axis])
, will be used.x0 (float) – offset for integration interval
axis (int) – axis along which to carry out integration
- Returns
tuple of
k
andF
values- Return type
float
Trajectory handling¶
- dsf.trajectory.get_itraj(filename: str, step: int = 1, max_frames: int = 0, readers=[<class 'dsf.trajectory_reader.lammpstrj_trajectory_reader.lammpstrj_trajectory_reader'>, <class 'dsf.trajectory_reader.extxyz_trajectory_reader.extxyz_trajectory_reader'>])¶
Return a dynasor-style trajectory iterator
Simple wrapper for the trajectory_reader-classes.
- Parameters
filename (str) – name of input file
step (int) – step to access (1 by default = every single frame); must be > 0.
max_frames (int) – maximum number of frames to read (0 by default = no limit); must be >= 0.
- Return type
Each iterator step consists of a dictionary.
{ 'index' : trajectory frame index (1, 2, 3, ...), 'box' : simulation box as 3 row vectors (nm), 'N' : number of atoms, 'x' : particle positions as 3xN array (nm), 'v' : (*) particle velocities as 3xN array (nm/ps), 'time' : (*) simulation time (ps), }
(*)
may not be available, depends on reader and trajectory file format.
- class dsf.trajectory.iwindow(itraj, width=2, stride=1, element_processor=None)¶
Sliding window iterator.
Returns consecutive windows (a windows is represented as a list of objects), created from an input iterator.
- Parameters
width (int) – length of window
stride (int) – distance between the start of two consecutive window frames
element_processor (function) – enables processing each non-discarded object; useful if
stride > width
andmap_item
is expensive (as compared to directly passingmap(fun, itraj)
asitraj
); ifstride < width
, you could as well directly passmap(fun, itraj)
.