///////////////////////////////////////////////////////////////////// // (c) Gatan Inc. ///////////////////////////////////////////////////////////////////// // This script simulates a noisy TEM image of a crystal with X-rays. // A dialog box will ask for the signal-to-noise ratio and the approximate number // of X-rays you want to appear. You may enter "0" for the number of X-rays, in which // case no X-rays are added to the image. // It demonstrates use of the icol and irow intrinsic variables, and additionally // use of the Random function ////////////////////////////////////////////////////////////////////// // last modified 08-July-2014 BS // Set up the x and y lattice spacings in pixels number pi = 3.1415926, spacingX = 20, spacingY = 35 // The background scales the overall intensity, and the contrast // determines the relative intensity of the pattern number background = 200, contrast = 0.1 // This section asks the user for a number of factors // including image dimensions, SNR and number of x-rays // The number of x-rays is used as a probability and not as an absolute number. number width, height, SNR, xRays GetNumber("Enter image width:", 256, width) GetNumber("Enter image height:", width, height) GetNumber("Enter signal-to-noise ratio:", 1, SNR) GetNumber("Enter number of X-rays:", 0, xRays) // Create the destination image; real 4byte with 2 dimensions. image crystal := RealImage("Simulated Crystal", 4, width, height) // Generate the crystal image, scaled with respect to the background signal // with a random noise component added // Note Random Returns a random number in the range 0 to 65535. crystal = background*(1 + contrast*( sin(2*pi*icol/SpacingX) \ *sin(2*pi*irow/spacingY) + Random()/(SNR*65536))) // Add the number of specified x-rays; this conditional argument says that \ //if the random number generated is less than the value xrays/(width*height), //then add 2000 to that pixel. If not, leave it as is. Note it acts on all pixels/ crystal += (Random() < xRays/(width*height)) ? 2000 : 0 // Set image contrast survey mode to 'entire image', and display the image // Hence display limits will be set to [min,max] of the image, emphasizing x-rays. SetSurveyTechnique(crystal, 1) ShowImage(crystal)