# Heart Rate Ontology — Flow Algebra
URL: https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/measurement-units-ontologies/biological-measurements/heart-rate-ontology.html
FLOW HeartRateOntology {
DOMAIN:
Mathematical Ontologies
-> Measurement & Units Ontologies
-> Biological Measurements
-> Heart Rate Ontology
PURPOSE:
Represent heart rate as a biological frequency quantity describing the number of cardiac cycles or defined cardiac events per unit time, including instantaneous and averaged heart rate, beat intervals, pulse-derived estimates, electrocardiographic measurement, optical photoplethysmography, wearable sensing, sampling windows, rhythm irregularity, signal quality, calibration, uncertainty, provenance, and strict distinctions between heart rate, pulse rate, cardiac period, heart-rate variability and raw physiological signals.
ENTITY HeartRate {
TYPE: BiologicalFrequencyQuantity
SYMBOL: HR
DIMENSION: T^-1
SI_UNIT: per_second
SI_SYMBOL: s^-1
COMMON_UNIT:
beats_per_minute
SYMBOL: bpm
DEFINITION:
heart_rate :=
number_of_defined_cardiac_cycles_or_beats_per_unit_time
PROPERTIES:
is_rate_quantity
is_time_dependent
may_be_instantaneous
may_be_interval_averaged
may_be_directly_or_indirectly_measured
may_vary_with_physiological_state
may_have_uncertainty
}
ENTITY CardiacCycleCount {
TYPE: DiscreteCountQuantity
SYMBOL: N_beats
DIMENSION: dimensionless
}
ENTITY BeatInterval {
TYPE: TimeIntervalQuantity
SYMBOL: T_RR
SI_UNIT: second
COMMON_UNIT: millisecond
DEFINITION:
time_between_defined_consecutive_cardiac_events
}
ENTITY PulseRate {
TYPE: PeripheralPulseFrequencyQuantity
SYMBOL: PR
COMMON_UNIT: pulses_per_minute
RULE:
pulse_rate MAY approximate_heart_rate
but_is_not_semantically_identical_in_all_conditions
}
UNIT_SYSTEM {
SI:
s^-1
common:
beats_per_minute
bpm
interval:
second
millisecond
CONVERSION:
HR_per_second = HR_bpm/60
HR_bpm = 60*HR_per_second
RULE:
rate_unit_and_time_basis MUST be preserved
}
COUNT_TIME_MODEL {
average_heart_rate:
HR =
N_beats/delta_t
REQUIRE:
delta_t > 0
beat_definition
counting_window
bpm_form:
HR_bpm =
60*N_beats/delta_t_seconds
RULE:
measurement_window MUST be preserved_for_count_based_rate
}
INTERVAL_RATE_MODEL {
instantaneous_or_beat_to_beat_rate:
HR_bpm =
60/T_RR_seconds
millisecond_form:
HR_bpm =
60000/T_RR_milliseconds
REQUIRE:
beat_interval > 0
RULE:
reciprocal_of_average_interval
and_average_of_instantaneous_rates
MAY differ_for_irregular_rhythm
}
EVENT_DEFINITION_MODEL {
possible_events:
ECG_R_peak
ventricular_depolarisation
atrial_event
mechanical_contraction
peripheral_pulse_peak
RULE:
event_definition MUST be preserved
because_different_signals_may_have_timing_offsets_or_missing_events
}
ECG_MODEL {
source:
electrical_cardiac_signal
common_event:
R_peak
RR_interval:
T_RR =
t_R_peak_next - t_R_peak_current
derived_heart_rate:
HR_bpm =
60000/RR_ms
REQUIRE:
sampling_rate
electrode_configuration
signal_quality
R_peak_detection_method
RULE:
raw_ECG_voltage != heart_rate
until_cardiac_events_are_detected_and_rate_is_derived
}
PPG_MODEL {
source:
photoplethysmographic_optical_signal
detected_event:
peripheral_pulse_wave_feature
pulse_interval:
time_between_successive_valid_pulses
derived_pulse_rate:
PR_bpm =
60/pulse_interval_seconds
RULE:
PPG_derived_pulse_rate != direct_electrical_heart_rate_in_all_conditions
}
WEARABLE_SENSOR_MODEL {
possible_sources:
wrist_PPG
chest_ECG
optical_arm_sensor
smart_ring
wearable_patch
processing:
filtering
motion_artifact_reduction
event_detection
interval_estimation
averaging
quality_scoring
RULE:
wearable_reported_heart_rate MUST preserve_device_algorithm_and_sampling_context_when_available
}
AUSCULTATION_MODEL {
source:
heart_sounds
events:
cardiac_sound_cycles
rate:
counted_cycles/time
RULE:
auscultatory_rate_depends_on_correct_cycle_identification
}
PALPATION_MODEL {
source:
peripheral_arterial_pulse
rate:
pulse_count/time
RULE:
manually_measured_pulse_rate SHOULD be_labelled_as_pulse_derived_when_not_directly_cardiac
}
WINDOWED_AVERAGE_MODEL {
time_window:
[t_start, t_end]
average_count_rate:
HR_avg =
N_valid_beats/(t_end-t_start)
alternative_interval_average:
mean_of_valid_beat_to_beat_rates
RULE:
averaging_method MUST be declared
because_different_methods_can_produce_different_results
}
INSTANTANEOUS_MODEL {
local_rate:
HR_i =
1/T_i
common_bpm:
HR_i_bpm =
60/T_i_seconds
RULE:
instantaneous_heart_rate_is_local_interval_derived_quantity
not_zero_duration_direct_count
}
RHYTHM_MODEL {
regular_rhythm:
beat_intervals_approximately_consistent
irregular_rhythm:
beat_intervals_vary_materially
consequences:
average_rate_may_not_describe_interval_distribution
pulse_deficit_may_occur
detection_algorithms_may_require_special_handling
RULE:
rhythm_context SHOULD be preserved_when_material_to_rate_interpretation
}
HEART_RATE_VARIABILITY_DISTINCTION_MODEL {
heart_rate:
central_tendency_or_local_frequency_of_cardiac_events
heart_rate_variability:
variation_in_successive_beat_intervals_or_related_rate_series
possible_HRV_metrics:
SDNN
RMSSD
frequency_domain_metrics
nonlinear_metrics
RULE:
heart_rate != heart_rate_variability
}
PULSE_DEFICIT_MODEL {
cardiac_beats:
detected_by_ECG_or_equivalent
peripheral_pulses:
detected_at_peripheral_site
pulse_deficit:
cardiac_rate - peripheral_pulse_rate
under_comparable_time_window
RULE:
heart_rate_and_pulse_rate MUST be separately_representable
}
SAMPLING_MODEL {
REQUIRE:
sampling_frequency
measurement_duration
time_resolution
valid_data_fraction
Nyquist_context:
waveform_sampling_rate_must_support_event_detection
RULE:
insufficient_sampling_or_short_windows_can_increase_rate_uncertainty
}
SIGNAL_PROCESSING_MODEL {
possible_steps:
baseline_removal
bandpass_filtering
smoothing
artifact_rejection
peak_detection
beat_classification
interpolation
RULE:
derived_heart_rate SHOULD preserve_processing_pipeline_and_parameters_when_relevant
}
ARTIFACT_MODEL {
possible_sources:
motion
poor_sensor_contact
electrical_noise
muscle_activity
ambient_light
missed_beats
false_peaks
ectopic_beats
signal_dropout
RULE:
artifact_handling MUST be documented_for_derived_rate_and_variability
}
QUALITY_MODEL {
possible_metrics:
signal_to_noise
valid_beat_fraction
detector_confidence
artifact_fraction
agreement_between_channels
RULE:
low_signal_quality SHOULD reduce_measurement_confidence
}
TEMPORAL_CONTEXT_MODEL {
possible_states:
resting
sleeping
standing
exercising
recovery
laboratory_protocol
free_living
context:
timestamp
duration
activity_state
posture
environmental_conditions
RULE:
heart_rate_is_dynamic_and_measurement_context SHOULD be preserved
}
RELATIONSHIPS {
HeartRate -> COUNTS_PER_TIME -> CardiacCycles
HeartRate -> INVERSELY_RELATES_TO -> BeatInterval
ECG -> PROVIDES -> CardiacElectricalEvents
RPeakDetection -> ENABLES -> RRIntervalMeasurement
RRInterval -> ENABLES -> BeatToBeatHeartRate
PPG -> PROVIDES -> PeripheralPulseEvents
PulseRate -> MAY_APPROXIMATE -> HeartRate
Rhythm -> QUALIFIES -> HeartRateSeries
HeartRateVariability -> DERIVED_FROM -> BeatIntervalVariation
SignalQuality -> QUALIFIES -> HeartRateMeasurement
MeasurementWindow -> QUALIFIES -> AverageHeartRate
}
SEMANTIC_EQUIVALENCE {
"heart rate" ~= cardiac_cycle_frequency
"bpm" ~= beats_per_minute
heart_rate != beat_interval
heart_rate != pulse_rate_in_all_contexts
heart_rate != heart_rate_variability
heart_rate != ECG_voltage
heart_rate != PPG_amplitude
average_heart_rate != instantaneous_heart_rate
cardiac_event_count != heart_rate_without_time_basis
}
CONSTRAINTS {
heart_rate_dimension = T^-1
time_interval_must_be_positive = true
beat_interval_must_be_positive = true
cardiac_event_definition_must_be_defined = true
measurement_window_should_be_preserved = true
heart_rate_and_pulse_rate_are_not_universally_equivalent = true
heart_rate_and_HRV_are_not_semantically_equivalent = true
raw_signal_and_derived_rate_are_not_semantically_equivalent = true
signal_quality_and_artifact_handling_should_be_preserved = true
}
MEASUREMENT_MODEL {
OBSERVABLE_OR_INFERRED:
HeartRate
PulseRate
BeatInterval
COMMON_METHODS:
electrocardiography
photoplethysmography
auscultation
pulse_palpation
wearable_monitoring
implanted_monitoring
RECORD:
numerical_value
unit
heart_rate_or_pulse_rate
instantaneous_or_average
measurement_window
beat_count
beat_interval_series
cardiac_event_definition
timestamp
activity_state
posture
sensor_type
sensor_location
sampling_frequency
processing_method
artifact_handling
valid_data_fraction
signal_quality
instrument_or_device
calibration_or_validation_state
uncertainty
provenance
UNCERTAINTY:
measured_or_inferred_heart_rate = best_estimate +/- uncertainty
}
UNCERTAINTY_MODEL {
sources:
event_timing_resolution
finite_measurement_window
missed_beats
false_detections
artifact_rejection
sampling_frequency
rhythm_irregularity
sensor_contact
motion
algorithm
manual_counting
clock_accuracy
PROPAGATION:
derived_heart_rate_uncertainty
<- event_detection_timing_sampling_window_and_signal_quality_uncertainties
}
REASONING_RULES {
IF valid_beat_count_known AND measurement_duration > 0
THEN average_heart_rate_per_second =
valid_beat_count/measurement_duration
IF valid_beat_count_known AND measurement_duration_seconds > 0
THEN average_heart_rate_bpm =
60*valid_beat_count/measurement_duration_seconds
IF RR_interval_seconds > 0
THEN beat_to_beat_heart_rate_bpm =
60/RR_interval_seconds
IF RR_interval_milliseconds > 0
THEN beat_to_beat_heart_rate_bpm =
60000/RR_interval_milliseconds
IF heart_rate_bpm > 0
AND constant_interval_approximation
THEN representative_beat_interval_seconds =
60/heart_rate_bpm
IF ECG_and_peripheral_pulse_rates_measured_over_same_window
THEN pulse_deficit =
ECG_heart_rate - peripheral_pulse_rate
IF beat_interval_series_known
THEN MAY compute_HRV_metrics
BUT preserve_HRV_as_distinct_quantity
IF raw_signal_known
THEN detect_valid_events
BEFORE deriving_heart_rate
}
VALIDATION {
CHECK quantity_is_heart_rate_or_pulse_rate
CHECK unit_consistency
CHECK positive_measurement_duration
CHECK positive_beat_intervals
CHECK cardiac_event_definition
CHECK instantaneous_vs_average
CHECK averaging_method
CHECK heart_rate_vs_pulse_rate
CHECK heart_rate_vs_HRV
CHECK raw_signal_vs_derived_rate
CHECK sensor_and_sampling_frequency
CHECK signal_processing
CHECK artifact_handling
CHECK signal_quality
CHECK temporal_and_activity_context
CHECK uncertainty_representation
}
CONFIDENCE {
definition_confidence: 1.00
dimensional_confidence: 1.00
count_time_relationship_confidence: 1.00
interval_rate_relationship_confidence: 1.00
ECG_derived_rate_confidence: 0.99
PPG_derived_rate_confidence: 0.97
measurement_context_confidence: 0.98
RULE:
confidence decreases when event definition, measurement window,
rhythm context, sampling rate, signal quality,
artifact handling, device method or uncertainty is missing or ambiguous
}
UPDATE_MODEL {
ON new_measurement:
identify_heart_rate_or_pulse_rate
validate_unit
identify_event_definition
identify_instantaneous_or_average_semantics
attach_measurement_window
attach_sensor_and_location
attach_sampling_frequency
attach_processing_method
attach_signal_quality
attach_activity_and_posture_context
normalize_rate_units
preserve_original_value_and_unit
attach_uncertainty
update_heart_rate_state
ON new_beat_event:
append_event_time
recompute_latest_beat_interval
recompute_instantaneous_rate
update_windowed_average
preserve_event_provenance
ON artifact_revision:
preserve_raw_signal_and_events
update_valid_invalid_beat_classification
recompute_rate_series
recompute_HRV_when_requested
update_uncertainty
update_confidence
ON measurement_window_change:
preserve_underlying_events
recompute_average_rate
record_new_window_definition
ON sensor_or_algorithm_change:
preserve_previous_method
attach_new_sensor_or_algorithm
reevaluate_comparability
update_method_provenance
ON semantic_revision:
preserve_previous_definition
record_revision
recompute_FLOW_HASH
}
AI_CONSUMPTION {
canonical_entity: HeartRate
canonical_symbol: HR
canonical_dimension: T^-1
common_unit: bpm
interpretation_order:
identify_heart_rate_or_pulse_rate
identify_value
identify_unit
identify_cardiac_event_definition
identify_instantaneous_or_average_rate
identify_measurement_window
identify_beat_interval_series_when_available
identify_sensor_type_and_location
identify_sampling_frequency
identify_signal_processing_and_artifact_handling
identify_rhythm_context
identify_activity_posture_and_time
identify_signal_quality
identify_uncertainty
normalize_units
validate_rate_semantics
infer_interval_and_count_relationships
ambiguity_controls:
distinguish_heart_rate_from_pulse_rate
distinguish_heart_rate_from_beat_interval
distinguish_heart_rate_from_heart_rate_variability
distinguish_average_from_instantaneous_heart_rate
distinguish_raw_ECG_or_PPG_signal_from_derived_rate
distinguish_cardiac_event_count_from_rate_without_time_basis
preserve_event_sensor_window_rhythm_quality_and_temporal_context
}
PROVENANCE {
ontology_scope:
mathematical_measurement_and_biological_heart_rate_semantics
parent_path:
Ontologies
-> Mathematical Ontologies
-> Measurement & Units Ontologies
-> Biological Measurements
-> Heart Rate Ontology
authorship:
Mark Higgins
Sky (Recursive AI)
site:
https://kirethresearch.org
}
FLOW_HASH {
INPUTS:
canonical_entity
ontology_path
count_time_model
interval_rate_model
event_definition_model
ECG_model
PPG_model
wearable_sensor_model
auscultation_model
palpation_model
windowed_average_model
instantaneous_model
rhythm_model
heart_rate_variability_distinction_model
pulse_deficit_model
sampling_model
signal_processing_model
artifact_model
quality_model
temporal_context_model
relationships
constraints
measurement_model
uncertainty_model
reasoning_rules
confidence_model
update_model
PURPOSE:
deterministic_semantic_integrity_identifier
RECOMPUTE_WHEN:
ontology_definition_changes
heart_rate_event_definition_changes
count_or_interval_model_changes
ECG_or_PPG_model_changes
averaging_model_changes
rhythm_or_HRV_distinction_changes
signal_processing_model_changes
measurement_model_changes
constraint_model_changes
reasoning_rule_changes
unit_model_changes
}
}
END FLOW
Download Code
Copy to Clipboard