Conserved-function recovery: can GO annotation find a function every genome has?

IN_PROGRESS EVALUATION

Collection: Propagation by homology

Warnings (1)

Conserved-function recovery

Bottom line: pick a function that almost every genome in a clade must
carry, establish its presence in each proteome independently of GO (here from
InterPro family membership), and ask how well GO annotation recovers it. Both
kinds of disagreement are informative: a false negative is a proteome where
annotation lags the sequence, a false positive is a protein GO calls by the
function's name that does not have it. The first case, the bacterial F-type ATP
synthase, recovers well (precision 0.967, recall 0.976 over 15,525 bacterial
reference proteomes), and its false positives led to a systematic error: almost
every flagellar and type III secretion export ATPase (FliI/SctN) in UniProt is
annotated as an ATP synthase, through PAINT, TreeGrafter, InterPro2GO and GO's
own logical inference. The experiment is a genome-content cousin of
pathway satisfiability, which asks the same kind of
question of a whole module; here the unit is one conserved complex and the
point is to audit the annotation, not the genome.

Opened 2026-09-27 as a case study inside the
TreeGrafter evaluation; made a project of its own on
2026-10-14.

Case 1: the bacterial F-type ATP synthase

The test

A function that nearly every organism in a clade carries gives a truth set that
does not depend on GO: "does this proteome encode a complete F-type ATP
synthase?", decided from InterPro family membership of all eight subunits. The
test asks how well plain GO annotation recovers it
(completeness_fetch.py,
completeness_analyze.py,
results).

What the false positives were

Why the terms are wrong

The reviews give the evidence with verbatim quotes. In brief:

Reviews

Review Protein Rows that carry the error Source nodes / signatures
CAUVC/fliI Caulobacter FliI P0CAT8 TreeGrafter, InterPro2GO, logical inference PTN000390110; IPR004100
HELPJ/fliI H. pylori J99 FliI Q9ZJJ3 TreeGrafter, logical inference PTN002689426
PSEPK/fliI P. putida FliI Q88ET7 (pre-existing) TreeGrafter, logical inference PTN002309653
ECOLI/fliI E. coli FliI P52612 PAINT IBA ×2, logical inference PTN008558586
SALTY/fliI Salmonella FliI P26465 PAINT IBA ×2, logical inference PTN008558586
SALTY/sctN1 Salmonella InvC P0A1B9 PAINT IBA ×2, InterPro2GO, logical inference PTN008558586; IPR004100
SALTY/sctN2 Salmonella SsaN P74857 PAINT IBA ×2, InterPro2GO, logical inference ×2 PTN008558586; IPR013380
YEREN/sctN Yersinia YscN P40290 TreeGrafter, InterPro2GO, logical inference PTN001807733; IPR013380, IPR004100
SHIFL/sctN Shigella Spa47 P0A1C1 TreeGrafter, InterPro2GO, logical inference PTN001807734; IPR004100

Actions by pipeline:

Pipeline REMOVE MARK_AS_OVER_ANNOTATED
GO logical inference (GO_REF:0000108) 10 0
InterPro2GO (GO_REF:0000002) 8 4
PAINT IBA (GO_REF:0000033) 8 0
TreeGrafter (GO_REF:0000118) 5 0

Other errors the reviews found along the way:

Where this sits among the TreeGrafter failure modes

Candidate upstream fixes (not filed)

  1. PANTHER/PAINT: move the GO:0046933 and GO:0045259 IBDs from
    PTN008558586 to PTN008558588, or add an IRD/NOT at PTN000390097. This one
    change fixes both the IBA rows and every TreeGrafter row.
  2. InterPro2GO:
  3. Drop GO:0046961 and GO:0006754 from IPR013380. That entry is SctN-specific,
    so the mapping is wrong for every member.
  4. Remove the IPR004100 → GO:1902600 / GO:0046034 mappings, or move them to
    narrower entries that exclude FliI/SctN. Ideally they would be suppressed only
    when IPR005714 also matches, but a per-entry InterPro2GO mapping probably
    cannot express that condition.
  5. Drop the stale IPR005714 → GO:0009058 biosynthetic process mapping.
  6. All five are recorded in the InterPro mapping review
    (mapping set).
  7. UniProt: rename the flagellar FliI entries to a flagellar export ATPase, use
    EC 7.4.2.8, and drop the "proton translocase" clause.

Further cases

The same design applies to any function with near-universal presence in a
clade and an annotation-independent marker set, for example bacterial RNA
polymerase core subunits, the SecYEG translocon or the bacterial ribosomal
proteins. None has been run yet. For each, the false positives are the part
worth reading.

Reproduce

uv run --with requests projects/CONSERVED_FUNCTION_RECOVERY/f_type_atp_synthase/export_atpase_scan.py # UniProt counts + PTN008558586 IBA targets
uv run --with requests projects/CONSERVED_FUNCTION_RECOVERY/f_type_atp_synthase/node_placement.py     # PANTHER tree placement of IBD and graft nodes
uv run --with pyyaml   projects/CONSERVED_FUNCTION_RECOVERY/f_type_atp_synthase/review_actions.py     # per-row reviewer actions from the gene reviews
uv run --with requests projects/CONSERVED_FUNCTION_RECOVERY/f_type_atp_synthase/completeness_fetch.py # bacterial F-type completeness (large; to ./cache)
python3 projects/CONSERVED_FUNCTION_RECOVERY/f_type_atp_synthase/completeness_analyze.py > projects/CONSERVED_FUNCTION_RECOVERY/f_type_atp_synthase/completeness_results.txt

The UniProt, QuickGO and PANTHER queries run against live services, so the counts
will drift between releases. The committed TSVs were generated on 2026-09-27.