Skip to content

How fidelity is predicted

Every Golden Gate plan prints one fidelity figure, and so does every round of a library build. It is a prediction. It says how cleanly the overhangs you chose should pair with each other and with nothing else. This page says what the number counts, what stands behind it, and what it does not tell you.

What the number counts

The score is for a whole set of overhangs at once, never for one overhang alone.

A junction has two ends. One carries the overhang on the top strand, the other carries its reverse complement on the bottom strand. For each junction the package reads a count matrix twice. The correct count is those two ends ligating to each other. The total is those two ends ligating to anything the tube holds, which is every overhang in the set and every reverse complement of one. The junction scores correct over total. The set scores the product of its junctions.

A longer set therefore scores lower than a short one even when every junction is clean, because the product has more terms. One bad pair pulls down the whole set.

The report carries more than the figure. It lists any overhang whose own correct pair was seen fewer than 100 times per 100,000 ligations, which is where NEB's Ligase Fidelity Viewer stops calling a pair strong. It also lists every cross pair seen 10 times or more per 100,000, worst first. Those cross pairs are the ones that would give you the wrong product.

The measurements that ship

All five matrices come from one paper: Pryor, J.M., Potapov, V., Kucera, R.B., Bilotti, K., Cantor, E.J. and Lohman, G.J.S. (2020) Enabling one-pot Golden Gate assemblies of unprecedented complexity using data-optimized assembly design. PLoS One 15(9): e0238592, doi:10.1371/journal.pone.0238592. It is CC BY 4.0, so the data ships with the package. What ships lists the file.

Enzyme Product measured Overhang Cycled between Ligations counted
BsaI BsaI-HFv2 4 bases 37 and 16 °C 203,364
BsmBI BsmBI-v2 4 bases 42 and 16 °C 219,378
Esp3I Esp3I 4 bases 37 and 16 °C 224,222
BbsI BbsI-HF 4 bases 37 and 16 °C 189,282
SapI SapI 3 bases 37 and 16 °C 172,332

Each matrix covers every overhang of its length against every other: 256 by 256 for the four-base ones, 64 by 64 for SapI. Rows hold top-strand overhangs, columns hold bottom-strand ones, and both are written 5' to 3'. A row's correct partner is the column spelling its reverse complement, not the column of the same name. A pair never seen is left out of the file rather than written as a zero.

A matrix belongs to the product named beside it, cycled between the two temperatures shown. The same enzyme bought from somebody else does not inherit it.

Which enzyme stands in for which

PaqCI, AarI, BspQI, BpiI and BtgZI have no published matrix. Rather than refuse a number, the package borrows one and says whose.

It tries an enzyme that reads the same site first. An isoschizomer cuts the same site the same way, so one measurement covers both enzymes under two names. Failing that, the enzyme takes the shipped matrix of its own overhang length with the most ligations behind it.

Enzyme Site Overhang Scored on Why
BspQI GCTCTTC 3 bases SapI the same site
BpiI GAAGAC 4 bases BbsI-HF the same site
PaqCI CACCTGC 4 bases Esp3I most ligations at four bases
AarI CACCTGC 4 bases Esp3I the same
BtgZI GCGATG 4 bases Esp3I the same

Pryor's Discussion is the authority for the second step: predicted fidelity "is unlikely to be significantly impacted by the choice of Type IIS restriction enzyme". Both steps are worked out from the shipped data, so a matrix added later changes this table without anyone editing a list.

What a measured number is not

It is not a yield, not a pass mark, and not a measurement of your own reaction. A set at 87% can still hand you a plate of correct colonies, and a clean set can fail for reasons ligation never touches.

A matrix also belongs to the ligase and the conditions it ran under, not to the Type IIS enzyme. The package keeps that straight in the label it prints beside every figure.

Label What scored the set
measured the enzyme's own shipped matrix
measured with Esp3I, not specific to PaqCI another enzyme's matrix standing in
measured ligase profile, not specific to PaqCI a ligase matrix you supplied
rule-based estimate no measurement covers it at all

The last row is a ranking and not a prediction. Those rules take 0.05 off a junction for each near-duplicate partner and 0.02 for an overhang of one base kind, and both weights are choices rather than measurements. A set scored that way compares with another set scored that way, and with nothing else.

Bringing your own ligase matrix

Potapov et al. (2018) profiled T4 DNA ligase itself across all 256 four-base overhangs. Ligation is the ligase's work, so that data speaks to every Type IIS enzyme, including the ones nobody has measured. The archive is CC BY-NC 4.0. None of it ships with the package and nothing from it is redistributed. You download your own copy, accept its terms yourself, and point the package at the file.

One file is read, either .xlsx or .csv. It needs a header row of overhang labels, the same labels down the first column, and a count in each cell. Anything else is refused with a message saying what was expected. Where the file name states the conditions, as FileS03_T4_18h_25C.xlsx does, they are read off the name and printed with the result.

Command Option What it does
mbio cloning goldengate plan --ligase-matrix scores an enzyme nobody has measured
mbio cloning goldengate plan --prefer-ligase-matrix scores on your matrix even where the enzyme has one of its own
synbio igga plan --ligase-matrix reports how often that ligase joins each round's overhangs; nothing is designed on it
synbio igga plan --ligase-sheet names the sheet to read, for a workbook holding several

Both --ligase-matrix options fall back to an environment variable when you give no path:

export LIULAB_MBIO_LIGASE_MATRIX=/path/to/FileS03_T4_18h_25C.xlsx

Your matrix is the third choice, not the first. The enzyme's own matrix wins, then a stand-in, then your profile. A stand-in measures the same kind of reaction and a pure ligation does not. Pass --prefer-ligase-matrix to override that. The command line reference lists these options with the rest.

Reading the score yourself

from mbio.overhangs import fidelity

report = fidelity(["AGGT", "CAGC", "GCTT", "TACA"], "BsaI")
print(f"{report.value:.0%}", report.label)

That prints 87% measured. The same four overhangs under PaqCI print 90% measured with Esp3I, not specific to PaqCI. The Python reference covers the rest of the report.