Skip to main content

Data Acquisition Ontology

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

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

FLOW DataAcquisitionOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Instrumentation
    -> Data Acquisition Ontology

  PURPOSE:
    Represent data acquisition as the structured process by which physical or derived signals are sensed, conditioned, sampled, converted, timestamped, transferred, processed, stored and associated with the metadata required to form usable measurement data. The ontology models DAQ systems, channels, sensors, transducers, analogue front ends, multiplexers, sample-and-hold circuits, ADCs, clocks, triggering, synchronisation, sampling theory, aliasing, quantisation, resolution, dynamic range, noise, filtering, buffering, data integrity, calibration, scaling, uncertainty, provenance, configuration versioning, diagnostics, distributed acquisition and machine-consumable reasoning across scientific and engineering measurement systems.

  ENTITY DataAcquisition {
    TYPE: MeasurementDataProcess

    DEFINITION:
      process_of_collecting_signals_or_measurement_information
      from_sensors_instruments_or_other_sources
      and_converting_recording_or_transmitting_them
      as_structured_measurement_data

    PROPERTIES:
      has_sources
      has_channels
      has_sampling
      has_timing
      may_have_analogue_conditioning
      may_have_digitisation
      has_configuration
      has_data_format
      has_metadata
      may_have_calibration
      contributes_to_uncertainty
      has_provenance
  }

  ENTITY DataAcquisitionSystem {
    TYPE: MeasuringSystemSubsystem

    COMPONENTS:
      input_channels
      signal_conditioning
      multiplexer
      sample_and_hold
      ADC
      clock
      trigger
      processor
      buffer
      communication
      storage
      software
  }

  ENTITY AcquisitionChannel {
    TYPE: MeasurementSignalPath

    COMPONENTS:
      channel_identifier
      source_identifier
      input_type
      range
      coupling
      gain
      filter
      sampling_configuration
      calibration
      unit
  }

  ENTITY Sample {
    TYPE: TimeAssociatedSignalObservation

    COMPONENTS:
      value
      raw_code_or_signal
      timestamp
      channel_identifier
      quality_flags
  }

  ACQUISITION_CHAIN_MODEL {
    flow:
      measurand
      -> sensor
      -> transducer
      -> signal_conditioning
      -> channel
      -> sampling
      -> ADC_or_counter
      -> timestamp
      -> buffer
      -> processing
      -> storage_or_transmission

    RULE:
      every_stage_MAY alter_signal_delay_noise_scale_resolution_or_uncertainty
  }

  SOURCE_MODEL {
    possible_sources:
      sensor
      measuring_instrument
      transducer
      voltage_source
      current_source
      frequency_source
      digital_bus
      event_detector
      image_sensor

    RULE:
      source_identity MUST be linked_to_channel
  }

  CHANNEL_MODEL {
    channel:
      independent_or_shared_signal_path

    metadata:
      identifier
      source
      terminal_configuration
      input_range
      gain
      coupling
      filter
      calibration
      sampling_rate

    RULE:
      channel_configuration MUST be versioned
  }

  ANALOGUE_INPUT_MODEL {
    input:
      voltage_or_current_or_other_analogue_signal

    requirements:
      range
      impedance
      coupling
      bandwidth
      common_mode_limits

    RULE:
      analogue_input_characteristics MUST be compatible_with_source
  }

  DIGITAL_INPUT_MODEL {
    possible:
      logic_state
      counter
      pulse
      serial_data
      encoded_sensor_value

    RULE:
      digital_input_protocol_and_semantics MUST be preserved
  }

  COUNTER_MODEL {
    measurements:
      event_count
      frequency
      period
      pulse_width
      duty_cycle

    RULE:
      gate_time_and_clock_reference affect_uncertainty
  }

  SIGNAL_CONDITIONING_MODEL {
    possible:
      amplification
      attenuation
      isolation
      filtering
      excitation
      bridge_completion
      linearisation
      impedance_matching
      level_shift

    RULE:
      conditioning_parameters MUST remain_linked_to_data
  }

  GAIN_MODEL {
    analogue_gain:
      G

    output:
      y =
        G*x

    uncertainty:
      gain_error_and_drift

    RULE:
      gain_setting_affects_range_noise_and_resolution
  }

  OFFSET_MODEL {
    output:
      y =
        G*x+b

    RULE:
      offset_correction_and_uncertainty SHOULD be preserved
  }

  INPUT_RANGE_MODEL {
    selected_range:
      [x_min,x_max]

    RULE:
      range_should_maximise_useful_resolution_without_overload
  }

  OVERLOAD_MODEL {
    input_exceeds_range:
      saturation_or_clipping

    RULE:
      overloaded_samples MUST be_flagged
  }

  COUPLING_MODEL {
    possible:
      DC
      AC
      differential
      single_ended
      pseudo_differential

    RULE:
      coupling_mode_changes_signal_semantics_and_frequency_response
  }

  DIFFERENTIAL_INPUT_MODEL {
    measurement:
      V_diff =
        V_plus-V_minus

    common_mode:
      V_cm

    RULE:
      common_mode_range_and_CMRR MUST be respected
  }

  CMRR_MODEL {
    common_mode_rejection_ratio:
      differential_gain/common_mode_gain

    RULE:
      CMRR_is_frequency_dependent
  }

  INPUT_IMPEDANCE_MODEL {
    DAQ_input:
      Z_in

    source:
      Z_source

    loading:
      measured_signal MAY differ_due_to_voltage_or_current_division

    RULE:
      loading_effect MUST be considered_when_impedances_are_comparable
  }

  ISOLATION_MODEL {
    purpose:
      break_ground_loops
      protect_equipment
      permit_high_common_mode

    RULE:
      isolation_stage_can_add_gain_offset_noise_and_delay
  }

  FILTER_MODEL {
    possible:
      anti_alias
      low_pass
      high_pass
      band_pass
      notch

    parameters:
      cutoff
      order
      response_type
      phase
      delay

    RULE:
      filter_transfer_function MUST be preserved
  }

  ANTI_ALIAS_MODEL {
    purpose:
      attenuate_signal_components_above_useful_Nyquist_band_before_sampling

    RULE:
      anti_alias_filter_requires_transition_band_between_signal_band_and_Nyquist_frequency
  }

  SAMPLING_MODEL {
    continuous:
      x(t)

    discrete:
      x[n] =
        x(n*T_s)

    sampling_period:
      T_s

    sampling_frequency:
      f_s =
        1/T_s

    RULE:
      sample_rate MUST be recorded
  }

  NYQUIST_MODEL {
    ideal_bandlimited_signal:
      f_s > 2*f_max

    RULE:
      equality_at_twice_highest_frequency_is_not_robust_practical_design_rule
  }

  ALIASING_MODEL {
    sampled_frequency:
      frequencies_separated_by_integer_multiples_of_f_s_can_be_indistinguishable

    RULE:
      aliased_data_cannot_generally_be_recovered_without_prior_information
  }

  SAMPLE_HOLD_MODEL {
    sample:
      acquired_over_finite_aperture

    effects:
      aperture_time
      droop
      hold_step
      acquisition_time

    RULE:
      aperture_effects_can_limit_high_frequency_accuracy
  }

  APERTURE_JITTER_MODEL {
    timing_jitter:
      sigma_t

    sinusoidal_input_frequency:
      f

    approximate_jitter_limited_SNR:
      SNR_jitter_dB approximately_equals
        -20*log10(2*pi*f*sigma_t)

    RULE:
      timing_jitter_is_critical_for_high_frequency_inputs
  }

  ADC_MODEL {
    input:
      analogue_signal

    output:
      digital_code

    characteristics:
      bit_depth
      full_scale
      quantisation
      offset_error
      gain_error
      INL
      DNL
      noise
      ENOB
      sample_rate

    RULE:
      ADC_characteristics_are_part_of_measurement_chain
  }

  BIT_DEPTH_MODEL {
    bits:
      N

    nominal_codes:
      2^N

    RULE:
      bit_depth != effective_resolution
  }

  QUANTISATION_MODEL {
    ideal_step:
      q =
        full_scale_span/2^N
      under_declared_code_convention

    round_to_nearest_error:
      [-q/2,+q/2]

    common_standard_uncertainty:
      q/sqrt(12)
      under_uniform_phase_model

    RULE:
      quantisation_step_and_uncertainty_are_distinct
  }

  DNL_MODEL {
    differential_nonlinearity:
      deviation_of_code_width_from_ideal_LSB

    RULE:
      severe_DNL_can_create_missing_codes
  }

  INL_MODEL {
    integral_nonlinearity:
      deviation_of_ADC_transfer_from_reference_line

    RULE:
      INL_definition_and_endpoint_or_best_fit_reference MUST be preserved
  }

  ENOB_MODEL {
    effective_number_of_bits:
      performance_metric_derived_from_noise_and_distortion

    RULE:
      ENOB_test_frequency_bandwidth_and_method MUST be declared
  }

  DYNAMIC_RANGE_MODEL {
    ratio:
      maximum_usable_signal/minimum_usable_signal

    possible_reporting:
      ratio
      dB

    RULE:
      dynamic_range_definition MUST specify_noise_or_minimum_signal_criterion
  }

  NOISE_MODEL {
    sources:
      sensor
      amplifier
      resistor
      ADC
      clock
      power_supply
      electromagnetic
      grounding
      quantisation

    RULE:
      total_noise_depends_on_bandwidth_and_gain_distribution
  }

  NOISE_DENSITY_MODEL {
    amplitude_spectral_density:
      unit/sqrt(Hz)

    integrated_noise:
      depends_on_filter_equivalent_noise_bandwidth

    RULE:
      noise_density != RMS_noise_without_bandwidth
  }

  SNR_MODEL {
    signal_to_noise_ratio:
      declared_signal_metric/declared_noise_metric

    RULE:
      SNR_definition_and_bandwidth MUST be preserved
  }

  SINAD_MODEL {
    signal_to_noise_and_distortion:
      signal_power/(noise_plus_distortion_power)

    RULE:
      SINAD != SNR
  }

  THD_MODEL {
    total_harmonic_distortion:
      ratio_of_harmonic_content_to_fundamental_under_declared_definition

    RULE:
      harmonic_count_and_bandwidth SHOULD be specified
  }

  CLOCK_MODEL {
    sampling_clock:
      frequency_reference

    characteristics:
      frequency_accuracy
      drift
      phase_noise
      jitter

    RULE:
      clock_quality affects_frequency_time_and_phase_measurements
  }

  TIMESTAMP_MODEL {
    timestamp:
      associated_time_coordinate

    REQUIRE:
      time_scale
      clock_source
      resolution
      uncertainty

    RULE:
      timestamp_resolution != timestamp_accuracy
  }

  TIME_SCALE_MODEL {
    possible:
      UTC
      TAI
      GPS_time
      PTP_domain
      local_monotonic_clock

    RULE:
      time_scale MUST be identified_for_cross_system_comparison
  }

  SYNCHRONISATION_MODEL {
    possible:
      shared_clock
      shared_trigger
      hardware_sync
      GPS
      PTP
      NTP

    RULE:
      synchronisation_accuracy_and_latency MUST be characterised
  }

  TRIGGER_MODEL {
    possible:
      analogue_level
      digital_edge
      software
      external_clock
      event
      pretrigger

    parameters:
      source
      level
      slope
      hysteresis
      delay

    RULE:
      trigger_configuration MUST be recorded_for_event_aligned_data
  }

  PRETRIGGER_MODEL {
    circular_buffer:
      retains_samples_before_trigger

    RULE:
      pretrigger_depth_and_timestamp_alignment MUST be preserved
  }

  MULTIPLEXING_MODEL {
    channels:
      sequentially_sampled

    channel_time_skew:
      delta_t_between_channels

    RULE:
      multiplexed_channels_are_not_simultaneous
  }

  SIMULTANEOUS_SAMPLING_MODEL {
    channels:
      independent_sample_hold_or_ADC

    RULE:
      residual_clock_and_path_skew MAY remain
  }

  CHANNEL_SKEW_MODEL {
    phase_error:
      approximately
        2*pi*f*delta_t
      for_sinusoidal_signal

    RULE:
      skew_correction_requires_frequency_or_time_model
  }

  BUFFER_MODEL {
    acquisition_buffer:
      temporary_storage

    risks:
      overflow
      underflow
      latency

    RULE:
      buffer_overrun MUST create_data_quality_flag
  }

  STREAMING_MODEL {
    continuous_data:
      transmitted_or_written_in_blocks

    requirements:
      sustained_throughput
      sequence_numbers
      timestamps

    RULE:
      dropped_blocks MUST be_detectable
  }

  BLOCK_ACQUISITION_MODEL {
    finite_record:
      N_samples

    duration:
      T =
        N/f_s
      under_uniform_sampling

    RULE:
      exact_duration_depends_on_endpoint_convention
  }

  RECORD_LENGTH_MODEL {
    sample_count:
      N

    frequency_bin_spacing:
      approximately
        f_s/N
      for_basic_DFT

    RULE:
      window_and_estimator_affect_effective_spectral_resolution
  }

  DECIMATION_MODEL {
    reduce_sample_rate:
      by_factor_M

    REQUIRE:
      anti_alias_filter_before_or_with_decimation

    RULE:
      decimation_without_filtering_can_alias
  }

  OVERSAMPLING_MODEL {
    sample_rate:
      greater_than_minimum_required

    possible_benefits:
      relaxed_anti_alias_filter
      noise_shaping_context
      averaging

    RULE:
      oversampling_does_not_remove_systematic_ADC_errors
  }

  AVERAGING_MODEL {
    independent_zero_mean_noise:
      average_of_N_samples

    standard_deviation:
      may_reduce_as_1/sqrt(N)

    RULE:
      correlated_noise_and_drift_break_simple_scaling
  }

  RESAMPLING_MODEL {
    process:
      convert_data_to_new_time_grid

    REQUIRE:
      interpolation_filter
      original_timestamps

    RULE:
      resampling_does_not_create_new_physical_information
  }

  WINDOWING_MODEL {
    spectral_analysis:
      apply_window_function

    effects:
      leakage
      main_lobe_width
      amplitude_correction
      noise_bandwidth

    RULE:
      window_type_and_normalisation MUST be preserved
  }

  FFT_MODEL {
    input:
      uniformly_sampled_record

    output:
      frequency_domain_representation

    RULE:
      FFT_scaling_window_and_units MUST be defined
  }

  COUNTER_FREQUENCY_MODEL {
    frequency:
      count_cycles_over_gate_time
      or_measure_period

    uncertainty:
      reference_clock
      trigger
      quantisation
      signal_noise

    RULE:
      measurement_method MUST be identified
  }

  EVENT_ACQUISITION_MODEL {
    events:
      timestamped_occurrences

    attributes:
      event_type
      channel
      timestamp
      dead_time

    RULE:
      event_data_semantics_differ_from_uniform_sample_stream
  }

  DEAD_TIME_MODEL {
    acquisition:
      periods_when_system_cannot_record_new_event_or_sample

    RULE:
      dead_time MUST be quantified_for_counting_statistics
  }

  DATA_FORMAT_MODEL {
    raw:
      integer_codes
      packed_bits
      floating_values

    engineering:
      calibrated_quantity_values

    metadata:
      units
      scale
      offset
      endianness
      encoding

    RULE:
      raw_encoding MUST be sufficient_for_reconstruction
  }

  SCALING_MODEL {
    raw_code:
      C

    engineering_value:
      X =
        a*C+b
      or_calibration_function

    RULE:
      scaling_coefficients_and_units MUST be versioned
  }

  CALIBRATION_MODEL {
    channel:
      has_calibration_relation

    possible:
      offset
      gain
      polynomial
      lookup_table
      matrix

    RULE:
      calibration_state MUST correspond_to_acquisition_time
  }

  MULTICHANNEL_CALIBRATION_MODEL {
    vector:
      X =
        A*Y+b

    RULE:
      cross_channel_calibration_and_covariance MUST be preserved
  }

  UNCERTAINTY_MODEL {
    components:
      source_sensor
      signal_conditioning
      gain
      offset
      filter
      ADC
      quantisation
      clock
      timing
      calibration
      environmental
      processing

    RULE:
      DAQ_uncertainty_contributions MUST propagate_to_measurement_result
  }

  DATA_INTEGRITY_MODEL {
    checks:
      checksum
      CRC
      sequence_number
      file_hash
      packet_count

    RULE:
      integrity_failure MUST be flagged
  }

  PACKET_LOSS_MODEL {
    networked_DAQ:
      missing_packets

    detection:
      sequence_numbers_or_timestamps

    RULE:
      missing_data MUST not_be_silently_interpolated_without_provenance
  }

  LATENCY_MODEL {
    acquisition_latency:
      delay_from_physical_event_to_data_availability

    RULE:
      latency != timestamp_error
  }

  DISTRIBUTED_DAQ_MODEL {
    nodes:
      multiple_acquisition_devices

    requirements:
      clock_sync
      common_metadata
      network_integrity
      coordinate_or_location_context

    RULE:
      distributed_data_requires_cross_node_time_alignment
  }

  WIRELESS_DAQ_MODEL {
    concerns:
      packet_loss
      variable_latency
      clock_drift
      power
      interference

    RULE:
      wireless_transport_characteristics MUST be separated_from_sensor_measurement_semantics
  }

  EDGE_PROCESSING_MODEL {
    processing_at_DAQ_node:
      filtering
      compression
      feature_extraction
      event_detection

    RULE:
      raw_data_loss_due_to_edge_processing MUST be documented
  }

  COMPRESSION_MODEL {
    lossless:
      preserves_exact_data

    lossy:
      discards_information

    RULE:
      lossy_compression_parameters MUST be preserved_and_reflected_in_measurement_quality
  }

  STORAGE_MODEL {
    fields:
      file_format
      path_or_object_id
      start_time
      end_time
      channels
      sample_count
      checksum

    RULE:
      stored_data MUST remain_linked_to_configuration_and_metadata
  }

  CONFIGURATION_MODEL {
    parameters:
      channel_map
      ranges
      gains
      coupling
      filters
      sample_rates
      trigger
      clock
      calibration
      processing

    RULE:
      immutable_configuration_snapshot SHOULD accompany_each_acquisition_run
  }

  RUN_MODEL {
    acquisition_run:
      bounded_measurement_session

    fields:
      run_identifier
      start_time
      stop_time
      configuration_version
      operator
      purpose
      quality_state

    RULE:
      samples      MUST be_linked_to_run
  }

  METADATA_MODEL {
    fields:
      run_identifier
      channel_identifier
      source_identifier
      sensor_identifier
      instrument_identifier
      quantity_kind
      unit
      calibration_identifier
      sample_rate
      time_scale
      clock_source
      range
      gain
      filter
      trigger
      location_when_relevant
      operator
      environment
      firmware
      software
      processing_history

    RULE:
      metadata MUST permit_semantic_reconstruction_of_data
  }

  PROVENANCE_MODEL {
    chain:
      physical_source
      -> sensor
      -> channel
      -> acquisition_configuration
      -> raw_data
      -> processing
      -> engineering_data
      -> analysis

    RULE:
      every_transformation SHOULD be traceable
  }

  QUALITY_FLAG_MODEL {
    possible:
      valid
      overrange
      underrange
      saturated
      clipped
      missing
      interpolated
      calibration_invalid
      clock_unsynchronised
      buffer_overrun
      packet_loss
      sensor_fault

    RULE:
      quality_flags MUST remain_sample_or_block_associated
  }

  DIAGNOSTIC_MODEL {
    checks:
      channel_open
      channel_short
      overvoltage
      ADC_fault
      clock_fault
      sync_loss
      buffer_status
      storage_status

    RULE:
      diagnostic_events MUST be timestamped
  }

  SECURITY_MODEL {
    concerns:
      configuration_access
      data_integrity
      authentication
      firmware
      network_transport

    RULE:
      cybersecurity_integrity_supports_data_trust_but_is_distinct_from_metrological_validity
  }

  RELATIONSHIPS {
    DataAcquisitionSystem -> CONTAINS -> AcquisitionChannel
    AcquisitionChannel -> RECEIVES_FROM -> SensorOrInstrument
    SignalConditioning -> PROCESSES -> InputSignal
    Multiplexer -> SELECTS -> AcquisitionChannel
    ADC -> CONVERTS -> AnalogueSignalToDigitalCode
    SamplingClock -> DEFINES -> SampleTiming
    Trigger -> INITIATES_OR_ALIGNS -> Acquisition
    Calibration -> MAPS -> RawCodeToEngineeringQuantity
    Configuration -> QUALIFIES -> AcquisitionRun
    Sample -> BELONGS_TO -> AcquisitionRun
    Metadata -> QUALIFIES -> MeasurementData
    DAQCharacteristics -> CONTRIBUTE_TO -> MeasurementUncertainty
  }

  SEMANTIC_EQUIVALENCE {
    "DAQ" ~= data_acquisition_system
    "data acquisition" ~= measurement_signal_collection_and_digitisation_process WHEN instrumentation_context

    data_acquisition != sensor
    data_acquisition != measurement_result
    sampling_rate != bandwidth
    bit_depth != effective_resolution
    timestamp_resolution != timestamp_accuracy
    quantisation_step != measurement_uncertainty
    multiplexed_sampling != simultaneous_sampling
    raw_code != engineering_quantity
    data_integrity != metrological_accuracy
  }

  CONSTRAINTS {
    acquisition_run_must_have_identifier = true
    channel_identity_must_be_preserved = true
    source_identity_should_be_preserved = true
    sampling_rate_must_be_defined_for_uniform_sampled_data = true
    time_scale_and_clock_source_should_be_defined_when_timing_is_material = true
    input_range_and_gain_should_be_preserved = true
    anti_alias_strategy_should_be_defined_for_bandlimited_analogue_sampling = true
    calibration_state_must_match_acquisition_time = true
    raw_and_engineering_data_must_be_distinguished = true
    configuration_must_be_versioned = true
    data_loss_and_quality_flags_must_be_preserved = true
    DAQ_uncertainty_components_should_propagate_to_measurement_result = true
  }

  MEASUREMENT_MODEL {
    RECORD:
      run_identifier
      sample_identifier_or_index
      channel_identifier
      source_identifier
      sensor_or_instrument_identifier
      raw_value
      raw_unit_or_code
      engineering_value
      engineering_unit
      timestamp
      time_scale
      timestamp_uncertainty
      sample_rate
      range
      gain
      coupling
      filter
      ADC_bits
      quantisation_step
      clock_identifier
      trigger_configuration
      calibration_identifier
      configuration_version
      environmental_conditions
      quality_flags
      diagnostic_state
      processing_history
      uncertainty
      provenance

    RULE:
      every_engineering_value SHOULD be_reconstructable_from_raw_data_configuration_calibration_and_processing
  }

  REASONING_RULES {
    IF sampling_frequency > 0
      THEN sampling_interval =
        1/sampling_frequency

    IF ideal_ADC_bits_and_full_scale_span_known
      THEN nominal_quantisation_step =
        full_scale_span/(2^bits)
      under_declared_code_convention

    IF round_to_nearest_quantisation_model_valid
      THEN quantisation_standard_uncertainty =
        quantisation_step/sqrt(12)

    IF signal_highest_frequency_known
      AND ideal_bandlimited_sampling_context
      THEN require_sampling_frequency >
        2*signal_highest_frequency

    IF raw_code_and_valid_channel_calibration_known
      THEN engineering_value =
        calibration(raw_code)

    IF channel_is_multiplexed
      THEN timestamp_each_channel_using_actual_sample_time
      not_common_nominal_time_when_skew_is_material

    IF buffer_overrun_or_packet_loss_detected
      THEN mark_missing_data
      AND preserve_gap_information

    IF clock_unsynchronised
      THEN flag_cross_system_time_alignment_as_uncertain

    IF decimation_factor_M_applied
      THEN require_anti_alias_filter
      AND new_sample_rate =
        old_sample_rate/M

    IF averaging_N_independent_samples
      THEN random_noise_SD_may_reduce_by
        sqrt(N)
      while_systematic_errors_remain

    IF configuration_or_calibration_changes_mid_run
      THEN create_new_configuration_segment
      and_preserve_boundary_timestamp

    IF raw_data_is_lossily_processed_or_compressed
      THEN preserve_processing_parameters
      and_do_not_claim_exact_raw_reconstruction
  }

  VALIDATION {
    CHECK run_identifier
    CHECK channel_map
    CHECK source_and_sensor_identity
    CHECK input_type
    CHECK range_and_gain
    CHECK coupling_and_impedance
    CHECK overload_or_clipping
    CHECK signal_conditioning
    CHECK anti_alias_filter
    CHECK sampling_rate
    CHECK Nyquist_context
    CHECK ADC_bits_quantisation_INL_DNL
    CHECK clock_accuracy_and_jitter
    CHECK timestamp_and_time_scale
    CHECK trigger
    CHECK multiplexing_or_simultaneous_sampling
    CHECK channel_skew
    CHECK buffer_overrun
    CHECK packet_loss
    CHECK calibration_state
    CHECK raw_to_engineering_scaling
    CHECK processing_history
    CHECK configuration_version
    CHECK quality_flags
    CHECK uncertainty
    CHECK data_integrity
    CHECK provenance
  }

  CONFIDENCE {
    definition_confidence: 1.00
    sampling_semantics_confidence: 1.00
    ADC_quantisation_confidence: 1.00
    timing_semantics_confidence: 1.00
    calibration_scaling_confidence: 1.00
    multichannel_timing_confidence: 0.99
    data_integrity_confidence: 0.99
    uncertainty_integration_confidence: 0.99

    RULE:
      confidence decreases when channel identity, range, sampling rate,
      clock, calibration, configuration, quality flags,
      processing history, uncertainty or provenance is missing or ambiguous
  }

  UPDATE_MODEL {
    ON new_acquisition_run:
      assign_run_identifier
      snapshot_configuration
      identify_channels_and_sources
      verify_calibration_states
      establish_clock_trigger_and_time_scale
      initialise_quality_and_provenance

    ON new_sample:
      attach_channel_identifier
      preserve_raw_value
      attach_actual_or_inferred_timestamp
      apply_valid_scaling_and_calibration
      attach_quality_flags
      update_uncertainty
      preserve_provenance

    ON configuration_revision:
      preserve_previous_configuration
      create_new_version
      update_ranges_gains_filters_sampling_trigger_or_clock
      mark_effective_timestamp
      reassess_uncertainty

    ON calibration_revision:
      preserve_previous_calibration
      attach_new_channel_calibration
      mark_effective_time
      recompute_engineering_values_when_policy_allows
      preserve_original_raw_data

    ON clock_or_sync_revision:
      preserve_original_timestamps
      update_clock_model
      correct_timestamps_when_supported
      preserve_correction_and_uncertainty

    ON data_loss_event:
      record_missing_indices_or_time_range
      attach_cause
      update_quality_state
      prevent_silent_interpolation

    ON processing_revision:
      preserve_raw_data
      version_processing_chain
      recompute_derived_data
      preserve_algorithm_parameters

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_entity: DataAcquisition
    canonical_system_entity: DataAcquisitionSystem

    interpretation_order:
      identify_acquisition_run
      identify_channels_and_sources
      identify_raw_signal_type
      identify_range_gain_coupling_and_conditioning
      identify_filter_and_anti_alias_strategy
      identify_sampling_rate_and_sampling_architecture
      identify_ADC_and_quantisation
      identify_clock_timestamp_time_scale_and_trigger
      identify_multiplexing_and_channel_skew
      identify_calibration_and_scaling
      identify_configuration_version
      identify_processing
      identify_quality_and_diagnostic_flags
      identify_data_integrity
      identify_uncertainty
      identify_provenance
      validate_acquisition_chain
      infer_engineering_measurement_data

    ambiguity_controls:
      distinguish_data_acquisition_from_sensor
      distinguish_data_acquisition_from_measurement_result
      distinguish_sampling_rate_from_analogue_bandwidth
      distinguish_bit_depth_from_effective_resolution
      distinguish_timestamp_resolution_from_timestamp_accuracy
      distinguish_quantisation_step_from_measurement_uncertainty
      distinguish_multiplexed_from_simultaneous_sampling
      distinguish_raw_code_from_engineering_quantity
      distinguish_data_integrity_from_metrological_accuracy
      preserve_run_channel_source_configuration_calibration_timing_processing_quality_and_provenance_context
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_units_instrumentation_and_data_acquisition_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Instrumentation
      -> Data Acquisition Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_entity
      ontology_path
      acquisition_chain_model
      source_model
      channel_model
      analogue_input_model
      digital_input_model
      counter_model
      signal_conditioning_model
      gain_model
      offset_model
      input_range_model
      overload_model
      coupling_model
      differential_input_model
      CMRR_model
      input_impedance_model
      isolation_model
      filter_model
      anti_alias_model
      sampling_model
      Nyquist_model
      aliasing_model
      sample_hold_model
      aperture_jitter_model
      ADC_model
      bit_depth_model
      quantisation_model
      DNL_model
      INL_model
      ENOB_model
      dynamic_range_model
      noise_model
      noise_density_model
      SNR_model
      SINAD_model
      THD_model
      clock_model
      timestamp_model
      time_scale_model
      synchronisation_model
      trigger_model
      pretrigger_model
      multiplexing_model
      simultaneous_sampling_model
      channel_skew_model
      buffer_model
      streaming_model
      block_acquisition_model
      record_length_model
      decimation_model
      oversampling_model
      averaging_model
      resampling_model
      windowing_model
      FFT_model
      counter_frequency_model
      event_acquisition_model
      dead_time_model
      data_format_model
      scaling_model
      calibration_model
      multichannel_calibration_model
      uncertainty_model
      data_integrity_model
      packet_loss_model
      latency_model
      distributed_DAQ_model
      wireless_DAQ_model
      edge_processing_model
      compression_model
      storage_model
      configuration_model
      run_model
      metadata_model
      provenance_model
      quality_flag_model
      diagnostic_model
      security_model
      relationships
      constraints
      measurement_model
      reasoning_rules
      confidence_model
      update_model

    PURPOSE:
      deterministic_semantic_integrity_identifier

    RECOMPUTE_WHEN:
      ontology_definition_changes
      acquisition_chain_or_channel_changes
      range_gain_coupling_or_conditioning_changes
      sampling_filter_or_aliasing_model_changes
      ADC_quantisation_or_dynamic_range_changes
      clock_timestamp_trigger_or_synchronisation_changes
      multiplexing_or_channel_timing_changes
      calibration_or_scaling_changes
      configuration_or_processing_changes
      data_integrity_quality_or_diagnostic_changes
      measurement_record_changes
      uncertainty_model_changes
      constraint_model_changes
      reasoning_rule_changes
  }

}

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