<a id="api-everything-else"></a>

# API: everything else

This page lists every name `rietx` exports that the other two API pages do not, alphabetically.

Most are the types a result, a report or a project is made of.
You read their fields more often than you construct them.

### rx.\_\_version_\_ *= 1.10.0*

A constant.

### *class* rx.AbsorptionCorrection

Record of the specimen absorption applied (cylinder or flat plate).

* `method: 'rouse_cylinder' | 'flat_plate_reflection' | 'flat_plate_transmission' = 'rouse_cylinder'`
* `mu_r: float`
* `mu_r_source: 'given' | 'estimated'`
* `wavelength: float`
* `equivalent_delta_biso: float`
* `skipped: str | None = None`
* `out_of_range: bool = False`
* `unabsorbed_fraction: float | None = None`
* `identifiable_fraction: float | None = None`
* `intensity_fraction_of_optimal: float | None = None`

### *class* rx.AmbiguityPartner

A distinct lattice whose calculated line *positions* match this one’s.

* `cell: tuple[float, float, float, float, float, float]`
* `transformation: list[list[int]]`
* `index: int`
* `system: str`
* `volume: float`
* `discriminating_reflections: list[tuple[int, int, int]] = []`
* `discriminating_two_theta: list[float] = []`

### *class* rx.AngleRestraint

A soft restraint on the i–j–k bond angle (vertex = the **middle** atom `atom_j`), contributing √weight·(angle − `target_deg`)/sigma degrees.

* `atom_i: int`
* `atom_j: int`
* `atom_k: int`
* `target_deg: float`
* `sigma: float`
* `weight: float = 1.0`
* `op_index_i: int | None = None`
* `translation_i: tuple[int, int, int] = (0 × 3)`
* `op_index_k: int | None = None`
* `translation_k: tuple[int, int, int] = (0 × 3)`

### *class* rx.Annotation

An append-only overlay: labels, refs and scores, applied after nodes.

* `node_id: str = ''`
* `label: str | None = None`
* `refs: dict[str, str] = {}`
* `scores: dict[str, float] = {}`
* `notes: dict[str, str] = {}`

### *class* rx.AntiBumpRestraint

A one-sided distance restraint: zero beyond `min_distance`, linear inside.

* `atom_i: int`
* `atom_j: int`
* `min_distance: float`
* `sigma: float`
* `weight: float = 1.0`
* `op_index: int | None = None`
* `translation: tuple[int, int, int] = (0 × 3)`

### *class* rx.Base

Base for every rietx schema.

### *class* rx.BodyOrigin

A rigid body’s origin: the point (0, 0, 0) of its template, fractional.

* `x: Parameter`
* `y: Parameter`
* `z: Parameter`

### *class* rx.BodyTorsion

A rotation of declared body atoms about the line through two others (WP-1808).

* `name: str`
* `axis: tuple[str, str]`
* `moves: list[str]`
* `angle: float = 0.0`
* `vary: bool = False`

### *class* rx.BondRestraint

A soft restraint on the distance between two atoms of one phase.

* `atom_i: int`
* `atom_j: int`
* `target: float`
* `sigma: float`
* `weight: float = 1.0`
* `op_index: int | None = None`
* `translation: tuple[int, int, int] = (0 × 3)`

### *class* rx.BravaisOpinion

What gemmi and spglib each say about a candidate’s lattice symmetry.

* `system: str`
* `system_loosest: str`
* `system_gemmi: str`
* `system_spglib: str`
* `ambiguous: bool = False`
* `methods_disagree: bool = False`
* `reduced_cell: tuple[float, float, float, float, float, float] = (0.0 × 6)`

### *class* rx.CandidateEvidence

One candidate’s evidence, collected for a consumer that can reason.

* `index: int`
* `cell: tuple[float, float, float, float, float, float]`
* `cell_esd: tuple[float, float, float, float, float, float]`
* `system: str`
* `centring: str`
* `volume: float`
* `confidence: 'high' | 'medium' | 'low'`
* `caveats: list[CaveatEvidence] = []`
* `found_by: list[str] = []`
* `n_indexed: int = 0`
* `n_lines: int = 0`
* `fom: dict[str, float] = {}`
* `validated: bool = False`
* `lebail_status: str | None = None`
* `lebail_rwp: float | None = None`
* `predicted_but_absent: int | None = None`
* `unmatched_observed: int | None = None`
* `ambiguity_partners: int = 0`

### *class* rx.CaveatEvidence

One caveat, with the half of it the gate never wrote out: its kind.

* `name: 'engines_disagree' | 'geometric_ambiguity' | 'fom_panel_disagrees' | 'fom_panel_reduced' | 'not_validated' | 'validation_failed' | 'predicted_but_absent' | 'indexed_fraction_low' | 'indexed_lines_low' | 'search_incomplete' | 'shift_allowance_assumed' | 'bravais_ambiguous' | 'volume_unphysical' | 'supercell_refuted'`
* `kind: 'refuting' | 'capping'`

### *class* rx.CellCandidate

One candidate lattice, with everything needed to rank or reject it.

* `cell: tuple[float, float, float, float, float, float]`
* `cell_esd: tuple[float, float, float, float, float, float]`
* `system: str`
* `centring: str = 'P'`
* `lattice_group: str = ''`
* `volume: float = 0.0`
* `volume_esd: float = 0.0`
* `af: tuple[float, float, float, float, float, float] = (0.0 × 6)`
* `engine_cell: tuple[float, float, float, float, float, float] | None = None`
* `change_of_basis: tuple[tuple[int, int, int], tuple[int, int, int], tuple[int, int, int]] | None = None`
* `n_indexed: int = 0`
* `n_lines: int = 0`
* `n_search_unindexed: int | None = None`
* `unindexed_two_theta: list[float] | None = None`
* `chi2_red: float = 0.0`
* `shift_template: str | None = None`
* `shift_coefficient: float = 0.0`
* `shift_esd: float = 0.0`
* `fom: list[FigureOfMerit] = []`
* `found_by: list[str] = []`
* `ambiguity: list[AmbiguityPartner] = []`
* `supercell_checks: list[SupercellCheck] | None = None`
* `bravais: BravaisOpinion | None = None`
* `lebail: LeBailValidation | None = None`
* `confidence: 'high' | 'medium' | 'low' = 'low'`
* `confidence_caveats: list['engines_disagree' | 'geometric_ambiguity' | 'fom_panel_disagrees' | 'fom_panel_reduced' | 'not_validated' | 'validation_failed' | 'predicted_but_absent' | 'indexed_fraction_low' | 'indexed_lines_low' | 'search_incomplete' | 'shift_allowance_assumed' | 'bravais_ambiguous' | 'volume_unphysical' | 'supercell_refuted'] = []`
* `diagnostics: list[Diagnostic] = []`

### *class* rx.CellVolume

One phase’s unit-cell volume in Å³, with its esd (WP-1933).

* `phase_index: int`
* `volume: float`
* `stderr: float | None = None`
* `stderr_diagonal: float | None = None`

### *class* rx.CoordinateTable

Each pattern’s coordinates: named columns, one row per pattern.

* `columns: dict[str, list[float | None]]`
* `units: dict[str, str] = {}`

### *class* rx.CorrelationPair

One entry of the worst-|ρ| list (WP-1056).

* `path_a: str`
* `path_b: str`
* `rho: float`

### *class* rx.DataQualityReport

Is this peak list fit to index, and what does it already say?

* `n_usable: int`
* `n_total: int`
* `two_theta_min: float`
* `two_theta_max: float`
* `source: 'fitted' | 'positions'`
* `sigma_two_theta_median: float`
* `sigma_two_theta_worst: float`
* `relative_sigma_q_median: float`
* `sigma_over_spacing: float`
* `lines_per_dof: dict[str, float] = {}`
* `systems_supported: list[str] = []`
* `fom_undefined: dict[str, str] = {}`
* `volume_envelope: dict[str, float] = {}`
* `shift: ShiftScreen | None = None`
* `supports_indexing: bool = True`
* `abstained_reason: str | None = None`
* `thresholds_version: str = '1.11'`
* `diagnostics: list[Diagnostic] = []`

### *class* rx.DataRef

The pattern a project is fitted against, held as a reference you can check.

* `filename: str`
* `sha256: str`
* `fingerprint: str`
* `reader: str`
* `options: dict[str, str] = {}`
* `n_points: int`
* `two_theta_range: tuple[float, float]`
* `has_sigma: bool`

### *class* rx.DataSupport

How many observations the pattern actually holds (WP-1071).

* `n_unique_reflections: int`
* `n_effective_observations: float | None = None`
* `n_structural_parameters: int`
* `observations_per_parameter: float | None = None`
* `effective_observations_per_parameter: float | None = None`

### *class* rx.EmissionLine

One wavelength component of the incident spectrum.

* `wavelength: Parameter`
* `weight: Parameter = Parameter(1.0, min=0.0)`

### *class* rx.ExchangeRow

How well the fitted parameters can imitate one held parameter.

* `held: str`
* `r2: float`
* `partners: dict[str, float] = {}`

### *class* rx.ExtinctionCandidate

One **extinction class**: the space groups that share an absence set.

* `symbol: str`
* `representative: str`
* `space_groups: list[str] = []`
* `excluded_groups: list[str] = []`
* `laue_classes: dict[str, list[str]] = {}`
* `conditions: list[str] = []`
* `conditions_complete: bool = True`
* `n_lines: int = 0`
* `n_absent: int = 0`
* `n_testable: int | None = None`
* `n_present: int = 0`
* `forbidden_hkl: list[tuple[int, int, int]] = []`
* `forbidden_two_theta: list[float] = []`
* `rwp: float = inf`
* `gof: float = inf`
* `chi2: float = inf`
* `delta_bic: float = 0.0`
* `absences_rejected: bool = False`
* `screened: bool = False`
* `refuted: bool = False`
* `refuted_reason: str | None = None`
* `diagnostics: list[Diagnostic] = []`

### *class* rx.ExtinctionPrior

Declared facts about the specimen that remove space groups from a class.

* `sohncke: bool | None = None`
* `centrosymmetric: bool | None = None`
* `polar: bool | None = None`

### *class* rx.ExtinctionScreen

What `rietx.determine_extinction_symbol` returns.

* `candidates: list[ExtinctionCandidate] = []`
* `lattice_group: str = ''`
* `cell: tuple[float, float, float, float, float, float] = (0.0 × 6)`
* `system: str = ''`
* `centring: str = 'P'`
* `wavelength: float = 0.0`
* `two_theta_range: tuple[float, float] = (0.0 × 2)`
* `n_classes: int = 0`
* `n_screened: int = 0`
* `reference_rwp: float = inf`
* `reference_chi2: float = inf`
* `reference_lines: int = 0`
* `n_points: int = 0`
* `profile_rwp: float = inf`
* `prior: ExtinctionPrior | None = None`
* `status: str = 'converged'`
* `thresholds_version: str = '1.11'`
* `diagnostics: list[Diagnostic] = []`

### *class* rx.FigureOfMerit

One figure of merit, and **what it cannot see**.

* `name: str`
* `value: float`
* `n_lines: int`
* `n_possible: int`
* `k_sigma: float`
* `mean_discrepancy: float = -1.0`
* `blind_spot: str = ''`

### *class* rx.FractionProfile

Every fraction of one phase the pattern admits along its width.

* `phase: str`
* `phase_index: int`
* `axes: list[str]`
* `weight_fraction: float`
* `weight_fraction_stderr: float | None = None`
* `chi2_fit: float`
* `chi2_best: float`
* `delta_chi2_cut: float`
* `fit_admissible: bool`
* `points: list[FractionProfilePoint] = []`
* `range_low: float`
* `range_high: float`
* `excess: float | None = None`
* `diagnostics: list[Diagnostic] = []`

### *class* rx.FractionProfilePoint

One pinned width and what the refit made of the fraction there.

* `axis: str`
* `value: float`
* `fwhm: float`
* `admissible: bool`
* `weight_fraction: float | None = None`
* `chi2: float | None = None`
* `delta_chi2: float | None = None`
* `rwp: float | None = None`
* `status: str | None = None`
* `error: str | None = None`
* `node_id: str | None = None`

### *class* rx.GeometryAngle

One interatomic angle at `atom_2`, in degrees (WP-1072).

* `phase_index: int`
* `atom_1: str`
* `atom_2: str`
* `atom_3: str`
* `atom_index_1: int`
* `atom_index_2: int`
* `atom_index_3: int`
* `angle: float`
* `stderr: float | None = None`
* `stderr_diagonal: float | None = None`
* `symmetry_1: str | None = '.'`
* `symmetry_2: str = '.'`
* `symmetry_3: str | None = '.'`

### *class* rx.GeometryDistance

One interatomic distance, bonding or nonbonding (WP-1072).

* `phase_index: int`
* `atom_1: str`
* `atom_2: str`
* `atom_index_1: int`
* `atom_index_2: int`
* `distance: float`
* `stderr: float | None = None`
* `stderr_diagonal: float | None = None`
* `symmetry_1: str = '.'`
* `symmetry_2: str | None = '.'`
* `bonded: bool = True`

### *class* rx.GeometryTable

Bonding geometry of the converged model, with propagated esds (WP-1072).

* `distances: list[GeometryDistance] = []`
* `angles: list[GeometryAngle] = []`
* `bond_slack: float = 0.0`
* `contact_max: float = 0.0`
* `notes: list[str] = []`

### *class* rx.GuardFinding

One guard hit, as data: which parameters, which number, which code.

* `code: str`
* `paths: tuple[str, ...]`
* `value: float | None`
* `message: str`
* `detail: str = ''`
* `limit: tuple[str, float] | None = None`

### *class* rx.Harmonic

An nth-order contribution at λ/n from a monochromator that passes order.

* `order: int`
* `weight: Parameter = Parameter(0.01, min=0.0)`

### rx.help_key_for(path: str) → str | None

The family glob that claims a parameter dot-path, or `None`.

### rx.help_registry() → dict[str, object]

The whole corpus as JSON-able data, for `GET /api/help`.

### *class* rx.HelpEntry

What one name is, in the fields a reference entry always carries.

* `title: str`
* `description: str`
* `unit: str | None = None`
* `default: str | None = None`
* `typical: str | None = None`
* `anchor: str | None = None`
* `label: str | None = None`

### *class* rx.HistogramResult

One pattern’s slice of a multi-histogram joint refinement.

* `label: str = ''`
* `weight: float = 1.0`
* `statistics: Statistics`
* `two_theta: list[float] = []`
* `y_obs: list[float] = []`
* `y_calc: list[float] = []`
* `y_background: list[float] = []`
* `sigma: list[float] = []`
* `ticks: dict[str, list[float]] = {}`
* `tick_hkl: dict[str, list[list[int]]] = {}`
* `qpa: QuantitativePhaseAnalysis | None = None`
* `restraints: RestraintReport | None = None`
* `phase_agreement: list[PhaseAgreement] = []`
* `diagnostics: list[Diagnostic] = []`

### *class* rx.HistoryNode

One immutable checkpoint in the refinement DAG.

* `id: str`
* `parents: list[str] = []`
* `action: NodeAction`
* `state: RefinementState`
* `metrics: NodeMetrics = NodeMetrics(…)`
* `diagnostics: list[Diagnostic] = []`
* `label: str = ''`
* `created_utc: str = ''`
* `scores: dict[str, float] = {}`
* `notes: dict[str, str] = {}`
* `schema_version: str | None = None`

### *class* rx.HistoryRecord

One JSONL line.

* `record: 'header' | 'node' | 'annotation'`
* `header: TreeHeader | None = None`
* `node: HistoryNode | None = None`
* `annotation: Annotation | None = None`

### *class* rx.HumpComponent

One explicit broad Gaussian added on top of whatever background is in use.

* `position: Parameter = Parameter(0.0)`
* `height: Parameter = Parameter(0.0, min=0.0)`
* `fwhm: Parameter = Parameter(5.0, min=0.1)`
* `kind: 'hump' = 'hump'`
* `label: str | None = None`

### *class* rx.Identifiability

Degeneracy evidence measured on the **final Jacobian** (WP-1055/-1056).

* `background_absorption: dict[str, float] = {}`
* `extra_peak_absorption: dict[str, float] = {}`
* `top_correlations: list[CorrelationPair] = []`
* `soft_modes: list[SoftMode] = []`
* `exchangeability: list[ExchangeRow] = []`

### *class* rx.IncidentSpectrum

The moderator spectrum a time-of-flight bank still carries, or none.

* `itype: int = 0`
* `coefficients: list[Parameter] = []`
* `tof_min_us: float | None = None`
* `tof_max_us: float | None = None`

### *class* rx.IndexingControls

Everything an indexing *run* is asked with that is not the data itself.

* `search: SearchSpecSpec = SearchSpecSpec(…)`
* `engines: list[str] | None = None`
* `validate_candidates: bool = True`
* `check_top: int | None = None`

### *class* rx.IndexingEvidence

The reasoning consumer’s view of an `IndexingResult` (WP-1043).

* `candidates: list[CandidateEvidence] = []`
* `systems_searched: list[str] = []`
* `search_complete: dict[str, bool] = {}`
* `systems_supported: list[str] = []`
* `n_usable_lines: int = 0`
* `fom_ranked: list[str] = []`
* `fom_undefined: dict[str, str] = {}`
* `validated: bool = False`

### *class* rx.LeBailValidation

A candidate cell tested against the **whole pattern** by a Le Bail fit.

* `rwp: float`
* `gof: float`
* `space_group: str`
* `n_reflections: int`
* `predicted_but_absent: int = 0`
* `unmatched_observed: int = 0`
* `predicted_but_absent_two_theta: list[float] = []`
* `unmatched_observed_two_theta: list[float] = []`
* `status: str = 'converged'`
* `n_stages: int = 0`
* `diagnostics: list[Diagnostic] = []`

### *class* rx.MagneticOnset

Where along the series axis the moment stops being supported (WP-1329).

* `path: str = ''`
* `atom: str = ''`
* `x: float | None = None`
* `x_esd: float | None = None`
* `bracket: list[float] = []`
* `bracket_labels: list[str] = []`
* `sense: 'falls' | 'rises' | 'none' = 'none'`
* `monotone: bool = True`
* `boundaries: list[list[float]] = []`
* `n_supported: int = 0`
* `n_held: int = 0`
* `n_unmeasured: int = 0`
* `unmeasured_labels: list[str] = []`
* `n_unconverged: int = 0`
* `bracket_verdicts_final: bool | None = None`
* `note: str = ''`

### *class* rx.MagneticSymmetry

A magnetic (Shubnikov) space group as the two magCIF loops that state it.

* `operations: list[str]`
* `centerings: list[str] = ['x,y,z,+1']`
* `bns_number: str | None = None`
* `og_number: str | None = None`
* `uni_number: int | None = None`
* `symbol: str | None = None`
* `setting: str | None = None`
* `propagation_vector_parent: tuple[str, str, str] | None = None`

### *class* rx.MagneticTrajectory

|m| against the series axis, with the held patterns marked as held.

* `path: str`
* `x: list[float] = []`
* `x_label: str = 'index'`
* `value: list[float] = []`
* `stderr: list[float | None] = []`
* `labels: list[str] = []`
* `positions: list[int] = []`
* `supported: list[bool] = []`
* `measured: list[bool] = []`
* `status: list[str] = []`
* `atom: str = ''`
* `ion: str = ''`
* `onset: MagneticOnset | None = None`

### *class* rx.MicroabsorptionCorrection

Mixture-level record of the Brindley correction (Brindley, 1945).

* `method: 'brindley_sphere' = 'brindley_sphere'`
* `wavelength: float`
* `mu_mean_cm: float`

### *class* rx.MicrostructureTerm

One profile coefficient read as the physical quantity behind it.

* `path: str`
* `kind: 'size' | 'strain'`
* `coefficient: float`
* `value: float | None = None`
* `esd: float | None = None`
* `unavailable: str | None = None`

### *class* rx.Moment

A magnetic moment on a site, in crystal-axis components (μ<sub>B</sub>).

* `crystalaxis_x: Parameter = Parameter(0.0)`
* `crystalaxis_y: Parameter = Parameter(0.0)`
* `crystalaxis_z: Parameter = Parameter(0.0)`
* `ion: str`
* `g: float | None = None`

### *class* rx.MomentAngleTest

One round of the stationary-angle test on a stage’s covariance (WP-1929).

* `paths: list[str]`
* `reached: bool`
* `statistic: float | None = None`
* `cut: float`
* `zeroed: bool`
* `stationary_at: dict[str, float] = {}`
* `half_widths: dict[str, float] = {}`

### *class* rx.NodeAction

The edge operation that produced a node from its parent or parents.

* `kind: 'root' | 'stage' | 'set_vary' | 'set_value' | 'set_tie' | 'set_variable' | 'set_hold' | 'edit_model' | 'merge'`
* `name: str = ''`
* `turn_on: list[str] = []`
* `turn_off: list[str] = []`
* `values: dict[str, float] = {}`
* `max_iter: int = 100`
* `lebail_cycles: int = 3`
* `seed: float = 0.0`
* `strain_seed: float = 0.0`
* `restraint_weight_scale: float = 1.0`
* `ftol: float | None = None`
* `window_slack_deg: float | None = None`
* `window_area_tol: float | None = None`
* `phase_support_sigma: float | None = 3.0`
* `correlation_guard: float = 0.98`
* `ties: dict[str, TieSpec] = {}`
* `untied: list[str] = []`
* `variables: dict[str, Parameter] = {}`
* `removed_variables: list[str] = []`
* `held: list[str] = []`
* `unheld: list[str] = []`

### *class* rx.NodeMetrics

Cached scalars so queries (`best`, `compare`) need no recompute.

* `statistics: Statistics | None = None`
* `status: 'converged' | 'max_iter' | 'diverged' | None = None`
* `n_iterations: int = 0`
* `cost_initial: float | None = None`
* `cost_final: float | None = None`
* `stderr: dict[str, float] = {}`
* `held_scale_phases: list[int] = []`

### *exception* rx.NoPhasesError

An exception. A refining verb was handed a model with no phases (WP-1207).

### *class* rx.ObservedPeak

One measured line: a fitted position with its esd, width, shape, area.

* `two_theta: float`
* `two_theta_esd: float`
* `two_theta_esd_fit: float | None = None`
* `intensity: float`
* `intensity_esd: float`
* `q: float`
* `q_esd: float`
* `fwhm: float`
* `eta: float`
* `group: int`
* `n_in_group: int`
* `chi2_red: float`
* `flags: list['ghost_kbeta' | 'ghost_tungsten' | 'excluded' | 'fit_failed' | 'sigma_assumed' | 'unresolved_shoulder' | 'position_at_bound' | 'asymmetry_unmodelled' | 'not_separable' | 'background_extrapolated' | 'axial_tail' | 'kalpha2_residual' | 'no_intensity' | 'unnamed_neighbour' | 'position_unmeasured' | 'duplicate_line' | 'weak_line' | 'unresolved_split' | 'width_capped'] = []`
* `origin: 'fitted' | 'manual' | 'edited' = 'fitted'`

### *class* rx.ParameterCandidate

One held-but-refinable parameter, scored at the current state.

* `path: str`
* `gain: float`
* `gradient: float`
* `absorption: float = 0.0`
* `seeded: bool = False`
* `seed_value: float | None = None`
* `action_kind: str | None = None`

### *class* rx.ParameterInterval

The profile interval for one refined parameter.

* `path: str`
* `value: float`
* `stderr: float | None`
* `at_bound: bool | None`
* `level: float`
* `one_sided: bool`
* `quantile: float`
* `delta_chi2_cut: float`
* `lower: float | None`
* `upper: float | None`
* `lower_stop: 'threshold' | 'bound' | 'refits' | 'error' | 'period'`
* `upper_stop: 'threshold' | 'bound' | 'refits' | 'error' | 'period'`
* `chi2_fit: float`
* `chi2_lowest: float`
* `fit_is_minimum: bool`
* `points: list[ParameterIntervalPoint] = []`
* `n_refits: int`

### *class* rx.ParameterIntervalPoint

One pinned value and the lowest data χ² its refits reached there.

* `value: float`
* `runs: int`
* `chi2: float | None = None`
* `delta_chi2: float | None = None`
* `status: str | None = None`
* `error: str | None = None`
* `node_id: str | None = None`

### *class* rx.ParametricCoefficient

One refined coefficient of a `ParametricEquation`, in user units.

* `equation: str`
* `target: str`
* `term: str`
* `path: str`
* `value: float`
* `esd: float | None`
* `vary: bool`
* `unit: str | None`
* `reference: dict[str, float] | None`

### *class* rx.ParametricEquation

One target refined as a declared linear function of the coordinates.

* `name: str`
* `target: str`
* `basis: 'constant' | 'polynomial' | 'design'`
* `terms: list[list[str]] | None = None`
* `design: list[list[float]] | None = None`
* `patterns: list[int] | None = None`
* `reference: dict[str, float] | None = None`
* `scale: dict[str, float] | None = None`

### *class* rx.ParametricFormReading

One reading of a form test (`ParametricFormTest`), or of every tested declaration at once (`RefinementResult.parametric_form_joint <rietx.schemas.results.RefinementResult.parametric_form_joint>`).

* `dof: int`
* `statistic: float | None`
* `cut: float | None`
* `rejected: bool | None`
* `p_value: float | None`

### *class* rx.ParametricFormTest

Whether one `ParametricEquation`’s form survives its own data.

* `equation: str`
* `target: str`
* `n_patterns: int`
* `n_subset: int`
* `rejected: bool | None`
* `tied: ParametricFormReading | None`
* `others_freed: ParametricFormReading | None`
* `provisional_on: list[str]`

### *class* rx.ParametricValue

One declaration’s target evaluated at a coordinate, with its esd.

* `equation: str`
* `target: str`
* `coordinates: dict[str, float]`
* `row: list[float] | None`
* `value: float`
* `esd: float | None`
* `unit: str | None`
* `outside: list[str] | None`
* `form_rejected: bool | None`
* `provisional_on: list[str]`
* `joint_rejected: bool | None`

### *class* rx.PeakComponent

One declared sharp pseudo-Voigt peak the phases cannot account for.

* `center: Parameter = Parameter(0.0)`
* `area: Parameter = Parameter(0.0, min=0.0)`
* `fwhm: Parameter = Parameter(0.1, min=0.005, max=0.5)`
* `eta: Parameter = Parameter(0.5, min=0.0, max=1.0)`
* `all_lines: bool = True`
* `kind: 'peak' = 'peak'`
* `label: str | None = None`

### *class* rx.PeakList

Every resolvable line in one pattern, with per-line σ.

* `peaks: list[ObservedPeak]`
* `wavelength: float`
* `two_theta_min: float`
* `two_theta_max: float`
* `source: 'fitted' | 'positions' = 'fitted'`
* `thresholds_version: str = '1.11'`
* `diagnostics: list[Diagnostic] = []`

### *class* rx.PhaseAgreement

One phase’s structure-sensitive agreement indices (WP-1069).

* `name: str`
* `r_bragg: float | None = None`
* `r_f: float | None = None`
* `n_reflections: int = 0`

### *class* rx.PhaseMicrostructure

A phase’s size and strain as physical numbers, with esds (WP-1131).

* `phase_index: int`
* `phase_name: str = ''`
* `wavelength: float | None = None`
* `scherrer_k: float`
* `terms: list[MicrostructureTerm] = []`
* `size_agreement: float | None = None`
* `strain_agreement: float | None = None`
* `separable: bool | None = None`
* `size_strain_collinearity: float | None = None`

### *class* rx.PhaseQuantity

One phase’s quantitative-analysis row (Hill & Howard, 1987).

* `name: str`
* `weight_fraction: float | None`
* `weight_fraction_stderr: float | None = None`
* `scale: float`
* `z: int | None = None`
* `molar_mass: float | None = None`
* `cell_mass: float`
* `cell_volume: float`
* `zmv: float`
* `weight_fraction_corrected: float | None = None`
* `brindley_tau: float | None = None`
* `mu_cm: float | None = None`
* `mu_r: float | None = None`
* `particle_radius_um: float | None = None`

### *class* rx.PhaseTexture

One phase’s spherical-harmonics texture at the answer (WP-1960).

* `name: str`
* `texture_index: float`
* `min_p_reflections: float`
* `min_p_sphere: float`

### rx.PLAN_PRESETS

A dict. Keys: `mccusker_default`, `mccusker_structural`, `lab_bragg_brentano`, `lab_calibrate`, `lab_sample_refine`, `profile_only`, `pawley_default`, `magnetic_width`.

### *class* rx.PlanInfo

What a preset is for, in the words a chooser needs.

* `title: str`
* `description: str`
* `modes: tuple[Mode, ...]`
* `when_to_use: str`

### *class* rx.PlanSpec

A staged plan as data that round-trips through JSON, mirroring `RefinementPlan`.

* `stages: list[StageSpec] = []`
* `correlation_guard: float = 0.98`
* `intermediate_ftol: float | None = 1e-06`
* `lebail_passes: int = 1`
* `phase_support_sigma: float | None = 3.0`
* `closing_window_tol: float | None = 0.001`

### *class* rx.ProfileTOF

GSAS **type-3** time-of-flight profile coefficients.

* `alpha0: Parameter = Parameter(0.0)`
* `alpha1: Parameter = Parameter(0.0)`
* `beta0: Parameter = Parameter(0.0)`
* `beta1: Parameter = Parameter(0.0)`
* `sig0: Parameter = Parameter(0.0, min=0.0)`
* `sig1: Parameter = Parameter(0.0, min=0.0)`
* `sig2: Parameter = Parameter(0.0, min=0.0)`
* `gam0: Parameter = Parameter(0.0)`
* `gam1: Parameter = Parameter(0.0)`
* `gam2: Parameter = Parameter(0.0)`

### *class* rx.ProjectDoc

The settings half of a project, stored as `project.json` (see the module docstring).

* `format_version: str = '1.5'`
* `package_version: str = ''`
* `created_utc: str = ''`
* `updated_utc: str = ''`
* `patterns: list[DataRef] = []`
* `plan: PlanSpec | None = None`
* `mode: 'rietveld' | 'lebail' | 'pawley' = 'rietveld'`
* `two_theta_limits: tuple[float, float] | None = None`
* `excluded_regions: list[tuple[float, float]] = []`
* `indexing: IndexingControls = IndexingControls(…)`
* `history_file: str = 'history.jsonl'`
* `ui: dict[str, Any] = {}`

### *class* rx.ProjectFormat

One foreign refinement format this build reads, and how it is recognised.

* `name: str`
* `title: str`
* `extensions: tuple[str, ...]`
* `sniff: str`
* `carries: tuple[str, ...]`
* `reports_at: 'read' | 'build' | 'both'`
* `matches: Callable[[Path], bool]`
* `read: Callable[..., Any]`
* `to_structure: Callable[..., Structure]`
* `write: Callable[..., None] | None = None`
* `refuses: str | None = None`

### *class* rx.ProjectModel

What a foreign refinement file stated, and which format stated it.

* `format: ProjectFormat`
* `path: Path`
* `stated: Any`
* `diagnostics: tuple[Diagnostic, ...] = ()`

### *class* rx.Provenance

Everything needed to reproduce a result.

* `package_version: str`
* `schema_version: str = '0.59'`
* `backend: str = 'numpy'`
* `dtype: str = 'float64'`
* `solver: str = 'trf'`
* `report_thresholds_version: str = '0.1'`
* `created_utc: str | None = None`
* `notes: dict[str, str] = {}`

### *class* rx.QuantitativePhaseAnalysis

Per-phase weight fractions from the refined Rietveld scales.

* `phases: list[PhaseQuantity]`
* `method: 'zmv' = 'zmv'`
* `crystalline_only: bool = True`
* `unmeasured_phases: list[str] = []`
* `unmeasured_held: list[str] = []`
* `microabsorption: MicroabsorptionCorrection | None = None`
* `microabsorption_skipped: str | None = None`

### *class* rx.Recipe

One PowderLine recipe, resolved into what this package refines with.

* `structure: Structure`
* `instrument: Instrument`
* `pattern: PatternData`
* `plan: RefinementPlan`
* `limits: tuple[float, float] | None`
* `diagnostics: list[Diagnostic] = []`
* `schema_name: str = 'GSASII_Rietveld'`
* `schema_version: str = '0.26.0'`
* `phase_names: tuple[str, ...] = ()`

### *exception* rx.RecipeError

An exception. A recipe this reader refuses, naming the field that caused it.

### *class* rx.RefinedParametricEquation

One parametric declaration as the fit resolved it, with what a reader needs to evaluate it anywhere (WP-1325).

* `equation: ParametricEquation`
* `unit: str | None`
* `span: dict[str, tuple[float, float]]`
* `covariance: list[list[float]] | None`

### *exception* rx.RefinementCancelled

An exception. Raised out of a fit whose `CancelToken` was set.

### *class* rx.RefinementState

Everything needed to reconstruct a refinement exactly.

* `structure: Structure`
* `instrument: Instrument`
* `mode: 'rietveld' | 'lebail' | 'pawley' = 'rietveld'`
* `free_paths: list[str] = []`
* `free_declared: bool = False`
* `two_theta_limits: tuple[float, float] | None = None`
* `reflections: list[ReflectionState] = []`
* `ties: dict[str, TieSpec] = {}`
* `variables: dict[str, Parameter] = {}`
* `holds: list[str] = []`

### *class* rx.RefinementTree(header: [TreeHeader](#rx.TreeHeader), \*, path: str | Path | None = None)

A record of every state a refinement passed through, and how.

### *class* rx.ReflectionPairScreen

Evidence behind a shift measured from harmonic reflection pairs.

* `n_pairs: int`
* `n_candidate_triples: int`
* `n_clustered: int`
* `null_k_mean: float`
* `null_k_std: float`
* `z: float`
* `p_value: float`
* `null_replicates: int`
* `seed: int`
* `scatter_deg: float`
* `refuted_templates: list[str] = []`
* `declined_reason: str | None = None`

### *class* rx.ReflectionRow

One (emission line, reflection) row of a reflection table.

* `phase: str`
* `line: int`
* `wavelength: float`
* `h: int`
* `k: int`
* `l: int`
* `d: float`
* `two_theta: float`
* `multiplicity: int`
* `f_squared: float | None`
* `intensity: float`
* `satellite_order: int = 0`
* `component: str = 'total'`
* `phase_index: int = 0`

### *class* rx.ReflectionState

Per-hkl intensities, the state that is *not* in the parameter vector.

* `phase_index: int`
* `hkl: list[list[int]] = []`
* `satellite_order: list[int] | None = None`
* `intensity: list[float] = []`
* `kind: 'lebail_extracted' | 'pawley_refined' = 'lebail_extracted'`
* `stderr: list[float] | None = None`
* `varied: bool = False`

### *class* rx.RegionAttribution

What a locally linear model says is wrong in one region.

* `two_theta_lo: float`
* `two_theta_hi: float`
* `n_reflections: int`
* `chi2_share: float`
* `mean_two_theta: float`
* `mean_fwhm: float`
* `coefficients: list[BasisCoefficient] = []`
* `r2: float`
* `gram_condition: float`
* `chi2_reduced: float = 0.0`
* `has_significant_misfit: bool = True`
* `gates_passed: bool`
* `gate_failures: list[GateFailure] = []`

### *class* rx.RestraintReport

Per-restraint deviations and the pooled restraint χ² (WP-0406).

* `rows: list[RestraintRow]`
* `restraint_chi2: float`
* `n_restraints: int`
* `weight_scale: float = 1.0`

### *class* rx.RestraintRow

One soft restraint’s computed-vs-target deviation (WP-0406).

* `phase_index: int | None = None`
* `kind: 'bond' | 'angle' | 'value' | 'tether' | 'anti_bump'`
* `atoms: list[int] | None = None`
* `path: str | None = None`
* `computed: float`
* `target: float`
* `sigma: float`
* `weight: float = 1.0`
* `deviation: float`
* `deviation_over_sigma: float`

### *class* rx.RigidBody

A set of a phase’s atoms that moves as one rigid template (WP-1805, #561).

* `name: str`
* `atoms: list[str]`
* `template: list[tuple[float, float, float]]`
* `origin: BodyOrigin`
* `orientation: tuple[float, float, float, float] = (1.0, 0.0, 0.0, 0.0)`
* `rotation_vary: bool = False`
* `torsions: list[BodyTorsion] = []`
* `riding: list[str] = []`

### *class* rx.RoughnessPitschke

Surface-roughness intensity correction, Pitschke *et al.* (1993) form.

* `kind: 'pitschke' = 'pitschke'`
* `c: Parameter = Parameter(0.0, min=0.0, max=4.0)`
* `tau: Parameter = Parameter(0.05, min=0.0, max=0.3)`

### *class* rx.RoughnessSuortti

Surface-roughness intensity correction, Suortti (1972) form.

* `kind: 'suortti' = 'suortti'`
* `a: Parameter = Parameter(0.5, min=0.0, max=1.0)`
* `b: Parameter = Parameter(0.0, min=0.0, max=5.0)`

### *class* rx.SearchSpecSpec

Mirrors `indexing.engines.SearchSpec`; every engine reads the same one.

* `systems: list[str] | None = None`
* `centrings: dict[str, list[str]] | None = None`
* `min_d_axis: float = 2.0`
* `max_d_axis: float = 25.0`
* `min_volume: float = 15.0`
* `max_volume: float | None = None`
* `n_unindexed: int | 'inliers' | None = None`
* `n_search_lines: int = 20`
* `k_sigma: float = 3.0`
* `shift_allowance_deg: float = 0.0`
* `shift_template: str | None = None`
* `budget_seconds: float = 30.0`
* `total_budget_seconds: float | None = None`
* `preset: str | None = None`
* `max_candidates: int = 12`
* `seed: int = 0`
* `prior_cells: list[tuple[float, float, float, float, float, float]] | None = None`
* `prior_spacegroups: list[str] | None = None`

### *class* rx.SeriesFailure

One pattern the chain could not fit at all.

* `index: int`
* `label: str`
* `exception: str`

### *class* rx.SeriesStep

One step `SEQUENTIAL_DISCONTINUITY` flagged, as fields (WP-1469).

* `path: str`
* `labels: tuple[str, str]`
* `indices: tuple[int, int]`
* `step: float`

### *class* rx.SharingMap

Which parameter paths are shared across histograms vs.

* `per_histogram: list[str] = []`
* `shared: list[str] = []`

### *class* rx.ShiftScreen

Which physical cause a systematic 2θ shift has, or that it has none that can be named over the range measured.

* `n_lines: int`
* `templates: list[ShiftTemplateFit] = []`
* `best: str | None = None`
* `separable: bool = False`
* `separability_ratio: float = 0.0`
* `max_collinearity: float = 0.0`
* `sigma_sys_deg: float = 0.0`
* `prediction_spread_deg: float = 0.0`
* `allowance_deg: float = 0.0`
* `source: 'measured' | 'reflection_pairs' | 'unavailable' = 'unavailable'`
* `pairs: ReflectionPairScreen | None = None`

### *class* rx.ShiftTemplateFit

One systematic-shift template fitted **alone** to the deviations.

* `name: str`
* `coefficient: float`
* `stderr: float`
* `r2: float`
* `residual_ss: float`

### *class* rx.SoftMode

One near-null direction of the scale-normalised normal matrix.

* `eigenvalue: float`
* `loadings: dict[str, float] = {}`

### *class* rx.SphericalHarmonicTexture

Spherical-harmonics preferred-orientation correction (Von Dreele 1997).

* `order: int`
* `coefficients: dict[str, Parameter] = {}`

### *class* rx.StageSpec

One stage of a staged plan as data that round-trips through JSON, mirroring `Stage`.

* `name: str`
* `turn_on: list[str] = []`
* `max_iter: int = 100`
* `ftol: float | None = None`
* `lebail_cycles: int = 3`
* `seed: float = 0.0`
* `strain_seed: float = 0.0`
* `restraint_weight_scale: float = 1.0`
* `window_slack_deg: float | None = None`

### *class* rx.SuggestedAction

An advisory, typed suggestion.

* `kind: 'refine_zero_shift' | 'refine_sample_displacement' | 'refine_sample_transparency' | 'refine_capillary_offset_along_beam' | 'refine_capillary_offset_across_beam' | 'refine_cell' | 'refine_profile_widths' | 'refine_sample_size_broadening' | 'refine_sample_strain_broadening' | 'refine_axial_asymmetry' | 'refine_biso' | 'refine_preferred_orientation' | 'refine_scale' | 'add_impurity_phase' | 'increase_background_flexibility' | 'decrease_background_flexibility' | 'reindex_or_recheck_cell' | 'collect_better_data'`
* `confidence: float`
* `rationale: str`
* `parameter_paths: list[str] = []`
* `expected_delta_chi2: float | None = None`
* `alternatives: list['refine_zero_shift' | 'refine_sample_displacement' | 'refine_sample_transparency' | 'refine_capillary_offset_along_beam' | 'refine_capillary_offset_across_beam' | 'refine_cell' | 'refine_profile_widths' | 'refine_sample_size_broadening' | 'refine_sample_strain_broadening' | 'refine_axial_asymmetry' | 'refine_biso' | 'refine_preferred_orientation' | 'refine_scale' | 'add_impurity_phase' | 'increase_background_flexibility' | 'decrease_background_flexibility' | 'reindex_or_recheck_cell' | 'collect_better_data'] = []`
* `two_theta_range: tuple[float, float] | None = None`
* `vetoed_by: str | None = None`
* `execution: 'stage' | 'index' | 'advice' | None = None`

### *class* rx.SupercellCheck

This candidate asked as a superlattice of another reported candidate.

* `parent_cell: tuple[float, float, float, float, float, float]`
* `parent_system: str`
* `parent_centring: str`
* `index: int`
* `n_extra: int`
* `n_seen: int`
* `p0: float`
* `p_value: float`
* `n_seen_unexplained: int | None = None`
* `verdict: 'supported' | 'refuted' | 'undecided'`
* `absent_two_theta: list[float] = []`

### *class* rx.TetherRestraint

A one-sided distance restraint: zero inside `max_distance`, linear outside.

* `atom_i: int`
* `atom_j: int`
* `max_distance: float`
* `sigma: float`
* `weight: float = 1.0`
* `op_index: int | None = None`
* `translation: tuple[int, int, int] = (0 × 3)`

### *class* rx.TieSpec

The JSON form of `params.vector.AffineTie`, value = Σ c·src + k.

* `terms: list[tuple[str, float]] = []`
* `const: float = 0.0`
* `user: bool = False`

### *class* rx.TOFSource

Neutron **time-of-flight** bank: a white beam, a fixed detector angle.

* `kind: 'neutron_tof' = 'neutron_tof'`
* `difc: Parameter`
* `difa: Parameter = Parameter(0.0)`
* `tzero: Parameter = Parameter(0.0)`
* `difb: Parameter = Parameter(0.0)`
* `two_theta_bank_deg: float`
* `l1_m: float | None = None`
* `l2_m: float | None = None`
* `profile_tof: ProfileTOF = ProfileTOF(…)`
* `incident_spectrum: IncidentSpectrum = IncidentSpectrum(…)`

### *class* rx.Trajectory

One parameter’s path across the series, with its per-point esds.

* `path: str`
* `x: list[float] = []`
* `x_label: str = 'index'`
* `value: list[float] = []`
* `stderr: list[float | None] = []`
* `labels: list[str] = []`
* `positions: list[int] = []`

### *class* rx.TreeHeader

Identifies the tree and the pattern every node is fitted against.

* `tree_id: str`
* `created_utc: str = ''`
* `data_fingerprint: str = ''`
* `data_source: str = ''`
* `n_points: int = 0`
* `plan: PlanSpec | None = None`
* `package_version: str = ''`
* `schema_version: str = '0.59'`

### *class* rx.ValueRestraint

A soft restraint pulling a single parameter toward `target`.

* `path: str`
* `target: float`
* `sigma: float`
* `weight: float = 1.0`
