Reagent audit: does each CDS code for what the map says?
Check that each annotated coding sequence of a vector map codes for what the map says it does, and find where translation really stops when an annotation ends without a stop codon. A second question asks whether a map's strongest cryptic promoter, splice site or repeat is stronger than its own base composition predicts.
| Reached by | Tools → Analyze |
| Formats | GenBank (.gb, .gbk, .gbff), one or many records per file |
What it does
Choose the GenBank maps in your project and press Audit CDS annotations. Every CDS is read
from the map's own bases, joins and strand included, from its codon_start, under the genetic code
it names (transl_table, the standard code when it names none). Each is checked for:
- a frame that does not close: a length from
codon_startthat is not a whole number of codons, when neither end is partial - a stop inside the reading frame
- no start: a first codon the genetic code cannot start with
- no stop: a last codon that is not a stop
- a translation mismatch: a
/translationthe bases do not give, with an alternative start read as methionine and an ambiguous codon translated when every reading of it gives the same amino acid
A partial end (< or >) is not judged, and a CDS marked /pseudo carries no flag: the map
already says it does not code. Where an annotation ends without a stop, translation is read on in
the same frame, round the origin of a circular map, to the first stop. Click a row with its map open
to select the CDS on the map.
Composition flags
Switch Ask to Composition flags and press Measure flag rates. Every map of a few kilobases spells some promoter a σ70 model scores, some GT a splice model likes and some repeat, so a count of hits measures the map's length and composition, not a defect. The question that can fail is comparative: is the map's own extreme more extreme than the same bases in another order? Each statistic is scored on the map and on shuffles of it that keep its dinucleotide composition, and no statistic takes a threshold:
| statistic | the map's number | a flag is |
|---|---|---|
| Strongest σ70 promoter | the most negative total free energy the La Fleur–Hossain–Salis model gives any position, either strand (kcal/mol) | lower than the shuffles |
| Strongest splice donor | the highest MaxEntScan 5′ splice-site score, either strand | higher |
| Strongest splice acceptor | the highest MaxEntScan 3′ splice-site score, either strand | higher |
| Longest homopolymer | the longest run of one base (bp) | longer |
| Longest tandem repeat | the longest run of a repeated unit (bp) | longer |
| Longest repeated stretch | the longest stretch present twice (bp) | longer |
| Longest hairpin arm | the longest arm of an inverted repeat (bp) | longer |
Choose which statistics to run, the shuffle count, the k of the shuffle, α and the correction.
When you’d use this
- Before you order a construct. A stop inside a fusion or a tag annotated in pieces is cheaper to find on the map than in a western blot.
- Taking a map from someone else. A depositor's map has not been through a validator, and an annotation copied from an older map can outlive an edit to the sequence.
- Reading a deposited record. A tag or a truncated marker annotated without its stop says nothing about how far the protein runs; the read-through does.
What this computes
- CDS count per map and across the maps, and how many maps annotate one
- frameshift, internal stop, no start, no stop and translation mismatch, each as a count of CDS and of maps, with every flagged CDS listed by name and map
- partial 5′ and 3′ ends, counted, and left unjudged
- read-through of every annotation that ends without a stop: the codons translation adds before the first in-frame stop, the coordinate of that stop, whether it crossed the origin, and none when no stop comes in one lap of a circular map or before the end of a linear one
- runs into: the annotated CDS, on the same strand and in the same frame, that a read-through reaches, which is a protein annotated in pieces
- expected read-through of a random sequence of the map's own base composition, (1 − s)/s codons with s the probability that one codon is a stop of the code on the strand read
For composition flags, per statistic and map:
- observed extreme, the shuffle mean, the Monte Carlo p (1 + shuffles at or beyond the observation) / (shuffles + 1) with its exact 95% interval, and q after Benjamini–Hochberg or Benjamini–Yekutieli across the maps within that statistic
- rate: the fraction of maps calling at q ≤ α, with an exact (Clopper–Pearson) 95% interval
- the maps a scanner could not read (an ambiguity code the σ70 model does not define), named with the scanner's reason and left out of that statistic's count rather than counted as zero
Every result states, in words generated from the run, which flags fired and in how many maps, how many annotations end without a stop and what reading on found, and what a clean result does and does not show.
Worked example
Five complete vector sequences deposited in GenBank in 2024 (PQ065984, PQ360726, PP429287, PP129559 and PP505785) hold 26 CDS. None is flagged, and 12 ends are partial. Eight annotations end without a stop: seven reach a stop in the backbone and one runs into another annotated CDS.
- The eGFP of PQ065984 is annotated to base 7,775; translation runs 13 codons further, against 25 expected of a random backbone of its composition.
- The truncated chloramphenicol acetyltransferase of PP429287 stops on the very next codon.
- The HA tag of PQ360726 reads into the SV40 NLS annotated after it: one fusion protein annotated in pieces.
Switch to Composition flags with all five maps and 99 shuffles. The longest hairpin arm beats chance in 5 of 5 maps (PQ065984's is 178 bp against a shuffle mean of 13.9), the longest repeated stretch in 4 of 5 (257 bp in PQ360726 against 10.9) and the longest tandem repeat in 1 of 5 (PP429287, 21 bp against 12.7). No map has a σ70 promoter, a splice donor or acceptor, or a homopolymer stronger than its own composition predicts.
Across all 695 complete vector records of 2024, 99 shuffles each, Benjamini–Hochberg at q ≤ 0.05 within each statistic, the longest repeated stretch beats chance in 575 of 695 maps (82.7%, 95% interval 79.7–85.5%) and the longest hairpin arm in 281 (40.4%, 36.8–44.2%). No map is called for a σ70 promoter, a splice donor or acceptor, a homopolymer or a tandem repeat (0 of 690 or 695, interval 0–0.5%); five records hold letters other than A, C, G, T and N and are not scanned for promoters or splice sites.
Limitations
- A clean deposited record is expected. NCBI's submission check writes the
/translationand refuses a CDS with an internal stop unless it is marked pseudo, so across the 1,871 CDS of 695 vector records deposited in 2024 none of the five flags fires. The flags are for maps that have not been through that check. - The audit reads the annotation as written. It does not find an unannotated reading frame, and it does not judge a terminator. Composition flags test whether a promoter, splice site or repeat is more extreme than chance, not whether it is active.
- A long repeat in a vector is usually deliberate: duplicated promoters, ITRs and LTRs are repeats by design, so a composition flag says the map is not a random arrangement of its bases, and reading what the repeat is comes next.
- With 99 shuffles the smallest p is 0.01, so several maps can tie at the floor; more shuffles separate them. Over a large corpus the floor also limits what can be called at all: across 695 maps a map alone at p = 0.01 gets a q of 1 (0.01 × 695, capped), so a statistic is only called when many maps sit at the floor together. The single longest homopolymer of the 2024 corpus (30 bases against a shuffle mean of 8.1) is not called for that reason; raise the shuffles to test one map among many.
- The expected read-through assumes the bases after the annotated end are random with the map's composition; a tail much shorter than expected says nothing more than one much longer does without a look at what the tail is.
Where the numbers come from
Location extraction, partial ends and translation under every NCBI genetic code are checked against
Biopython on all 1,871 CDS of the 695 complete vector records in GenBank's vectors taxon published
in 2024, and the flag and read-through rules are checked on the same records. The σ70 model is
checked against the Barrick lab's promoter calculator, MaxEntScan against Yeo and Burge's scorer, the
shuffle against uShuffle, and the Monte Carlo tails, their intervals and the corrections against
R's binom.test and p.adjust.
Hypothesis ledger: pre-registered hypotheses and their verdicts
State a hypothesis and the test that will answer it before any evidence exists, attach the runs that test it, and decide across every hypothesis with the false discovery rate controlled.
Assay decay: a published assay against the sequences circulating now
Check a published PCR assay's primers and probes against current genomes, and see how often each one now carries a mismatch — and whether that mismatch is at the 3′ end.