Discussion:
[Gwyddion-users] FFT and reciprocal space
Mathias Müller
2014-02-07 10:12:25 UTC
Permalink
Yeti,

I recently wanted to extract lattice constants from FFT images. I am using reference values obtained from a commercial software.
Employing the transformation rule from real space to reciprocal space (and vice versa) I do not succeed in
calculating the correct values. However, when multiplying the fft coordinates with 2*pi it fits pretty well.

This leads to one of my questions. Did you implement the crystallographic notation (a_real * a_rec = 1) or the
solid state notation (a_real * a_rec = 2*pi) for reciprocal space? (just to ensure the correct transformation)

The second question concerns the result's quality. Using the same data from the commercial software results in two pretty equal
lattice constants of the unit cell. Calculating by hand from the very same FFT coordinates (peaks) results in two similar but
different values. Using neighbor pixels slightly varies the result, but never matches.

For example a hexagonal structure:

lattice constant commercial/nm Gwyydion-manually/nm

|a| 1.25 1.29
|b| 1.24 1.22

The question is why does it differ? Do I have to correct the coordinates if the angle between two vectors of neighbor peaks
is != 60 degree (i.e. hexagonal structure)? Should I calculate the center of mass of each FFT peak ? Maybe the latter improves
the precision. However, am I overcritical about a difference of 3 % ?


Cheers,

/M
David Nečas (Yeti)
2014-02-07 14:39:39 UTC
Permalink
Post by Mathias Müller
I recently wanted to extract lattice constants from FFT images. I am
using reference values obtained from a commercial software. Employing
the transformation rule from real space to reciprocal space (and vice
versa) I do not succeed in calculating the correct values. However,
when multiplying the fft coordinates with 2*pi it fits pretty well.
This is one of the many Fourier transform pitfalls. Gwyddion uses
agnular frequencies for FFT (except the 2D FFT module, for historical
reasons).
Post by Mathias Müller
This leads to one of my questions. Did you implement the crystallographic notation (a_real * a_rec = 1) or the
solid state notation (a_real * a_rec = 2*pi) for reciprocal space? (just to ensure the correct transformation)
It is more like that we use spatial frequency which is 2π times the
quantity you want.
Post by Mathias Müller
The second question concerns the result's quality. Using the same data from the commercial software results in two pretty equal
lattice constants of the unit cell. Calculating by hand from the very same FFT coordinates (peaks) results in two similar but
different values. Using neighbor pixels slightly varies the result, but never matches.
lattice constant commercial/nm Gwyydion-manually/nm
|a| 1.25 1.29
|b| 1.24 1.22
The question is why does it differ? Do I have to correct the coordinates if the angle between two vectors of neighbor peaks
is != 60 degree (i.e. hexagonal structure)? Should I calculate the center of mass of each FFT peak ? Maybe the latter improves
the precision. However, am I overcritical about a difference of 3 % ?
I'm not sure about this but you should definitely take the mass centre.
Generally, the maximum does not lie in a pixel centre.

Also, did you try the new affine correction module? It works in the
real space using ACF but if you have something like a regular lattice it
should provide quite good lattice vectors (including directions).

Regards,

Yeti
Mathias Müller
2014-02-10 14:02:36 UTC
Permalink
Yeti,

I just tried out the affine correction module. I did not know it was in the module collection. It works pretty good.
At least it results in the same lattice constants I obtained with com. software.

However, some STM images contain several rotational domains. With 2D-FFT I can select them
separately. Cropping the image for affine correction doesn't result in the correct lattice parameter (dunno why).

But anyway. Thanks for pointing to this module. It will be useful for future analysis :-)

Cheers,

/M
Post by David Nečas (Yeti)
Post by Mathias Müller
I recently wanted to extract lattice constants from FFT images. I am
using reference values obtained from a commercial software. Employing
the transformation rule from real space to reciprocal space (and vice
versa) I do not succeed in calculating the correct values. However,
when multiplying the fft coordinates with 2*pi it fits pretty well.
This is one of the many Fourier transform pitfalls. Gwyddion uses
agnular frequencies for FFT (except the 2D FFT module, for historical
reasons).
Post by Mathias Müller
This leads to one of my questions. Did you implement the crystallographic notation (a_real * a_rec = 1) or the
solid state notation (a_real * a_rec = 2*pi) for reciprocal space? (just to ensure the correct transformation)
It is more like that we use spatial frequency which is 2π times the
quantity you want.
Post by Mathias Müller
The second question concerns the result's quality. Using the same data from the commercial software results in two pretty equal
lattice constants of the unit cell. Calculating by hand from the very same FFT coordinates (peaks) results in two similar but
different values. Using neighbor pixels slightly varies the result, but never matches.
lattice constant commercial/nm Gwyydion-manually/nm
|a| 1.25 1.29
|b| 1.24 1.22
The question is why does it differ? Do I have to correct the coordinates if the angle between two vectors of neighbor peaks
is != 60 degree (i.e. hexagonal structure)? Should I calculate the center of mass of each FFT peak ? Maybe the latter improves
the precision. However, am I overcritical about a difference of 3 % ?
I'm not sure about this but you should definitely take the mass centre.
Generally, the maximum does not lie in a pixel centre.
Also, did you try the new affine correction module? It works in the
real space using ACF but if you have something like a regular lattice it
should provide quite good lattice vectors (including directions).
Regards,
Yeti
Loading...