CrystFEL - Crystallography with a FEL ------------------------------------- Thomas White , CFEL, DESY Hamburg CrystFEL is a suite of programs for processing (and simulating) Bragg diffraction data acquired with a free electron laser. Some of the particular characteristics of such data which call for a specialised software suite are: - The sliced, rather than integrated, measurement of intensity data. Many, if not all reflections are partially integrated. Unique correction factors are needed. - The crystals are small, leading to significant Fourier truncation effects on the detector. - Many patterns (>10,000) are required - high throughput is needed. - The crystal orientations in each pattern are random and uncorrelated, meaning that: - Merging into lower symmetry point groups may require the resolution of indexing ambiguities. CrystFEL includes programs for simulating and processing patterns subject to the above characteristics. The main programs are: - pattern_sim, for simulating patterns. - indexamajig, a "batch indexer" and data reduction program. It is used for finding hits, locating peaks, indexing patterns and constructing lists of h,k,l,I,sigma(I) (or similar) for each pattern. - process_hkl, for merging per-pattern lists of intensities into a single reflection list. - partialator, for merging patterns more accurately (and much more slowly) using post refinement. In addition, there is also: - get_hkl, for generating a list of squared structure factors for comparison to simulated or experimental data. - powder_plot, for turning an image into a list of reciprocal space vector moduli and intensities (i.e. a powder diffraction trace). - compare_hkl, for working out the differences (e.g. a q-dependent scaling factor) between two lists of reflections. - check_hkl, for determining things like completeness. - sum_stack, for summing patterns after peak detection to use for calibrating your detector. - cubeit, for summing patterns in 3D to inspect the peak profiles. - calibrate_detector, which does nothing useful at the moment. Included at no extra cost are: - hdfsee, a simple viewer for images stored in HDF5 format. - render_hkl, for turning reflection lists into pretty graphics. There is also a big folder of scripts for achieving many related tasks. CrystFEL mostly works with images stored in HDF5 format, unit cell and atomic coordinate data in PDB format, and reflection lists in plain text format (i.e. not MTZ). There is a script for turning a plain text reflection list into an MTZ file for later import into CCP4. For documentation on the individual programs and topics, see the files inside the "doc" directory. Installation ------------ See the "INSTALL" file for the generic instructions on how to use the build system. In short, it's: $ ./configure $ make $ make check $ sudo make install You might want to substitute something based on one of the following for the first step: $ ./configure --with-opencl $ ./configure --with-hdf5=/some/strange/location $ ./configure --with-libtiff=/some/strange/location $ ./configure --with-gsl=/some/strange/location $ ./configure --disable-gtk At a minimum, you will need the HDF5 library (version 1.8.0 or later) and the GNU Scientific Library (GSL). For a full installation, you will also need libTIFF, libPNG, Cairo and GTK. You must use an installation of the HDF5 library which is thread safe. That means it must have been configured with the "--enable-threadsafe" option. Most binary distributions appear NOT to be like this. If you don't have a thread safe HDF5 library, just be sure not to use the "-j" option for any of the CrystFEL programs. If you're compiling on Mac OS X, where GTK, libPNG and libTIFF seem to be much harder to come by, disable lots of things: $ ./configure --disable-gtk --disable-png --disable-libtiff If you get a screen full of errors of the following form: : undefined reference to `cblas_' Add "--enable-gsl-fudge" to your configuration parameters. Program name ------------ There seems to be a tendency to capitalise all the letters in the names of programs in scientific publications. Sometimes the authors do this, other times the journal capitalises them at the proof stage. It's as if they think it somehow makes the name look more "computery", or perhaps "trademark-y". Well, it's not 1970 any more, and programs are no longer input on punched cards. That means we can have capitalisation any way we choose. I hope you can forgive me for being fussy about how my work is referred to in publications and talks. The name for the overall software suite is "CrystFEL", with this being the only acceptable capitalisation. The individual programs should always be referred to with all letters in lower case, exactly the same as the names of the binaries. Put the names in quotes or italics if this sounds strange to you. The only exception is if the name of the program comes at the start of a sentence, or in a title, or similar position where a word would normally be capitalised. In most cases, it will be more appropriate to refer to the overall suite than to one of its constituent programs. The following are NOT acceptable forms: "CRYSTFEL", "crystFEL", "Crystfel", "INDEXAMAJIG" and "PATTERN_SIM". If you use any of these, the Capitalisation Monster will hunt you down and eat you. In addition, CrystFEL is made up of "programs", not "routines" nor "procedures". (The "programs" in turn are made up from "routines" and "procedures", but unless you are exploring the source code, there's no need for you to know about that).