Microscopy resources

There is a great deal of valuable information available online for electron microscopists, from beginner to expert. This page will contain a repository of useful documents available both as PDF downloads and as links to other web sites.

Documents are categorized according to the type of microscope they are relevant to. Click the appropriate header below to expand the section and view the documents.


A list of useful scripts and tools and instructions on how to use them.

Computing focus as a function of position on a plane

Now available for download, an Excel spreadsheet for calculating focus values as a function of position, on a plane. If you are fabricating on a gold-coated glass slide, it is useful to be able to move to a position or a number of positions that are distant from each other, and cut your structure without first looking at the sample to check the focus. This maintains the pristine condition of the gold coating at your structure position.

Since the glass slide is flat, but possibly tilted in three axes, it is necessary to compute the equation of the plane, where x and y are the coordinates, and z is the focus value F. To do this, go to three positions on the glass slide, and record the x, y, and focus values. Put these values into the spreadsheet as Point 1, Point 2, and Point 3. The spreadsheet will calculate the plane equation coefficients A, B, C, and D. Then enter your x and y coordinates of the point in question, and the spreadsheet will tell you the focus value at that point. Simply go into calibration mode, change the focus value to that number, register the beam, and then switch back to fabrication mode. Move the stage to the desired x and y coordinates, and then you can cut the pattern blind without looking at the sample first.

Coordinate transformations

There are situations where one might want to translate coordinates between systems:

Moving a specimen from the FIB to SEM, to take high resolution images of fabrications.
Finding the same location on a specimen on the SEM or FIB, some time later, when the specimen is assembled differently on the holder.

The following two downloads discuss the method (Helmert Transformation in two dimensions), and provide a Matlab function to compute coordinates of a point of interest P, between coordinate systems.

Two reference points are needed on the specimen. Typically a fine point Sharpie is used to make these marks, and the FIB used to fabricate cross hairs on the Sharpie dots. The coordinates of those two reference points must be known in both instruments, and the coordinates of the point of interest P must be known in one coordinate system (typically on the FIB, where the structure was fabricated). The Matlab function then computes the new coordinates of P based on the location of the reference marks in both coordinate systems.

Finding the center of a circle

There are situations where one might want to navigate to the center of a circle that is too large to see at the lowest available magnification. In these situations, record three points along the perimeter of the circle, and use the following Matlab function to compute the center of the circle:

Finding the center point of a rotated square

Available for download, an Excel spreadsheet for calculating the center of a rotated square. Useful for finding the centerpoint of a SiN window. Simply use the FIB to navigate to the four corners of the square, record the coordinates, and enter them into the spreadsheet. The center coordinates are then computed.

Font bitmap files

Now available for download, font bitmaps (zipped) for use on the FIB. Create indicator marks, write notes on your sample, and more. Contains numerals 0 to 9, and capital letters A to Z.

Generating bitmaps with Matlab

To generate bitmap images of grids of elements (such as circles, squares, rectangles, or other more complicated features) for use on the FIB, use the Matlab function makegrid.m, along with one of the helper functions plotcircle.m, plotsquare.m, plotrectangle.m, or plotantenna.m. The helper functions are provided as working samples, you can create arbitrary ones. To generate the bitmap, do the following:

  1. Use makegrid.m and one of the helper functions to make a figure containing the grid of elements. The function templates are:


    plotcircle(X,Y,element_params) [all the helper functions have the same template]

    element_params is an arbitrary length vector containing [width, height, ... ] where [...] are parameters you can use to define some arbitrary element.

    Examples of use would be:

    • makegrid('plotcircle',[50],5,400,10,600)
      This makes a grid of 50 nm diameter circles, 5 in the horizontal direction with 400 nm center spacing, and 10 in the vertical direction with 600 nm center spacing.
    • makegrid('plotsquare',[50],5,400,10,600)
      This makes a grid of 50 nm x 50 nm squares, 5 in the horizontal direction with 400 nm center spacing, and 10 in the vertical direction with 600 nm center spacing.
    • makegrid('plotrectangle',[50,100],5,400,10,600)
      This makes a grid of 50 nm wide x 100 nm high rectangles, 5 in the horizontal direction with 400 nm center spacing, and 10 in the vertical direction with 600 nm center spacing.
    • makegrid('plotantenna',[300,200,30,30],5,400,10,600)
      This makes a structures that consist of an outer box and two nested interior boxes, 5 in the horizontal direction with 400 nm center spacing, and 10 in the vertical direction with 600 nm center spacing.

    See documentation in the files. This makes a figure with units in nanometers.

  2. On the figure window, use file -> saveas and save as encapsulated postscript.
  3. Open this file with Photoshop. When you open it, make the height so that 1 pixel = 1 nanometer. This ensures the image is large enough so circle resolution is fairly decent. So for a 10x10 grid of 200 nm circles with 400 nm center spacing, the image size would be (10-1)*400 + 200 = 3800 px high.
  4. Make the image grayscale: Image -> Mode -> Grayscale.
  5. Make it a 1 bit image, use the Posterize function: Image -> Adjustments -> Posterize, set value to 2.
  6. Depending on how you write your subfunction, you may or may not have to invert the image so the elements are black and the background is white. The provided plotcircle(), plotsquare(), and plotrectangle() build arrays of filled elements on a white background. plotantenna() does not. If your subfunction makes filled elements you don't need to do anything, otherwise:
    • Use paint bucket tool, and fill the space between the circles with black.
    • Use: Image -> Adjustments -> Invert.
  7. Use the crop tool, and crop to 2000 px by 2000 px.
  8. Save as .bmp file format.

Generating bitmaps with Illustrator and Javascript

Previously we suggested that our users utilize Matlab to generate bitmaps of grids of elements, or do it by hand with Illustrator. MATLAB had the benefit of speed, and Illustrator produced cleaner bitmap files. Now, you can download Javascript scripts to automate the procedure in Illustrator. There are three sample files, one for making an array of circles, one for making an array of rectangles, and one for making an array of arbitrary structures.

Use the following steps to build a bitmap file:

  1. Download the appropriate file linked above, and edit the approriate variables to select: pitch, number of elements in the array, and diameter for circles or width and height for rectangles. The "arbitrary stuctures" example is currently written to make an array of double nanoholes, but it can be modified to make an array of any type of structure.
  2. Open Adobe Illustrator.
  3. Control-F12 will open a dialog box for selecting the script file. Select the appropriate script file, and click Open. This will execute the script.
  4. File -> Saveas Illustrator EPS, this saves the file as encapsulated postscript.
  5. Open this encapsulated postscript file in Photoshop. When you open it, make the height and width 2000 pixels (or, if the bitmap is not square, make the largest dimension 2000 pixels), use Grayscale mode, and turn off anti-aliasing.
  6. Layer -> Flatten
  7. File -> Saveas BMP

To learn more about Javascript and Illustrator, refer to the following:

The following are some relevant notes for modifying the script for arbitrary structures:

  • When you create an element such as a circle or a square, its "origin" is at the top left corner of the element.
  • The sample script uses two nested for loops to move in the array area in X and Y. At each step, you can call an arbitrary function to create an arbitrary shape or set of shapes. Inside this function, you have to make sure that you have properly shifted the position of the elements making up your arbitrary shape, keeping the above point in mind.

Optical and Electron Microscopes

Service, supplies and accessories