Radical SAM Enzymes: GO annotation across the superfamily

IN_PROGRESS PIPELINE

Species: human, ECOLI

Genes: LIAS RSAD2 MOCS1 CDKAL1 CDK5RAP1 ELP3 TYW1 TYW1B RSAD1 bioB lipA moaA nrdG pflA rlmN miaB rimO thiH hemN hemW queE epmB pflC ybiY yjjW aslB ydeM ygiQ yhcC

Radical SAM Enzymes

Bottom line: across all 29 members in scope of the largest known enzyme
superfamily — the gene list is now reviewed end to end — the annotation problem
is resolution, not error: 218 rows accepted against 51 removed, but 122
modified, almost all pulling a
correct-but-generic term down to the actual reaction. Two findings are
family-wide and machine-fixable. GO:1904047 S-adenosyl-L-methionine binding
is absent from GOA for 19 of the 21 members whose catalysis is established
,
although the curated UniProt cofactor note already records SAM as an exchangeable
ligand of the cluster. And 6 members' core activity has no GO term at all —
three of them for reactions described since 2018, where discovery has simply
outrun the ontology. See Synthesis.

Overview

The radical S-adenosyl-L-methionine (SAM) superfamily is the largest known
enzyme superfamily, with hundreds of thousands of members across all domains of
life. Every member shares one chemical trick: a [4Fe-4S] cluster, bound by a
CxxxCxxC (or variant) motif, reductively cleaves SAM to methionine and a
5'-deoxyadenosyl radical, which then abstracts a hydrogen atom from the
substrate. What the radical is used for varies enormously: sulfur insertion
(BioB, LipA), C-C bond rearrangement and cyclisation (MoaA, QueE, ThiH),
glycyl-radical activation (PflA, NrdG), methylation of unactivated carbons
(RlmN, Cfr), methylthiolation of tRNA and ribosomal proteins (MiaB, RimO,
CDKAL1), tRNA acetylation (ELP3), and antiviral nucleotide dehydration (RSAD2,
viperin).

That makes the superfamily a stress test for GO annotation. The shared
radical SAM domain drives a uniform layer of InterPro2GO rows (IPR007197 and
IPR006638 both map to GO:0003824 catalytic activity and GO:0051536
iron-sulfur cluster binding), while the actual reaction is specific to the
subfamily and often to one organism. Many members have an auxiliary cluster
(the second [4Fe-4S] of LipA and MiaB, the [2Fe-2S] of BioB) that is consumed
as a sulfur donor, so "cluster binding" is sometimes cofactor binding and
sometimes substrate binding. A sizeable fraction of members, including several
in E. coli K-12, still have no known reaction.

Goals

  1. Review every reviewed (Swiss-Prot) radical SAM protein in human (9) and
    E. coli K-12 (20), giving a complete, cross-checkable set for two
    reference proteomes.
  2. Settle a single, consistent treatment of the domain-driven generic rows
    (GO:0003824, GO:0051536, GO:0051539, GO:0046872,
    GO:1904047 S-adenosyl-L-methionine binding) and apply it to the existing
    radical SAM reviews in this repository.
  3. For uncharacterised members (YgiQ, YhcC, RSAD1, the glycyl-radical activase
    paralogs), separate what the domain supports from what is predicted, and
    flag over-annotation from paralogs with known function.
  4. Record ontology gaps (missing reaction-level MF terms) as
    proposed_new_terms rather than settling for generic terms.

Scope

Membership is defined by the InterPro IPR007197 Radical SAM entry in
reviewed UniProtKB entries, retrieved live on 2026-10-18 (the query below is a
cross-reference to the InterPro entry, not to a member-database signature):

https://rest.uniprot.org/uniprotkb/search?query=(xref:interpro-IPR007197)+AND+reviewed:true+AND+organism_id:9606
https://rest.uniprot.org/uniprotkb/search?query=(xref:interpro-IPR007197)+AND+reviewed:true+AND+organism_id:83333

Radical SAM reviews from other organisms already in the repository are
included for the consistency pass (Phase 3), not re-reviewed from scratch.

Starting observation: inconsistent handling of the generic rows

Resolved by the Phase 3 pass on 2026-10-28; kept here because it is what the
treatment rule below was written to fix.
The 17 radical SAM reviews already in
the repository (matched by IPR007197, PS51918 or IPR058240 in their UniProt
records) treated the same domain-derived terms in contradictory ways:

Term Actions used across the 17 reviews
GO:0003824 catalytic activity MODIFY, MARK_AS_OVER_ANNOTATED, KEEP_AS_NON_CORE, UNDECIDED
GO:0051536 iron-sulfur cluster binding ACCEPT, MODIFY, KEEP_AS_NON_CORE, MARK_AS_OVER_ANNOTATED
GO:0051539 4 iron, 4 sulfur cluster binding ACCEPT, KEEP_AS_NON_CORE, NEW
GO:0046872 metal ion binding ACCEPT, KEEP_AS_NON_CORE, MARK_AS_OVER_ANNOTATED

Under the repository guidelines, a true-but-general term is MODIFY (to the
specific reaction term the gene carries) or TOO_GENERAL, not
MARK_AS_OVER_ANNOTATED. GO:0051536 is a parent of GO:0051539, which is
always correct for the radical SAM cluster. Whether GO:0051539 belongs in
core function (it is the catalytic cofactor) or is non-core was the main
judgement call Phase 3 had to settle; the rule below settles it on catalysis,
and GO:0051536 is now MODIFY on every row that carries it, in both scopes.

Treatment rule for the generic rows

Adopted 2026-10-18 for all new reviews in this project, and applied to the
pre-existing reviews in the Phase 3 pass (2026-10-28). Hierarchy checked in
QuickGO: GO:0051539 is_a GO:0051536
is_a GO:0051540 metal cluster binding; GO:0046872 metal ion binding is
not an ancestor of either.

Term Action Replacement / note
GO:0003824 catalytic activity MODIFY The specific reaction MF the gene carries or is shown to have. If no reaction is known (e.g. RSAD1), KEEP_AS_NON_CORE: it is already as precise as the evidence allows.
GO:0051536 iron-sulfur cluster binding MODIFY GO:0051539, the descendant the radical SAM cluster always satisfies.
GO:0051539 4 iron, 4 sulfur cluster binding ACCEPT, or NEW where GOA lacks the row The radical SAM cluster is the catalytic cofactor, so it is core for every active member, and a core cofactor has to be proposable where it is missing (PSEPK/bioB carries GO:0051537 but not GO:0051539). KEEP_AS_NON_CORE only where catalysis is not established.
GO:0005506 iron ion binding MODIFY Same as GO:0046872: the iron is bound as a cluster, so replace with GO:0051539.
GO:0046872 metal ion binding MODIFY GO:0051539 (lateral correction: the iron is bound as a cluster). Keep only if the protein binds a separate metal ion.
GO:1904047 S-adenosyl-L-methionine binding ACCEPT, or NEW where GOA lacks the row Cosubstrate binding, true for every active member. GOA lacks it far more often than not: 19 of the 21 members with established catalysis. The absence is patchy UniRule coverage, not a GO convention — see below.

Never MARK_AS_OVER_ANNOTATED for these rows: none of them is false. The same
principle carries to the adjacent generic MF rows that are not in the table
(GO:0016740 transferase activity, GO:0016783 sulfurtransferase activity):
they are true, so they are MODIFYed to the reaction term, not flagged.

The rule is enforced in code rather than by reading, over both scopes: for the
29 genes this project reviewed from scratch
(treatment_rule_deviations) and for the pre-existing reviews listed in
data/phase3_scope.yaml
(phase3_rule_conformance.deviations). Both are asserted empty by
tests/test_radical_sam_synthesis.py, so a later edit that breaks the rule
reddens CI instead of going unnoticed. The rule's own second branch is recorded as
branch_uses rather than silently allowed: 17 rows in Phase 4 and 6 in Phase 3,
all on members whose catalysis is not established.

Enforcing a rule written in prose needs one more thing: the GO:0046872 line
above ends "Keep only if the protein binds a separate metal ion", and the rule
constant cannot express that, so a member with a genuine mononuclear metal site
beside its cluster would score as a deviation and fail CI. Such a row goes in
data/rule_exceptions.yaml with the
metal site and its evidence named, and is reported under
documented_rule_exceptions — so honouring the documented branch never means
editing a test. An entry that matches no row is reported as stale and fails the
test, so the hatch cannot rot into an unchecked allowlist. It is empty today: no
reviewed member has a separate metal site. Deliberately not the schema's
review.consistency_exception, which is scoped to the action_consistency.yaml
rules and whose validator warns when a row declares one but is in no
action-consistency conflict — that would trade one spurious failure for another.


STATUS

Last updated: 2026-10-28 (Phase 3)

Phase 1: human (9)

Phase 2: E. coli K-12 (20 in scope, all 20 reviewed)

lipA was completed on 2026-10-31, closing the last gap in the project's
gene scope. Its first attempt was interrupted (see the 2026-10-19 note below);
the review was written from the notes that attempt left behind, plus the
cached publications and the UniProt record.

Characterised, in priority order:

Paralogs and uncharacterised, where the risk is over-annotation:

Phase 3: consistency pass over existing reviews

Done 2026-10-28, over the 17 radical SAM reviews that existed before this
project. 44 rows re-actioned, 10 NEW SAM-binding rows added, 29
core-function entries added and one core molecular function withdrawn
, across
17 files. The POPTR trio was the only group already conformant on its actions;
it still gained the SAM row and the cofactor core functions, like the rest.

What the conflicts turned out to be

Every conflict listed when the rule was adopted resolved in the direction the
rule names, and almost all in the same direction: a true row had been marked
false, or a core cofactor had been filed as peripheral.
Not one needed the rule
bent. The 44 transitions, as computed from the diff:

Term From To n Genes
GO:0003824 MARK_AS_OVER_ANNOTATED MODIFY 5 PSEPK/bioB, PSEPK/lipA, PSEPK/pqqE, STAWA/cfr, human/MOCS1
GO:0003824 UNDECIDED KEEP_AS_NON_CORE 2 PSEPK/PP_1969, PSEPK/PP_2482
GO:0003824 KEEP_AS_NON_CORE MODIFY 1 METEA/pqqE
GO:0003824 MARK_AS_OVER_ANNOTATED KEEP_AS_NON_CORE 1 SACEN/eryCV
GO:0051536 TOO_GENERAL MODIFY 4 PSEPK/PP_1969, PSEPK/PP_2482, SCHPO/bio2, yeast/BIO2
GO:0051536 ACCEPT MODIFY 3 BACSU/lipA, METEA/pqqE, SACEN/eryCV
GO:0051536 KEEP_AS_NON_CORE MODIFY 3 PSEPK/hemN, PSEPK/pqqE, human/MOCS1
GO:0051536 MARK_AS_OVER_ANNOTATED MODIFY 3 PSEPK/bioB, PSEPK/lipA, PSEPK/moaA
GO:0046872 KEEP_AS_NON_CORE MODIFY 6 METEA/pqqE, PSEPK/PP_1969, PSEPK/PP_2482, PSEPK/hemN, PSEPK/moaA, human/MOCS1
GO:0046872 ACCEPT MODIFY 1 BACSU/lipA
GO:0046872 MARK_AS_OVER_ANNOTATED MODIFY 1 PSEPK/pqqE
GO:0005506 KEEP_AS_NON_CORE MODIFY 2 METEA/pqqE, PSEPK/pqqE
GO:0005506 MARK_AS_OVER_ANNOTATED MODIFY 1 PSEPK/bioB
GO:0051539 KEEP_AS_NON_CORE ACCEPT 4 PSEPK/hemN, PSEPK/lipA, PSEPK/moaA, STAWA/cfr
GO:0051539 ACCEPT KEEP_AS_NON_CORE 1 SACEN/eryCV
GO:0033068 ACCEPT KEEP_AS_NON_CORE 1 SACEN/eryCV
GO:1904047 KEEP_AS_NON_CORE ACCEPT 1 PSEPK/moaA
GO:0051537 KEEP_AS_NON_CORE ACCEPT 1 PSEPK/bioB
GO:0016783 ACCEPT MODIFY 1 BACSU/lipA
GO:0016783 MARK_AS_OVER_ANNOTATED MODIFY 1 PSEPK/lipA
GO:0016740 ACCEPT MODIFY 1 BACSU/lipA

Reading it by pattern rather than by row:

Two changes went beyond flipping an action, and one convention was settled along the way:

Why the absence is a gap and not a convention. The repository rule on NEW
warns that a systematic absence is usually a convention the reviewer has not yet
identified, and the comparator check is what settles which it is. The comparator
here is not this project's own proposals — citing those would be circular — but
GOA itself, where GO:1904047 is annotated to radical SAM enzymes in exactly
this role, by UniRule: ECOLI/queE (UR000100349), ECOLI/moaA and PSEPK/moaA
(UR000101305), METEA/pqqE and PSEPK/pqqE (UR000098303). GO has no objection
to annotating a radical SAM enzyme's own cosubstrate; the coverage just follows
which UniRule systems happen to carry the term. That also explains, without
special pleading, why those five genes have an existing row to ACCEPT or
MODIFY while the other 18 need a NEW one, and it is the comparator each of
those 10 rows now cites.

Module cross-check

The seven named modules reference 11 of these reviews as representative members.
Where a module states a molecular function for a radical SAM step, it agrees
with the review's core MF in every case
— including the two that matter most:

Four module gaps follow, recorded here rather than as knowledge_gaps,
because a curator closes them by annotating, not by experiment:

  1. ECOLI/queE is in no module. bacterial_preq1_incorporation_queuosine_maturation
    has no QueE annoton, although QueE performs the radical SAM ring
    contraction that makes CDG. queE's core MF is a proposed_new_terms entry
    (7-carboxy-7-deazaguanine synthase activity), so the module node would need
    proposed_molecular_function.
  2. Cofactors are recorded unevenly. The bioB, moaA, hemN and thiH annotons
    list their Fe-S clusters; the three lipoylation nodes and the
    pqqe_peptide_cyclase node list none, although UniProt records 2× [4Fe-4S]
    for the lipoyl synthases and [4Fe-4S] for both METEA/pqqE and PSEPK/pqqE.
    Phase 3 has just made GO:0051539 a core function in every one of those
    reviews, so the asymmetry is now visible from the gene side too.
  3. moaA_gtp_38_cyclase has no family descriptor, while its sibling moaC
    annoton has PANTHER:PTHR22960:SF29. Per the repository rule, omitting the
    id is the right call when the family is not established — but MoaA's is
    (PTHR22960 is the MoaA/MoaC-containing family), so this looks like an
    omission rather than a judgement.
  4. Reviewed orthologues are missing from representative-member lists.
    human/MOCS1 is absent from both molybdopterin annotons although it is the
    human MoaA–MoaC fusion; METEA/pqqE is absent from the
    pqqe_peptide_cyclase annoton although it is reviewed and better
    characterised than PSEPK/pqqE; the three POPTR
    lipoyl synthases are absent from the lipoylation module, which has bacterial,
    Bacillus and human variants but no plant one.

HemW and RSAD1 are correctly absent from heme_biosynthesis: they are heme
chaperones, not enzymes of the pathway, which is the whole point of this
project's HemN/HemW finding.

Phase 4: synthesis

Every figure below is computed from the reviews by
rsam_synthesis.py, which takes its gene list
from this page's own frontmatter and writes
data/synthesis.yaml. No result is
hardcoded; the project's own editorial choices are (the treatment rule itself,
and which asserted values count as PflB-substrate pushes). Classifications are
keyed on evidence codes rather than on lists of term ids wherever possible. Editing any of the 29
reviews changes these figures, so re-run the script and commit the regenerated
data in the same change — tests/test_radical_sam_synthesis.py fails until you
do, and also checks that the totals quoted here actually partition.

Synthesis

What was covered

29 proteins in scope, all 29 reviewed across 519 annotation rows. A gene
counts as reviewed here when it has rows and none is still PENDING, which
deliberately ignores status:, which can go stale: MOCS1 was fully reviewed
while still carrying status: INITIALIZED, and the script reported that
separately under data_quality rather than letting it skew the arithmetic
(Phase 3 corrected it, and data_quality is now empty). lipA was the last gap
and was closed on 2026-10-31, so nothing is excluded here any more. Actions
across the 519:

Action n
ACCEPT 218
MODIFY 122
KEEP_AS_NON_CORE 65
REMOVE 51
NEW 29
MARK_AS_OVER_ANNOTATED 21
UNDECIDED 10
TOO_GENERAL 3

MODIFY at 122 is the signature of this family: a quarter of all rows were true
but pitched at the wrong level, which is exactly what a shared catalytic domain
with unshared chemistry produces.

The resolution gap: 6 core activities have no GO term

26 of the 29 reviewed genes assert at least one core function. Of those, 6 name
an activity GO cannot express
and carry a proposed_new_terms entry instead:

Gene Activity with no GO term Why GO has none
RSAD2 SAM-dependent CTP dehydratase (ddhCTP) reaction described in 2018; no EC, no term
queE 7-carboxy-7-deazaguanine synthase EC 4.3.99.3 and RHEA:27974 exist, term does not
epmB L-lysine 2,3-aminomutase, (R)-β-lysine-forming GO:0050066 is defined as the (3S) clostridial product
hemW heme chaperone activity GO:0016530 covers metal ions; no heme-carrier term
ygiQ 23S rRNA ribose-5'-C-methyltransferase every GO ribose-MTase term is 2'-O
yhcC tRNA cmnm5s2U(34) demodifying activity no SAM-dependent RHEA for the demodification

A seventh proposal is additive rather than a gap-filler: nrdG keeps the existing
GO:0043364 and proposes a substrate-specific child for the anaerobic-RNR
activase, which would give the uncharacterised activases an obvious pattern.

Two things are worth separating here. queE and epmB are ontology lag —
the chemistry is settled and even has an EC or RHEA identifier, so the term is a
request, not research. RSAD2, ygiQ and yhcC are recent discoveries
(2018, 2026, 2026), where GO has not had time. Only hemW is a genuine modelling
question: GO has no vocabulary for a protein that carries a cofactor to an
apo-enzyme without chemistry.

The remaining breakdown: 20 genes' core functions use existing GO terms, one
of which (RSAD1) is GO:0020037 heme binding with no reaction established; and
TYW1B, aslB and ydeM assert no core function at all, deliberately.

The scaffold is universal; GOA records half of it

GO:0051539 (4Fe-4S binding) and GO:1904047 (SAM binding) are each core in 20
of the reviewed genes — the superfamily's defining pair. But GO:1904047 appears
as a NEW row, meaning absent from GOA, in 18 of those, against only 2
(moaA and queE) where GOA already carried it.

That is a systematic, machine-fixable gap, not 18 independent oversights. The
curated PROSITE/HAMAP cofactor note on these records already says SAM is an
exchangeable ligand of the cluster, so the assertion is sitting in UniProt
unexploited. It is the single highest-leverage item this project found and is
worth raising with GO/UniProt as a rule rather than gene by gene.

The eight reviewed genes that did not get it — RSAD1, TYW1B, aslB, hemW, pflC,
ybiY, ydeM and yjjW — are exactly the set whose catalysis the reviews did not
establish. That partition was read off the reviews one gene at a time, not asserted:
each of the eight was independently judged to lack a demonstrated reaction, and the
script simply reports the result. lipA is excluded, not unestablished — it is
lipoyl synthase (EC 2.8.1.8), the same enzyme as human LIAS, and lacks a row only
because it is unreviewed; it is reported under not_reviewed_so_not_classified.

The treatment rule held

Across all 29 reviewed genes, the domain-derived generic rows came out as:

Term MODIFY ACCEPT KEEP_AS_NON_CORE other
GO:0003824 catalytic activity 24 – 5 –
GO:0051536 iron-sulfur cluster binding 30 – – –
GO:0051539 4Fe-4S binding – 34 12 –
GO:0046872 metal ion binding 2 – – –
GO:0005506 iron ion binding 3 – – –
GO:1904047 SAM binding – 2 – 19 NEW
GO:1904047 SAM binding – 2 – 18 NEW

The 5 KEEP_AS_NON_CORE on GO:0003824 and the 12 on GO:0051539 are the rule's
own "catalysis not established" branch (RSAD1, TYW1B, hemW, aslB, ydeM and the
activase paralogs), not departures from it.

The script encodes the rule and emits treatment_rule_deviations, so this is
checked rather than asserted. It currently reports exactly three, all MOCS1's
— GO:0003824 MARK_AS_OVER_ANNOTATED, GO:0046872 and GO:0051536
KEEP_AS_NON_CORE — in the pre-existing review that predates the rule. The other
17 non-primary actions are recorded separately as treatment_rule_branch_uses.
That makes the Phase 3 worklist measurable: re-running the script after Phase 3
should drive the deviation count to zero.

What the IBAs got right, and where they reach too deep

19 IBA rows carry a propagation_review. Sorted by what the review concluded:

The generalisable lesson is the HemN/HemW case, and it is a precise one: when a
subfamily loses an activity, the molecular function is usually re-placed correctly
and the biological process is not.
PAINT put coproporphyrinogen dehydrogenase on
the HemN-only node PTN000358335, but left porphyrin biosynthesis on the parent
PTN000358281 that both subfamilies descend from. So the MF stops at HemN while
the BP leaks onto HemW. Checking whether a family's MF and BP sit on the same
node is a cheap, mechanical test that would have caught this, and it generalises
to any subfamily that has lost its ancestral chemistry.

The paralog-rich subfamilies otherwise behaved differently from each other, and
not as expected:

Upstream, not ours: 10 source defects

The reviews recorded 10 defects — 5 against UniProt (RHEA and EC assignments on
pflC/ybiY, and a query on an L. lactis donor), 4 against InterPro2GO mappings
and 1 against an EcoliWiki GOA row. The InterPro defects sit on just three
distinct entries
(IPR004559 carries two wrong mappings), and each propagates to
every member of its signature, so correcting three entries fixes far more genes
than the 29 here. Those four are filed resource: INTERPRO, so they route to
reports/source-defects/INTERPRO.md; they were resource: OTHER with InterPro
named in the explanation until the enum gained an INTERPRO value (#5984) and
they were re-filed onto it (#6027).

just export-source-defects turns them into per-resource reports.

What this says about the superfamily

Three claims the data supports, and one it does not.

  1. The family's annotation problem is resolution, not error. 218 ACCEPT
    against 51 REMOVE — and only 3 of those 51 overturned a claim anyone had
    actually asserted about the gene. The rest were uninformative protein binding (36) or terms that had propagated in rather than been asserted
    (12: 8 IEA signature/EC mappings, 3 IBA, 1 ISS). The 3 are nrdG's
    IMP ribonucleoside-diphosphate reductase row, removed because the activase
    is necessary for the reaction without performing it, and two NAS rows on
    CDK5RAP1 projecting CDK5 neuronal biology onto a mitochondrial tRNA enzyme.
    The split is computed from each row's evidence code — how the row arose,
    not which term it carries (remove_breakdown).
  2. The shared domain is an attractor for over-general annotation. 122 MODIFY,
    almost all pulling a correct-but-generic term down to the specific reaction.
  3. Discovery is outrunning the ontology. Three of the six missing terms are
    for reactions described in 2018 or later, two of them in 2026.
  4. What the data does not support is the intuition that IBA is the main
    culprit for paralog over-annotation in this family. Only 4 of 18 reviewed IBAs
    were propagation failures, while signature-based IEA mappings produced more
    wrong claims and reached further. PAINT curators had generally made the harder
    judgement correctly.

NOTES

2026-10-31

2026-10-19

2026-10-18