Skip to content

Analysis readiness

Readiness answers one narrow question per workflow:

Is the metadata that a future workflow would need actually present?

It is a metadata-presence report. It never inspects the signal, never models sedimentation, and never concludes that data are correct, of good quality, or scientifically suitable.

assessment = experiment.assess_readiness()
assessment.sedimentation_velocity.status      # ReadinessStatus
assessment.sedimentation_equilibrium.status
assessment.scientific_suitability.status      # always NOT_ASSESSED

What readiness is not

openauc never describes an experiment as ready, scientifically valid, or suitable for analysis. The strongest statement it can make is POTENTIALLY_READY, and even that is a statement about metadata, not data.

ReadinessStatus Meaning
POTENTIALLY_READY Every metadata prerequisite is present. Nothing is claimed about the data themselves.
BLOCKED At least one prerequisite is absent, or a structural error prevents assessment.
NOT_APPLICABLE The declared experiment type says this workflow does not apply.
NOT_ASSESSED Not evaluated, and never will be.

Routing by experiment type

ExperimentType SV SE
SEDIMENTATION_VELOCITY assessed NOT_APPLICABLE
SEDIMENTATION_EQUILIBRIUM NOT_APPLICABLE assessed
UNKNOWN assessed assessed
OTHER NOT_APPLICABLE NOT_APPLICABLE

OTHER and UNKNOWN are not equivalent. OTHER is an explicit statement that the run is neither a velocity nor an equilibrium experiment, so neither readiness tier applies. UNKNOWN is the absence of a statement, so both are assessed and a non-blocking experiment_type_unknown warning is recorded. The model never guesses which one was meant.

What blocks a tier

The blocking sets are deliberately minimal. Metadata that a conventional AUC workflow would merely prefer is reported, never required.

Sedimentation velocity is blocked by:

  • no_scans, no_observations, non_physical_radius, or any archival keying error — there is nothing coherent to analyse;
  • elapsed_time_absent — velocity is inherently a time series;
  • insufficient_scans_for_sv — fewer than two scans carry observations;
  • rotor_speed_absent — no per-scan speed and no instrument nominal speed.

Sedimentation equilibrium is blocked by the same structural errors and by rotor_speed_absent, but not by elapsed_time_absent: an equilibrium distribution is time-independent, so elapsed time is not a prerequisite.

Everything else — temperature, wavelength, optical system, signal unit, sample records, density, viscosity, partial specific volume, buffer description, cell and channel — is reported as an advisory finding and blocks nothing. Each appears in advisory_issues for the tiers it pertains to.

Reading an assessment

entry = experiment.assess_readiness().sedimentation_velocity
entry.status            # ReadinessStatus
entry.is_blocked        # bool
entry.blocking_issues   # findings whose `blocks` names this tier
entry.advisory_issues   # findings pertaining to this tier that block nothing
entry.note              # why the status is what it is
entry.to_dict()

Blocking is derived directly from each finding's blocks metadata, so the tables in validation tiers and the behaviour of this module cannot drift apart.

Structural validity and readiness are independent

An experiment can be archivally and structurally valid while every readiness tier is blocked — that is the normal case for a historical dataset with sparse metadata, and it is a success, not a failure:

assert experiment.validate_structure().is_valid          # nothing wrong with it
assert experiment.assess_readiness().sedimentation_velocity.is_blocked

The converse also holds: a structural ERROR blocks both readiness tiers, because there is no coherent experiment to assess.

Scientific suitability

AnalysisKind.SCIENTIFIC_SUITABILITY is present in every assessment with status NOT_ASSESSED and a fixed note. It is a constant: it is never derived from structural or readiness findings, never scored, and never upgraded.

It exists as a machine-readable entry rather than a prose disclaimer so that any consumer reading the assessment programmatically encounters the non-assessment explicitly and cannot omit it.

Judging convection, aggregation, meniscus position, equilibrium attainment or fit quality is out of scope for openauc, permanently and by design. Those belong to established AUC analysis software.