aboutsummaryrefslogtreecommitdiff
path: root/doc/man/indexamajig.1.md
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2023-09-14 18:21:42 +0200
committerThomas White <taw@physics.org>2023-09-18 13:05:01 +0200
commit4c5d675e9fbc00c27acdf0b1eb3e02d38bee51df (patch)
tree7862d1df8515d374c687c97cc125ef68f87951d8 /doc/man/indexamajig.1.md
parente84f8c67fbeca8d82633287032f8cb2a828f1b1a (diff)
Convert indexamajig(1) manual page to Markdown
Diffstat (limited to 'doc/man/indexamajig.1.md')
-rw-r--r--doc/man/indexamajig.1.md885
1 files changed, 885 insertions, 0 deletions
diff --git a/doc/man/indexamajig.1.md b/doc/man/indexamajig.1.md
new file mode 100644
index 00000000..e296839e
--- /dev/null
+++ b/doc/man/indexamajig.1.md
@@ -0,0 +1,885 @@
+% indexamajig(1)
+
+NAME
+====
+
+indexamajig - bulk indexing and data reduction program
+
+
+SYNOPSIS
+========
+
+indexamajig
+-i _filename_ -o _output.stream_ -g _detector.geom_ --peaks=_method_ --indexing=_method_ ...
+
+
+DESCRIPTION
+===========
+
+**indexamajig** takes a list of diffraction snapshots from crystals in random
+orientations and attempts to find peaks, index and integrate each one. The
+input is a list of diffraction image files and some auxiliary files and
+parameters. The output is a long text file ('stream') containing the results
+from each image in turn.
+
+For minimal basic use, you need to provide the list of diffraction patterns,
+the method which will be used to index, a file describing the geometry of the
+detector, and a file which contains the unit cell which will be used for the
+indexing. Here is what the minimal use might look like on the command line:
+
+ indexamajig
+ -i mypatterns.lst
+ -g mygeometry.geom
+ --indexing=xgandalf
+ --peaks=hdf5
+ -p mycell.pdb
+ -o test.stream
+
+More typical use includes all the above, but might also include extra
+parameters to modify the behaviour. For example, you'll probably want to run
+more than one indexing job at a time (-j <n>).
+
+See **man crystfel_geometry** for information about how to create a file
+describing the detector geometry and beam characteristics.
+
+
+DIFFRACTION PATTERN LIST
+========================
+
+Indexamajig requires an input file with a list of diffraction patterns to
+process. In its simplest form, this is just a text files containing a list of
+image filenames. The image files might be in some folder a long way from the
+current directory, so you might want to specify a full pathname to be added in
+front of each filename. The geometry file includes a description of the data
+layout within the files. Indexamajig uses this description to determine the
+number of diffraction patterns stored in each file, and tries to process them
+all. You can also specify explicity which framess you would like to process
+by putting a string describing the frames after the file name(s) in this list.
+
+
+PEAK DETECTION
+==============
+
+You can control the peak detection on the command line. First, you can choose
+the peak detection method using **--peaks=method**. **--peaks=hdf5** or
+**--peaks=cxi** will take the peak locations from the input file. See the
+documentation for peak_list and peak_list_type in **crystfel_geometry**(5) for
+details.
+
+If you use **--peaks=zaef**, indexamajig will use a simple gradient search
+after Zaefferer (2000). You can control the overall threshold and minimum
+squared gradient for finding a peak using **--threshold** and
+**--min-squared-gradient**. The threshold has arbitrary units matching the
+pixel values in the data, and the minimum gradient has the equivalent squared
+units. Peaks will be rejected if the 'foot point' is further away from the
+'summit' of the peak by more than the inner integration radius (see below).
+They will also be rejected if the peak is closer than twice the inner
+integration radius from another peak.
+
+If you instead use **--peaks=peakfinder8**, indexamajig will use the
+"peakfinder8" peak finding algorithm describerd in Barty et al. (2014). Pixels
+above a radius-dependent intensity threshold are considered as candidate peaks
+(although the user sets an absolute minimum threshold for candidate peaks).
+Peaks are then only accepted if their signal to noise level over the local
+background is sufficiently high. Peaks can include multiple pixels and the user
+can reject a peak if it includes too many or too few. The distance of a peak
+from the center of the detector can also be used as a filtering criterion. Note
+that the peakfinder8 will not report more than 2048 peaks for each panel: any
+additional peak is ignored.
+
+If you instead use **--peaks=peakfinder9**, indexamajig will use the
+"peakfinder9" peak finding algorithm described in the master thesis "Real-time
+image analysis and data compression in high throughput X-ray diffraction
+experiments" by Gevorkov. Other than peakFinder8, peakFinder9 uses local
+background estimation based on border pixels in a specified radius
+(**--local-bg-radius**). For being fast and precise, a hierarchy of
+conditions is used. First condition is only useful for speed consideration, it
+demands that a pixel that is the biggest pixel in a peak must be larger than
+every border pixel by a constant value (**--min-peak-over-neighbour**).
+Second condition ensures, that the pixel passing the previous condition is the
+highest pixel in the peak. It assumes, that peaks rise monotonically towards
+the biggest pixel. Third condition ensures, that the biggest pixel in the peak
+is significantly over the noise level (**--min-snr-biggest-pix**) by
+computing the local statistics from the border pixels in a specified radius.
+Fourth condition sums up all pixels belonging to the peak
+(**--min-snr-peak-pix**) and demands that the whole peak must be
+significantly over the noise level (**--min-snr**). Only if all conditions
+are passed, the peak is accepted.
+
+
+INDEXING METHODS
+================
+
+You can choose between a variety of indexing methods. You can choose more than
+one method, in which case each method will be tried in turn until one of them
+reports that the pattern has been successfully indexed. Choose from:
+
+**dirax**
+: Invoke DirAx. See Duisenberg, J. Applied Crystallography 25 (1992) p92,
+: https://doi.org/10.1107/S0021889891010634.
+
+**mosflm**
+: Invoke Mosflm. See Powell, Acta Crystallographica D55 (1999) p1690,
+: https://doi.org/10.1107/S0907444999009506.
+
+**asdf**
+: This is a implementation of the dirax algorithm, with some very small changes
+: such as using a 1D Fourier transform for finding the lattice repeats. This
+: algorithm is implemented natively within CrystFEL meaning that no external
+: software is required.
+
+**felix**
+: Invoke Felix, which will use your cell parameters to find multiple crystals in
+: each pattern.
+:
+: The Felix indexer has been developed by Soeren Schmidt <ssch@fysik.dtu.dk>. To
+: use this option, 'Felix' must be in your shell's search path. This can be a
+: link to the latest version of Felix. If you see the Felix version information
+: when you run Felix on the command line, things are set up correctly.
+
+**xds**
+: Invoke XDS, and use its REFIDX procedure to attempt to index the pattern.
+
+**taketwo**
+: Use the TakeTwo algorithm. See Ginn et al., Acta Crystallographica D72
+(2016), p956, https://doi.org/10.1107/S2059798316010706.
+
+**xgandalf**
+: Invoke XGANDALF - eXtended GrAdieNt Descent Algorithm for Lattice Finding.
+: See Gevorkov et al., Acta Crystallographica A75 (2019) p694,
+: https://doi.org/10.1107/S2053273319010593.
+
+**pinkIndexer**
+: Invoke pinkIndexer. See Gevorkov et al., Acta Crystallographica A76 (2020)
+: p121, https://doi.org/10.1107/S2053273319015559.
+
+Most of the indexing methods require some extra software to be installed,
+either at the time of compiling CrystFEL or afterwards. CrystFEL is
+distributed with a script (scripts/install-indexers) which can help you to
+quickly install all the required programs.
+
+You can add one or more of the following to the above indexing methods, to
+control what information should be provided to them. Note that indexamajig
+performs a series of checks on the indexing results, including checking that
+the result is consistent with the target unit cell parameters. To get
+completely "raw" indexing, you need to disable these checks (see below) and not
+provide prior information.
+
+**-latt**
+: Provide the Bravais lattice type (e.g. the knowledge that the lattice is
+: tetragonal primitive), as prior information to the indexing engine.
+
+**-nolatt**
+: The opposite of -latt: do not provide Bravais lattice type information to the
+: indexing engine.
+
+**-cell**
+: Provide your unit cell parameters as prior information to the indexing
+: engine.
+
+**-nocell**
+: The opposite of -cell: do not provide unit cell parameters as prior information
+: to the indexing engine.
+
+Example: **--indexing=mosflm-cell-latt** means to use Mosflm for indexing, and
+provide it with unit cell parameters and Bravais lattice type information.
+
+If you don't specify any indexing methods, indexamajig will try to
+automatically determine which indexing methods are available. You can also
+specify indexing method none, in which case no indexing will be done. This is
+useful if you just want to check that the peak detection is working properly.
+
+Usually, you do not need to explicitly specify anything more than the indexing
+method itself (e.g. mosflm or asdf). The default behaviour for all indexing
+methods is to make the maximum possible use of prior information such as the
+lattice type and cell parameters. If you do not provide this information, for
+example if you do not give any unit cell file or if the unit cell file does not
+contain cell parameters (only lattice type information), the indexing methods
+you give will be modified accordingly. If you only specify the indexing
+methods themselves, in most cases indexamajig will do what you want and
+intuitively expect! However, the options are available if you need finer
+control.
+
+The indexing results from the indexing engine will be put through a number of
+refinement and checking stages. See the options **--no-check-cell**,
+**--no-multi**, **--no-retry** and **--no-refine** below for more details.
+
+
+PEAK INTEGRATION
+================
+
+If the pattern could be successfully indexed, peaks will be predicted in the
+pattern and their intensities measured. You have a choice of integration
+methods, and you specify the method using **--integration**. Choose from:
+
+**rings**
+: Use three concentric rings to determine the peak, buffer and background
+: estimation regions. The radius of the smallest circle sets the peak region.
+: The radius of the middle and outer circles describe an annulus from which the
+: background will be estimated. You can set the radii of the rings using
+: **--int-radius** (see below). The default behaviour with rings is not to
+: center the peak boxes first. Use rings-cen if you want to use centering.
+
+**prof2d**
+: Integrate the peaks using 2D profile fitting with a planar background, close to
+: the method described by Rossmann (1979) J. Appl. Cryst. 12 p225. The default
+: behaviour with prof2d is to center the peak first - use prof2d-nocen to skip
+: this step.
+
+You can add one or more of the following to the above integration methods:
+
+**-cen**
+: Center the peak boxes iteratively on the actual peak locations. The opposite
+: is -nocen, which is the default.
+
+**-sat**
+: Normally, reflections which contain one or more pixels above max_adu (defined
+: in the detector geometry file) will not be integrated and written to the
+: stream. Using this option skips this check, and allows saturated reflections
+: to be passed to the later merging stages. The opposite is -nosat, which is the
+: default for all integration methods. However, note that the saturation check
+: will only be done if max_adu is set in the geometry file. Usually, it's better
+: to exclude saturated reflections at the merging stage. See the documentation
+: for max_adu in crystfel_geometry(5).
+
+**-grad**
+: Fit the background around the reflection using gradients in two dimensions.
+: This was the default until version 0.6.1. Without the option (or with its
+: opposite, -nograd, which is the default), the background will be considered to
+: have the same value across the entire integration box, which gives better
+: results in most cases.
+
+
+BASIC OPTIONS
+-------------
+
+**-i filename**, **--input=filename**
+: Read the list of images to process from filename. **--input=-** means to
+: read from stdin. There is no default.
+
+**-o filename**, **--output=filename**
+: Write the output data stream to filename.
+
+**-g filename**, **--geometry=filename**
+: Read the detector geometry description from _filename_. See **man
+: crystfel_geometry** for more information.
+
+: **--zmq-input=address**
+: Receive data over ZeroMQ from address. The options **--input** and
+: **--zmq-input** are mutually exclusive - you must specify exactly one of
+: them. Example: **--zmq-input=tcp://127.0.0.1:5002**.
+: If you use this option, you should also use either **--zmq-subscribe** to add
+: a ZeroMQ subscription, or **--zmq-request** to define how to request data.
+
+**--zmq-subscribe=tag**
+: Subscribe to ZeroMQ message type tag. You can use this option multiple times
+: to add multiple subscriptions. This option and **--zmq-request** are mutually
+: exclusive.
+
+**--zmq-request=msg**
+: Request new data over ZeroMQ by sending string msg. This will cause
+: indexamajig's ZeroMQ socket to use REQ mode instead of SUB. This option and
+: **--zmq-subscribe** are mutually exclusive.
+
+**--asapo-endpoint=endpoint**
+: Receive data via the specified ASAP::O endpoint. This option and **--zmq-input**
+: are mutually exclusive.
+
+**--asapo-token=token**
+: Authentication token for ASAP::O data.
+
+**--asapo-beamtime=beamtime**
+: Beamtime ID for ASAP::O data.
+
+**--asapo-source=source**
+: Data source for ASAP::O data.
+
+**--asapo-group=group**
+: Consumer group name for ASAP::O data. Concurrent **indexamajig** processes
+: working on the same data should use the same value for this, to have the
+: data shared between them.
+
+**--asapo-stream=stream**
+: Stream name for ASAP::O data.
+
+**--asapo-output-stream=stream**
+: Send an output stream via ASAP::O. For non-hits, a small placeholder will be
+: sent.
+
+**--asapo-wait-for-stream**
+: If the ASAP::O stream does not exist, wait for it to be appear. Without this
+: option, indexamajig will exit immediately if the stream is not found.
+
+**--data-format=format**
+: Specify the data format for data received over ZeroMQ or ASAP::O. Possible
+: values in this version are msgpack, hdf5 and seedee.
+
+**--basename**
+: Remove the directory parts of the filenames taken from the input file. If
+: **--prefix** or -x is also given, the directory parts of the filename will be
+: removed before adding the prefix.
+
+**-x prefix**, **--prefix=prefix**
+: Prefix the filenames from the input file with prefix. If **--basename** is also
+: given, the filenames will be prefixed after removing the directory parts of the
+: filenames.
+
+**-j n**
+: Run n analyses in parallel. Default: 1. See also **--max-indexer-threads.**
+: Tip: use -j `nproc` (note the backticks) to use as many processes as there
+: are available CPUs.
+
+**--cpu-pin**
+: Pin worker processes to CPUs. Usually this is not needed or desirable, but in
+: some cases it dramatically improves performance.
+
+**--no-check-prefix**
+: Don't attempt to correct the prefix (see **--prefix**) if it doesn't look correct.
+
+**--highres=n**
+: Mark all pixels on the detector higher than n Angstroms as bad. This might be
+: useful when you have noisy patterns and don't expect any signal above a certain
+: resolution.
+
+**--profile**
+: Display timing data for performance monitoring.
+
+**--temp-dir=path**
+: Put the temporary folder under path.
+
+**--wait-for-file=n**
+: Wait at most n seconds for each image file in the input list to be created
+: before trying to process it. This is useful for some automated processing
+: pipelines. It obviously only really works for single-frame files. If a file
+: exists but is not readable when this option is set non-zero, a second attempt
+: will be made after ten seconds. This is to allow for incompletely written
+: files. A value of -1 means to wait forever. The default value is
+: **--wait-for-file=0**.
+
+**--no-image-data**
+: Do not load the actual image data (or bad pixel masks), only the metadata.
+: This allows you to check if patterns can be indexed, without high data
+: bandwidth requirements. Obviously, any feature requiring the image data,
+: especially peak search procedures and integration, cannot be used in this case.
+: Therefore, you'll need to get the peaks from somewhere else (see
+: **--peaks=msgpack** or **--peaks=hdf5**).
+
+
+PEAK SEARCH OPTIONS
+-------------------
+
+**--peaks=method**
+: Find peaks in the images using method. See the second titled PEAK DETECTION
+: (above) for more information.
+
+**--peak-radius=inner,middle,outer**
+: Set the inner, middle and outer radii for three-ring integration during the
+: peak search. See the section about PEAK INTEGRATION, above, for details of how
+: to determine
+: these. The default is to use the same values as for **--int-radius**.
+
+**--min-peaks=n**
+: Do not try to index frames with fewer than n peaks. These frames will still be
+: described in the output stream. To exclude them, use **--no-non-hits-in-stream**.
+: The default is **--min-peaks=0**, which means that all frames will be considered
+: hits, even if they have no peaks at all.
+
+**--median-filter=n**
+: Apply a median filter with box "radius" n to the image. The median of the
+: values from a (n+1)x(n+1) square centered on the pixel will be subtracted from
+: each pixel. This might help with peak detection if the background is high
+: and/or noisy. The unfiltered image will be used for the final integration of
+: the peaks. If you also use **--noise-filter**, the median filter will be applied
+: first.
+
+**--filter-noise**
+: Apply a noise filter to the image with checks 3x3 squares of pixels and sets
+: all of them to zero if any of the nine pixels have a negative value. This
+: filter may help with peak detection under certain circumstances. The
+: unfiltered image will be used for the final integration of the peaks, because
+: the filter is destroys a lot of information from the pattern. If you also use
+: **--median-filter**, the median filter will be applied first.
+
+**--threshold=thres**
+: Set the overall threshold for peak detection using **--peaks=zaef** or
+: **--peaks=peakfinder8** to thres, which has the same units as the detector data.
+: The default is **--threshold=800**.
+
+**--min-squared-gradient=grad**
+: Set the square of the gradient threshold for peak detection using **--peaks=zaef**
+: to grad, which has units of "squared detector units per pixel". The default is
+: **--min-squared-gradient=100000**. **--min-sq-gradient** and **--min-gradient** are
+: synonyms for this option, however the latter should not be used to avoid
+: confusion.
+
+**--min-snr=snr**
+: Set the minimum I/sigma(I) for peak detection when using **--peaks=zaef**,
+: **--peaks=peakfinder8** or **--peaks=peakfinder9.** The default is **--min-snr=5**.
+
+**--min-snr-biggest-pix=<n>**
+: (peakFinder9 only) min snr of the biggest pixel in the peak, given as a factor
+: of the standard deviation. Default is 7.0.
+
+**--min-snr-peak-pix=<n>**
+: (peakFinder9 only) min snr of a peak pixel, given as a factor of the standard
+: deviation. Should be smaller or equal to sig_fac_biggest_pix. Default is 6.0.
+
+**--min-sig=<n>**
+: (peakFinder9 only) minimum standard deviation of the background. Prevents
+: finding of peaks in erroneous or highly shadowed unmasked regions. Default is
+: 11.0.
+
+**--min-peak-over-neighbour=<n>**
+: (peakFinder9 only) just for speed. Biggest pixel must be n higher than the
+: pixels in window_radius distance to be a candidate for the biggest pixel in a
+: peak. Should be chosen as a small positive number, a few times smaller than the
+: weakest expected peak. The default is -INFINITY, which turns off the speedup
+: and searches with maximum precision.
+
+**--min-pix-count=cnt**
+: Accepts peaks only if they include more than cnt pixels, when using
+: --peaks=peakfinder8. The default is **--min-pix-count=2**.
+
+**--max-pix-count=cnt**
+: Accepts peaks only if they include less than cnt pixels, when using
+: **--peaks=peakfinder8**. The default is **--max-pix-count=200**.
+
+**--local-bg-radius=r**
+: Radius (in pixels) used for the estimation of the local background when using
+: **--peaks=peakfinder8** or **--peaks=peakfinder9**. The default is
+: **--local-bg-radius=3**.
+
+**--min-res=px**
+: Only accept peaks if they lay at more than px pixels from the center of the
+: detector when using **--peaks=peakfinder8**. The default is **--min-res=0**.
+
+**--max-res=px**
+: Only accept peaks if they lay at less than px pixels from the center of the
+: detector when using **--peaks=peakfinder8**. The default is **--max-res=1200**.
+
+**--no-use-saturated**
+: Normally, peaks which contain one or more pixels above max_adu (defined in the
+: detector geometry file) will be used for indexing (but not used in the final
+: integration - see the section on peak integration above). Using this option
+: causes saturated peaks to be ignored completely. The opposite is
+: **--use-saturated**, which is the default.
+
+**--no-revalidate**
+: When using **--peaks=hdf5**, **--peaks=cxi** or **--peaks=msgpack**, the peaks will be put
+: through some of the same checks as if you were using **--peaks=zaef**. These
+: checks reject peaks which are too close to panel edges, are saturated (unless
+: you use **--use-saturated**), have other nearby peaks (closer than twice the inner
+: integration radius, see **--int-radius**), or have any part in a bad region. Using
+: this option skips this validation step, and uses the peaks directly.
+
+**--no-half-pixel-shift**
+: CrystFEL considers all peak locations to be distances from the corner of the
+: detector panel, in pixel units, consistent with its description of detector
+: geometry (see 'man crystfel_geometry'). The software which generates the image
+: data files, including Cheetah, may instead consider the peak locations to be
+: pixel indices in the data array. Therefore, the peak coordinates from
+: **--peaks=cxi** or **--peaks=hdf5** will by default have 0.5 added to them. This
+: option disables this half-pixel offset.
+
+**--check-hdf5-snr**
+: With this option with **--peaks=hdf5** (or cxi or msgpack), the peaks will
+: additionally be checked to see that they satisfy the minimum SNR specified with
+: **--min-snr**.
+
+**--peakfinder8-fast**
+: (peakfinder8 only) Increase speed by pre-calculating some coordinate tables.
+
+
+INDEXING OPTIONS
+----------------
+
+**--indexing=method**
+: Index the patterns using method. See the section titled INDEXING METHODS
+: (above) for more information. The default is to automatically detect which
+: indexing methods to use.
+
+**-p unitcell.cell**, **-p unitcell.pdb**, **--pdb=unitcell.pdb**
+: Specify the name of the file containing unit cell information, in PDB or
+: CrystFEL format.
+
+**--tolerance=tol**
+: Set the tolerances for unit cell comparison. tol takes the form a,b,c,ang. a,
+: b and c are the tolerances, in percent, for the respective reciprocal space
+: axes, and ang is the tolerance in degrees for the reciprocal space angles. If
+: the unit cell is centered, the tolerances are applied to the corresponding
+: primitive unit cell. The default is **--tolerance=5,5,5,1.5**.
+
+**--no-check-cell**
+: Do not check the cell parameters against the reference unit cell (given with
+: -p). If you've used older versions of CrystFEL, this replaces putting "-raw"
+: in the indexing method.
+
+**--no-check-peaks**
+: Do not check that most of the peaks can be accounted for by the indexing
+: solution. The thresholds for a successful result are influenced by option
+: --multi.
+
+**--multi**
+: Enable the "subtract and retry" method, where after a successful indexing
+: attempt the spots accounted for by the indexing solution are removed before
+: trying to index again in the hope of finding a second lattice. This doesn't
+: have anything to do with the multi-lattice indexing algorithms such as Felix.
+: This option also adjusts the thresholds for identifying successful indexing
+: results (see **--no-check-peaks**).
+
+**--no-retry**
+: Disable retry indexing. After an unsuccessful indexing attempt, indexamajig
+: would normally remove the 10% weakest peaks and try again. This option
+: disables that, which makes things much faster but decreases the indexing
+: success rate.
+
+**--no-refine**
+: Skip the prediction refinement step. Usually this will decrease the quality of
+: the results and allow false solutions to get through, but occasionally it might
+: be necessary.
+
+**--wavelength-estimate=m** **--camera-length-estimate=m**
+: Some indexing algorithms need to know the camera length or the wavelength of
+: the incident radiation in advance, e.g. to prepare an internal look-up table.
+: However, if these values are taken from image headers, then they are not
+: available at start-up. In this case, you will be prompted to add one of these
+: options to give approximate values (in metres). A warning will be generated if
+: the actual value differs from this value by more than 10%.
+
+**--max-indexer-threads=n**
+: Some indexing algorithms (e.g. pinkIndexer) can use multiple threads for faster
+: calculations. This is in addition to the frame-based parallelism already
+: available in indexamajig (see -j). This option sets the maximum number of
+: threads that each indexing engine is allowed to use. Default: 1.
+
+**--taketwo-member-threshold=n**
+: Minimum number of vectors in the network before the pattern is considered
+: indexed. Default 20.
+
+**--taketwo-len-tolerance=n**
+: The length tolerance in reciprocal Angstroms. Default 0.001.
+
+**--taketwo-angle-tolerance=n**
+: The angle tolerance in degrees. Default 0.6.
+
+**--taketwo-trace-tolerance=n**
+: The rotation matrix trace tolerance in degrees. Default 3.
+
+**--felix-domega=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--felix-fraction-max-visits=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--felix-max-internal-angle=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--felix-max-uniqueness=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--felix-min-completeness=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--felix-min-visits=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--felix-num-voxels=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--felix-sigma=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--felix-tthrange-max=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--felix-tthrange-min=n**
+: Low-level parameter for the Felix indexing algorithm.
+
+**--xgandalf-sampling-pitch=n**
+: Selects how dense the reciprocal space is sampled. [0-4]: extremelyLoose to
+: extremelyDense. [5-7]: standardWithSeondaryMillerIndices to
+: extremelyDenseWithSeondaryMillerIndices. Default is 6
+: (denseWithSeondaryMillerIndices).
+
+**--xgandalf-grad-desc-iterations**
+: Selects how many gradient descent iterations are performed. [0-5]: veryFew to
+: extremelyMany. Default is 4 (manyMany).
+
+**--xgandalf-tolerance**
+: relative tolerance of the lattice vectors. Default is 0.02.
+
+**--xgandalf-no-deviation-from-provided-cell**
+: If a prior unit cell was provided, and this flag is set, the found unit cell
+: will have exactly the same size as the provided one.
+
+**--xgandalf-min-lattice-vector-length** **--xgandalf-min-lattice-vector-length**
+: Minimum and maximum possible lattice vector lengths (unit is A). Used for
+: fitting without prior lattice as starting point for gradient descent, so the
+: final minimum lattice vector length can be smaller/highier as min/max. Note:
+: This is valid for the uncentered cell, i.e. the P-cell! Default is 30A and 250A
+: respectively.
+
+**--xgandalf-max-peaks**
+: Maximum number of peaks used for indexing. For refinement all peaks are used.
+: Peaks are selected by increasing radius. Limits the maximum execution time for
+: Patterns with a huge amount of peaks - either real ones or false positives.
+: Default is 250.
+
+**--xgandalf-fast-execution**
+: Shortcut to set **--xgandalf-sampling-pitch=2 --xgandalf-grad-desc-iterations=3**.
+
+**--pinkIndexer-considered-peaks-count**
+: Selects how many peaks are considered for indexing. [0-4] (veryFew to
+: manyMany). Default is 4 (manyMany).
+
+**--pinkIndexer-angle-resolution**
+: Selects how dense the orientation angles of the sample lattice are sampled.
+: [0-4] (extremelyLoose to extremelyDense). Default is 2 (normal).
+
+**--pinkIndexer-refinement-type**
+: Selects the refinement type. 0 = none, 1 = fixedLatticeParameters, 2 =
+: variableLatticeParameters, 3 = firstFixedThenVariableLatticeParameters, 4 =
+: firstFixedThenVariableLatticeParametersMultiSeed, 5 =
+: firstFixedThenVariableLatticeParametersCenterAdjustmentMultiSeed.
+
+**--pinkIndexer-tolerance**
+: Selects the tolerance of the pinkIndexer (relative tolerance of the lattice
+: vectors). Default is 0.06. For bad geometrys or cell parameters use a high
+: tolerance. For a well known geometry and cell use a small tolerance. Only
+: important for refinement and indexed/not indexed identificaton. Too small
+: tolerance will lead to refining to only a fraction of the peaks and possibly
+: discarding of correctly indexed images. Too high tolerance will lead to bad
+: Fitting in presence of multiples or noise and can mark wrongly-indexed patterns
+: as indexed.
+
+**--pinkIndexer-reflection-radius**
+: Sets radius of the reflections in reciprocal space in 1/A. Default is 2%% of a*
+: (which works quiet well for X-rays). Should be chosen much bigger for electrons
+: (~0.002).
+
+**--pinkIndexer-max-resolution-for-indexing**
+: Sets the maximum resolution in 1/A used for indexing. Peaks at high resolution
+: Don't add much information, but they add a lot of computation time. Default is
+: infinity. Does not influence the refinement.
+
+**--pinkIndexer-max-refinement-disbalance**
+: Indexing solutions are dismissed if the refinement refined very well to one
+: side of the detector and very badly to the other side. Allowed values range
+: from 0 (no disbalance) to 2 (extreme disbalance), default 0.4. Disbalance after
+: Refinement usually appears for bad geometries or bad prior unit cell
+: parameters.
+
+**--asdf-fast**
+: This enables a faster mode of operation for asdf indexing, which is around 3
+: times faster but only about 7% less successful.
+
+
+INTEGRATION OPTIONS
+-------------------
+
+**--integration=method**
+: Integrate the reflections using method. See the section titled PEAK
+: INTEGRATION (above) for more information. The default is
+: **--integration=rings-nocen**.
+
+**--fix-profile-radius=n**, **--fix-divergence=n**
+: Fix the beam and crystal paramters to the given values. The profile radius is
+: given in m^-1 and the divergence in radians (full angle). The default is to
+: set the divergence to zero, and then to automatically determine the profile
+: radius.
+: You do not have to use all three of these options together. For example, if
+: the automatic profile radius determination is not working well for your data
+: set, you could fix that alone and continue using the default values for the
+: other parameters (which might be automatically determined in future versions of
+: CrystFEL, but are not currently).
+
+**--int-radius=inner,middle,outer**
+: Set the inner, middle and outer radii for three-ring integration. See the
+: section about PEAK INTEGRATION, above, for details of how to determine
+: these. The defaults are probably not appropriate for your situation.
+: The default is **--int-radius=4,5,7**.
+
+**--int-diag=condition**
+: Show detailed information about reflection integration when condition is met.
+: The condition can be all, none, a set of Miller indices separated by commas,
+: random, implausible or negative. random means to show information about a
+: random 1% of the peaks. negative means to show peaks with intensities which
+: are negative by more than 3 sigma. implausible means to show peaks with
+: intensities which are negative by more than 5 sigma. strong means to show
+: peaks with intensities which are positive by more than 3 sigma The default is
+: **--int-diag=none**.
+
+**--push-res=n**
+: Integrate n nm^-1 higher than the apparent resolution limit of each individual
+: crystal. n can be negative to integrate lower than the apparent resolution
+: limit. The default is --push-res=infinity, which means that no cutoff is
+: applied. Note that you can also apply this cutoff at the merging stage using
+: **process_hkl/partialator --push-res**, which is usually better: reflections
+: which are thrown away at the integration stage cannot be brought back later.
+: However, applying a resolution cutoff during integration will make the stream
+: file significantly smaller and faster to merge.
+
+**--overpredict**
+: Over-predict reflections. This is needed to provide a buffer zone when using
+: post-refinement, but makes it difficult to judge the accuracy of the
+: predictions because there are so many reflections. It will also reduce the
+: quality of the merged data if you merge without partiality estimation.
+
+**--cell-parameters-only**
+: Do not predict reflections at all. Use this option if you're not at all
+: interested in the integrated reflection intensities or even the positions of
+: the reflections. You will still get unit cell parameters, and the process will
+: be much faster, especially for large unit cells.
+
+OUTPUT OPTIONS
+--------------
+
+**--no-non-hits-in-stream**
+: Completely exclude 'non-hit' frames in the stream. When this option is given,
+: frames with fewer than the number of peaks given to **--min-peaks** will not
+: have chunks written to the stream at all. Note that the default value for
+: **--min-peaks** is zero, which means all frames will be written to the stream,
+: even if they have no peaks at all.
+
+**--copy-header=header**
+: Copy the information from header in the image file into the output stream. For
+: HDF5 files, header is interpreted as a path within the file. This option is
+: sometimes useful to allow data to be separated after indexing according to some
+: condition such the presence of an optical pump pulse. You can give this option
+: as many times as you need to copy multiple bits of information.
+: The old option **--copy-hdf5-field** is a synonym for this option.
+
+**--no-peaks-in-stream**
+: Do not record peak search results in the stream. You won't be able to check
+: that the peak detection was any good, but the stream will be around 30%
+: smaller.
+
+**--no-refls-in-stream**
+: Do not record integrated reflections in the stream. The resulting output won't
+: be usable for merging, but will be a lot smaller. This option might be useful
+: if you're only interested in things like unit cell parameters and orientations.
+
+**--serial-offset=n**
+: Start the serial numbers in the stream at n instead of 1. Use this if you are
+: splitting an indexing job up into several smaller ones, so that the streams can
+: be concatenated into a single one with consistent numbering. This is important
+: if you use **whirligig**.
+
+**--harvest-file=fn**
+: Write a list of parameters to fn, in JSON format. This is intended to be used
+: for harvesting data into a database system. This option has no effect if
+: --serial-offset is set to a number larger than 1, to avoid the file being
+: overwritten multiple times in a batch system.
+
+
+HISTORICAL OPTIONS
+------------------
+
+**--no-sat-corr**
+: This option is here for historical purposes only, to disable a correction which
+: is done if certain extra information is included in the image data file.
+
+
+IDENTIFYING SINGLE PATTERNS IN THE INPUT FILE
+=============================================
+
+By default indexamajig processes all diffraction patterns ("events") in each of
+the data files listed in the input list. It is however, possible, to only
+process single events in a multi-event file, by adding in the list an event
+description string after the data filename. The event description always
+includes a first section with alphanumeric strings separated by forward slashes
+("/") and a second section with integer numbers also separated by forward
+slashes. The two sections are in turn separated by a double forward slash
+('//'). Any of the two sections can be empty, but the double forward slash
+separator must always be present. Indexamajig matches the strings and the
+numbers in the event description with the event placeholders ('%') present
+respectively in the 'data' and 'dim' properties defined in the geometry file,
+and tries to retrieve the full HDF path to the event data and the the its
+location in a multi-dimensional data space. Consider the following examples:
+
+### Example 1
+
+The 'data' and 'dim' properties have been defined like this in the geometry file:
+
+ data = /data/%/rawdata
+ dim0 = ss
+ dim1 = fs
+
+The event list contains the following line:
+
+ filename.h5 event1//
+
+This identifies an event in the 2-dimensional data block located at
+/data/event1/rawdata in the HDF5 file called filename.h5.
+
+### Example 2
+
+The 'data' and 'dim' properties have been defined like this in the geometry
+file:
+
+ data = /data/rawdata
+ dim0 = %
+ dim1 = ss
+ dim2 = fs
+
+The event list contains the following line:
+
+ filename.h5 //3
+
+This identifies an event in the 3-dimensional data block located at
+/data/rawdata in the HDF5 file called filename.h5, specifically the
+2-dimensional data slice defined by the value 3 of the first axis of the data
+space.
+
+Indexamajig tries to match the alphanumerical strings to the placeholders in
+the 'dim' property defined in the geometry file. The first string is matched to
+the first placeholder, the second to the second placeholder, and so on. A
+similar strategy is followed to match integer numbers to the placeholders in
+the 'dim' property defined in the geometry file. For a full explanation of how
+the internal layout of the data file can be described in the geometry file,
+please see **man crystfel_geometry**.
+
+You can use **list_events** to prepare a list of each event in one or more
+input files. Note that you only need to do this if you need to perform some
+sorting or filtering on this list. If you want to process every event in a
+file, simply specify the filename in the input file.
+
+
+AUTHOR
+=======
+
+This page was written by Thomas White, Yaroslav Gevorkov and Valerio Mariani.
+
+
+REPORTING BUGS
+==============
+
+Report bugs to <taw@physics.org>, or visit <http://www.desy.de/~twhite/crystfel>.
+
+
+COPYRIGHT AND DISCLAIMER
+========================
+
+Copyright © 2012-2023 Deutsches Elektronen-Synchrotron DESY, a research centre
+of the Helmholtz Association.
+
+indexamajig, and this manual, are part of CrystFEL.
+
+CrystFEL is free software: you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option) any later
+version.
+
+CrystFEL is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+CrystFEL. If not, see <http://www.gnu.org/licenses/>.
+
+
+SEE ALSO
+========
+
+**crystfel**(7), **crystfel_geometry**(5), **cell_explorer**(1),
+**process_hkl**(1), **partialator**(1), **list_events**(1), **whirligig**(1)