Skip to main content

Instrument Drift Ontology

Instrumentation
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 16 September 2026
Audio Overview
# Instrument Drift Ontology — Flow Algebra

URL: https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/measurement-units-ontologies/instrumentation/instrument-drift-ontology.html

FLOW InstrumentDriftOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Instrumentation
    -> Instrument Drift Ontology

  PURPOSE:
    Represent instrument drift as continuous or incremental change over time in an instrument's indication, calibration relation or metrological characteristics when the measurand and relevant influence quantities are held constant or appropriately modelled. The ontology models zero drift, span drift, sensitivity drift, gain drift, offset drift, long-term and short-term drift, deterministic and stochastic drift, thermal ageing and environmental effects, calibration history, stability, drift rate, correction, interpolation, extrapolation, uncertainty, time-series analysis, change detection, maintenance, provenance and machine-consumable reasoning while strictly distinguishing drift from random noise, hysteresis, repeatability, resolution, instantaneous error and true measurand change.

  ENTITY InstrumentDrift {
    TYPE: TimeDependentMetrologicalCharacteristic

    DEFINITION:
      continuous_or_incremental_change_over_time
      in_indication_or_metrological_property
      of_measuring_instrument
      under_constant_or_modelled_measurand_and_influence_conditions

    PROPERTIES:
      depends_on_time
      may_be_positive_or_negative
      may_be_deterministic
      may_be_stochastic
      may_be_reversible
      may_be_irreversible
      may_affect_offset
      may_affect_gain
      may_affect_linearity
      may_affect_dynamic_response
      contributes_to_measurement_uncertainty
      has_provenance
  }

  ENTITY DriftObservation {
    TYPE: TimeIndexedMetrologicalObservation

    COMPONENTS:
      instrument_identifier
      timestamp
      reference_input
      indication
      environmental_conditions
      calibration_state
      uncertainty
  }

  ENTITY DriftRate {
    TYPE: RateQuantity

    SYMBOL:
      dX/dt

    DIMENSION:
      quantity_dimension_per_time
  }

  TERMINOLOGY_MODEL {
    terms:
      drift
      instrument_drift
      zero_drift
      offset_drift
      span_drift
      gain_drift
      sensitivity_drift
      baseline_drift
      ageing
      stability
      noise

    RULE:
      drift MUST be interpreted_as_time_dependent_change
      not_generic_measurement_variability
  }

  TIME_MODEL {
    reference_epoch:
      t_0

    current_time:
      t

    elapsed:
      delta_t =
        t-t_0

    RULE:
      time_scale_and_epoch SHOULD be preserved_when_drift_correction_is_material
  }

  GENERAL_DRIFT_MODEL {
    instrument_parameter:
      theta(t)

    drift:
      D_theta(t) =
        theta(t)-theta(t_0)

    RULE:
      reference_state_theta(t_0) MUST be identified
  }

  INDICATION_DRIFT_MODEL {
    fixed_reference_input:
      X_ref

    indication:
      Y(t)

    indication_drift:
      D_Y(t) =
        Y(t)-Y(t_0)

    RULE:
      reference_input_stability_and_uncertainty MUST be considered
  }

  ZERO_DRIFT_MODEL {
    reference:
      zero_or_defined_baseline_input

    offset:
      b(t)

    zero_drift:
      D_0(t) =
        b(t)-b(t_0)

    RULE:
      zero_drift_is_additive_response_change
  }

  OFFSET_DRIFT_MODEL {
    calibration:
      Y =
        a*X+b(t)

    RULE:
      offset_drift_can_shift_entire_calibration_curve
  }

  SPAN_DRIFT_MODEL {
    span_response:
      S_span(t) =
        Y_high(t)-Y_low(t)

    drift:
      D_span(t) =
        S_span(t)-S_span(t_0)

    RULE:
      span_drift_requires_at_least_two_reference_levels
  }

  GAIN_DRIFT_MODEL {
    gain:
      a(t)

    relative_gain_drift:
      D_g,r =
        [a(t)-a(t_0)]/a(t_0)
      WHEN a(t_0) != 0

    RULE:
      gain_drift_is_multiplicative_effect
  }

  SENSITIVITY_DRIFT_MODEL {
    sensitivity:
      S(t) =
        partial_Y/partial_X

    drift:
      D_S =
        S(t)-S(t_0)

    RULE:
      sensitivity_drift MAY be_range_dependent_for_nonlinear_instruments
  }

  LINEARITY_DRIFT_MODEL {
    calibration_curve:
      f(X,t)

    effect:
      shape_changes_with_time

    RULE:
      zero_and_span_checks_alone_may_not_detect_linearity_drift
  }

  RANGE_DEPENDENT_DRIFT_MODEL {
    drift:
      D(X,t)

    RULE:
      drift_model MAY require_multiple_reference_points_across_range
  }

  SHORT_TERM_DRIFT_MODEL {
    timescale:
      seconds_to_hours_or_declared_interval

    possible_causes:
      warmup
      thermal_equilibration
      short_term_component_instability
      battery_or_supply_change

    RULE:
      timescale MUST be declared
  }

  LONG_TERM_DRIFT_MODEL {
    timescale:
      days_months_years_or_declared_interval

    possible_causes:
      ageing
      contamination
      material relaxation
      component ageing
      radiation
      mechanical creep

    RULE:
      long_term_drift_supports_calibration_interval_decisions
  }

  WARMUP_DRIFT_MODEL {
    after_power_on:
      instrument_parameters_approach_stable_state

    possible:
      exponential_settling

    model:
      D(t) =
        A*exp(-t/tau)
      under_declared_context

    RULE:
      measurements_before_stabilisation MAY require_correction_or_quality_flag
  }

  THERMAL_DRIFT_MODEL {
    parameter:
      theta(T)

    first_order:
      theta(T) =
        theta_ref
        + alpha_T*(T-T_ref)

    RULE:
      temperature_change_is_influence_effect
      and_apparent_time_drift_must_be_separated_when_temperature_history_known
  }

  HUMIDITY_DRIFT_MODEL {
    mechanisms:
      moisture_absorption
      leakage
      dimensional_change
      chemical_change

    RULE:
      humidity_history MAY create_reversible_or_hysteretic_drift
  }

  PRESSURE_DRIFT_MODEL {
    sensor:
      response_may_change_with_ambient_pressure

    RULE:
      environmental_pressure_effect MUST be separated_from_intrinsic_time_drift_when_possible
  }

  SUPPLY_DRIFT_MODEL {
    power_supply:
      voltage_frequency_or_battery_state_changes

    effect:
      gain_offset_or_noise_change

    RULE:
      supply_monitoring_can_explain_apparent_drift
  }

  AGEING_MODEL {
    parameter:
      theta(age)

    possible:
      monotonic
      logarithmic
      exponential
      random_walk_like

    RULE:
      ageing_model SHOULD be_supported_by_history_or_physics
  }

  MECHANICAL_CREEP_MODEL {
    deformation:
      evolves_under_load_or_stress

    sensors:
      load_cells
      strain systems
      pressure elements

    RULE:
      creep_and_drift_semantics MAY overlap_but_loading_history_must_be_preserved
  }

  CONTAMINATION_MODEL {
    causes:
      deposits
      corrosion
      optical_fouling
      chemical_poisoning
      biological_growth

    effect:
      baseline_sensitivity_or_selectivity_change

    RULE:
      cleaning_event MAY reset_or_change_drift_state
  }

  RADIATION_DRIFT_MODEL {
    accumulated_dose:
      may_change_electronic_optical_or_sensor_response

    RULE:
      dose_history SHOULD be preserved_when_material
  }

  REVERSIBLE_DRIFT_MODEL {
    cause:
      influence_quantity_change

    response:
      returns_toward_previous_state_when_condition_restored

    RULE:
      reversible_environmental_effect != irreversible_ageing
  }

  IRREVERSIBLE_DRIFT_MODEL {
    cause:
      ageing_damage_contamination_or_permanent_change

    RULE:
      irreversible_drift_may_require_recalibration_adjustment_or_replacement
  }

  DETERMINISTIC_DRIFT_MODEL {
    drift:
      represented_by_predictable_function

    examples:
      linear
      polynomial
      exponential
      temperature_compensated

    RULE:
      deterministic_model_requires_residual_analysis
  }

  LINEAR_DRIFT_MODEL {
    parameter:
      theta(t) =
        theta_0+d*(t-t_0)

    drift_rate:
      d

    correction:
      theta_corrected =
        theta_observed-d*(t-t_0)
      under_declared_sign_and_model

    RULE:
      linear_model_validity_interval MUST be defined
  }

  POLYNOMIAL_DRIFT_MODEL {
    theta(t) =
      a_0+a_1*t+a_2*t^2+...+a_n*t^n

    RULE:
      high_order_extrapolation_is_unstable
  }

  EXPONENTIAL_DRIFT_MODEL {
    theta(t) =
      theta_inf
      + A*exp(-t/tau)

    possible:
      warmup
      relaxation
      ageing_process

    RULE:
      parameter_identifiability_and_validity MUST be checked
  }

  PIECEWISE_DRIFT_MODEL {
    segments:
      different_drift_models_between_events

    boundaries:
      calibration
      maintenance
      adjustment
      firmware_change
      relocation

    RULE:
      event_boundaries MUST be preserved
  }

  STOCHASTIC_DRIFT_MODEL {
    parameter:
      theta(t)

    possible:
      random_walk
      flicker
      autoregressive_process
      state_space_process

    RULE:
      stochastic_drift_requires_probabilistic_time_series_model
  }

  RANDOM_WALK_MODEL {
    theta_k =
      theta_(k-1)+w_k

    process_noise:
      w_k

    variance:
      grows_with_elapsed_steps_under_simple_model

    RULE:
      random_walk_drift_is_nonstationary
  }

  AR_MODEL {
    example:
      D_t =
        phi*D_(t-1)+epsilon_t

    RULE:
      autoregressive_model_requires_sampling_interval_and_stationarity_context
  }

  STATE_SPACE_MODEL {
    state:
      drift_parameter

    transition:
      theta_k =
        F*theta_(k-1)+w_k

    observation:
      y_k =
        H*theta_k+v_k

    RULE:
      process_and_measurement_noise_covariances MUST be preserved
  }

  KALMAN_MODEL {
    use:
      recursively_estimate_time_varying_drift_state

    REQUIRE:
      state_model
      process_noise
      measurement_noise
      initial_covariance

    RULE:
      filter_estimate_is_model_dependent
  }

  NOISE_DISTINCTION_MODEL {
    noise:
      short_term_stochastic_variation

    drift:
      slower_or_persistent_time_dependent_change

    RULE:
      frequency_or_timescale_boundary_is_context_dependent
  }

  REPEATABILITY_DISTINCTION_MODEL {
    repeatability:
      dispersion_under_repeatability_conditions

    drift:
      time_dependent_change_in_mean_or_parameter

    RULE:
      drift_can_inflate_repeatability_if_study_duration_is_long
  }

  HYSTERESIS_DISTINCTION_MODEL {
    hysteresis:
      response_depends_on_input_history_and_direction

    drift:
      response_changes_with_time

    RULE:
      hysteresis != drift
      though_both_can_coexist
  }

  MEASURAND_CHANGE_DISTINCTION_MODEL {
    observed_output_change:
      may_be_due_to_true_input_change_or_instrument_drift

    RULE:
      drift_inference_requires_stable_reference_or_independent_measurand_evidence
  }

  ERROR_DISTINCTION_MODEL {
    drift:
      source_of_time_dependent_systematic_or_stochastic_measurement_error

    RULE:
      drift != instantaneous_measurement_error
  }

  STABILITY_MODEL {
    stability:
      ability_to_maintain_metrological_characteristics_over_time

    relationship:
      greater_drift_generally_implies_lower_stability

    RULE:
      stability_metric_and_timescale MUST be defined
  }

  DRIFT_RATE_MODEL {
    finite_difference:
      d approximately_equals
        [theta(t_2)-theta(t_1)]/(t_2-t_1)

    instantaneous:
      dtheta/dt

    RULE:
      rate_unit MUST include_time_dimension
  }

  RELATIVE_DRIFT_MODEL {
    D_rel =
      [theta(t)-theta(t_0)]/abs(theta(t_0))
      WHEN theta(t_0) != 0

    RULE:
      relative_drift_is_dimensionless
  }

  PERCENT_DRIFT_MODEL {
    percent =
      100*D_rel

    RULE:
      percent_drift_requires_nonzero_reference_value
  }

  DRIFT_PER_TIME_MODEL {
    examples:
      microvolt_per_day
      ppm_per_year
      degree_per_hour

    RULE:
      unit_and_reference_quantity MUST be explicit
  }

  REFERENCE_CHECK_MODEL {
    stable_reference:
      X_ref

    repeated_indication:
      Y(t)

    purpose:
      estimate_instrument_drift

    RULE:
      reference_standard_uncertainty_and_drift MUST be included
  }

  CHECK_STANDARD_MODEL {
    independent_standard:
      monitored_over_time

    RULE:
      check_standard_must_be_more_stable_or_separately_characterised_to_identify_instrument_drift
  }

  CALIBRATION_HISTORY_MODEL {
    events:
      calibration_i

    fields:
      date
      offset
      gain
      linearity
      uncertainty
      environment

    RULE:
      historical_calibration_parameters SHOULD be retained_not_overwritten
  }

  AS_FOUND_MODEL {
    before_adjustment:
      calibration_state

    drift_evidence:
      difference_from_previous_as_left_state

    RULE:
      as_found_data_are_critical_for_drift_analysis
  }

  AS_LEFT_MODEL {
    after_calibration_or_adjustment:
      reference_state

    RULE:
      as_left_state_can_define_new_drift_epoch
  }

  CALIBRATION_INTERVAL_MODEL {
    interval:
      time_between_calibrations

    optimisation:
      balance_drift_risk
      required_uncertainty
      cost
      instrument_stability

    RULE:
      interval_should_be_updated_from_drift_history_when_evidence_supports
  }

  INTERMEDIATE_CHECK_MODEL {
    between_calibrations:
      periodic_reference_measurements

    purpose:
      detect_unexpected_drift

    RULE:
      check_frequency SHOULD match_drift_risk_and_measurement_criticality
  }

  CHANGE_POINT_MODEL {
    time_series:
      detect_abrupt_shift

    possible_causes:
      damage
      adjustment
      component_failure
      relocation
      contamination

    RULE:
      abrupt_change_should_not_be_forced_into_smooth_drift_model
  }

  CONTROL_CHART_MODEL {
    reference_measurements:
      monitored_over_time

    possible:
      Shewhart
      EWMA
      CUSUM

    RULE:
      control_limits_are_monitoring_thresholds_not_measurement_uncertainty
  }

  EWMA_MODEL {
    z_t =
      lambda*x_t
      +(1-lambda)*z_(t-1)

    RULE:
      smoothing_parameter MUST be preserved
  }

  CUSUM_MODEL {
    cumulative_deviation:
      detects_small_persistent_shifts

    RULE:
      reference_value_and_decision_interval MUST be defined
  }

  ALLAN_VARIANCE_MODEL {
    purpose:
      characterise_noise_and_drift_over_averaging_times

    useful_for:
      clocks
      inertial_sensors
      frequency_standards
      precision_instruments

    RULE:
      Allan_deviation_and_classical_standard_deviation_are_distinct
  }

  TREND_ESTIMATION_MODEL {
    data:
      theta_i,t_i

    methods:
      least_squares
      robust_regression
      Bayesian
      state_space

    RULE:
      uncertainty_and_autocorrelation MUST be considered
  }

  ROBUST_DRIFT_MODEL {
    methods:
      Theil_Sen
      robust_regression
      median_slope

    RULE:
      robust_method_definition MUST be preserved
  }

  OUTLIER_MODEL {
    unusual_reference_check:
      may_be_gross_error_or_real_change

    RULE:
      outlier_removal_requires_documented_criterion
      and_original_record_must_be_preserved
  }

  AUTOCORRELATION_MODEL {
    residuals:
      may_be_time_correlated

    RULE:
      trend_uncertainty_must_account_for_autocorrelation_when_material
  }

  INTERPOLATION_MODEL {
    between_calibration_points:
      estimate_drift_correction

    RULE:
      interpolation_uncertainty MUST be included
  }

  EXTRAPOLATION_MODEL {
    after_last_calibration:
      predict_future_drift

    RULE:
      extrapolation_uncertainty_increases_with_horizon_and_model_uncertainty
  }

  CORRECTION_MODEL {
    observed:
      X_obs

    estimated_drift:
      D_hat(t)

    corrected:
      X_corr =
        X_obs-D_hat(t)
      under_declared_sign_model

    RULE:
      correction_uncertainty MUST be propagated
  }

  UNCERTAINTY_MODEL {
    components:
      drift_model_parameter_uncertainty
      residual_drift
      reference_standard
      interpolation
      extrapolation
      environmental_separation
      time_uncertainty
      change_point_uncertainty

    RULE:
      drift_correction_does_not_eliminate_drift_uncertainty
  }

  DRIFT_UNCERTAINTY_GROWTH_MODEL {
    elapsed_time:
      delta_t

    uncertainty:
      may_increase_with_delta_t

    model:
      depends_on_deterministic_or_stochastic_drift_process

    RULE:
      growth_model MUST be justified_by_history_or_physics
  }

  WORST_CASE_MODEL {
    specified_drift_rate_limit:
      abs(d) <= d_max

    bound:
      abs(D) <= d_max*delta_t

    RULE:
      worst_case_bound != standard_uncertainty
  }

  MANUFACTURER_SPECIFICATION_MODEL {
    drift_spec:
      may_be_given_per_time_temperature_or_usage

    RULE:
      specification_conditions_and_statistical_basis MUST be interpreted_before_uncertainty_use
  }

  MULTIPARAMETER_DRIFT_MODEL {
    calibration_parameters:
      theta =
        [offset,gain,nonlinearity,...]

    covariance:
      Sigma_theta(t)

    RULE:
      parameter_correlations SHOULD be preserved
  }

  MULTICHANNEL_DRIFT_MODEL {
    channels:
      may_share_reference_power_supply_ADC_or_environment

    RULE:
      common_drift_sources SHOULD generate_covariance
  }

  MAINTENANCE_MODEL {
    events:
      cleaning
      repair
      adjustment
      component_replacement
      firmware_update

    RULE:
      maintenance_event MAY reset_or_change_drift_process
  }

  DAMAGE_MODEL {
    event:
      overload
      shock
      contamination
      thermal_excursion

    RULE:
      suspected_damage SHOULD trigger_change_point_review_and_recalibration
  }

  FIRMWARE_MODEL {
    digital_instrument:
      correction_or_calibration_algorithm_may_change

    RULE:
      firmware_change MUST be distinguished_from_physical_sensor_drift
  }

  SOFTWARE_MODEL {
    processing:
      may_apply_time_dependent_correction

    RULE:
      software_version_and_drift_model_version MUST be preserved
  }

  METADATA_MODEL {
    fields:
      instrument_identifier
      drift_parameter
      reference_epoch
      timestamps
      reference_input
      indications
      environmental_conditions
      calibration_identifiers
      as_found_state
      as_left_state
      drift_model
      drift_rate
      model_parameters
      covariance
      correction
      uncertainty
      maintenance_events
      quality_flags
      provenance

    RULE:
      drift_metadata MUST support_reconstruction_of_time_dependent_state
  }

  RELATIONSHIPS {
    InstrumentDrift -> QUALIFIES -> MeasuringInstrument
    InstrumentDrift -> CHANGES -> CalibrationRelation
    ZeroDrift -> CHANGES -> Offset
    GainDrift -> CHANGES -> Sensitivity
    DriftObservation -> REFERENCES -> CalibrationStandard
    CalibrationHistory -> SUPPORTS -> DriftModel
    DriftModel -> PRODUCES -> DriftCorrection
    DriftCorrection -> CONTRIBUTES_TO -> CorrectedMeasurement
    DriftUncertainty -> CONTRIBUTES_TO -> MeasurementUncertainty
    MaintenanceEvent -> MAY_CHANGE -> DriftState
    EnvironmentalInfluence -> MAY_MIMIC_OR_CAUSE -> InstrumentDrift
  }

  SEMANTIC_EQUIVALENCE {
    "instrument drift" ~= time_dependent_change_in_instrument_metrological_characteristic
    "zero drift" ~= time_dependent_offset_change WHEN zero_reference_context
    "gain drift" ~= time_dependent_scale_factor_change

    drift != random_noise
    drift != hysteresis
    drift != repeatability
    drift != resolution
    drift != instantaneous_measurement_error
    drift != true_measurand_change
    drift_correction != drift_uncertainty
    stability != drift
  }

  CONSTRAINTS {
    instrument_identity_must_be_defined = true
    drift_parameter_must_be_defined = true
    reference_epoch_must_be_defined = true
    time_coordinates_must_be_preserved = true
    reference_input_or_independent_measurand_evidence_required_for_drift_inference = true
    environmental_influences_should_be_separated_when_material = true
    calibration_history_should_not_be_overwritten = true
    drift_correction_uncertainty_must_be_preserved = true
    abrupt_changes_should_not_be_forced_into_smooth_model = true
    drift_and_noise_are_not_semantically_equivalent = true
    historical_measurements_must_use_time_valid_drift_state = true
  }

  MEASUREMENT_MODEL {
    RECORD:
      instrument_identifier
      parameter_identifier
      reference_epoch
      observation_timestamp
      reference_input
      reference_input_uncertainty
      indication
      indication_unit
      offset
      gain
      sensitivity
      environmental_conditions
      calibration_identifier
      as_found_state
      as_left_state
      drift_value
      drift_rate
      relative_drift
      drift_model
      model_parameters
      parameter_covariance
      residuals
      correction
      correction_uncertainty
      interpolation_or_extrapolation_status
      maintenance_events
      firmware_version
      quality_flags
      provenance

    RULE:
      drift_estimate MUST remain_linked_to_reference_data_time_model_and_instrument_state
  }

  REASONING_RULES {
    IF parameter_values_at_two_times_known
      AND t_2 != t_1
      THEN finite_drift_rate =
        (theta_2-theta_1)/(t_2-t_1)

    IF linear_drift_rate_and_reference_epoch_known
      THEN estimated_drift =
        drift_rate*(t-reference_epoch)

    IF estimated_drift_known
      THEN corrected_measurement =
        observed_measurement-estimated_drift
      under_declared_sign_model

    IF offset_changes_while_gain_stable
      THEN classify_as_offset_or_zero_drift

    IF span_or_sensitivity_changes
      THEN classify_as_gain_or_sensitivity_drift

    IF environmental_quantity_changes
      AND known_cross_sensitivity_explains_observed_shift
      THEN classify_effect_as_environmental_influence
      rather_than_intrinsic_drift_when_supported

    IF reference_standard_itself_has_drift
      THEN separate_reference_and_instrument_components
      using_independent_traceability_or_model

    IF abrupt_change_detected
      THEN create_new_drift_segment
      and_review_damage_adjustment_or_maintenance_events

    IF extrapolating_beyond_last_calibration
      THEN increase_uncertainty_according_to_declared_drift_model

    IF common_drift_source_shared_across_channels
      THEN preserve_cross_channel_covariance

    IF maintenance_adjustment_or_firmware_change_occurs
      THEN create_new_instrument_state_epoch
      and_reassess_drift_model
  }

  VALIDATION {
    CHECK instrument_identity
    CHECK drift_parameter
    CHECK reference_epoch
    CHECK timestamps
    CHECK reference_input_and_uncertainty
    CHECK environmental_conditions
    CHECK zero_offset_gain_and_sensitivity
    CHECK drift_rate_units
    CHECK deterministic_vs_stochastic_model
    CHECK residuals_and_autocorrelation
    CHECK warmup_and_short_term_drift
    CHECK long_term_ageing
    CHECK calibration_history
    CHECK as_found_and_as_left_states
    CHECK change_points
    CHECK interpolation_vs_extrapolation
    CHECK correction_sign
    CHECK correction_uncertainty
    CHECK common_channel_covariance
    CHECK maintenance_damage_and_firmware_events
    CHECK drift_vs_noise
    CHECK drift_vs_measurand_change
    CHECK provenance
  }

  CONFIDENCE {
    definition_confidence: 1.00
    zero_gain_drift_semantics_confidence: 1.00
    drift_noise_distinction_confidence: 1.00
    calibration_history_confidence: 1.00
    deterministic_drift_model_confidence: 0.99
    stochastic_drift_model_confidence: 0.98
    environmental_separation_confidence: 0.98
    uncertainty_integration_confidence: 0.99

    RULE:
      confidence decreases when reference input, timestamps, environment,
      calibration history, drift model, change events,
      correction uncertainty or provenance is missing or ambiguous
  }

  UPDATE_MODEL {
    ON new_reference_check:
      identify_instrument_and_parameter
      append_timestamp_reference_and_indication
      attach_environmental_conditions
      compute_difference_from_reference_state
      update_drift_model
      update_uncertainty
      preserve_provenance

    ON new_calibration:
      preserve_previous_calibration
      record_as_found_state
      record_as_left_state
      establish_new_drift_epoch_when_appropriate
      update_drift_history_and_interval_model

    ON environmental_revision:
      preserve_raw_drift_observations
      update_temperature_humidity_pressure_or_supply_compensation
      recompute_intrinsic_drift_estimate
      update_uncertainty

    ON change_point_detection:
      preserve_previous_segment
      create_new_segment
      link_damage_maintenance_adjustment_or_configuration_event
      refit_drift_models

    ON maintenance_or_adjustment:
      preserve_pre_event_state
      record_event
      start_new_instrument_state
      require_reference_check_or_recalibration
      reassess_drift_model

    ON drift_model_revision:
      preserve_previous_model
      update_linear_polynomial_exponential_or_stochastic_form
      recompute_corrections_and_uncertainties
      record_model_selection_reason

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_entity: InstrumentDrift
    canonical_role: TimeDependentMetrologicalCharacteristic

    interpretation_order:
      identify_instrument
      identify_drifting_parameter
      identify_reference_epoch
      identify_reference_input_or_stable_measurand
      identify_time_series_of_indications_or_parameters
      identify_environmental_influences
      identify_zero_gain_span_or_linearity_drift
      identify_short_or_long_term_timescale
      identify_deterministic_or_stochastic_model
      identify_calibration_as_found_and_as_left_history
      identify_change_points_and_events
      identify_drift_rate_and_correction
      identify_interpolation_or_extrapolation
      identify_uncertainty_and_covariance
      identify_provenance
      validate_drift_semantics
      infer_time_dependent_instrument_state

    ambiguity_controls:
      distinguish_drift_from_random_noise
      distinguish_drift_from_hysteresis
      distinguish_drift_from_repeatability
      distinguish_drift_from_resolution
      distinguish_drift_from_instantaneous_measurement_error
      distinguish_drift_from_true_measurand_change
      distinguish_environmental_influence_from_intrinsic_time_drift
      distinguish_drift_correction_from_drift_uncertainty
      distinguish_stability_from_drift
      preserve_instrument_parameter_time_reference_environment_calibration_event_model_and_provenance_context
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_units_instrumentation_and_instrument_drift_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Instrumentation
      -> Instrument Drift Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_entity
      ontology_path
      terminology_model
      time_model
      general_drift_model
      indication_drift_model
      zero_drift_model
      offset_drift_model
      span_drift_model
      gain_drift_model
      sensitivity_drift_model
      linearity_drift_model
      range_dependent_drift_model
      short_term_drift_model
      long_term_drift_model
      warmup_drift_model
      thermal_drift_model
      humidity_drift_model
      pressure_drift_model
      supply_drift_model
      ageing_model
      mechanical_creep_model
      contamination_model
      radiation_drift_model
      reversible_drift_model
      irreversible_drift_model
      deterministic_drift_model
      linear_drift_model
      polynomial_drift_model
      exponential_drift_model
      piecewise_drift_model
      stochastic_drift_model
      random_walk_model
      AR_model
      state_space_model
      Kalman_model
      noise_distinction_model
      repeatability_distinction_model
      hysteresis_distinction_model
      measurand_change_distinction_model
      error_distinction_model
      stability_model
      drift_rate_model
      relative_drift_model
      percent_drift_model
      drift_per_time_model
      reference_check_model
      check_standard_model
      calibration_history_model
      as_found_model
      as_left_model
      calibration_interval_model
      intermediate_check_model
      change_point_model
      control_chart_model
      EWMA_model
      CUSUM_model
      Allan_variance_model
      trend_estimation_model
      robust_drift_model
      outlier_model
      autocorrelation_model
      interpolation_model
      extrapolation_model
      correction_model
      uncertainty_model
      drift_uncertainty_growth_model
      worst_case_model
      manufacturer_specification_model
      multiparameter_drift_model
      multichannel_drift_model
      maintenance_model
      damage_model
      firmware_model
      software_model
      metadata_model
      relationships
      constraints
      measurement_model
      reasoning_rules
      confidence_model
      update_model

    PURPOSE:
      deterministic_semantic_integrity_identifier

    RECOMPUTE_WHEN:
      ontology_definition_changes
      drift_parameter_or_reference_epoch_changes
      zero_gain_span_or_linearity_drift_model_changes
      environmental_or_ageing_model_changes
      deterministic_or_stochastic_drift_model_changes
      calibration_history_or_reference_check_changes
      change_point_or_maintenance_event_changes
      correction_interpolation_or_extrapolation_changes
      covariance_or_uncertainty_model_changes
      measurement_record_changes
      constraint_model_changes
      reasoning_rule_changes
  }

}

END FLOW
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ