Diagnostics: peaks and indexing#
These codes come from peak picking, the indexing search and the extinction screen. Each section gives the code’s name, what it means and why it fires, its level, and the source files that raise it. The diagnostic codes page lists every code in one table.
EXTINCTION_CONDITIONS_PARTIAL#
Reflection conditions list is incomplete.
The printed reflection conditions for this extinction class do not name every absence the class implies. The screen worked from the full set of absences, so its result is unaffected. Only the readable summary is short. Take the space groups listed with the class as the reliable statement.
Level: info. Raised in rietx/indexing/diagnostics.py.
EXTINCTION_FORBIDDEN_INTENSITY#
Intensity found where the class forbids it.
The pattern carries intensity, at positions this extinction class says must be empty, that the class’s own Le Bail fit cannot explain. If the intensity is real, the class is wrong and its space groups are unsupported. A flagged position can also be an impurity line, a broad container hump or the result of a cell held slightly off. Check those before you drop the class.
Level: warning. Raised in rietx/indexing/diagnostics.py.
EXTINCTION_GROUPS_NOT_SEPARABLE#
Several space groups share one pattern.
The leading extinction symbol covers more than one space group. These groups differ only by symmetry elements that produce no systematic absences, such as a centre of symmetry, a mirror or a handedness. Their powder patterns are identical, so longer counting cannot separate them. Choose between them with chemistry or a structure solution.
Level: info. Raised in rietx/indexing/diagnostics.py.
EXTINCTION_PRIOR_APPLIED#
Declared facts removed space groups from the extinction classes.
You declared facts about the specimen (chirality, centrosymmetry or polarity), and they removed space groups from some classes. The declaration only filters the members of each class. Every class was still fitted, and no ΔBIC moved. It is a warning when the class the data rank first was emptied: either the chemistry is doing what a powder cannot, or the declaration is wrong. best_or_none() abstains when the data prefer an emptied class by the decisive margin. Check the declaration before you read the answer.
Level: set at run time. Raised in rietx/indexing/diagnostics.py.
EXTINCTION_SCREEN_FAILED#
The extinction screen could not run.
The reference Le Bail fit that every extinction class is compared against failed, or the cell predicts no reflections in the measured range. No class was screened, so an empty ranking says nothing about the symmetry. Every class would fail the same way. Validate the cell first, then check the wavelength and the 2θ range.
Level: error. Raised in rietx/indexing/extinction.py.
EXTINCTION_SYMBOL_AMBIGUOUS#
The extinction symbol is not settled.
The data do not pick one extinction symbol. A second class may score within the decisive margin, the leading class may have no absence that is testable in this range, some classes may never have been fitted, or no class could be screened at all. Counting longer at the positions where the leading classes disagree, or widening the range, helps with the first two. Rwp is no guide, because it favours the class with more reflections.
Level: info, warning. Raised in rietx/indexing/diagnostics.py.
INDEX_ABSTAINED#
No cell reached the confidence gate.
No candidate passed every check needed to name it, or no cell was found in the systems searched. The best candidates are listed with the reasons they fell short, so you can see what was considered. The abstention is the result, and no cell is implied by the ranking. Most reasons are closed by better data, and a different search seldom helps.
Level: set at run time. Raised in rietx/indexing/diagnostics.py.
INDEX_BRAVAIS_AMBIGUOUS#
Lattice symmetry is not settled.
The lattice reads as a higher symmetry only at a loose tolerance, or two symmetry tools disagree about it at their tightest settings. This is what pseudosymmetry looks like. The reported system is the lower one, which is the safe reading. Refine in the lower symmetry and test the higher one against the data.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_BUDGET_EXHAUSTED#
The time limit cut the search short.
The whole-run time limit ended the search, or the validation fits used up their share of it. Some systems were searched in part, some were never reached, and some candidates were not validated. A missing cell or a missing system is then no evidence of absence. Raise the limit, or narrow the systems to where the cell can live.
Level: warning. Raised in rietx/indexing/engines.py.
INDEX_CANDIDATES_TRUNCATED#
The candidate list was cut to a maximum.
The search found more distinct lattices than the list reports, so lower-ranked cells are left out. The limit exists because each reported candidate costs a Le Bail fit. An engine that returned a full pool may also have held more. The omitted cells were never judged and rejected. Raise max_candidates to see further down the ranking.
Level: info. Raised in rietx/indexing/engines.py.
INDEX_CELL_SYSTEMATIC_UNQUANTIFIED#
Cell accuracy is worse than its esd.
The esd on an indexed cell comes from the line positions alone. It measures precision, not accuracy. Instrument geometry adds a systematic error, such as the goniometer radius of a Bragg-Brentano diffractometer, that the data cannot identify and no esd reports. Quote the cell to a coarser level than its esd, or calibrate against a certified standard.
Level: info. Raised in rietx/indexing/diagnostics.py.
INDEX_DATA_INSUFFICIENT#
Data cannot support an indexing search.
The peak list cannot constrain a lattice. It has fewer than two usable lines, too few lines for the free cell parameters of any crystal system, or line positions too imprecise to tell cells apart. A search would return a ranking with nothing behind it. Extend the 2θ range, count for longer, or re-pick the peaks with a lower detection threshold.
Level: error. Raised in rietx/indexing/diagnostics.py, rietx/indexing/dichotomy.py, rietx/indexing/svd.py, rietx/indexing/trial_error.py.
INDEX_DOMINANT_ZONE#
Lowest lines carry large indices on one axis.
No cell was found with the standard table of indices, but one appeared when larger indices were allowed. This happens when one cell axis is much shorter or longer than the others, so the lowest observed lines have large indices along it. The lines that would pin that direction lie below the measured range or are too weak to detect. Measure to lower angle, or use the dichotomy engine, which assumes no index limit.
Level: warning. Raised in rietx/indexing/trial_error.py.
INDEX_GEOMETRIC_AMBIGUITY#
Different lattices give the same line positions.
At least one other lattice explains the observed line positions as well as this one. A powder pattern records only the length of each reciprocal vector, so the information that separates the lattices is absent from the measurement. Neither cell can be quoted with confidence. Look for the reflections that only one of the lattices predicts, at the 2θ positions listed.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_IMPURITY_LINES#
Observed peaks have no matching reflection.
After a whole-pattern Le Bail fit of this cell, some observed peaks sit where it predicts no reflection. A handful of such lines points to a second phase. Many of them point to a wrong cell. This package does not index multi-phase patterns, so subtract the solved phase before you index the remainder.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_INLIER_RETRY#
The search was run again, accepting a cell that leaves lines unindexed.
The default run found no lattice that two engines agree on while a cell could leave at most two search lines unindexed. The search ran again, accepting a cell that indexes at least 60 % of the search lines and the five strongest. That is the reading of a list that carries foreign lines: an impurity, a container halo or unresolved shoulders. The answer rests on the second rule, so read each candidate’s n_search_unindexed and unindexed_two_theta. A cell that leaves the weak lines is the phase, and the residue is a second phase or the picker’s junk. Pass n_unindexed='inliers' to search this way from the start, or an integer to forbid the retry.
Level: info. Raised in rietx/indexing/engines.py.
INDEX_MULTIPLE_SOLUTIONS#
More than one cell passes every check.
Two or more candidate lattices each satisfy the full confidence gate. The evidence does not choose between them, so no single cell is returned. Naming one would be a guess with a confidence attached. Compare their figures of merit and Le Bail fits, and extend the 2θ range, because one high-angle reflection often separates them.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_NOT_VALIDATED#
Candidates were not checked against the pattern.
No pattern was supplied, so no candidate was tested against the whole profile. The figure-of-merit panel sees only the strongest lines. It is blind to impurity peaks and to reflections a cell predicts where the pattern has none. Every candidate is capped below high confidence. Pass the data and the instrument to validate them.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_PANEL_REDUCED#
Some figures of merit are undefined.
The peak list has fewer usable lines than the classical figures of merit are defined on, so some are left out of the ranking. The search still runs over the crystal systems the line count supports. Every candidate is ranked on the same remaining figures, so the order stays meaningful. Confidence is capped, and a longer peak list restores the full panel.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_PREDICTED_BUT_ABSENT#
The cell predicts lines the pattern lacks.
After a Le Bail fit, some reflections this lattice predicts carry no intensity above the background. An oversized cell does this, because it has a translation it is not using. A correct cell does it too when a space-group extinction removes those reflections. Compare the smaller cell that indexes the same lines, and run the extinction screen before you reject this one.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_PRIOR_USED#
A declared prior steered the search.
You supplied a cell, a crystal system or a space group as a prior. A prior changes the order of the search and seeds one engine. Every search range stays as declared, and a prior outside the axis box is never checked. A prior-only cell is listed after the ranked cells with its grade lowered. Treat it as your hypothesis tested against the lines.
Level: info, warning. Raised in rietx/indexing/priors.py.
INDEX_SEARCH_INCOMPLETE#
A search did not finish its domain.
An engine stopped before it exhausted its search domain. It ran out of time for a system, outgrew a size limit on its grid, or was stopped by the overall time limit. Finding no cell there is then no evidence that none exists. More time helps only when time was the cause. A size limit is eased by narrowing the search.
Level: warning. Raised in rietx/indexing/engines.py.
INDEX_SHIFT_ALLOWANCE#
Search tolerance widened for a 2θ shift.
No systematic 2θ shift was measured, so the search assumed one and widened its matching window. Without that, a zero-point shift or specimen displacement can leave the true cell unindexed. The cell found in a widened window absorbs the shift. Refit the winner with a shift template and quote that cell.
Level: info. Raised in rietx/indexing/engines.py.
INDEX_SHIFT_DETECTED#
A systematic 2θ shift follows one cause.
The line positions show a systematic 2θ shift, and one physical template fits it clearly better than the others. The causes differ in how they change with angle. Folding the shift into the cell biases the cell. Correct the instrument parameter that matches the template, and carry that template into the cell refinement.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_SHIFT_FROM_PAIRS#
A 2θ shift was measured from line pairs.
The size of a systematic 2θ shift was measured from pairs of harmonic reflections in the peak list, with no reference positions. That size set the search window. The pair method fixes the amplitude but cannot name the cause, because a zero-point shift and a specimen displacement look alike over a short range. A wider 2θ range separates them.
Level: info. Raised in rietx/indexing/engines.py.
INDEX_SHIFT_MODEL_AMBIGUOUS#
A 2θ shift is present, cause unclear.
The pattern shows a systematic 2θ shift, but the candidate causes fit about equally well over this range. The size of the shift is measured. Its cause is unidentified, so do not correct an instrument fault from these data. The cell is safe to within the spread between the competing templates. Measure to higher angle, where they separate.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_SINGLE_ENGINE#
Only one indexing engine ran.
Confidence in an indexed cell comes from independent engines agreeing on it. With one engine, every candidate grades low by construction. Low here means unconfirmed and says nothing against the cell. Run the default engine set to get a graded answer. A single-engine run is a probe.
Level: info. Raised in rietx/indexing/engines.py.
INDEX_SUPERCELL_REFUTED#
A smaller cell explains the same lines.
This lattice is a superlattice of a higher-ranked candidate. The extra lines it predicts, which no extinction could remove, are seen no more often than chance would place them. So it ranks below the smaller cell. A real superstructure with extra lines too weak to pick escapes this test. Check the pattern at the listed positions if the chemistry suggests one.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_SYSTEMS_NOT_COVERED#
Some crystal systems were not searched.
The search covered only some crystal systems. A failure to find a cell means only that none was found in those systems. It says nothing about the specimen, and it is no evidence of a mixture. Search the missing systems before you draw a conclusion.
Level: info. Raised in rietx/indexing/diagnostics.py.
INDEX_VALIDATION_FAILED#
The Le Bail check of a candidate failed.
The whole-pattern Le Bail fit that validates this candidate raised an error, so nothing was measured for it. The candidate is neither supported nor refuted. A mis-declared instrument profile, or a wavelength on an absorption edge, fails every candidate alike. Check those first.
Level: warning. Raised in rietx/indexing/workflow.py.
INDEX_VOLUME_UNPHYSICAL#
Cell volume outside what the data support.
The cell volume is either below the exclusion volume of a single atom, or well above the envelope that the number of observed lines can support. The first is an artefact of the search and describes no lattice. The second is a cell larger than the lines can justify. Narrow the maximum volume, or measure more lines.
Level: warning. Raised in rietx/indexing/diagnostics.py.
INDEX_Z_NOT_INTEGER#
Cell holds a fractional number of formula units.
With the formula you gave and typical atomic volumes, the cell holds a number of formula units far from a whole number. A sub- or supercell of the true cell does this. So does a formula that misses a solvent or counter-ion, and so does an ionic specimen, where volumes run large. A correct cell can fire occasionally. Check the formula first and weigh the result beside the figures of merit.
Level: warning. Raised in rietx/indexing/diagnostics.py.
LAUE_CLASS_NOT_SEPARABLE#
The leading class spans more than one Laue class.
The space groups the leading extinction class admits fall in more than one Laue class. They share every position and absence and differ only in which reflections are equivalent, which sets the intensity partition inside overlapped multiplets. A powder pattern does not expose that. Carry one structure solution per Laue class, not one per group.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_ASYMMETRY_UNMODELLED#
Asymmetry the peak shape does not carry.
Lines show asymmetric residuals beyond the fitted shape, so their positions are pulled towards the tail. Declaring the axial divergence terms is the usual fix.
Level: warning. Raised in rietx/indexing/diagnostics.py.
PEAK_AXIAL_TAIL#
Weak lines that may be axial tails.
Weak components lie within 3.5 FWHM of a stronger group-mate on the side axial divergence points. They may be real lines and are reported rather than removed.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_CONTAMINATION_LINE#
Contamination lines excluded.
Several strong reflections carry a line at their Kβ or tungsten position at one common ratio, so the beam is leaking that line and those lines were excluded. The peak list carries the flag and not the size of the leak. For that, run background.diagnose(data, wavelength=...) and read ContaminationFlag.leak_ratio: an unfiltered tube sits near 0.14, and a filter or monochromator only cuts it. They are excluded and never stripped, because stripping redistributes the counting noise.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_EXPECTED_FALSE_LINES#
How many kept lines are expected to be noise.
The pattern’s own false-discovery bar on each component’s intensity over its esd, and the expected number of noise lines among those kept, a lower bound, since detection selected every component first. Components under the bar are flagged weak and stay usable. A component that absorbs a shape or background misfit carries real intensity and is not reached.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_KALPHA2_ALIAS#
Kα2 candidates dropped before fitting.
Detection found candidates at the Kα2 positions of stronger lines and dropped them before any fit. The drop is reported because a genuine weak line can alias onto one.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_KALPHA2_RESIDUAL#
Components on a modelled Kα2 maximum.
Components sit where the Kα2 partner of a stronger line is already modelled, so they are that doublet’s residual rather than new lines. Reported rather than removed.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_LIST_TOO_SHORT#
Too few usable lines to index.
The list has fewer usable lines than an indexing search needs. The classical figures of merit are also undefined below that count, which caps confidence rather than refuting any cell. Widen the 2θ range, count for longer, or lower the detection threshold and check what arrives.
Level: warning. Raised in rietx/indexing/diagnostics.py.
PEAK_NOT_SEPARABLE#
Components refuted as distinct lines.
Components improved their group’s fit but did not survive the nested comparison against a fit without them. They stay in the model and are withheld from indexing.
Level: warning. Raised in rietx/indexing/diagnostics.py.
PEAK_POSITION_PRECISION#
Position precision relative to the line spacing.
States the measured position precision against what an indexing search needs. A cell search matches within an assumed systematic allowance rather than within σ, so this is context for reading a search result, not a refusal.
Level: set at run time. Raised in rietx/indexing/diagnostics.py.
PEAK_SHOULDER_SEEDED#
Extra components seeded from the residual.
The width census found groups wider than the instrument’s own law allows, so extra components were seeded into them from the residual. Check that the added lines are real before indexing on them.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_SIGMA_ASSUMED#
Position uncertainties were assumed.
Some or all lines carry an assumed σ(2θ) rather than a fitted one, which is what a list of bare positions produces. Downstream gates treat the precision as unmeasured.
Level: warning. Raised in rietx/indexing/diagnostics.py.
PEAK_UNRESOLVED_SHOULDER#
Components that never separated.
Lines were kept in groups where they stayed within half a FWHM of a neighbour. Their positions are correlated with their neighbours’ and are less precise than their σ alone suggests.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_UNRESOLVED_SPLIT#
Splits reported as one line.
Pairs of comparable components closer than two lines of the fitted shape can be and still show a dip. Each pair is reported as one line whose position uncertainty reaches both.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_WIDTH_CAPPED#
Components broader than the width law allows.
Components whose width ran into five times the pattern’s own width law. They are humps rather than lines and are withheld from indexing.
Level: info. Raised in rietx/indexing/diagnostics.py.
PEAK_WIDTH_LAW_MISMATCH#
Fitted widths disagree with the instrument.
The fitted widths do not follow the declared instrumental width law. Either the specimen is broadened, which is a finding, or the declared instrument is wrong, which is a setup error. The message carries the ratio so the two can be told apart. On a refinement the census is compared with the fitted widths, size and strain included, so it fires only when no phase’s widths came within the factor. A phase the data cannot see is left out of that comparison.
Level: warning. Raised in rietx/indexing/diagnostics.py.