Method reference: running CONJScan and ICEscan together¶
BacFlux can search for conjugation machinery with two model sets. This page explains why it runs both and merges the results, what the second set adds, and which parts of it are deliberately distrusted.
Terms used on this page
| CONJScan | the default model set, distributed with MacSyFinder. Conservative and well validated |
| ICEscan | the optional second set, a fork of CONJScan taken from ICEfinder2. Off by default; adds classes CONJScan cannot see |
| MacSyFinder | the engine both run on: it looks for a quorum of required genes, not single hits |
| ICE | integrative and conjugative element — moves itself between cells |
| IME | integrative mobilisable element — needs a helper element to move |
| AICE | actinomycete ICE, which replicates rather than conjugates in the usual way |
| T4SS | type IV secretion system, the mating apparatus |
| att site | the short repeat marking an integrated element's ends |
| MGE | mobile genetic element, the general term |
| IS | insertion sequence, the smallest kind of mobile element |
| HMM | hidden Markov model, a statistical profile used to recognise a protein family |
Measured on the 28 genomes of the benchmark set that carry a curated element. There are
30 such elements — 18 curated ICEs and 12 curated IMEs — but two genomes carry one of
each, so 30 elements sit on 28 genomes (Validation).
The 12 negative-control genomes are not used here, since this experiment scores what
changes on genomes that contain something. Two arms, differing only by whether the
ICE caller was given ICEscan's table (mobilome.icescan.run: true).
⚠ Read this before quoting any coordinate from this page¶
The per-element coordinates and ratios in §8.1 and §8.2 are superseded and must not be quoted. A later rework of the att-site search moved many of them substantially: SPI-7 is listed below at 83,403 bp and is now called at 133,582 bp against a curated 133,500; ICEEc2 at 55,055 bp is now 92,237 bp. Current per-element numbers are in
results_final.tsvandime_results_final.tsvin the benchmark tree, current headline figures indocs/mobilome/validation.mdandmethods_ebi_comparison.md. Both arms used the same att search, so the two-arm comparison is unaffected.
Short version. ICEscan is not a second opinion — it is a fork of the tool we already run. We add it alongside CONJScan, take only two things from it (integrase hits and the IME/AICE element classes), and ignore four of its integrase profiles because they are not element integrases. Measured effect: ICEs unchanged, IMEs meaningfully better, boundaries barely moved.
1. What ICEscan is, and the correction that matters¶
ICEscan is the machinery-model set distributed with ICEfinder2 and used by the EBI mobilome-annotation-pipeline. The approach is theirs and the credit is theirs (§12).
Adding it to a workflow that already runs CONJScan does not give two independent
opinions: ICEscan is a fork of CONJScan, by the same authors at Institut Pasteur,
one minor version behind the release BacFlux installs. Its metadata.yml does not
describe it as ICEscan at all:
maintainer:
name: Charles Coluzzi Eduardo Rocha
email: ccoluzzi@pasteur.fr erocha@pasteur.fr
short_desc: CONJScan - Models for detection of conjugative and mobilisable elements.
vers: 2.0.1
doc: https://github.com/macsy-models/CONJScan
license: CC BY-NC-SA 4.0
copyright: 2018-2022, Institut Pasteur, CNRS
Its README.md is the CONJScan README verbatim, down to the
macsydata install CONJScan instruction; MacSyFinder's run log calls the package
ICEscan-2.0.1, and BacFlux installs CONJScan 2.1.0.
Two forks of one model set share their profiles, their scoring and most of their blind spots. Their agreement is largely structural, not independent corroboration; only their disagreements are used.
2. Exactly what ICEscan adds and removes¶
Measured by diffing the two installed model directories.
2.1 System models¶
| CONJScan 2.1.0 | ICEscan 2.0.1 | |
|---|---|---|
Chromosome/T4SS_type{B,C,F,FA,FATA,G,I,T} |
8 | 8 |
Chromosome/dCONJ_type* (decayed machinery) |
8 | 0 — removed |
Chromosome/MOB (relaxase-only, mobilisable) |
1 | 0 — removed |
Plasmids/* (the entire plasmid model set) |
17 | 0 — removed |
Chromosome/IME |
absent | 1 — added |
Chromosome/AICE |
absent | 1 — added |
| total definition files | 34 | 10 |
2.2 Profile HMMs — 21 added, 1 removed¶
ICEscan carries 145 profiles against CONJScan's 125.
Added (21). Eight integrase/recombinase families —
Phage_integrase, Recombinase, UPF0236, PB001819, rve, TIGR02224,
TIGR02225, TIGR02249; the actinomycete AICE machinery —
FtsK_SpoIIIE, RepSAv2, DUF3631, Prim-Pol; Gram-positive and
IME-specific relaxase families — Relaxase_firmi_{MOBL,Rep_2,Viral_Rep_A,Viral_Rep_B1,Viral_Rep_B2},
Relaxase_PHA_IME_{A1,B}, Relaxase_profile_MOBT; plus T4SS_MOBL.
Removed (1). T4SS_MOBM.
The eight integrase profiles are the substantive addition: CONJScan 2.1.0 carries no integrase profile at all — conjugation machinery is its subject, not integration.
2.3 The mating-apparatus quorum is stricter in ICEscan¶
"Quorum" means how many machinery genes MacSyFinder must find, and how close together, before calling a type IV secretion system (T4SS — the apparatus that pushes DNA into the recipient cell).
| CONJScan 2.1.0 chromosome T4SS | ICEscan 2.0.1 T4SS | |
|---|---|---|
min_mandatory_genes_required |
3 | 4 |
min_genes_required |
4–6 (varies by type) | 8 (all types) |
inter_gene_max_space |
60 genes | 20 genes |
ICEscan is stricter on every axis — on a fragmented or decayed element, the difference between a call and silence. That is why a swap loses elements.
3. Why we union rather than swap¶
A swap would trade CONJScan's MOB, dCONJ and plasmid models, and its looser T4SS
quorum, for ICEscan's IME and AICE models. Per genome, that trade is bad:
| genome | curated element | CONJScan hits | ICEscan hits |
|---|---|---|---|
AF261825 |
SGI1 | 2 | 0 — genome emptied |
GU725392 |
ICEEc2 | 24 | 3 |
AL513382 |
SPI-7 | 24 | 3 |
AE009948 |
— | 34 | 27 |
NC_004668_1 |
ICE_EfalV583_tRNALys | 47 | 44 |
SGI1's genome goes to zero machinery hits under ICEscan alone: it is mobilised by
a helper plasmid, its CONJScan signal is a MOB relaxase, and ICEscan deleted that
model. ICEEc2 drops from 24 supporting hits to 3.
Not re-verifiable. Earlier notes record a swap arm in which corroboration across the two model sets fell from 88% to 68%. Those percentages cannot be reproduced from the surviving arms and should not be quoted in a paper. The per-genome collapse above is directly re-measurable and makes the same point.
The union rule. Both model sets run at --coverage-profile 0.5 over the same
Bakta proteins; the two best_solution.tsv tables are merged before the ICE caller
sees them. From ICEscan we take only integrase anchors from four trusted profiles
(§4) and the IME and AICE element classes. We never take its T4SS quorum, and we
never use its system spans as element boundaries.
4. Four integrase profiles we deliberately do not trust¶
ICEscan's IME.xml lists eight profiles as interchangeable integrases. Four are not
element integrases. Each is excluded, and each exclusion is written to the audit TSV
with its reason.
| profile | what the protein actually is | why it must not anchor an element |
|---|---|---|
TIGR02249 |
IntI1, the class-1 integron integrase | An integron is cargo inside elements, not the element. Measured casualty on CP042858.1: an att-bounded 32,103 bp tier-6 ICE became a 103,303 bp unbounded one, at unchanged high confidence, anchored on IntI1. Fires 4× on this set, every time as IntI1. |
TIGR02224 |
XerC, chromosomal dif-site recombinase | Housekeeping. Resolves chromosome dimers at dif; has nothing to do with mobile elements. A XerC was measured being attached 43,639 bp from a 945 bp relaxase cluster, producing an element 6× its annotated size. |
TIGR02225 |
XerD, the other half of the same dif-site pair | As XerC. |
rve |
the rve/DDE catalytic domain, shared by IS transposases | Not an integrase family — a domain. Of its used hits, the overwhelming majority were proteins Bakta independently annotates as transposases (IS3 family ×16, IS6 IS15DIV ×14, IS6 IS1216E ×8). Anchoring on one turns any insertion sequence into a spurious element. |
We diverge from upstream on rve on purpose. ICEscan's IME.xml lists rve as
an exchangeable of Phage_integrase, so a reader comparing the two will find a real
disagreement. rve is the DDE domain shared with IS transposases, which BacFlux
detects separately; admitting it would double-count IS elements as IMEs. The audit
text says so.
Trusted (4): Phage_integrase, Recombinase, UPF0236, PB001819.
4.1 A subtlety in how the exclusion is applied¶
MacSyFinder's best_solution.tsv has two gene columns. gene_name is the profile
that matched; hit_gene_ref is the top-level model gene it stands in for. For a
Recombinase hit these read:
Every excluded profile is an exchangeable of Phage_integrase, so filtering on
hit_gene_ref would let all four back in. The caller gates on gene_name.
4.2 What was actually discarded, and how we know¶
Grepping the element table for profile names proves nothing — it never records them,
so the grep returns zero either way. The evidence is the audit TSV, with 15
row_skipped | untrusted_integrase_profile rows:
| profile | hits discarded |
|---|---|
rve |
103 |
TIGR02249 (IntI1) |
5 |
TIGR02224 (XerC) |
1 |
TIGR02225 (XerD) |
1 |
The damage was real, not theoretical: the un-filtered ICEscan output for this set
contains 71 rve hits and 4 TIGR02249 hits in best_solution.tsv alone, none of
which reaches an element.
Regression check, CP042858.1 — byte-identical in both arms:
4559721-4591823 len=32103 ice bnd=denovo conf=high
4911034-4988140 len=77107 ice bnd=denovo conf=high
The att-bounded 32,103 bp element survives at high confidence, and no 103,303 bp element exists anywhere in the set.
5. What ICEscan does not solve¶
It emits no coordinates. MacSyFinder reports gene ordinals, never base pairs. A row from the Tn4451 detection:
replicon gene_name hit_pos model_fqn locus_num
U15027 Recombinase 2 ICEscan/Chromosome/IME 1
U15027 T4SS_MOBV 6 ICEscan/Chromosome/IME 1
hit_pos 2 and 6 mean "the 2nd and 6th protein in the file". Every base pair
BacFlux prints comes from its own join against the Bakta GFF3; the clustering, the
coordinate work and attach_nearby_integrases cannot be delegated.
Its IME systems sprawl and are not loci. In IME.xml both mandatory genes
(T4SS_MOBV and Phage_integrase) carry loner="1", exempting them from
MacSyFinder's clustering. Counted across the 28 benchmark genomes in the
best_solution.tsv files the caller consumes:
| count | |
|---|---|
| ICEscan IME "systems" | 54 |
| …spanning ≤ 11 genes (usable as a locus) | 22 |
| …spanning > 1,000 genes | 12 |
| widest single "IME" | 8,784 genes |
Counted from best_solution.tsv, which is the file to quote: all_systems.tsv counts
every candidate MacSyFinder considered rather than the ones it kept, and gives
97 / 33 / 24 for the same three rows. The widest single call, 8,784 genes in
S. scabiei, is identical in both.
The widest is on NC_013929 (Streptomyces scabiei) and covers essentially the
entire 10,148,695 bp chromosome as one "IME". BacFlux's clustering turns these
into usable intervals.
It delimits nothing. ICEscan performs no att-site search. Every boundary comes from BacFlux's own att search, IS masking and tRNA scoring. Bounded fraction moves from 17/50 (34%) to 22/63 (35%) — essentially not at all.
The Bakta product-text regex stays a first-class source. Twelve of the 30 curated
pilot elements have an integrase found only by INTEGRASE_PRODUCT_PATTERN matching
Bakta's product text, with no usable ICEscan hit. It is not a fallback.
6. The coverage-threshold confound, stated plainly¶
--coverage-profile sets how much of an HMM profile a protein must cover to count as
a hit. Lowering it finds more, and more marginal, hits — a genuine confound, easy to
credit to the wrong cause.
We adopt 0.5 for both model sets. All 28 runs were verified:
The IME gain is 100% model set, not threshold. Tn4451 is detected through
Recombinase + T4SS_MOBV as an IME system. Recombinase.hmm is one of the 21
profiles ICEscan adds, and CONJScan has no IME model at all — on the same genome it
finds a single MOB relaxase hit and no integrase. No coverage threshold can make
CONJScan find a profile it does not ship. The same holds for IME_CdiR20291_ND.
The ICE improvements seen at 0.3 are 100% threshold. They reproduce with plain
CONJScan at 0.3 and no ICEscan at all. That arm is kept as icescan_cov03/ and
deliberately not used. Whether to lower the threshold is a separate question,
separately measurable, and is not decided here.
⚠
run_icescan.shdoes not reproduce the scored runs. It hard-codes--coverage-profile 0.3at lines 13 (comment) and 34 (command); the scored runs are at 0.5. It caches onbest_solution.tsv, so the nextrm -rf work/*/icescanwould silently regenerate the whole benchmark at 0.3. Fix the script before anyone re-runs it.
7. AICE — a third class, and an honest statement of its validation¶
An AICE (actinomycete integrative and conjugative element) is found in Streptomyces and relatives. It integrates into the chromosome like an ICE and does conjugate into another cell, but carries no relaxase and no mating-pair apparatus: a TraB / FtsK-SpoIIIE translocase moves it across as double-stranded DNA, where classical conjugation transfers a single strand nicked by a relaxase. Possoz et al. 2001 (PMID 11679075) concluded this for pSAM2 from differential SalI methylation, hedged as "probably transferred to the recipient as double-stranded DNA" but called "the first experimental evidence" for double-stranded transfer during conjugation. Vogelmann et al. 2011 (PMID 21505418) drops the hedge and measured the TraB pore at ~3.1 nm, wide enough for a duplex. (The translocase is TraB generically; pSAM2's copy is TraSA.)
An AICE does make single-stranded DNA, but not the kind that travels. It copies itself by rolling-circle replication inside one cell, and that intermediate is single-stranded (te Poele et al. 2008, PMID 18523858).
The mobility ladder (spec §2.5) has no tier for this, for bookkeeping reasons rather than biological ones. Tiers 5 and 6 are defined by machinery: tier 5 is "a relaxase but no mating apparatus, so a helper must supply one", tier 6 is "a relaxase plus its own". An AICE carries neither protein, so neither tier measures anything about it — and with this branch's validation at nil (below), reading its transfer ability as tier 6 would be the worse error. It is reported as its own thing:
| field | value |
|---|---|
element_type |
aice — never folded into ice |
mge_class |
its own class |
mobility_tier |
NA, never blank |
mobility_tier_reason |
explicit: "no tier: tiers 5 and 6 are DEFINED by relaxase + type IV secretion conjugation machinery, which an AICE does not carry…" |
mobility |
"predicted transferable into another cell as double-stranded DNA by a TraB translocase (FtsK/SpoIIIE family); not on the conjugation mobility ladder, whose tiers describe only relaxase + type IV secretion transfer" |
missing_components |
"none expected (an AICE has no relaxase and no mating-pair apparatus)" — so the row does not read as a degraded ICE |
colocalise.py carries "aice" in both ELEMENT_TYPE_SYNONYMS and
CONTEXT_ONLY_ELEMENT_TYPES; without both entries the class parses as None and logs
"unrecognised element_type".
⚠ Validation status at coverage 0.5: zero¶
Two AICEs are called, both on NC_013929 (S. scabiei): 3,336,516–3,342,982
(6,467 bp, de novo boundary) and 5,262,523–5,273,184 (10,662 bp, unbounded).
Neither overlaps any curated element, and neither pilot set contains a curated
AICE. The one good AICE recovery on record — AICEScab56241, start +102 bp, end +44 bp,
recovered fraction 0.99, the best boundary this caller has produced — exists only at
coverage 0.3, not the arm we adopt.
So the AICE branch ships, and its validation on this benchmark is nil. Treat AICE calls as hypotheses.
8. Full before/after results¶
Both arms differ only by --icescan-tsv. "Ratio" is called length ÷ published
length; "honest" means 0.4 ≤ ratio ≤ 2.0.
8.1 ICE pilot — 15/18 → 15/18, honest 9 → 9¶
| element | true bp | control bp | ratio | union bp | ratio | boundary | conf |
|---|---|---|---|---|---|---|---|
| SXT(HN1) | 19,086 | — | — | — | — | missed | |
| R391 | 88,532 | 82,887 | 0.94 | 82,887 | 0.94 | none | high |
| ICEKpnQD23-1 | 190,855 | 77,107 | 0.40 | 77,107 | 0.40 | denovo | high |
| ICEEc2 | 93,895 | 55,055 | 0.59 | 55,055 | 0.59 | denovo | high |
| ICE_EfmISMMSVRE1_Tn916 | 16,894 | 45,485 | 2.69 | 45,485 | 2.69 | none | high |
| ICE(Tn4371)6061 | 43,841 | 43,585 | 0.99 | 43,585 | 0.99 | none | low |
| CMGE(TZ080501) | 125,779 | 62,749 | 0.50 | 50,425 | 0.40 | none | medium |
| ICEKpn16_GR_13-1 | 151,942 | 148,839 | 0.98 | 148,839 | 0.98 | tRNA | high |
| ICEMsp.M1D | 199,376 | 39,437 | 0.20 | 39,437 | 0.20 | none | high |
| ICEPsy10 | 161,009 | — | — | — | — | missed | |
| ICEPvuChnBC22 | 148,751 | 51,523 | 0.35 | 51,523 | 0.35 | none | high |
| ICEVflInd1 | 114,195 | 32,992 | 0.29 | 32,992 | 0.29 | none | low |
| SPI-7 | 133,500 | 83,403 | 0.62 | 83,403 | 0.62 | denovo | high |
| ICE_FprA2-165_rpsI | 82,411 | 39,187 | 0.48 | 39,187 | 0.48 | none | medium |
| ICE_EfalV583_tRNALys | 138,318 | 26,040 | 0.19 | 26,040 | 0.19 | denovo | medium |
| ICEB2 | 37,408 | — | — | — | — | missed | |
| ICE_Step12228_tRNAser | 38,415 | 24,222 | 0.63 | 24,222 | 0.63 | denovo | medium |
| TR2 | 154,097 | 8,458 | 0.05 | 8,458 | 0.05 | none | medium |
Exactly one scored element changes, and it changes for the worse — see §9.
8.2 IME pilot — 3/12 → 5/12, honest 1 → 3¶
| element | true bp | control bp | ratio | union bp | ratio | conf |
|---|---|---|---|---|---|---|
| IME_Sag2603_rpmG | 522 | — | — | — | — | missed |
| MGIAmaMed1 | 1,248 | — | — | — | — | missed |
| IME_Ssal57I_tRNAlys | 5,123 | — | — | — | — | missed |
| IME_CdiR20291_ND | 5,551 | — | — | 3,840 | 0.69 | medium |
| Tn4451 | 6,338 | — | — | 5,942 | 0.94 | low |
| MTnPi10 | 7,591 | 6,252 | 0.82 | 6,252 | 0.82 | medium |
| IME_EfalV583_rpsI | 9,405 | — | — | — | — | missed |
| IME_SsuNSUI002_NS | 11,112 | 181,279 | 16.31 | 179,889 | 16.19 | medium |
| MGIVvuTai1 | 19,039 | — | — | — | — | missed |
| IME_FprA2-165_tRNAlys_2 | 23,194 | — | — | — | — | missed |
| SGI1 | 42,451 | — | — | — | — | missed |
| IMEMlNZP2037-1 | 110,480 | 8,164 | 0.07 | 8,164 | 0.07 | medium |
Both new detections are honest rather than oversized intervals that merely contain
the curated element: Tn4451 at ratio 0.94 (start offset +75 bp) and
IME_CdiR20291_ND at 0.69 (start offset +37 bp) — the two best-bounded IME recoveries
the caller has produced.
8.3 Whole-set census (all 63 calls, not just scored ones)¶
Measured — both arms run over the same 28 genomes, the only difference being mobilome.icescan.run. Rates quoted in §5 predate the
att-search rework and are higher in absolute terms; the comparison this page makes is
unaffected, because restricted to ice-class calls the rate is identical in both arms
(5 of 36, 14%).
| control | union | |
|---|---|---|
| total elements | 51 | 63 |
ice |
36 | 36 — unchanged |
ime |
10 | 21 |
aice |
0 | 2 |
conjugative_region |
3 | 2 |
genomic_island |
2 | 2 |
| predicted self-transmissible | 36 | 36 — unchanged |
confidence high |
16 | 16 — unchanged |
| bounded by a tRNA-anchored att pair | 6 (12%) | 8 (13%) |
… of ice-class calls only |
5/36 (14%) | 5/36 (14%) — identical |
No element gained a self-transmissible claim. The net-new calls in the union arm are all IME or AICE — tier 5 or no tier.
"Bounded by an att pair" here means boundary_method=tRNA specifically, the only
method the caller acts on: a denovo pair is reported but never applied to the
coordinates (see the tuning guide's note). Restricted to ice-class calls, where a
real element and a fragment are not conflated, the rate is identical between the arms
— ICEscan neither helps nor hurts how often an ICE gets its true edges.
9. Costs — what got worse¶
Three of the four costs still hold; the fourth no longer occurs.
1. CMGE(TZ080501) loses 12,324 bp. On KX077897: 48,091–110,839 →
60,415–110,839; recovered fraction 0.4988 → 0.4009. With ICEscan on, an ICEscan
Recombinase sits 0 bp from the cluster and wins the "then the closest" tie-break
over a Bakta product-text Site-specific recombinase 11,032 bp away — and the
more distant one was nearer the curated left edge. 0.4009 is about 1.1 kb from
dropping out of the "honest" band.
2. One boundary loss of two.
| control | union | |
|---|---|---|
AE009948 |
929,751–986,650 · 56,900 bp · denovo · medium | 923,639–941,160 · 17,522 bp · none · medium |
CP048437_1 |
150,670–187,352 · 36,683 bp · denovo · medium | 158,404–187,352 · 28,949 bp · denovo · medium |
On AE009948 the union arm loses the de novo boundary outright. On CP048437_1 both
arms report denovo, so that element loses interval but not its boundary. high +
boundary_method=none is 10 in both arms.
3. The nested double-report on CP011419.1 no longer occurs. The union arm once
emitted a 179,889 bp ime blob (98,234–278,122, ratio 16.19) with the honest 4,959 bp
call (246,807–251,765, ratio 0.45, start +63 bp) nested inside it. It now gives three
clean, non-overlapping calls — that 4,959 bp element, a compact 2,407 bp ime
elsewhere on the same contig, and an unrelated ice — and no blob. A MacSyFinder
loner gene (one admitted without the normal co-localisation test) was being treated
as grounds to merge two distant clusters; that merge rule has been corrected.
4. Unscored ICE intervals shrink by 10–20 kb. Several loci not covered by either
pilot move as ICEscan supplies a closer integrase — e.g. NC_004668_1 89,312 →
69,537 bp (2,177,344–2,266,655 → 2,197,119–2,266,655) at high confidence,
CP048437_1 69,163 → 59,955 bp (1,318,921–1,388,083 → 1,328,129–1,388,083). These
are unvalidated collateral of the same tie-break rule.
Open design question, not resolved here: when neither candidate integrase yields
an att pair, is "then the closest" the right second key? It is what cost CMGE its
12 kb and what cost the AE009948 boundary above.
10. Limitations — read before trusting any output¶
There is no false-positive measurement, and this benchmark cannot produce one¶
score.py computes recall only — no precision, false-positive or specificity code
at all, as its own docstring says. This cannot be patched: every genome in both
pilots was chosen because it contains a curated element, so a call overlapping
nothing curated may be a genuine second element rather than an error. Nothing here can
tell the difference.
Counting them anyway, as an upper bound on the error rate and not an error rate. Measured against all 1,677 of ICEberg's curated entries on these 28 accessions, not just the pilots' 30 — the correct denominator for "does this call correspond to something curated":
| calls | overlap no curated element | unvalidated self-transmissible | unvalidated high |
|
|---|---|---|---|---|
| control | 51 | 17 (33%) | 9 | 4 |
| union | 63 | 21 (33%) | 9 | 4 |
In both arms, about a third of calls land on nothing curated, and 9 self-transmissible / 4 high-confidence claims rest on nothing measurable. The union does not worsen that ratio; it adds unvalidated IME and AICE calls at medium/low confidence on top of it.
The negative control — 2 calls in 32.6 Mb, neither invented¶
A negative control needs genomes with no reported ICE. Twelve closed genomes were screened, each verified absent from all 1,677 ICEberg entries:
| Genome | Why it is here | Calls |
|---|---|---|
| Buchnera aphidicola Sg / APS, Wigglesworthia glossinidia | reduced endosymbionts, ~0.65 Mb, no MGE traffic | 0 |
| Prochlorococcus marinus, Synechococcus sp. CC9605 | streamlined marine genomes | 0 |
| Aquifex aeolicus VF5 | deep-branching thermophile | 0 |
| Staphylococcus aureus N315 | clinical isolate, prophages + transposons | 0 |
| Escherichia coli K-12 MG1655 | the most-studied bacterial genome there is | 0 |
| Pseudomonas aeruginosa PAO1 | 6.3 Mb reference strain | 0 |
| Halobacterium sp. NRC-1 | an ARCHAEON — the models are bacterial, so any call would be spurious by construction | 0 |
| Bacillus subtilis 168 | reference strain | 1 ice |
| Salmonella Typhimurium LT2 | reference strain | 1 ime |
Total: 2 calls across 32,601,100 bp. Neither survives as an error.
B. subtilis 168 → ICEBs1, a real element, and the best-evidenced call in this validation: 529,362–549,932 (20,571 bp; ICEBs1 is ~20.5 kb), all four anchor classes, MOBT relaxase (NicK), boundary resolved by a tRNA-anchored att at tRNA-Leu(gag) — ICEBs1 integrates at trnS-leu2 — and Bakta annotated the integrase literally as "ICEBs1 integrase". ICEberg has no entry for NC_000964.3.
⚠ A warning about this benchmark's own design. The set originally justified including strain 168 with "ICEBs1 is absent from 168 itself". That is false: ICEBs1 was discovered in strain 168 (Auchtung et al. 2005). Had the call been counted rather than inspected, a textbook-correct detection would have been recorded as a false positive, and a working detector might then have been "fixed". Every call in a negative control must be examined, never merely counted.
Salmonella Typhimurium LT2 → 2,900,443–2,906,075 (5,633 bp): an integrase plus a
protein Bakta labels only "DNA-binding protein", which CONJscan's T4SS_MOBM profile
hits at i-eval 1.8e-84, coverage 0.986 — a near-full-length relaxase match. A
strong relaxase beside an integrase is what an IME is. Whether this locus is a
bona fide IME or two co-located genes is a specialist question; it is listed among
the open domain questions rather than scored either way.
What this does and does not establish. The caller is not promiscuous: nine full genomes, three of them large, well annotated and dense with recombinases, prophages and IS elements, produced nothing at all. It does not give a false-positive rate — "absent from ICEberg" is not "contains no element", ICEberg's curation being partial. The honest reading is an upper bound of 2 candidate false positives in 12 genomes, of which 0 are confirmed errors.
Boundaries¶
About half of all calls are reported unbounded. On the union arm (results_final.tsv
/ ime_results_final.tsv), 10 of the 20 detected curated elements (50%) carry an
att pair; across all calls the rate is 34 of 63 (54%). The chromosomal median
absolute offsets are 5,141 bp at the start and 14,912 bp at the end. Mind the
denominator: 50% is over detected curated elements, 54% over all calls, and the two
are different questions.
The arm comparison was made with the earlier att search, which reworked. Under it, 6 of 18 detected elements carried a direct repeat in the CONJScan-only arm and 6 of 20 in the union arm, and on the nine ICE pilot elements that are both detected and chromosomal (the only ones where boundary error is a meaningful question — see the standalone-deposit note below) the median absolute offsets were 14,294 bp at the start and 34,239 bp at the end, identical in both arms: ICEscan moved boundaries not at all. The CONJScan-only arm has not been re-run since it was replaced, so that holds only for the older search; likely, but not measured, for the current one.
Either way the shape of the problem is unchanged: half of all elements are reported
unbounded, their start and end being the outermost machinery genes rather than the true
edges, and the residual error on bounded ones is measured in kilobases. Read
boundary_method before quoting any coordinate.
One benchmark entry is broken¶
SXT(HN1) / AB450045 is deposited as a 19,086 bp record containing 17
proteins, no relaxase and no T4SS, standing in for an element that is really ~100 kb.
Both CONJScan and ICEscan return zero hits on it; no machinery-based caller can
find machinery that is not in the record. It is counted as a miss throughout for
consistency, but the ICE pilot's real ceiling is 17/18, not 18/18.
Other standing limitations¶
- ICEscan and CONJScan are forks of one another, so agreement between them is weaker evidence than agreement between independent tools would be (§1).
- The AICE branch is entirely unvalidated at the adopted threshold (§7).
- Two ICE pilot entries (
ICEPsy10,ICEB2) are missed in both arms; seven of the eighteen ICE entries are "standalone" deposits where the element is the record, leaving no flanking sequence for an att site and making the boundary question trivial. - Agreement with ICEberg's coordinates is not the same as truth — several ICEberg entries are themselves predictions, or simply "the whole deposited record".
11. Licensing¶
The ICEscan models are CC BY-NC-SA 4.0 (Institut Pasteur / CNRS) — academic, non-commercial use only. This is the same licence as the CONJScan models the module already fetches.
BacFlux ships neither. Both are fetched at run time from a URL in
config/config.yaml, default run: false, exactly as the spec's hard rule (§11)
requires for every licence-encumbered database. Setting run: true means you
download them under your own agreement with the licensor. Commercial users should
leave this off or obtain permission from the model authors.
No ICEscan model, profile or code is present in this repository, and none of EBI's CC BY-NC-SA-derived scripts has been copied or adapted (see CITATIONS.md).
12. Citations¶
ICEfinder2 / ICEscan model set
Wang M, Goh Y-X, Tai C, Wang H, Deng Z, Ou H-Y. (2024) ICEberg 3.0: functional categorization and analysis of the integrative and conjugative elements in bacteria. Nucleic Acids Research 52(D1):D732–D737. https://doi.org/10.1093/nar/gkad935
CONJScan / MacSyFinder — the models both sets descend from
Coluzzi C, Garcillán-Barcia MP, de la Cruz F, Rocha EPC. (2022) Evolution of plasmid mobility: origin and fate of conjugative and non-conjugative plasmids. Molecular Biology and Evolution 39(6):msac115.
Cury J, Touchon M, Rocha EPC. (2017) Integrative and conjugative elements and their hosts: composition, distribution and organization. Nucleic Acids Research 45(15):8943–8956. https://doi.org/10.1093/nar/gkx607
Abby SS, Cury J, Guglielmini J, Néron B, Touchon M, Rocha EPC. (2016) Identification of protein secretion systems in bacterial genomes. Scientific Reports 6:23080. http://dx.doi.org/10.1038/srep23080
Néron B, Denise R, Coluzzi C, Touchon M, Rocha EPC, Abby SS. (2023) MacSyFinder v2: Improved modelling and search engine to identify molecular systems in genomes. Peer Community Journal 3:e28.
EBI Mobilome Annotation Pipeline — the source of the approach
EBI-Metagenomics
mobilome-annotation-pipeline(Apache-2.0), which carries its own ICEfinder2 attribution. https://github.com/EBI-Metagenomics/mobilome-annotation-pipeline
Reading their pipeline is how we learned that ICEscan existed, that it ships the IME and AICE models, and at what coverage threshold it is run. No code was copied — three of their scripts are CC BY-NC-SA-derived, and copying them would contaminate BacFlux's MIT licence (spec §11). Adopting facts, parameters and design decisions is permitted, and is what was done.
Element ground truth
ICEberg 3.0 curated ICE/IME coordinates, as above.
13. Bottom line¶
Adopt the union. ICE detection (15/18), predicted self-transmissible counts (36) and
high-confidence counts (16) are untouched; IME detection goes 3/12 → 5/12 with two
genuinely well-bounded new recoveries; all four integrase exclusions demonstrably
fire; the CP042858.1 regression check holds byte-identically in both arms.
run_icescan.sh needs its threshold fixed; the FIX-4 tie-break's second key is worth
revisiting; and this benchmark still cannot measure a false-positive rate.