Skip to content

Validation

The mobilome module's ICE/IME caller has been measured three ways: against a set of curated elements with published coordinates, head-to-head against the EBI Mobilome Annotation Pipeline on the same genomes and with the same scoring code, and on deliberately fragmented copies of those genomes to find out what a draft assembly costs. This page is that work — what was tested, what it showed, and what it does not show.

Terms used throughout. An ICE (integrative and conjugative element) integrates into the chromosome and carries its own conjugation machinery, so it can move itself into another cell. An IME (integrative mobilisable element) integrates and carries a relaxase — the enzyme that nicks the DNA to start transfer — but no apparatus of its own, so it needs a helper element to move. An att site is the short direct repeat left at each end of an element when it integrates; finding the pair is how an element's true edges are established. AMR is antimicrobial resistance, an MGE is a mobile genetic element of any class, and an AICE is an actinomycete integrative and conjugative element.

Everything the module reports is a prediction from sequence

An element called predicted self-transmissible carries conjugation machinery that looks complete. It has not been shown to transfer. The confirmatory experiment is a filter or broth mating assay, and no number on this page substitutes for one. See the mobility ladder.

The benchmark set

Forty closed reference genomes downloaded from GenBank and used as-is, in three groups. Two accessions carry both a curated ICE and a curated IME, so 40 genomes yield 30 curated elements.

Set Genomes What it is
ICE pilot 18 Deposits carrying an ICE with curated coordinates in ICEberg, across 14 genera
IME pilot 12 The same for IMEs, 10 genera, sizes deliberately straddling the module's size floor (522 bp to 110 kb)
Negative control 12 Closed genomes with no curated ICEberg entry, 32,601,100 bp in total

Every accession, with the reason it was chosen, is listed under the benchmark genomes below. The negative set spans reduced endosymbionts, streamlined marine genomes, a deep-branching thermophile, five full-size reference strains and one archaeon — the archaeon being a construction check, since the machinery models are bacterial and any call there would be spurious by definition.

How a call is scored. ICEberg's curated interval is taken as truth. Among a caller's calls on that genome the scorer keeps the one with the largest overlap, and reports the start offset, the end offset, and the recovered fraction — overlapping base pairs divided by the curated length. Recovered fraction is a recall measure and nothing else; the scorer contains no precision or false-positive code, which is why the negative control and the call-burden count below have to be read alongside it.

The truth standard is a curation, not the truth

ICEberg's coordinates are neither perfect nor exhaustive, and this set contains one example of each failure: a curated entry whose deposited record cannot contain the element it stands for, and a negative-control genome that carries a real, well-known element ICEberg has no entry for. The first is counted as a miss for every caller; the second scores a correct call as a false positive. Both are described below.

The benchmark genomes

Every genome is a public GenBank deposit, used as downloaded. The sets were chosen deliberately rather than sampled — the IME set in particular is stacked with elements below the module's size floor, which is why its recall is the lowest number on this page.

ICE pilot — 18 genomes

Six are the positive controls named in the design spec; the rest widen the set to 14 genera.

Accession Organism Curated element Length Why this one
AB450045 Vibrio cholerae SXT(HN1) 19.1 kb spec control: SXT
AY090559 Providencia rettgeri R391 88.5 kb spec control: R391
CP042858.1 Klebsiella pneumoniae ICEKpnQD23-1 190.9 kb spec control: ICEKp
GU725392 Escherichia coli ICEEc2 93.9 kb spec control: ICEEc2
CP012430.1 Enterococcus faecium ICE_EfmISMMSVRE1_Tn916 16.9 kb spec control: Tn916
KP299160 Pseudomonas aeruginosa ICE(Tn4371)6061 43.8 kb spec control: Tn4371
KX077897 Streptococcus suis CMGE(TZ080501) 125.8 kb genus diversity: Streptococcus
CP027036.1 Klebsiella pneumoniae ICEKpn16_GR_13-1 151.9 kb genus diversity: Klebsiella
CP034444.1 Mesorhizobium sp. ICEMsp.M1D 199.4 kb genus diversity: Mesorhizobium
CP024712.1 Pseudomonas syringae ICEPsy10 161.0 kb genus diversity: Pseudomonas
MH160822.1 Proteus vulgaris ICEPvuChnBC22 148.8 kb genus diversity: Proteus
GQ463144 Vibrio fluvialis ICEVflInd1 114.2 kb genus diversity: Vibrio
AL513382 Salmonella enterica SPI-7 133.5 kb genus diversity: Salmonella
CP048437.1 Faecalibacterium duncaniae ICE_FprA2-165_rpsI 82.4 kb genus diversity: Faecalibacterium
NC_004668.1 Enterococcus faecalis ICE_EfalV583_tRNALys 138.3 kb genus diversity: Enterococcus
CP002188 Mycoplasma bovis ICEB2 37.4 kb genus diversity: Mycoplasma
NC_004461.1 Staphylococcus epidermidis ICE_Step12228_tRNAser 38.4 kb genus diversity: Staphylococcus
NC_013929 Streptomyces scabiei TR2 154.1 kb genus diversity: Streptomyces

IME pilot — 12 genomes

Sizes deliberately straddle min_element_bp (8,000 bp): six of the twelve sit below the floor, so they are expected misses that measure what the floor costs.

Accession Organism Curated element Length Why this one
AE009948 Streptococcus agalactiae IME_Sag2603_rpmG 522 bp extreme sub-floor: 522 bp, 15x below min_element_bp; smallest IME in ICEberg
CP001103 Alteromonas mediterranea MGIAmaMed1 1,248 bp deep sub-floor: 1.2 kb MGI, Gram-negative counterpart to the 522 bp case; genus diversity: Alteromonas
CP002888.1 Streptococcus salivarius IME_Ssal57I_tRNAlys 5,123 bp modal sub-floor architecture: S. salivarius tRNALys ~5.1 kb family, 11 near-identical copies in ICEberg
NC_013316.1 Clostridioides difficile IME_CdiR20291_ND 5,551 bp sub-floor, no named integration site (ND) so no tRNA hint for the att search; genus diversity: Clostridioides
U15027 Clostridium perfringens Tn4451 6,338 bp named IME control: tnpX serine recombinase + oriT, no T4SS = the integrase+relaxase/no-T4SS row of the Phase 4 table; 1.7 kb below the floor
NC_017860 Prevotella intermedia MTnPi10 7,591 bp floor edge case: 7591 bp, only 409 bp below min_element_bp; sits on a 580 kb second chromosome
NC_004668.1 Enterococcus faecalis IME_EfalV583_rpsI 9,405 bp just above the floor; same chromosome as ICE pilot entry ICE_EfalV583_tRNALys, so it tests ICE vs IME discrimination in one genome
CP011419.1 Streptococcus suis IME_SsuNSUI002_NS 11.1 kb above floor, no named integration site; genus diversity: Streptococcus suis
BA000037 Vibrio vulnificus MGIVvuTai1 19.0 kb 15-30 kb MGI stratum; genus diversity: Vibrio
CP048437.1 Faecalibacterium duncaniae IME_FprA2-165_tRNAlys_2 23.2 kb same chromosome as ICE pilot entry ICE_FprA2-165_rpsI, so it tests ICE vs IME discrimination; genus diversity: Faecalibacterium
AF261825 Salmonella enterica SGI1 42.5 kb named IME control: canonical AMR-carrying SGI1 (ACSSuT / In104), mobilised by an IncA/C helper plasmid; borderline deposit, one-sided flank
CP016079.1 Mesorhizobium loti IMEMlNZP2037-1 110.5 kb largest stratum: 110 kb element on a 7 Mb chromosome, tests 15 kb anchor clustering across a long element; genus diversity: Mesorhizobium

Negative control — 12 genomes, 32.6 Mb

Genomes with no curated ICEberg entry. Any call here is a candidate false positive.

Accession Organism Why this one
NC_004061.1 Buchnera aphidicola Sg reduced endosymbiont genome (0.64 Mb): no conjugation machinery expected at all
NC_004344.2 Wigglesworthia glossinidia brevipalpis reduced endosymbiont (0.70 Mb): obligate intracellular, no MGE traffic
NC_002528.1 Buchnera aphidicola APS second Buchnera lineage, independent confirmation
NC_005042.1 Prochlorococcus marinus SS120 streamlined marine cyanobacterium, 1.75 Mb
NC_007516.1 Synechococcus sp. CC9605 marine picocyanobacterium, no curated ICE
NC_000918.1 Aquifex aeolicus VF5 deep-branching thermophile, 1.55 Mb
NC_002745.2 Staphylococcus aureus N315 well-characterised clinical isolate, no ICEberg entry
NC_000913.3 Escherichia coli K-12 MG1655 the reference lab strain; its mobilome is fully described and holds no ICE
NC_002516.2 Pseudomonas aeruginosa PAO1 reference strain, extensively studied
NC_000964.3 Bacillus subtilis 168 Mis-assigned when the set was built. ICEBs1 is present in 168 — it was discovered there (Auchtung 2005) — but ICEberg has no entry for it. The caller finds it, so this is a true positive scored as a false alarm. It is left in place rather than quietly removed
NC_003197.2 Salmonella Typhimurium LT2 reference strain, no curated ICEberg entry
NC_002607.1 Halobacterium sp. NRC-1 archaeon: CONJscan/ICEscan models are bacterial, so any call is suspect

ICE pilot — 15 of 18

That is 9 of the 11 with real chromosomal context, and 6 of the 7 where the deposited record is the element and there is no flanking sequence for an att site to sit in.

The true ceiling is 17 of 18, because one of the three misses is the broken curated record. Each miss has a stated cause:

Miss Size Why
SXT(HN1) 19 kb deposited No relaxase and no conjugation apparatus in the record. Not findable; should be footnoted out of any future version of this benchmark
ICEPsy10 161 kb No relaxase, no coupling protein and no VirB4 anywhere in the element. MacSyFinder's own rejected-candidates file records "quorum of mandatory genes required (3) is not reached: 0"
ICEB2 (Mycoplasma bovis) 37 kb Machinery too divergent for the profile models to cover — a model-coverage limit that applies to any tool built on the same profiles

Boundaries. On the nine detected chromosomal ICEs — the only ones where boundary error is a meaningful question — the median absolute offset is 5,141 bp at the start and 14,912 bp at the end, and the median recovered fraction is 0.476. On the six standalone deposits the median recovered fraction is 0.669.

Quote those two for BacFlux alone. The head-to-head below reports a different pair, and the two are not interchangeable.

IME pilot — 5 of 12

Median recovered fraction 0.69. This is the weaker half of the module and is described that way everywhere it appears.

The misses concentrate at the small end — 522 bp, 1,248 bp and 5,123 bp — where the caller's 2 kb floor for IME-shaped machinery and its requirement for two anchor classes both apply; and at SGI1 (42 kb) and MGIVvuTai1 (19 kb), which produced no overlapping call at all.

There is a second, structural limit on this half of the module, and it is visible in the code rather than in the score. The att search is always given the 8 kb ICE floor and refuses any repeat pair implying an element smaller than that, while an IME is admitted at 2 kb. Four of the five detected IMEs have machinery spans of 3,840, 4,959, 5,942 and 6,252 bp, all under the att floor, so their boundaries can never be resolved however clean the repeat pair is — they keep boundary_method = none and report the machinery span. The deliberate reading is that an att pair implying a 3 kb element is mostly noise; the honest reading is that IME extents are largely unresolved. Both floors are constants in the script rather than config keys; see Tuning.

Negative control — 2 calls in 32.6 Mb

Ten of the twelve genomes returned nothing at all, including E. coli K-12 MG1655, P. aeruginosa PAO1 and S. aureus N315 — three large, well-annotated genomes dense with recombinases, prophages and insertion sequences. The archaeon is among them, which is the construction check passing.

Two calls were made, and neither survives as an error.

B. subtilis 168 → ICEBs1, a real element ICEberg has not catalogued. Called at 529,362–549,932, so 20,571 bp against an element of about 20.5 kb; all four anchor classes present; a MOBT relaxase; and the boundary resolved by a tRNA-anchored att site at a tRNA-Leu, which is where ICEBs1 is known to integrate. Bakta independently annotated the integrase as "ICEBs1 integrase". This is the best-evidenced single call in the whole validation.

S. Typhimurium LT2 → an open question, not an answer. An integrase sits beside a protein Bakta labels only "DNA-binding protein", which the T4SS_MOBM relaxase profile hits at i-evalue 1.8 × 10⁻⁸⁴ over 98.6% of the profile — 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 domain question, not a software one.

This is an upper bound of 2 candidate calls, not a false-positive rate

"Absent from ICEberg" is not "contains no element". The honest reading is 2 candidates in 12 genomes, of which 0 are confirmed errors.

The set originally justified including B. subtilis 168 on the grounds that ICEBs1 is absent from 168 itself. That is false — ICEBs1 was discovered in strain 168 (Auchtung et al. 2005). Had the calls been tallied instead of inspected, a textbook-correct detection would have been recorded as a false positive and a working detector would then have been "fixed" to stop making it. Every call in a negative control has to be examined, never merely counted.

What the second model set adds

The optional ICEscan layer (Turning it on) supplies the integrase and IME/AICE models that the default machinery model set has no equivalent for. It was measured as a controlled two-arm experiment over the 28 pilot genomes: both arms identical, the only difference being whether the ICE caller was given ICEscan's table.

Default models only With ICEscan
ICE pilot detected 15/18 15/18 — unchanged
IME pilot detected 3/12 5/12
Total calls 51 63
ice 36 36 — unchanged
ime 10 21
aice 0 2
Calls carrying a predicted self-transmissible claim 36 36 — unchanged
Confidence high 16 16 — unchanged

No element gained a self-transmissible claim. Every net-new call in the ICEscan arm is an IME or an AICE — tier 5 or no tier at all. The layer can add elements at the mobilisable end of the ladder; it cannot promote anything to the top rung.

Both new IME detections fit the curated element closely rather than being oversized intervals that merely contain it: Tn4451 at 0.94 of its curated length (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.

It costs something, and the cost is reported. One curated element, CMGE(TZ080501), loses 12,324 bp of recovered length because an ICEscan integrase sits 0 bp from the machinery cluster and wins a "then the closest" tie-break against a more distant integrase that happened to be nearer the true left edge. Several elements not covered by either pilot shrink by 10–20 kb for the same reason. Whether "then the closest" is the right tie-break when neither candidate yields an att pair is an open design question, not a settled one.

Head-to-head against the EBI Mobilome Annotation Pipeline

The same 40 genomes were run through the EBI Mobilome Annotation Pipeline v5.0.0, its output converted into the same table layout, and the same unmodified scoring script run over both. Any bias in that scorer applies equally to both callers. Two differences are contained in the comparison rather than controlled for: the two pipelines call genes with different tools (Prodigal there, Bakta here), which affects both the protein set the shared models search and the integrase annotation; and the other pipeline was run with its functional-annotation branches switched off, which is fair for a boundary comparison but means nothing here evaluates its full output.

These are not two independent callers

Both find conjugation machinery by running MacSyFinder with the ICEscan models — the EBI pipeline inside its ICEfinder2-lite subworkflow, BacFlux in its conjscan / icescan rules, with the optional layer switched on for this comparison. The MacSyFinder versions differ slightly (2.1.4 there, 2.1.6 here) but the profiles and the system definitions that decide "is there a conjugation system here at all" are the same models.

Layer Shared or independent?
Machinery detection Shared — same models, same engine
Clustering: which machinery genes belong to one element Independent — different code, different rules
Boundary refinement: where the element starts and stops Independent — vmatch plus an ICEfinder2-derived script there, an exact maximal-repeat search here
Class assignment: ICE / IME / AICE Partly independent — same model vocabulary, different decision rules

So the detection numbers are a consistency check — did two implementations of the same idea behave the same way, and where did they diverge — and must never be reported as independent confirmation. The boundary and class numbers are the real comparison.

Detection

Over the 30 curated elements:

Count
Found by both 17
Found by BacFlux only 3
Found by the EBI pipeline only 0
Found by neither 10
Totals BacFlux 20/30, EBI 17/30

The three are ICEVflInd1, Tn4451 and MTnPi10; in each, the other pipeline's prescan produced no candidate at all. Because the machinery models are shared, the difference cannot be explained by a better model — it is attributable to what sits around the shared engine: candidate seeding, a class-aware size floor, and the decision to report low-quorum machinery at low confidence rather than discard it.

ICEVflInd1 is detected but classified cime_or_island — integrase, coupling protein and apparatus, no relaxase — not ice. It counts as detected because its call overlaps the curated interval, which it does. It is not a correct class call and should not be presented as one.

Class

Of the 17 elements both callers found, the classes agree on 14 and differ on 3. All three are ICEberg-curated ICEs that the other pipeline called IMEs, and BacFlux agrees with the curation on all three: SPI-7, ICE_EfalV583_tRNALys and ICE_Step12228_tRNAser.

This is not cosmetic. ICE versus IME is the self-transmissible-versus-needs-a-helper distinction — rungs 6 and 5 of the ladder, and the axis the intrinsic-versus-acquired framing rests on. Calling a self-transmissible element "mobilisable with a helper" understates transfer risk.

Two things keep this from being a claim that one caller is right about class in general. There is a fourth element, TR2, where both callers say IME against an ICEberg ICE curation — a shared miss, not counted among the three. And with three disagreements out of seventeen shared elements, this is a consistent direction, not a rate.

Call burden

Calls Total bp called
BacFlux 65 2,630,059
EBI pipeline 64 2,881,859

One call apart, and BacFlux claims 8.7% fewer base pairs while recovering three more curated elements. Neither caller achieves recall by volume. This table has to be read next to the recall figures, because the scorer keeps a caller's largest overlapping call: a tool that emitted one enormous call per genome would score well on recovered fraction and badly on nothing the scorer measures.

Negative set, and the one call both callers made

Two calls each across the 32.6 Mb, on different genomes — BacFlux on S. Typhimurium LT2, the EBI pipeline on S. aureus N315 — plus the shared call on B. subtilis 168.

On that shared call the two pipelines return base-pair-identical coordinates, the same 60 bp flanking repeat, the same MOBT relaxase and the same mating-pair type, by two different boundary algorithms. Because boundary refinement is the genuinely independent layer, this agreement carries information, and what it evidences is that ICEBs1 is a real element missing from the catalogue.

Boundaries

Measured on the elements both callers found — nine chromosomal, five standalone. Before the boundary rework, the other pipeline's boundaries were better than ours; that is what prompted the fixes.

Metric BacFlux, before BacFlux, now EBI pipeline
Chromosomal, median |start offset| 14,294 bp 5,141 bp 7,427 bp
Chromosomal, median |end offset| 34,239 bp 14,912 bp 23,745 bp
Standalone, median recovered fraction 0.59 0.94 0.94

The clearest single case: on ICEEc2 the two callers now land on exactly the same interval, 27–92,263, from independent algorithms.

The fixes did not come from a better repeat finder. Of the four elements where the other pipeline's boundary beat ours, none was a case where it found a repeat we could not: two were repeats we found and then discarded through our own defects — a ranking that put raw repeat length above tRNA anchoring, and a flank window too narrow to reach the real att site — and two were candidate-extent differences with no repeats on either side. The conservative policy was not loosened to achieve this: a de novo repeat pair is still reported and never applied.

Both callers remain far from the curated coordinates on large chromosomal elements. On TR2 both recover 0.055 of a 154 kb element; on IMEMlNZP2037-1 both recover 0.074 of 110 kb. Large chromosomal delimitation is an open problem for both, and the output says so: those calls carry boundary_method = none, meaning the machinery span was reported because no att pair was resolvable.

The 0.94 figure is not the 0.669 figure

Easy to quote wrongly, so it is spelled out. 0.94 is a like-for-like head-to-head median over the five standalone ICEs both callers found, and the other pipeline's 0.94 is over exactly the same five. 0.669 is the pilot-wide median over all six standalone ICEs BacFlux detected — the sixth is ICEVflInd1 at 0.29, which the other pipeline missed entirely. Detecting one extra, hard element lowers your own median. Quote 0.669 for BacFlux alone; quote 0.94 only alongside the other caller's 0.94 on the same five.

If you repeat this comparison: the integron term means two things

The EBI pipeline writes the Sequence Ontology term integron (SO:0000365) both for an ICEfinder2-lite IME and for a genuine IntegronFinder integron — across the 40 merged GFF files, 27 rows of the first kind and 6 of the second. Filtering on the type column alone silently imports unrelated integrons into the ICE/IME score, inflating both the call count and the base pairs called, and nothing errors. Filter on the source column first, then read the class from the mobile_element_type attribute.

What a draft assembly costs

Every measurement above was made on closed, single-contig genomes, while most BacFlux runs are short-read assemblies. So the same 40 genomes were cut into contigs at three contiguities, re-annotated and re-run through the whole chain with identical parameters: 120 assemblies, 191 calls. Breaks were placed at insertion sequences first, then rRNA operons, then at random, because those are what actually break a real assembly.

Closed N50 150 kb N50 50 kb N50 20 kb
ICE detected (of 18) 15 15 15 12
IME detected (of 12) 5 4 3 3
Median called ÷ true length 0.553 0.446 0.338 0.219
Median called ÷ largest surviving piece 0.553 0.574 0.771 0.721
Confidence high 16 (24%) 12 (19%) 7 (10%) 2 (3%)
Confidence low 7 (10%) 22 (34%) 42 (63%) 39 (65%)
boundary_method = none 30 (44%) 49 (77%) 55 (82%) 54 (90%)
Calls on the 12 negative controls 5 4 3 2

Detection is flat down to 50 kb N50. ICE recall is identical to the closed genomes at both 150 kb and 50 kb, and only breaks at 20 kb. For calibration, a survey of 28 real BacFlux Illumina assemblies from this lab gives a median N50 of 307 kb, with 26 of the 28 at or above 150 kb — so the sweep is deliberately pessimistic.

The length collapses, but the caller is not what collapses it. Against the true element, median recovered length falls from 0.55 to 0.22. Against the largest surviving contig piece — the ceiling any per-contig caller can reach — it is flat or better. The caller keeps recovering the same share of what is still visible; the missing bases are the assembly's.

Nothing is invented. Across all 191 draft calls: no fabricated att sequence (every att pair reported on a draft occurs at least twice in the corresponding closed genome), no class promoted at high confidence, no new false positive on a negative control. Calls on the negative controls went down under fragmentation, from 5 to 2. Contig ends removed evidence; they did not manufacture it.

What the sweep could not test: its cuts are cleaner than a real assembler's, it contains no misassemblies, and no read-level effects — coverage variation, and the collapse of multi-copy insertion sequences — are represented at all. Which columns to read on a draft, and what not to conclude from them, is its own page.

The whole deliverable, end to end

The pilots test the ICE caller. The module's actual output — one row per AMR gene with a tier and a confidence — is exercised on Klebsiella pneumoniae ATCC BAA-2146 (GCF_000364385.3), a pan-resistant genome whose plasmids are described in the published literature. That run reaches tiers 1, 2, 3, 5 and 6; it recovers the chromosomal ICE at 0.946 of its curated length with a tRNA-anchored boundary and still ends 3,138 bp inside the curated element, because a called interval is a floor. It does not reach tier 4 — see below. The walkthrough is the worked example; the columns are on Reading the output.

Unit tests

The helper scripts are importable Python and are tested outside Snakemake:

pytest workflow/scripts

457 tests pass and 2 skip. 380 of them are the mobilome package's own. They test the code, not the biology — that a repeat planted at a known offset is found, that a confidence cap cannot be bypassed, that a malformed input is refused rather than silently parsed. Nothing in them says a call is correct.

What the benchmark does not show

Four limitations are invisible in the numbers above, and all four change how the output should be read.

A short boundary becomes a wrong tier, not just a wrong coordinate

The tables above report whether an element was found and how far its edges landed from the curated ones. But the module's actual deliverable is a tier per AMR gene, and a boundary that stops short silently demotes every gene beyond it.

Measured on a separate set of eight clinical genomes carrying ICEberg-curated elements: of the 53 AMR genes that sit inside a curated ICE interval, only 15 (28%) reached tier 6, while 30 (57%) came out at tier 1, "chromosomal, intrinsic candidate" — the opposite conclusion. blaIMP-8 on CP021851.1 is the clearest case: it lies well inside curated Tn6397, but 24,007 bp past the right-hand edge the caller drew, so it is reported as an intrinsic candidate.

A tier 1 call in a genome that has any ICE or IME call in it is therefore weaker evidence than a tier 1 call in a genome that has none. Check the distance from the gene to the nearest element call before reading "intrinsic candidate" at face value.

Most calls report a machinery span, not the element's edges

boundary_method = none on 30 of the 68 calls over the closed 40-genome set (44%) — the interval is the outermost machinery genes, not the element's edges. Of the calls that do get an att pair, only a tRNA-anchored pair is ever applied to the coordinates: over the 28 pilot genomes that is 5 of 36 ICE-class calls (14%). A de novo pair is reported as a lead and never used.

That policy is deliberate and measured. On 300 randomly placed 15 kb non-element spans of a clinical K. pneumoniae chromosome, with the real insertion-sequence mask applied, 22% returned a confident de novo "boundary"; adding a guard that counts how often the repeat occurs elsewhere brought it to 16%, and not applying de novo pairs at all brings what reaches the AMR table to about 1%. At a one-in-six error rate a de novo pair is a reasonable lead for a human and an unacceptable basis for silently redefining an element — widening an interval turns every gene inside it into predicted cargo.

Read boundary_method before quoting any coordinate.

About a third of calls correspond to nothing curated

Checked against every one of ICEberg's 1,677 curated entries on the 28 pilot accessions, not just the 30 pilot elements: 17 of 51 calls (33%) without ICEscan, 21 of 63 (33%) with it, overlap no curated element; 9 self-transmissible claims and 4 high-confidence claims rest on nothing measurable in either arm.

This is an upper bound on the error rate, not an error rate. 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. Nothing in this benchmark can tell the difference, and its scorer contains no code that could.

One class is unvalidated outright. AICE — the actinomycete class, which transfers double-stranded DNA through a translocase instead of a relaxase — is called twice on one Streptomyces genome, neither call overlaps a curated element, and neither pilot set contains a curated AICE. Treat AICE calls as hypotheses.

Tiers 4 and 5, the thinnest-tested part of the ladder

Tier 6 and tier 1 carry the benchmark work above. The middle of the ladder does not.

  • Tier 4 — inside a named transposon or integron — depends entirely on the opt-in TnCentral naming layer, and has now been measured on two genomes. On the K. pneumoniae ATCC BAA-2146 positive control, blaCTX-M-15 scores tier 4 inside TnEcp1.1 at 99.9% identity over 87% of the 3,417 bp reference; the same run without the layer scores that gene tier 2, so the override behaves as designed (Worked example). On Enterobacter hormaechei it produced 15 rows at once, all fifteen genes inside a single curated chromosomal transposon, TnSMR478 (hybrid mode on five closed genomes).

Those two results say different things. One gene in one element is the path working; fifteen genes in one element is a reminder that a tier 4 count reports elements as much as genes — a single transposon carrying a resistance cluster produces as many rows as it has genes, and reading fifteen rows as fifteen independent findings would overstate the evidence considerably.

Tier 4 stays uncommon for two structural reasons rather than one measurement. It is reached only when a curated name is the strongest evidence available — six other curated elements in the BAA-2146 genome sit on plasmids and score 5 or 6 instead — and the ≥80% reference-coverage rule is strict: on fragmented clinical assemblies the same TnEcp1.1 was refused at 12% and 49% coverage. Expect tier 4 on closed genomes far more than on drafts. - Tier 5 is exercised, but only by one of its two routes. Every tier 5 row on disk is a gene on a mobilisable plasmid. No AMR gene in any run has been assigned an IME context, so the "inside an IME" half of tier 5 is untested end to end — which matters, because the IME pilot is the weaker half of the module to begin with.

Neither gap is a reason to distrust tiers 1 and 6. Both are a reason to treat a tier 4 or tier 5 call as an unvalidated code path rather than a measured one, and to say so if it appears in a dossier.

On vmatch

Reviewers ask why the att-site search does not use vmatch, the string-matching tool the reference ICE finders use for this step. The short answer is that BacFlux's own search computes the same thing.

BacFlux's search finds exact maximal repeats between the two flanking windows in standard-library Python — vmatch's own semantics. To test that rather than assert it, a second implementation was built on vmatch's actual data structure (prefix-doubling suffix array, Kasai LCP array, cross-flank maximal-match enumeration) and run against the shipped one on every flank window the caller genuinely searched — after insertion-sequence masking, at the real element coordinates, at the real computed repeat-length floor:

52 genomes from the benchmark tree — a wider set than the 40 scored above — 246 att searches, 180 distinct flank windows, 1,033 repeats, exact set equality on every window. No window hit either implementation's internal cap.

Two searches over the same DNA return the same set of repeats, so vmatch would find nothing that is not already found, and the search needs no external program at all. The same measurement disposes of a related idea: shipping both searches and treating their agreement as a confidence signal would be worthless, because identical semantics are expected to agree exactly.

The licence position is secondary but real: bioconda's vmatch recipe declares license: Unknown / OTHER and vmatch.de is unreachable, so its terms cannot be established. With no measured benefit on one side and terms that cannot be read on the other, it is not adopted.

An earlier figure that should not be quoted

A previous version of this measurement was recorded as "35 of 35 windows, 122 repeats". It does not reproduce under any scoping that could be reconstructed, because the script that produced it was never kept. The equality result itself reproduces, over roughly five times as many windows, and the numbers above are the ones to use. The script that produces them is retained with the benchmark artefacts and re-runs in about ten minutes.

No code from the EBI pipeline is used here

Three of that pipeline's scripts are derived from ICEfinder2 and carry CC BY-NC-SA 4.0 headers. They were read to understand an approach, which is all that was done; what was adopted from them is conventions — Sequence Ontology terms, an element ID format, the discard-with-reason pattern and two numeric thresholds. Licence types for every tool, model set and database the module can use are listed on Licensing.

Where the numbers come from

The benchmark tree — per-element tables, the scoring script, the fragmentation sweep and the conversion audit — is kept with the benchmark run itself, outside this repository. The method write-ups that these figures are drawn from are in the repository and readable on GitHub: docs/methods_ebi_comparison.md (the head-to-head), docs/methods_icescan_union.md (the two-arm model-set experiment), docs/methods_att_and_small_plasmids.md (the att search and the vmatch measurement), docs/mobilome_draft_assemblies.md (the fragmentation sweep) and docs/mobilome_worked_example.md (the end-to-end run).

Call totals differ slightly between measurements — 51 and 63 in the two-arm experiment over the 28 pilot genomes, 65 in the call-burden table over all 40, 68 in the fragmentation sweep's closed baseline — because they were taken at different commits over different subsets. The negative-control count moves the same way: 2 calls in the head-to-head, 5 in the sweep's closed-genome row. Each figure is labelled with what it was measured over; do not carry one into another's table.

References

  • Wang, M., et al. (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 — the curated coordinates used as the truth standard, and the ICEscan models by way of ICEfinder2.
  • Néron, B., et al. (2023). MacSyFinder v2: improved modelling and search engine to identify molecular systems in genomes. Peer Community Journal 3, e28. https://doi.org/10.24072/pcjournal.250 — the engine both callers run.
  • Coluzzi, C., Garcillán-Barcia, M. P., de la Cruz, F., & Rocha, E. P. C. (2022). Evolution of plasmid mobility: origin and fate of conjugative and nonconjugative plasmids. Molecular Biology and Evolution 39(6), msac115. https://doi.org/10.1093/molbev/msac115 — the CONJscan model set.
  • Auchtung, J. M., Lee, C. A., Monson, R. E., Lehman, A. P., & Grossman, A. D. (2005). Regulation of a Bacillus subtilis mobile genetic element by intercellular signaling and the global DNA damage response. PNAS — the ICEBs1 discovery paper, and the negative control's lesson.
  • EBI Mobilome Annotation Pipeline v5.0.0, EMBL-EBI Microbiome Informatics team. https://github.com/ebi-metagenomics/mobilome-annotation-pipeline

Every tool, model set and database the module can use is listed with its citation on Citation and references.