rsv_mapper.py

Info:
Author:Jon Wright <wright@esrf.fr>
Date:26 June 2009
Revision:$Revision: $

Introduction

We wish to convert a series of diffraction images into a 3D reciprocal space volume. The rsv_mapper.py script which is in ImageD11 accomplishes this task.

The program reads the geometry and computes k vectors for each pixel in the image and stores these in a cache. Then for each image, a rotation matrix is constructed representingthe rotation of the crystal axes compared to the laboratory axes. This matrix includes the current rotation of the crystal due to the diffractometer and also the orientation matrix. By applying the matrix, we can get to hkl values, or reciprocalspace co-ordinates, to use directly as array indices.

The pixel values are accumulated in a 3D array and a second array counts the number of contributing pixels. This volume is written out in hdf format.

Running the program

In common with many other scripts in ImageD11 you type:

$ rsv_mapper.py --help

Usage: rsv_mapper.py [options]

Options:
 -h, --help            show this help message and exit

The following options are all used to describe a series of images corresponding to a rotation experiment. They are the same for peaksearch.py:

-5 HDF5, --hdf5=HDF5  hdf file containing input image series

This reads the series of images from an hdf file, in the event that you have them in that format (it is currently unlikely for raw data):

-n STEM, --stem=STEM  stem name for input image series
-f FIRST, --first=FIRST
                      first number for input image series
-l LAST, --last=LAST  last number for input image series
--ndigits=NDIGITS     Number of digits in file numbering [4]
-P PADDING, --padding=PADDING
                      Is the image number to padded Y|N, e.g. should 1 be
                      0001 or just 1 in image name, default=Y
-F FORMAT, --format=FORMAT
                      format [.edf] for input image series
-O FLOOD, --flood=FLOOD
                      Flood
-d DARK, --dark=DARK  Dark image
-s SPLINE, --splinefile=SPLINE
                      Name of fit2d spline file for spatial dist
-S OMEGASTEP, --step=OMEGASTEP
                      omega step size
-T OMEGA, --start=OMEGA
                      start omega

Some particular points to note: the dark and flood and spline images are quite important at this stage for avoiding artifacts. If your images are not already corrected it is important to use the right ones:

-p PARS, --pars=PARS  ImageD11 parameter file for experiment

See the transform module documentation. You need good instrument parameters to map the pixels to correct positions in reciprocal space. The program does not recompute k vectors based on the crystal translation, so it is better to set this to zero and align your crystal as well as you can:

-u UBIFILE, --ubifile=UBIFILE
                      Name of ubi file (first matrix is used)

An orientation matrix in ImageD11’s format. This means the matrix which is used to make scattering vectors onto crystal axes (the axes you will use in reciprocal space):

 hkl = (UBI).(g)
-x NPIXELS, --npixels=NPIXELS
                      Number of pixels in reciprocal space map per integer
                      hkl [16]

-i IMAGES, --images=IMAGES
                      Number of images to process [all]

This option removes a border around the images. Useful in the case that the detector image does not go to the edge:

-b BORDER, --border=BORDER
                      Border around images to allocate space, px [10]

FIXME: radius and mask:

-o OUTPUT, --output=OUTPUT
                      Name of hdf5 output file

How to get started

You need to calibrate your experimental setup in terms of beam center and sample to detector distance. Also determine the detector orientation. This is outside the scope of this document, see the transform module.

Now you can choose

Things to do

  • Parallelise the code
  • Allow the user to select a region of interest
  • Radius and mask active pixel selections?
  • Process only specific planes
  • Rebin the image before processing (an optimisation)
  • Split pixels in 3D (at least add in a couple of intermediate angular steps)
  • Apply a polarisation correction
  • Write directly a format which can be read by chimera