Focal series
DigitalMicrograph Script
Simulate a focal series of theoretical diffractograms.
Preview
/////////////////////////////////////////////////////////////////////
// (c) Gatan Inc.
/////////////////////////////////////////////////////////////////////
// This script simulates a focal series of theoretical diffractograms.
//////////////////////////////////////////////////////////////////////
// last modified 08-July-2014 BS (comments only)
// Define required parameters; spherical abberation co-efficient,
// incident electron wavelength and the Nyquist limit
// and input from the user reuiqred parameters such as image size, defocus, etc.
// Note if (!GetNumber) exit(0) denotes that if cancel is selected, procedure will stop.
number pi = 3.1415926, Cs = 0.001, lambda = 0.00164, nyquist = 10
number defocus, focalStep, width, height
if (!GetNumber("Start defocus (nm): ", -200, defocus)) exit (0)
if (!GetNumber("Focal Step (nm): ", 40, focalStep)) exit (0)
if (!GetNumber("Image size in pixels (X): ", 256, width)) exit (0)
if (!GetNumber("Image size in pixels (Y): ", 256, height)) exit (0)
// Post a message to the user alerting them to hit stop to finish the example.
if (!ContinueCancelDialog("Press spacebar to stop ...")) exit (0)
// Calculate the square of the spatial frequency (zero frequency at image centre)
// and scale to go out to 4 times the Nyquist frequency
image freqSquared := RealImage("", 4, width, height)
freqSquared = (icol-(width/2))*(icol-(width/2)) +(irow-(height/2))*(irow-(height/2))
freqSquared = 4*nyquist*freqSquared/(width*height)
// Calculate the wave aberration function resulting from the objective lens
image waveAbb := RealImage("", 4, width, height)
waveAbb = Cs*lambda*lambda*lambda*freqSquared*freqSquared*exp10(9)
// Create an image to hold the phase contrast transfer function
// and display it
image PCTF := RealImage("Demo", 4, width, height)
ShowImage(PCTF)
// While the space bar isn't pressed, keep recalculating and updating the PCTF with increasing focus step
// Alternatively, one could also use: " while( !SpaceDown() )
while( GetKey() != 32 )
{
// Calculate sin(phase shift) as a function of frequency, including the defocus term
PCTF = abs(sin(2*pi*(waveAbb+defocus*lambda*freqSquared)))
// Update the PCTF image, and increase the defocus by the focal step increment for the next loop
UpdateImage(PCTF)
defocus = defocus + focalStep
}