\(\renewcommand\AA{\unicode{x212B}}\)

DeltaPDF3D v1

../_images/DeltaPDF3D-v1_dlg.png

DeltaPDF3D dialog.

Summary

Calculates the 3D-deltaPDF from a HKL workspace

Properties

Name Direction Type Default Description
InputWorkspace Input IMDHistoWorkspace Mandatory Input Workspace with HKL dimensions centered on zero.
IntermediateWorkspace Output Workspace   The resulting workspace after reflection removal and filters applied. What is the input of the FFT.
OutputWorkspace Output Workspace Mandatory Output Workspace
Method Input string KAREN Bragg peak removal method. Allowed values: [‘None’, ‘Punch and fill’, ‘KAREN’]
WindowFunction Input string Blackman Apply a window function to the data. Allowed values: [‘None’, ‘Gaussian’, ‘Blackman’, ‘Tukey’, ‘Kaiser’]
WindowParameter Input number 0.5 Parameter for window function, depends on window type, see algorithm docs
Shape Input string sphere Shape to punch out reflections. Allowed values: [‘sphere’, ‘cube’]
Size Input dbl list 0.2 Width of cube/diameter of sphere used to remove reflections, in (HKL) (one or three values)
SpaceGroup Input string   Space group for reflection removal, either full name or number. If empty all HKL’s will be removed.
Convolution Input boolean True Apply convolution to fill in removed reflections
ConvolutionWidth Input number 2 Width of gaussian convolution in pixels
CropSphere Input boolean False Limit min/max q values. Can help with edge effects.
SphereMin Input dbl list Optional HKL values below which will be removed (one or three values)
SphereMax Input dbl list Optional HKL values above which will be removed (one or three values)
FillValue Input number Optional Value to replace with outside sphere
KARENWidth Input number 7 Size of filter window

Description

Calculates the 3D-ΔPDF [1] from a HKL MDHistoWorkspace. This algorithm can remove the Bragg peaks by either the punch-and-fill method [2] or the KAREN algorithm.

This algorithm is still in development and features may be added, removed or changed. The scale of the resulting 3D-ΔPDF is, as yet, not scaled correctly, so while the magnitude is not correct the sign should be.

The input workspace must be a MDHistoWorkspace with dimensions ‘[H,0,0]’, ‘[0,K,0]’ and ‘[0,0,L]’, The dimensions must be centered on zero.

Peak removal

Two method are available to remove the Bragg peaks.

Punch-and-fill

The punch-and-fill method is described in [2]. Basically it will punch out a volume of reciprocal space of shape defined by the property Shape and Size. After punch-and-fill the removed Bragg peaks are filled back in by applying a Gaussian convolution.

The convolution option requires astropy to be installed as it uses astropy.convolution. The convolution can be very slow for large workspaces, it will attempt to use astropy.convolution.convolve_fft (which is fast but only works for small workspace) but will use astropy.convolution.convolve (which is slow) if the workspace is too large.

KAREN

The KAREN (K-space Algorithmic REconstructioN) method [3], is a more advanced approach that applies a filter over the data removing any points that are outliers in a moving window, with width set by the property KARENWidth. Outliers are defined as values more than 3 sigma away from the median. Sigma is estimated using 1.4826*MAD (median absolute deviation). Outliers are replaced with a value of median+2.2*MAD of window.

Window function

A window function can be applied to the volume that will produce a smooth transition to zero and you approach the edge of the data.

Currently implemented functions are Blackman (numpy.blackman(), default), Gaussian (scipy.signal.windows.gaussian()), Tukey (scipy.signal.windows.tukey()) and Kaiser (numpy.kaiser())

The WindowParameter allows you to define the Gaussian window sigma, the Tukey window alpha and the Kaiser window beta.

References

[1]Weber, T and Simonov, A, The three-dimensional pair distribution function analysis of disordered single crystals: basic concepts. Zeitschrift für Kristallographie (2012), 227, 5, 238-247 doi: 10.1524/zkri.2012.1504
[2](1, 2) Kobas, M and Weber, T and Steurer, W, Structural disorder in the decagonal Al-Co-Ni. I. Patterson analysis of diffuse x-ray scattering data. Phys. Rev. B (2005), 71, 22, 224205 doi: 10.1103/PhysRevB.71.224205
[3]Weng, J et al. K-space Algorithmic REconstructioN (KAREN): A robust statistical methodology to separate Bragg and diffuse scattering. J. Appl. Crystallogr. In-preparation.

Usage - Punch-and-Fill

The example here is MDHistoWorkspace that corresponds to negative substitutional correlation in the [100] direction. If you just run it without any alterations to the workspace the 3D-ΔPDF will be dominated by the Bragg peaks and will just be a 3D-PDF instead.

DeltaPDF3D(InputWorkspace='DeltaPDF3D_MDH',OutputWorkspace='fft',
           Method='None', WindowFunction='None')
print("The value at [1,0,0] is {:.4f}".format(mtd['fft'].signalAt(1866)))
print("The value at [0,1,0] is {:.4f}".format(mtd['fft'].signalAt(2226)))
The value at [1,0,0] is 4057.7079
The value at [0,1,0] is 5565.6700

The results 3D-ΔPDF workspace looks like

Starting workspace Resulting 3D-PDF
int1 fft1

Removing Reflections

To get a Δ-PDF you need to remove the Bragg peaks. If we now remove the reflections you will see that negative value at [±1,0,0].

The IntermediateWorkspace shows the changes to the input workspace.

DeltaPDF3D(InputWorkspace='DeltaPDF3D_MDH',OutputWorkspace='fft2',IntermediateWorkspace='int2',
           Method='Punch and fill',Size=0.3,Convolution=False, WindowFunction='None')
print("The value at [1,0,0] is {:.4f}".format(mtd['fft2'].signalAt(1866)))
print("The value at [0,1,0] is {:.4f}".format(mtd['fft2'].signalAt(2226)))
The value at [1,0,0] is -738.9594
The value at [0,1,0] is 769.0027
Intermediate workspace after reflections removed Resulting 3D-ΔPDF
int2 fft2

Removing Reflections and crop to sphere

DeltaPDF3D(InputWorkspace='DeltaPDF3D_MDH',OutputWorkspace='fft3',IntermediateWorkspace='int3',
           Method='Punch and fill',Size=0.3,CropSphere=True,SphereMax=3,Convolution=False, WindowFunction='None')
print("The value at [1,0,0] is {:.4f}".format(mtd['fft3'].signalAt(1866)))
print("The value at [0,1,0] is {:.4f}".format(mtd['fft3'].signalAt(2226)))
The value at [1,0,0] is -477.1737
The value at [0,1,0] is 501.0818
Intermediate workspace after reflections removed and crop to sphere Resulting 3D-ΔPDF
int3 fft3

Removing Reflections and crop to sphere with fill value The fill value should be about the background level

DeltaPDF3D(InputWorkspace='DeltaPDF3D_MDH',OutputWorkspace='fft3',IntermediateWorkspace='int3',
           Method='Punch and fill',Size=0.3,CropSphere=True,SphereMax=3,Convolution=False, WindowFunction='None')
print("The value at [1,0,0] is {:.4f}".format(mtd['fft3'].signalAt(1866)))
print("The value at [0,1,0] is {:.4f}".format(mtd['fft3'].signalAt(2226)))
The value at [1,0,0] is -477.1737
The value at [0,1,0] is 501.0818
Intermediate workspace after reflections removed and crop to sphere Resulting 3D-ΔPDF
int3_2 fft3_2

Applying convolution

DeltaPDF3D(InputWorkspace='DeltaPDF3D_MDH',OutputWorkspace='fft4',IntermediateWorkspace='int4'
           Method='Punch and fill',Size=0.3,CropSphere=True,SphereMax=3,Convolution=True, WindowFunction='None')
print("The value at [1,0,0] is {:.4f}".format(mtd['fft4'].signalAt(1866)))
print("The value at [0,1,0] is {:.4f}".format(mtd['fft4'].signalAt(2226)))
The value at [1,0,0] is -47.1984
The value at [0,1,0] is 44.3406
Intermediate workspace after convolution is applied Resulting 3D-ΔPDF
int4 fft4

Usage - KAREN

DeltaPDF3D(InputWorkspace='DeltaPDF3D_MDH',OutputWorkspace='fft',IntermediateWorkspace='int',KARENWidth=3)
print("The value at [1,0,0] is {:.4f}".format(mtd['fft'].signalAt(1866)))
print("The value at [0,1,0] is {:.4f}".format(mtd['fft'].signalAt(2226)))
The value at [1,0,0] is -18.4259
The value at [0,1,0] is 18.4204
Intermediate workspace after KAREN and window function applied Resulting 3D-ΔPDF
int5 fft5

Categories: AlgorithmIndex | Diffraction\Utility

Source

Python: DeltaPDF3D.py (last modified: 2020-04-24)