Technical Overview & Methodology

This document provides a technical reference for the Combs Powder Indexing software. It details the program's algorithms, search parameters, and methodologies for scientists and researchers familiar with powder X-ray diffraction techniques.

Core Methodology

The goal of ab initio powder indexing is to determine the unit cell parameters ($a, b, c, \alpha, \beta, \gamma$) from a list of observed diffraction peak positions ($2\theta$). This program implements a system-specific, exhaustive search algorithm to solve this problem.

The core principle is to assume that a small subset of the most intense, low-angle reflections must correspond to simple crystal planes with low-integer Miller indices $(hkl)$. The program solves the indexing equations by taking the exact number of unknown parameters for a given crystal system and solving a system of linear equations using that many observed peaks.

To linearize the indexing equations, all peak positions are first converted from $2\theta$ to Q-space, where $Q = 1/d^2$. The relationship between $Q$, the Miller indices, and the reciprocal cell parameters ($A, B, C, D, E, F$) is given by the general quadratic form: $$ Q_{hkl} = Ah^2 + Bk^2 + Cl^2 + Dkl + Ehl + Fhk $$ The software solves for these reciprocal parameters (or a subset of them, depending on the crystal system) and then converts them back to the real-space cell parameters for the final solution. Each trial cell is immediately refined and scored against the full peak list.

Quick Start Guide

Follow these steps for a standard indexing routine on a single-phase powder pattern.

  1. Load Data File: Use the Select Data File button. Supported formats include .xy, .xrdml, .ras, etc.
  2. Find Peaks: On the Peaks tab, adjust the Min peak (%), Radius (pts), and Points sliders to accurately capture your experimental peaks.
  3. Review & Refine Peaks: Critically examine the peak list. Edit 2θ positions for accuracy, delete spurious peaks (noise, Kα2 shoulders if *not* stripping), and add any missed reflections using Ctrl + Click on the chart. A clean list of 15-20 peaks is ideal.
  4. Set Parameters: On the Parameters tab:
    • Select the appropriate X-ray Radiation Preset (e.g., Cu Ka).
    • Decide whether to enable Strip K-alpha2. This choice updates the Ka1 Wavelength field automatically. The default is OFF, using the average Ka wavelength.
    • Set a chemically sensible Max Volume (ų) to constrain the search.
    • Set the 2θ Error (°) appropriate for your instrument's resolution (e.g., 0.02° for synchrotron, 0.05° for lab data).
    • The Refine Zero-Point Error checkbox is enabled by default and is highly recommended.
    • Select the crystal systems to search. Start with higher symmetries first.
  5. Start Indexing: Click Start Indexing.
  6. Analyze Solutions: On the Solutions tab, review the results. Sort by M(20) and F(20) scores. Click on high-scoring solutions to visually compare the calculated (blue) and observed (red) peak markers on the chart. A good solution will also have plausible space group suggestions.

The User Interface

The application is divided into the Controls Panel (left) and the Results Area (right).

Controls Panel

This panel contains all inputs and controls, organized into three primary tabs.

1. Peaks Tab

2. Parameters Tab

3. Solutions Tab

Results Area

Peak Finding in Detail

Accurate peak positions are the most critical input for successful indexing. The program uses a multi-step process to identify peaks from raw data.

The Algorithm Steps

  1. Kα2 Stripping (Optional): If Strip K-alpha2 is checked, the Rachinger algorithm is applied to the raw intensity data first.
  2. Background Subtraction: A "rolling ball" algorithm estimates and subtracts the background signal from the (potentially stripped) data. The Radius slider controls the size of the virtual ball.
  3. Data Smoothing: A Savitzky-Golay filter is applied to the background-subtracted data to reduce noise while preserving peak shape. The Points slider controls the smoothing window size.
  4. Peak Detection: The algorithm identifies local maxima in the smoothed data that are above the Min peak (%) threshold.
  5. Position Refinement: To find a precise, sub-pixel peak position, the algorithm performs a 5-point least-squares quadratic fit (based on Savitzky-Golay coefficients) on the data points surrounding the detected maximum. This is more accurate than a simple 3-point parabola and robust against noise. If a peak is too close to the data's edge, it falls back to a 3-point fit.

Practical Advice

Indexing Algorithm and Search Parameters

The program employs a dedicated search routine for each crystal system. This is an "exhaustive" or "brute-force" trial method that iterates through combinations of low-angle peaks and low-integer Miller indices. The number of peaks required to generate a trial cell depends on the number of unknown lattice parameters.

System-by-System Search Logic

The search algorithm's goal is to solve a system of linear equations of the form $Q_{obs} = \sum P_i \cdot H_i$, where $Q_{obs}$ are the $1/d^2$ values from the observed peaks, $H_i$ are terms derived from the trial Miller indices (e.g., $h^2, k^2, l^2$), and $P_i$ are the reciprocal lattice parameters (e.g., $A=1/a^{*2}, B=1/b^{*2}, ...$) we want to find.

Evaluating Solutions

The indexing search often produces multiple candidate solutions. During the search the solutions will be dynamically limited to best 50 solutions. Distinguishing the correct one requires a reliable figure of merit and careful refinement.

The de Wolff Figure of Merit: M(20)

Solutions are ranked by the de Wolff Figure of Merit, M(20), which assesses the fit's accuracy and completeness. It is calculated using the first 20 observed reflections. A high M(20) value is a strong indicator of a correct solution.

M(20) ValueInterpretation
> 20The solution is very likely to be correct.
> 10The solution is likely correct, especially if the volume is chemically sensible.
5 - 10The solution is plausible and deserves further investigation.
< 5The solution is likely spurious and should be viewed with skepticism.

The F(N) Figure of Merit

As a complementary metric to M(20), the program also calculates the F(N) Figure of Merit, typically for N=20 (F(20)). While M(20) focuses on the completeness and accuracy of the first 20 lines, F(N) provides a score based on the average positional accuracy of those lines.

It is defined by the formula: $$ F_N = \frac{N}{\langle |\Delta(2\theta)| \rangle \cdot N_{calc}} $$ Where:

A high F(N) value indicates a very high-quality fit with low average error. Together, a high M(20) (indicating a correct and complete cell) and a high F(N) (indicating high precision) give strong confidence in a solution.

Least-Squares and Zero-Point Refinement

Every promising trial cell is refined using a robust, two-stage process to find the best possible parameters and M(20) score.

Stage 1: Internal Zero-Point Correction

To generate the most accurate cell proposal, the program always performs an initial refinement that includes a zero-point error term. This internal correction is strictly limited (constrained to be no larger than the user-defined `2θ Error`) to account for minor instrument misalignments without overfitting. The resulting corrected peak positions are then used to refine a baseline set of lattice parameters. This makes the initial cell proposal much more robust against small experimental shifts.

Stage 2: Final (Optional) Zero-Point Refinement

If the cell from Stage 1 achieves a high M(20) score, and the user has the Refine Zero-Point Error checkbox enabled, a second, full and unconstrained refinement is performed. This final step solves for all parameters simultaneously to produce the final reported values and their estimated standard deviations. If this option is disabled, only the lattice parameters from Stage 1 are reported.

Space Group Analysis

After a high-scoring unit cell is found, the program provides an automated analysis to suggest the most probable space groups. This feature serves as a powerful guide for subsequent structure solution or Rietveld refinement.

Methodology

The analysis is a systematic process of elimination based on observed systematic absences:

  1. Generate Unique Reflections: The program takes the refined unit cell and generates a complete theoretical reflection list, ensuring only crystallographically unique reflections (e.g., `(100)`, but not `(-100)`) are included to prevent self-ambiguity.
  2. Index Observed Peaks: It then indexes all observed peaks from the user's list against this theoretical pattern.
  3. Build High-Confidence Set: To avoid errors from accidental peak overlap (e.g., `(100)` and `(011)` having very similar $2\theta$ values), the algorithm filters the indexed list to find unambiguous reflections. A reflection is considered unambiguous only if no other theoretical $(hkl)$ line is calculated to be within the `2θ Error` tolerance of its position.
  4. Determine Centering & Extinctions: This high-confidence set of observed $(hkl)$s is used for all further analysis. It is tested against the rules for lattice centerings and glide/screw axes. A violation is only counted if an observed unambiguous peak breaks a rule.
  5. Rank Space Groups: The program filters its internal database for all space groups matching the solution's crystal system and plausible centering(s). Each candidate group is ranked by its number of violations.

How to Interpret the Results

Advanced Topics: Enhanced Search and Sieving

To improve the success rate, the program integrates several advanced search strategies after the initial indexing routine is complete. These "fishing" strategies test for non-obvious but crystallographically common relationships.

1. "Swap Fishing" for Ambiguity

For each promising solution, the program re-examines the indexing of the first four low-angle peaks. It identifies the two peaks that are closest to each other, as this is a likely point of mis-indexing due to ambiguity. It then creates a new hypothesis by swapping their HKL assignments and attempts to solve for a new trial cell. This new cell is then sent back through the full refinement and scoring process. If this "swapped" hypothesis is correct, it will often lead to a solution with a significantly higher M(20) score.

2. Matrix-based Cell Transformations

Solutions are transformed using crystallographic matrices to test for related primitive or higher-symmetry cells. For example, a body-centered cell ($I$) is tested for a valid primitive ($P$) equivalent.

3. HKL Divisor Analysis

The program examines the list of indexed Miller indices. If all indices in one direction (e.g., all $h$ values) share a common divisor, it tests a new cell with the corresponding axis halved (a sub-cell).

4. Orthorhombic to Hexagonal Check

A hexagonal lattice can sometimes be indexed as a C-centered orthorhombic cell where $b/a \approx \sqrt{3}$. The program specifically checks all orthorhombic solutions for this condition and generates the equivalent hexagonal cell for evaluation.

5. Niggli Cell Standardization

After a potential solution is found, the program calculates its Niggli reduced cell. This is a fundamental and unique, standardized representation of the crystal lattice, also known as the "reduced primitive cell".

The calculation first transforms the conventional (centered) cell found by the program—using the detected centering (e.g., 'I', 'F', 'C')—into its primitive form. It then applies a mathematical reduction algorithm to find the basis vectors ($a, b, c$) and angles ($\alpha, \beta, \gamma$) that are the most "compact" and obey a specific set of geometric rules.

This Niggli cell is extremely useful for:

The calculated Niggli cell for each high-scoring solution is reported in the detailed section of the PDF report to aid in further analysis and database comparison.

6. Final Sieving

After all searches, a final sieving process is applied to remove redundant solutions. If two solutions have very similar volumes (within 1%), the one with higher symmetry is preferred.

If the symmetries are also equal (e.g., two different monoclinic cells), the program compares their M(20) scores. Crucially, it treats M(20) scores as "effectively equal" if they are within a small tolerance (e.g., $\Delta M(20) < 0.05$). In this tie-breaker scenario, it invokes crystallographic conventions:

Troubleshooting & FAQ

Why were no solutions found?

Why is M(20) low for a visually good fit?

Test files

References

This program was developed by Nita Dragoe at Université Paris-Saclay (2024-2025) as a successor to a prior software, Powder, originally created by the same author in 1999-2000. If you use this program you can cite this reference https://doi.org/10.13140/RG.2.2.13443.57126.
For a deeper understanding of the methodology, consulting the original scientific papers is highly recommended.

  1. The M(20) Figure of Merit:
    de Wolff, P. M. (1968). "A Simplified Criterion for the Reliability of a Powder Pattern Indexing." Journal of Applied Crystallography, 1, 108-113.
  2. The F(N) Figure of Merit:
    Smith, G. S. & Snyder, R. L. (1979). "F(N): A Criterion for Rating Powder Diffraction Patterns and Evaluating the Reliability of Powder-Pattern Indexing." Journal of Applied Crystallography, 12, 60-65.
  3. General Powder Diffraction Text:
    Klug, H. P. & Alexander, L. E. (1974). X-Ray Diffraction Procedures for Polycrystalline and Amorphous Materials, 2nd ed. New York: Wiley-Interscience.
  4. Kα2 Stripping Algorithm:
    Rachinger, W. A. (1948). "A Correction for the α1α2 Doublet in the Measurement of Widths of X-Ray Diffraction Lines." Journal of Scientific Instruments, 25, 254-255.
  5. Alternative Indexing Methods:
    Ito, T. (1949). "A General Powder X-ray Photography."Nature, 164, 755-756.
    Werner, P.-E., Eriksson, L., & Westdahl, M. (1985). "TREOR, a semi-exhaustive trial-and-error powder indexing program for all symmetries." Journal of Applied Crystallography, 18, 367-370.
    Visser, J. W. (1969). "A fully automatic program for finding the unit cell from powder data." Journal of Applied Crystallography, 2, 89-95.
    Le Bail, A. (2004). "Monte Carlo Indexing with McMaille". Powder Diffraction, 19(3), 249-254.
    Boultif, A. & Louër, D. (2004). "Powder pattern indexing with the dichotomy method." Journal of Applied Crystallography, 37, 724-731.
  6. Previous version:
    Dragoe, N. (2001). "PowderV2: a suite of applications for powder X-ray diffraction calculations." Journal of Applied Crystallography, 34, 535.