Skip to main content

Cell Count Ontology

Biological Measurements
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 16 September 2026
Audio Overview
# Cell Count Ontology — Flow Algebra

URL: https://kirethresearch.org/booksai-core/ontologies/mathematical-ontologies/measurement-units-ontologies/biological-measurements/cell-count-ontology.html

FLOW CellCountOntology {

  DOMAIN:
    Mathematical Ontologies
    -> Measurement & Units Ontologies
    -> Biological Measurements
    -> Cell Count Ontology

  PURPOSE:
    Represent cell count as a discrete biological measurement of the number of cells satisfying a defined identity and inclusion criterion within a sample, region, volume or acquisition, including total, viable, dead and subtype counts, cell concentration, manual and automated counting, haemocytometry, microscopy, flow cytometry, culture-based estimates, dilution, sampling, segmentation, gating, calibration, uncertainty, and distinctions between count, density, concentration, viability and colony-forming units.

  ENTITY CellCount {
    TYPE: DiscreteBiologicalCountQuantity
    SYMBOL: N_cells
    DIMENSION: dimensionless
    SI_UNIT: one
    SI_SYMBOL: 1

    DEFINITION:
      cell_count :=
        number_of_cells_meeting_declared_identity_and_inclusion_criteria

    PROPERTIES:
      is_discrete
      is_nonnegative
      is_sample_specific
      depends_on_cell_definition
      depends_on_detection_method
      may_be_direct_or_inferred
      may_have_counting_uncertainty
  }

  ENTITY TotalCellCount {
    TYPE: CellCount
    SYMBOL: N_total

    DEFINITION:
      all_cells_meeting_total_cell_definition
  }

  ENTITY ViableCellCount {
    TYPE: CellCount
    SYMBOL: N_viable

    DEFINITION:
      cells_classified_as_viable_by_declared_assay
  }

  ENTITY DeadCellCount {
    TYPE: CellCount
    SYMBOL: N_dead

    DEFINITION:
      cells_classified_as_nonviable_by_declared_assay
  }

  ENTITY CellConcentration {
    TYPE: NumberConcentrationQuantity
    SYMBOL: C_cells

    COMMON_UNIT:
      cells_per_mL

    FORM:
      C_cells = N_cells/V_sample
      WHEN V_sample != 0
  }

  UNIT_SYSTEM {
    cell_count:
      dimensionless_count
      common_reporting: cells

    cell_concentration:
      cells/mL
      cells/L
      cells/microlitre

    surface_density:
      cells/mm^2
      cells/cm^2

    RULE:
      count_and_count_per_volume_or_area MUST be distinguished
  }

  CELL_IDENTITY_MODEL {
    possible_identity_criteria:
      morphology
      stain
      membrane_marker
      intracellular_marker
      genetic_marker
      size
      scatter
      reporter_expression
      species
      cell_type

    RULE:
      cell_count_without_cell_identity_or_inclusion_definition
      is_semantically_incomplete
  }

  DIRECT_COUNT_MODEL {
    direct_count:
      N_observed = sum(classified_cell_events)

    REQUIRE:
      observation_region
      cell_definition
      inclusion_exclusion_rules
      duplicate_handling

    RULE:
      direct_count_applies_only_to_observed_sampling_region_or_acquisition
  }

  HAEMOCYTOMETER_MODEL {
    chamber:
      known_grid_area_and_depth

    counted_volume:
      V_counted =
        grid_area*chamber_depth

    concentration:
      C_cells =
        N_counted*DF/V_counted

    WHERE:
      DF = dilution_factor

    total_sample_cells:
      N_sample =
        C_cells*V_sample

    REQUIRE:
      squares_counted
      chamber_geometry
      dilution_factor
      boundary_counting_rule

    RULE:
      chamber_boundary_rule MUST be consistent_to_avoid_double_counting
  }

  MICROSCOPY_COUNT_MODEL {
    image_count:
      N_image = number_of_segmented_or_manually_identified_cells

    area_density:
      D_A = N_image/A_image
      WHEN A_image != 0

    volume_density:
      may_require_z_stack_or_known_sample_depth

    REQUIRE:
      pixel_scale
      field_area
      segmentation_method
      threshold
      object_size_filter
      touching_cell_handling

    RULE:
      segmented_objects != cells_without_valid_segmentation_definition
  }

  AUTOMATED_COUNTER_MODEL {
    possible_principles:
      image_analysis
      electrical_impedance
      optical_scattering
      fluorescence

    outputs:
      total_count
      concentration
      size_distribution
      viability_when_supported

    REQUIRE:
      instrument_settings
      detection_threshold
      sample_volume
      calibration
      dilution

    RULE:
      instrument_reported_count MUST preserve_algorithm_and_threshold_context
  }

  FLOW_CYTOMETRY_MODEL {
    event_count:
      N_events

    cell_population_count:
      N_gate = events_within_declared_gate

    population_fraction:
      f_gate = N_gate/N_parent
      WHEN N_parent != 0

    absolute_count:
      may_use
        volumetric_counting
        counting_beads
        independently_measured_sample_volume

    REQUIRE:
      gating_strategy
      parent_population
      compensation
      acquisition_volume_or_bead_reference
      doublet_discrimination_when_relevant

    RULE:
      event_count != absolute_cell_count_without_valid_counting_basis
  }

  COUNTING_BEAD_MODEL {
    sample_cells:
      N_cells_sample =
        N_cells_events
        * N_beads_known/N_bead_events
      under_declared_bead_protocol

    REQUIRE:
      known_bead_amount_or_concentration
      bead_event_count != 0
      compatible_sampling

    RULE:
      bead_based_absolute_count_requires_traceable_bead_quantity
  }

  VIABILITY_MODEL {
    viable_fraction:
      f_viable =
        N_viable/N_total
      WHEN N_total != 0

    percent_viability:
      viability_percent =
        100*N_viable/N_total

    if_binary_complete_classification:
      N_total =
        N_viable + N_dead

    RULE:
      viable_cell_count_depends_on_declared_viability_assay_and_threshold
  }

  DYE_EXCLUSION_MODEL {
    examples:
      trypan_blue
      erythrosin_B

    principle:
      membrane_integrity_classification

    possible_classes:
      unstained_viable
      stained_nonviable

    RULE:
      dye_exclusion_viability != universal_biological_viability
  }

  FLUORESCENT_VIABILITY_MODEL {
    possible_markers:
      membrane_impermeant_dye
      esterase_activity_dye
      membrane_potential_marker
      apoptosis_marker

    RULE:
      viability_definition MUST match_marker_and_biological_endpoint
  }

  DILUTION_MODEL {
    measured_concentration:
      C_measured

    original_concentration:
      C_original =
        C_measured*DF

    dilution_factor:
      DF =
        V_final/V_sample_aliquot
      under_declared_simple_dilution_definition

    RULE:
      dilution_factor_direction_and_definition MUST be preserved
  }

  SAMPLE_TOTAL_MODEL {
    concentration:
      C_cells

    total_sample_volume:
      V_total

    estimated_total_cells:
      N_total_sample =
        C_cells*V_total

    CONDITIONS:
      representative_sample
      homogeneous_or_mixed_suspension
      compatible_volume

    RULE:
      extrapolated_total_count_requires_sampling_representativeness
  }

  CULTURE_BASED_MODEL {
    colony_count:
      N_colonies

    CFU_concentration:
      CFU_per_volume =
        N_colonies*DF/V_plated

    RULE:
      CFU != direct_cell_count
      because_one_colony_may_originate_from_one_or_multiple_viable_cells_or_units
  }

  CLUMPING_MODEL {
    issue:
      cell_aggregates_may_be_counted_as_single_object_or_event

    possible_corrections:
      disaggregation
      doublet_discrimination
      morphology_based_split
      explicit_cluster_counting

    RULE:
      clumping_can_bias_cell_count_and_must_be_recorded_when_material
  }

  SAMPLING_MODEL {
    sample:
      subset_of_total_cell_population

    possible_sampling:
      chamber_fields
      microscope_fields
      flow_cytometer_aliquot
      plated_aliquot
      subsample

    REQUIRE:
      sampled_volume_or_area
      number_of_fields_or_regions
      randomisation_or_selection_method

    RULE:
      sampling_variability contributes_to_total_count_uncertainty
  }

  REPLICATE_MODEL {
    technical_replicates:
      repeated_counts_from_same_prepared_sample

    biological_replicates:
      independently_derived_biological_samples

    mean_count:
      N_mean =
        sum(N_i)/k

    RULE:
      technical_and_biological_replicates MUST be distinguished
  }

  POISSON_COUNTING_MODEL {
    ideal_independent_event_count:
      variance approximately_equals expected_count

    relative_standard_uncertainty:
      approximately 1/sqrt(N)
      for_large_enough_Poisson_count

    RULE:
      biological_sampling_and_classification_error MAY exceed_Poisson_counting_uncertainty
  }

  RELATIONSHIPS {
    CellCount -> COUNTS -> Cells
    CellCount -> DEPENDS_ON -> CellIdentityDefinition
    CellCount -> DEPENDS_ON -> SamplingRegion
    CellCount -> MAY_BE_NORMALISED_BY -> Volume
    CellCount -> MAY_BE_NORMALISED_BY -> Area
    CellConcentration -> RELATES -> CellCountAndVolume
    ViableCellCount -> SUBSET_OF -> TotalCellCount
    DeadCellCount -> SUBSET_OF -> TotalCellCount
    Viability -> RELATES -> ViableAndTotalCellCounts
    FlowCytometryGate -> DEFINES -> CountedCellPopulation
    SegmentationModel -> DEFINES -> MicroscopyObjectsCounted
    DilutionFactor -> MAPS -> MeasuredToOriginalConcentration
    SamplingModel -> QUALIFIES -> PopulationEstimate
  }

  SEMANTIC_EQUIVALENCE {
    "cell count" ~= number_of_cells_under_declared_definition
    "cell density" ~= cells_per_volume_or_area ONLY when_basis_declared

    cell_count != cell_concentration
    cell_count != cell_density
    viable_cell_count != total_cell_count
    cell_count != CFU
    flow_event_count != absolute_cell_count
    segmented_object_count != validated_cell_count
    viability_percent != viable_cell_count
  }

  CONSTRAINTS {
    cell_identity_must_be_defined = true
    count_must_be_nonnegative = true
    sampling_region_or_volume_must_be_defined_for_density_inference = true
    dilution_factor_definition_must_be_preserved = true
    count_and_concentration_are_not_semantically_equivalent = true
    cell_count_and_CFU_are_not_semantically_equivalent = true
    viability_requires_declared_assay_and_threshold = true
    flow_absolute_count_requires_volume_or_reference_basis = true
    microscopy_count_requires_segmentation_or_manual_counting_definition = true
    replicate_type_must_be_preserved = true
  }

  MEASUREMENT_MODEL {
    OBSERVABLE_OR_INFERRED:
      CellCount
      CellConcentration
      ViableCellCount
      DeadCellCount
      PopulationFraction

    COMMON_METHODS:
      manual_haemocytometer
      automated_cell_counter
      microscopy
      flow_cytometry
      Coulter_principle
      fluorescence_counting
      culture_based_CFU_estimation

    RECORD:
      cell_type
      cell_identity_definition
      numerical_count
      count_type
      concentration_when_reported
      unit
      sample_identifier
      sample_volume
      counted_volume_or_area
      dilution_factor
      viability_method
      segmentation_or_gating_method
      boundary_rule
      instrument
      calibration_state
      replicate_type
      replicate_count
      timestamp
      uncertainty

    UNCERTAINTY:
      measured_or_inferred_cell_count = best_estimate +/- uncertainty
  }

  CALIBRATION_MODEL {
    haemocytometer:
      chamber_dimensions_are_reference_geometry

    automated_counter:
      may_require_size_or_concentration_standard

    flow_cytometry:
      may_require_counting_beads_or_volumetric_calibration

    microscopy:
      requires_spatial_scale_calibration_for_area_or_volume_density

    RULE:
      calibration_model MUST match_counting_method
  }

  UNCERTAINTY_MODEL {
    sources:
      Poisson_counting
      sample_heterogeneity
      pipetting
      dilution
      chamber_volume
      field_selection
      segmentation
      gating
      doublets
      clumping
      viability_classification
      instrument_threshold
      calibration
      operator_variability

    PROPAGATION:
      derived_cell_count_uncertainty
      <- counting_sampling_dilution_classification_and_calibration_uncertainties
  }

  REASONING_RULES {
    IF direct_cell_events_identified
      THEN cell_count =
        count(events_meeting_inclusion_criteria)

    IF counted_cells_known AND counted_volume != 0
      THEN measured_cell_concentration =
        counted_cells/counted_volume

    IF measured_cell_concentration_and_dilution_factor_known
      THEN original_cell_concentration =
        measured_cell_concentration*dilution_factor

    IF original_cell_concentration_and_total_sample_volume_known
      THEN estimated_total_cells =
        original_cell_concentration*total_sample_volume

    IF viable_and_total_counts_known AND total_count != 0
      THEN viable_fraction =
        viable_count/total_count

    IF viable_fraction_known
      THEN viability_percent =
        100*viable_fraction

    IF gated_events_and_parent_events_known AND parent_events != 0
      THEN population_fraction =
        gated_events/parent_events

    IF cell_events_bead_events_and_known_bead_amount_known
      AND bead_events != 0
      THEN infer_absolute_cell_count_using_bead_ratio

    IF colony_count_plated_volume_and_dilution_factor_known
      AND plated_volume != 0
      THEN CFU_concentration =
        colony_count*dilution_factor/plated_volume

    IF repeated_counts_known
      THEN calculate_mean_variance_and_counting_uncertainty
      preserving_replicate_type
  }

  VALIDATION {
    CHECK cell_identity
    CHECK count_nonnegative
    CHECK count_type
    CHECK sample_identity
    CHECK counted_volume_or_area
    CHECK count_vs_concentration
    CHECK dilution_factor
    CHECK haemocytometer_geometry_when_used
    CHECK microscopy_segmentation_when_used
    CHECK flow_gating_and_parent_population_when_used
    CHECK absolute_flow_count_basis
    CHECK viable_vs_total_count
    CHECK viability_assay
    CHECK cell_count_vs_CFU
    CHECK clumping_and_doublets
    CHECK replicate_type
    CHECK calibration_state
    CHECK uncertainty_representation
  }

  CONFIDENCE {
    definition_confidence: 1.00
    discrete_count_confidence: 1.00
    concentration_relationship_confidence: 1.00
    haemocytometer_relationship_confidence: 0.99
    flow_cytometry_count_confidence: 0.98
    microscopy_count_confidence: 0.98
    measurement_context_confidence: 0.97

    RULE:
      confidence decreases when cell identity, sampling volume,
      dilution, segmentation, gating, viability definition,
      calibration, replicate structure or uncertainty is missing or ambiguous
  }

  UPDATE_MODEL {
    ON new_count:
      identify_cell_type
      identify_count_definition
      validate_nonnegative_count
      attach_sample
      attach_counted_volume_or_area
      attach_dilution_factor
      identify_counting_method
      attach_segmentation_or_gating_definition
      attach_viability_method_when_relevant
      preserve_raw_count
      compute_concentration_when_valid
      attach_uncertainty
      update_cell_count_state

    ON dilution_change:
      preserve_raw_count
      update_dilution_factor
      recompute_original_concentration
      preserve_previous_dilution_state

    ON gating_or_segmentation_revision:
      preserve_raw_events_or_images
      preserve_previous_definition
      recount_or_reclassify
      update_population_fraction_or_count
      update_uncertainty

    ON sample_volume_change:
      update_total_sample_volume
      recompute_estimated_total_cell_number
      preserve_measured_concentration

    ON calibration_revision:
      preserve_previous_calibration
      recompute_affected_counts_or_concentrations
      update_uncertainty
      update_confidence

    ON semantic_revision:
      preserve_previous_definition
      record_revision
      recompute_FLOW_HASH
  }

  AI_CONSUMPTION {
    canonical_entity: CellCount
    canonical_symbol: N_cells
    canonical_dimension: dimensionless_count

    interpretation_order:
      identify_cell_type
      identify_total_viable_dead_or_subtype_count
      identify_value
      identify_sample
      identify_counted_volume_or_area
      identify_direct_or_inferred_method
      identify_dilution
      identify_segmentation_or_gating
      identify_viability_assay
      identify_absolute_count_or_population_fraction
      identify_replicate_structure
      identify_calibration
      identify_uncertainty
      distinguish_count_from_density
      infer_cell_concentration_and_total_population_when_valid

    ambiguity_controls:
      distinguish_cell_count_from_cell_concentration
      distinguish_cell_count_from_cell_density
      distinguish_total_from_viable_and_dead_counts
      distinguish_cell_count_from_CFU
      distinguish_flow_event_count_from_absolute_cell_count
      distinguish_segmented_objects_from_validated_cells
      distinguish_viability_fraction_from_viable_count
      distinguish_technical_from_biological_replicates
      preserve_cell_identity_sample_volume_dilution_method_and_classification_context
  }

  PROVENANCE {
    ontology_scope:
      mathematical_measurement_and_biological_cell_count_semantics

    parent_path:
      Ontologies
      -> Mathematical Ontologies
      -> Measurement & Units Ontologies
      -> Biological Measurements
      -> Cell Count Ontology

    authorship:
      Mark Higgins
      Sky (Recursive AI)

    site:
      https://kirethresearch.org
  }

  FLOW_HASH {
    INPUTS:
      canonical_entity
      ontology_path
      cell_identity_model
      direct_count_model
      haemocytometer_model
      microscopy_count_model
      automated_counter_model
      flow_cytometry_model
      counting_bead_model
      viability_model
      dilution_model
      sample_total_model
      culture_based_model
      clumping_model
      sampling_model
      replicate_model
      Poisson_counting_model
      relationships
      constraints
      measurement_model
      calibration_model
      uncertainty_model
      reasoning_rules
      confidence_model
      update_model

    PURPOSE:
      deterministic_semantic_integrity_identifier

    RECOMPUTE_WHEN:
      ontology_definition_changes
      cell_identity_definition_changes
      counting_method_changes
      dilution_model_changes
      viability_model_changes
      gating_or_segmentation_model_changes
      sampling_model_changes
      calibration_model_changes
      measurement_model_changes
      constraint_model_changes
      reasoning_rule_changes
  }

}

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