Diagnostics: reading files#

These codes come from reading a pattern, an instrument file or a recipe. 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.

BRML_ABSORBER_ENGAGED#

An automatic absorber was in the beam.

The instrument inserted an absorber over some points. The stored intensities already include the correction, so the reader left them alone. It did carry the factor into the esds, because the counted quantity is the intensity before the correction. Nothing needs fixing, but those points rest on fewer counts than their height suggests.

Level: info. Raised in rietx/io/formats/brml.py.

GSAS2_INSTPRM_CONVENTION_ASSUMED#

Axial divergence was split evenly.

GSAS-II states axial divergence as one combined number, and this package models it as two. The reader split the number evenly between them. A single number allows no other split. If you know your slits are unequal, set the two values yourself.

Level: info. Raised in rietx/io/instrument_profile.py.

GSAS2_INSTPRM_FIELD_DROPPED#

Some time-of-flight keys were read and not kept.

The file holds keys that the instrument has no place for. Some are labels. Others are terms with no published law. The reader accepts these only at zero, so dropping them changes no calculated pattern. A non-zero value of such a term stops the read with an error.

Level: info. Raised in rietx/io/instrument_tof.py.

GSAS2_INSTPRM_FIELD_NOT_READ#

The file states items the instrument cannot hold.

The file lists items that the instrument has no field for, such as a bank number, an instrument name or a polarisation on a neutron bank. They were read and not kept. The message names each one. If one matters to your work, set the equivalent value yourself.

Level: info. Raised in rietx/io/instrument_profile.py.

GSAS2_INSTPRM_FIELD_NOT_WRITTEN#

The exported file omits part of the instrument.

A GSAS-II instrument-parameter file has no items for the background, the specimen absorption, the specimen displacement or the transparency. Depending on the instrument, extra components, a Voigt peak shape and refine flags are lost too. Reading the file back gives a frozen instrument without them, so keep your own copy of the full one.

Level: warning. Raised in rietx/io/instrument_profile.py.

GSAS2_INSTPRM_GEOMETRY_ASSUMED#

The file states no diffractometer geometry.

The file has no Diff-type item, so the geometry was not read. The reader applied GSAS-II’s own fallback. A stated doublet gives Bragg-Brentano and anything else gives Debye-Scherrer. The two use different position and absorption corrections, so set the geometry yourself if you know the diffractometer.

Level: warning. Raised in rietx/io/instrument_profile.py.

GSAS2_INSTPRM_VALUE_DEFAULTED#

Items missing from the file took default values.

The file omits items that GSAS-II always writes for a bank, so those values came from this package’s defaults and not from your calibration. GSAS-II’s header tells users not to delete items, so a missing one usually means someone edited the file by hand. Check the values before you trust the instrument.

Level: warning. Raised in rietx/io/instrument_profile.py.

GSAS2_INSTPRM_VALUE_FLOORED#

GSAS-II will raise a small axial divergence.

The combined axial-divergence value is below the smallest one GSAS-II uses when it evaluates a profile. The file records your value as you gave it. GSAS-II replaces it with its floor, so it models more axial divergence than you wrote. Reading the file back here shows no difference, because the floor belongs to the program that reads it.

Level: warning. Raised in rietx/io/instrument_profile.py.

GSAS2_INSTPRM_VALUE_MERGED#

Two axial-divergence values became one.

GSAS-II models axial divergence with one number, and this instrument holds two that differ. The writer saves their sum. Reading the file back splits the sum evenly, so the original pair does not return. Only the total survives.

Level: warning. Raised in rietx/io/instrument_profile.py.

GSAS_BANK_COMMENTED#

A commented-out bank record was used.

The file has no active bank record, so the reader used a commented one. GSAS bank records give the axis in centidegrees. The same rows read as plain text put the axis 100 times too high. If the line was commented out to disable the bank, the file holds no other bank to read.

Level: info. Raised in rietx/io/formats/gsas.py.

GSAS_IPARM_FIELD_DROPPED#

Some instrument records were read and not kept.

The file holds records or fields with no slot in the instrument model. Examples are the correlation matrix of the incident-spectrum coefficients, a checksum with no published algorithm, and labels. The reader names them once for the whole file. The calibration and the profile that the model does hold are unaffected.

Level: info. Raised in rietx/io/instrument_tof.py.

GSAS_IPARM_LEGACY_LAYOUT#

The file used a legacy LANSCE layout.

The file departs from the layout in the GSAS manual, in a way found in older instrument files from LANSCE. You called the legacy reader by name, and it accepted the departure. The standard reader refuses the same file. Check the values taken against the source of the file, because each finding names the departure it accepted.

Level: info. Raised in rietx/io/legacy/lansce_iparm.py.

GSAS_IPARM_PROFILE_DECLINED#

A peak-shape set was not read.

A time-of-flight bank can hold several peak-shape sets. Only the default set is read, so any other set is skipped. A bank with no set at all comes back with every profile coefficient at zero, and a fit refuses it by name. Enter the profile yourself, or read it from another file for the same bank.

Level: info, warning. Raised in rietx/io/instrument_tof.py.

GSAS_IPARM_PROFILE_READ#

Peak-shape coefficients were read in an assumed order.

The default peak-shape set was read into the instrument. The GSAS manual names the coefficients but never says that the record holds them in that order, so the order is an assumption. One cutoff value is read and not used. Check the values against a known profile before you refine from them.

Level: info. Raised in rietx/io/instrument_tof.py.

GSAS_PRM_FIELD_DROPPED#

Some parameter-file fields were read and not kept.

The .prm file holds fields with no place in the instrument model, such as refine flags, damping controls and profile coefficients beyond the ones mapped. A frozen calibration has no use for them. They are dropped only where they sit at a neutral value or are inert for this source, and the message says what each record held.

Level: info. Raised in rietx/io/instrument_profile.py.

GSAS_PRM_FIELD_NOT_WRITTEN#

The exported .prm omits part of the instrument.

A GSAS .prm file has no record for the geometry, the specimen displacement, the transparency or the specimen absorption. Reading the file back gives a Debye-Scherrer instrument with every refine flag off. Depending on the instrument, a Voigt peak shape and extra components are lost too. Keep your own copy of the full instrument.

Level: warning. Raised in rietx/io/instrument_profile.py.

GSAS_PRM_GEOMETRY_ASSUMED#

The .prm file states no geometry.

A GSAS .prm file does not say whether the diffractometer is Bragg-Brentano or Debye-Scherrer. The reader returned a Debye-Scherrer instrument. The position and absorption corrections differ between the two, so a flat-plate calibration read this way is modelled wrongly. Set the geometry yourself, and carry over the axial divergence values that the file did state.

Level: warning. Raised in rietx/io/instrument_profile.py.

GSAS_PRM_PROFILE_SET_DEFAULTED#

The bank offered several profile sets.

A .prm bank can hold more than one profile set, and you named none, so the reader took set 1. GSAS-II’s importer makes the same choice. Only the pseudo-Voigt function is read. If another set describes your data, name it with profile_set=.

Level: warning. Raised in rietx/io/instrument_profile.py.

GSAS_PRM_VALUE_NARROWED#

Values were shortened to fit the file.

A .prm file stores numbers in fixed-width fields. Some of your values need more characters than a field holds, so the writer saved them to the precision that fits. A converged calibration does this routinely. The message names the largest change.

Level: info. Raised in rietx/io/instrument_profile.py.

PATTERN_DEAD_CHANNELS#

A run of channels measured nothing.

A short run of channels reads far below the local background, and its error bars shrank with it. This is the signature of a dead or masked detector cell. Weights go as one over the squared error, so those channels outvote live ones and pull the background down to meet them. Exclude the interval before you fit.

Level: warning. Raised in rietx/io/readers.py, rietx/refine.py.

PATTERN_DUPLICATE_POINTS#

Repeated points were dropped.

The file lists some positions twice with the same intensity, and the reader kept one of each pair. This is a file artefact and loses no information. The point count after the read is lower than the number of lines in the file. A repeat with a different intensity stops the read instead.

Level: info. Raised in rietx/io/formats/base.py.

PATTERN_INTENSITY_SCALED#

The intensity scale could not be established.

The file does not settle whether its intensities are raw counts or a rate already divided by a counting time. No esds were supplied, so the weights fall back to Poisson statistics. Those suit counts and are wrong by the square root of the counting time for a rate. The fit runs, but quote no esds or χ² from it unless you re-export in counts or supply the esds.

Level: warning. Raised in rietx/io/formats/base.py, rietx/io/formats/brml.py, rietx/io/formats/gsas.py, rietx/io/formats/uxd.py, rietx/io/formats/xrdml.py.

PATTERN_MULTISCAN_DEFAULTED#

Only the first of several scans was read.

The file holds more than one scan and you chose none, so the reader took the first. The others are not in the pattern, and a fit to it describes one measurement of several. Pass scan= to choose, or list the scans first to see what each one is.

Level: warning. Raised in rietx/io/formats/base.py.

PATTERN_ROWS_DROPPED#

Some numeric rows were not read as data.

The reader takes the most common number of values per line as the file’s layout, and it skipped numeric lines with a different count. A header table or a limits row usually causes this. If a skipped line was a real measurement, the file mixes layouts. Re-export it with the same number of values on every row.

Level: warning. Raised in rietx/io/formats/xy.py.

PATTERN_SCAN_REVERSED#

The scan was stored in descending order.

The file stores its points from the highest value to the lowest, and the reader reversed them. This is the same measurement written backwards, so nothing is lost. A point’s position in the file no longer matches its position in the pattern.

Level: info. Raised in rietx/io/formats/base.py.

PATTERN_SIGMA_CONSTANT#

Every point has the same error estimate.

The error estimate is identical on every point, so every point gets equal weight and the fit is unweighted. The reader kept the values, because a uniform error is legal. Goodness of fit and χ² mean something only if every point has that error. A placeholder in the error field is the usual cause.

Level: warning. Raised in rietx/io/readers.py.

PATTERN_X_AXIS_ASSUMED#

The scan axis was assumed to be 2θ.

The file does not state its scan axis in a form the reader recognises, so the x values were read as 2θ in degrees. Another axis read this way parses without error and refines to a cell that is wrong by a factor or a geometry. Check the axis in the file or the instrument software before you trust the cell.

Level: warning. Raised in rietx/io/formats/base.py.

PATTERN_X_AXIS_IMPLAUSIBLE#

The axis reaches 0° or below.

The x axis starts at or below 0°, where no Bragg reflection lies. Points there may be the direct beam, the far side of the detector or a header row read as data. The reader kept them. Check that the axis is 2θ in degrees, and exclude the interval before you fit.

Level: warning. Raised in rietx/io/readers.py.

RAS_ATTENUATOR_PRESENT#

An attenuator factor was found and not applied.

The Rigaku file carries an attenuator factor that differs from one over some points. No specification says whether the stored intensity already includes it, and applying it twice or not at all are both wrong. The reader left the intensities alone. Esds are affected too, so check the export against the instrument software before you trust the relative heights of those points.

Level: warning. Raised in rietx/io/formats/ras.py.

READER_OPTION_IGNORED#

A reader option does not apply here.

You passed an option that the format of this file does not take, so the file was read as if you had not given it. That is normal when a form carries a value across a change of file. It matters when you meant to select a scan or a data block. Check which reader claimed the file.

Level: info. Raised in rietx/io/formats/base.py.

RECIPE_BACKGROUND_PEAK_DEGENERATE#

A background peak spans the whole fit range.

The recipe declares a background peak whose width reaches the fitted range, so it never falls to half height inside the window. It then carries no curvature that the polynomial background lacks. Expect the two to correlate almost completely, and the stage to spend its budget on that valley. Use a peak or extra polynomial terms, not both.

Level: warning. Raised in rietx/io/recipe.py.

RECIPE_BACKGROUND_RESEEDED#

Background coefficients restart from zero.

The recipe’s Chebyshev coefficients were not carried over. Only their count and refine flag were. The two programs scale the polynomial’s domain differently, so the numbers would describe a different curve here. The coefficients start at zero and refine.

Level: info. Raised in rietx/io/recipe.py.

RECIPE_BOUND_HONOURED#

A recipe limit was applied.

The recipe states a minimum or maximum for a parameter. The recipe format’s own documentation says GSAS-II does not apply these, and this refinement does. A parameter that finishes on one of these limits is a difference from the reference engine and not a fault in the translation.

Level: info. Raised in rietx/io/recipe.py.

RECIPE_CONVENTION_ASSUMED#

A combined divergence value was halved.

The recipe states axial divergence as one combined number, and this package holds two. The number was halved between them, the symmetric reading. No recipe available can tell that apart from an uneven split, so treat the two values as assumed and not measured.

Level: info. Raised in rietx/io/recipe.py.

RECIPE_DISPERSION_DECLINED#

Anomalous scattering was switched off.

The recipe’s wavelength lies outside the energy range of the bundled dispersion table, so the correction was turned off and the scattering factors keep their base values. The absorption edges of the elements involved sit far below such energies, so the correction would be negligible. The result is flagged as fitted with dispersion neglected.

Level: info. Raised in rietx/io/recipe.py.

RECIPE_ENGINE_DEFAULT_DECLINED#

A null broadening value was read as zero.

The recipe includes a size or strain block but leaves its magnitude empty. GSAS-II fills that with its own project default, and this package reads it as no broadening. The instrument terms will differ from the reference engine’s by however much that default contributed. If the block is flagged for refinement, give it a non-zero start.

Level: info. Raised in rietx/io/recipe.py.

RECIPE_FIELD_DROPPED#

A recipe field has no counterpart here.

The recipe holds a field that this package has no place for, so it was left out. Examples are a constant Lorentzian width term at zero, a refinement cycle count and the choice of solver. The fit runs without it. Compare against the reference engine with that difference in mind.

Level: info, warning. Raised in rietx/io/recipe.py.

RECIPE_FIT_RANGE_CHANNELS#

The fit range became a channel set.

A recipe states its fit range as two angles, while an engine fits channels, and the two can disagree by a channel at the edges. The count in the message is what this package fits, using an inclusive mask at both ends. Check it against the reference engine’s count before you compare any Rwp.

Level: info. Raised in rietx/io/recipe.py.

RECIPE_FLAG_DROPPED#

A recipe refine flag was not honoured.

The recipe flags a parameter for refinement that has no counterpart here, or that would sit at its off state. The flag was not applied, so this fit has fewer free parameters than the reference engine’s, and what the parameter would have absorbed lands in its neighbours. Keep that in mind when you compare esds and χ².

Level: warning. Raised in rietx/io/recipe.py.

RECIPE_FLAG_TRANSLATED#

A mixing parameter became two coefficients.

GSAS-II describes a broadening effect with a magnitude and a Lorentzian share. This package has no share, only separate Lorentzian and Gaussian coefficients, so a freed share became two free coefficients. They hold the same two free directions under different names. Look for those two in the result.

Level: info. Raised in rietx/io/recipe.py.

RECIPE_NOTHING_REFINED#

The recipe flags no parameter for refinement.

No parameter in the recipe is marked as refinable, so the plan frees nothing. The run evaluates the model at its declared values. That is a simulation. Read its agreement statistics as a comparison of the declared model with the data and not as a fit.

Level: warning. Raised in rietx/io/recipe.py.

RECIPE_PLAN_STAGED#

Flagged parameters are freed in stages.

A recipe says which parameters refine and gives no order. This package frees them over several stages in the standard turn-on order, and each stage keeps what the earlier ones freed. The last stage refines the full flagged set, as the recipe asks. Freeing everything in one step can send a cell far from the answer.

Level: info. Raised in rietx/io/recipe.py.

RECIPE_SCALE_RESEEDED#

Phase scales were re-seeded from the data.

A scale factor’s normalisation belongs to each program, so the recipe’s value cannot be carried across. The scales were set so that the calculated intensity matches the data in total, and then refined. Do not compare a scale with the recipe’s number or with another engine’s.

Level: info. Raised in rietx/io/recipe.py.

RECIPE_SCHEMA_UNTESTED#

The recipe version has not been tested.

The recipe declares a schema version that this reader was not checked against. It was read anyway, because the format allows extra fields. A field whose meaning changed between versions is read with its old meaning. Check the values that matter against the program that wrote the recipe.

Level: warning. Raised in rietx/io/recipe.py.

RECIPE_ZERO_WEIGHT_EXCLUDED#

Zero-weight channels became excluded regions.

A recipe excludes a point by giving it zero weight, and that has no finite error estimate. The reader turned those channels into excluded regions, so the same points are left out by a different mechanism. The pattern’s channel count is therefore larger than the number the fit uses.

Level: info. Raised in rietx/io/recipe.py.

XRDML_ATTENUATOR_APPLIED#

A beam attenuator factor was applied.

An attenuator foil sat in front of the detector over some points. The stored counts are what the detector saw behind the foil, so the reader multiplied them by the factor. Esds follow the same factor. The correction is large and invisible in the file’s own numbers. That is why it is reported.

Level: info. Raised in rietx/io/formats/xrdml.py.