Template Generation: gBlocks, Codon Optimization, Universal PCR
Standard operating procedure from the WeaveSeq experiments team, shared across the IVTT pipeline runs.
Standard operating procedure from the WeaveSeq experiments team, shared across the IVTT pipeline runs.
Produce one IVTT-ready linear dsDNA template per binder for the top ~96 in-silico candidates of a campaign: E. coli-codon-optimized, carrying T7 promoter, Shine-Dalgarno (SD), Kozak, N-terminal FLAG tag, double stop, and T7 terminator. Strategy: order 96 individual IDT gBlocks (Strategy B) rather than re-using the existing yeast oPool (Strategy A — unsafe in E. coli systems, Section 2) or ordering a fresh pool (Strategy C — keeps the deconvolution burden). Templates feed SOP 04 — IVTT Expression; the FLAG tag is the handle for the HTRF donor arm of the sandwich in SOP 05 — TR-FRET Plate Assay.
The binder DNA already exists as an IDT oPool of single-stranded oligos (yeast-codon-optimized CDS, no stop codon, pCTCON2 homology arms) built for the YSD lane — see YSD SOP 03 for its exact structure (5′ arm 50 bp + CDS + c-Myc 30 bp + TAATAG + 14 bp downstream). Its reuse for IVTT was evaluated and rejected for E. coli systems on codon usage (Section 2). Three strategies were compared:
| A — reuse existing oPool | B — 96 individual gBlocks | C — fresh E. coli oPool | |
|---|---|---|---|
| DNA cost | primers $129-134 (112-mer Ultramer) or ~$20-40 (two-step PCR) | $2,150-2,765 | $400-1,000 (verify; quote-only) |
| Deconvolution | Required: $750-2,000, +3-5 days | None (one tube per binder) | Required: same as A |
| Codons | Yeast MFC: AGA at every Arg — unsafe in E. coli IVTT (Section 2) | E. coli MFC: zero rare codons | E. coli MFC: zero rare codons |
| Lysate constraint | Rabbit reticulocyte only (mammalian tRNA pool); TnT L1170 discontinued | None (PURExpress/PUREfrex) | None |
| Synthesis turnaround | In hand | 2-4 business days (≤750 bp tier) | 4-7 business days + deconvolution |
| Verdict | Reject for the primary lane (documented as fallback, Section 7.1) | PRIMARY | Revisit only if panel grows to ≥384 |
gBlocks arrive at 250-1,000 ng each — enough for dozens of 10 µL mini-reactions directly. A single universal-primer amplification still pays because it: (1) banks a master stock so repeat campaigns cost ~$100 of PCR reagents instead of ~$2.8k of DNA (top cost lever, see SOP 09); (2) produces the exact linear-template format NEB documents for PURExpress (T7 promoter + RBS + start/stop + terminator, ≥6 bp after the stop); (3) yields a sequencing amplicon for Sanger QC.
The existing oPool CDS is yeast-codon-optimized by AffiniBind's
"most frequent codon" (MFC) strategy, and the yeast table maps R → AGA
(_SCEREVISIAE_CODONS in affinibind/ordering/ysd/codon_optimizer.py, verified
locally). Local analysis of 29 real campaign binders from
candidate_table parquet:
Why this is a false-negative trap here: detection is N-terminal FLAG, so premature stops or frameshifts anywhere in the CDS still report a signal — roughly two-thirds of the panel carries at least one AGA and would produce truncated protein that fails to bind, masquerading as non-binding. Rabbit reticulocyte lysate would translate the yeast CDS fine (AGA/AGG are common mammalian codons) but the standard RRL kit (TnT T7 Quick L1170) is discontinued and RRL hemoglobin interferes with TR-FRET (US Patent 7,150,973; see SOP 01). Conclusion: re-optimize the CDS for E. coli (Strategy B).
Fragment layout 5′ → 3′ (mean 320 bp, range 273-360 bp for the 51-80 AA binders of the sample campaign; fixed flanks = 61 nt 5′ + ~59-60 nt 3′):
5'-TAATACGACTCACTATAGGG GG AGGAGG GCCACC ATG GACTACAAAGACGATGACGACAAG <binder CDS> TAATAG GTCGAC TAGCATAACCCCTTGGGGCCTCTAAACGGGTCTTGAGGGGTTTTTTG -3'
└─ T7 promoter (20 nt) ┘ └SD┘ └Kozak┘ └start┘└─ FLAG = DYKDDDDK (24 nt) ──┘ └─ E. coli MFC ─┘ └2×stop┘ └6 bp─┘ └───── T7 terminator (47 nt) ─────┘
The expressed ORF is M + DYKDDDDK + <binder AA sequence> — an N-terminal FLAG
fusion whose detection handle is the anti-FLAG M2 donor arm of the HTRF
sandwich (SOP 05). The CDS is back-translated from
the sequence (AA) column of candidate_table.annotated.parquet using the
E. coli MFC table (Section 3.2).
| Element | Requirement | This design |
|---|---|---|
| T7 promoter | 20-100 nt upstream of the CDS | TAATACGACTCACTATAGGG (20 nt), immediately 5′ of the GG |
| Ribosome binding site (SD) | ~6-8 nt upstream of the ATG | AGGAGG with GCCACC (6 nt) between SD and ATG → SD 3′ end sits 6 nt from the start codon (inside the window) |
| Kozak context | Not required by E. coli systems | GCCACC gives a vertebrate Kozak context, making the same construct work in rabbit reticulocyte lysate (dual compatibility; Section 7.1) |
| Start / stop codons | Required | ATG … TAATAG (TAA TAG tandem) |
| Post-stop spacer | ≥6 bp downstream of the stop codon (PCR templates) | GTCGAC (6 bp) |
| T7 terminator | Recommended for PCR templates | 47-nt canonical terminator (Section 3.3) |
| Template amount | Starting concentration 250 ng per 25 µL reaction; valid range 25-1,000 ng | SOP 04 scales this to 10 µL mini-reactions |
| AA | Codon | AA | Codon | AA | Codon | AA | Codon |
|---|---|---|---|---|---|---|---|
| A | GCG | C | TGC | G | GGC | P | CCG |
| R | CGT | Q | CAG | H | CAT | S | AGC |
| N | AAC | E | GAA | I | ATT | T | ACC |
| D | GAT | K | AAA | L | CTG | V | GTG |
| F | TTT | M | ATG | W | TGG | Y | TAT |
Re-optimization with this table produces zero rare codons — a scan for
AGG/AGA/CGG/CGA/ATA/CTA/CCC/GGA/TTA across all 29 re-optimized sample CDSs
returned 0 hits (local computation). Code note: codon_optimizer.py currently
ships only the yeast table; the E. coli table must be added there as part of
the template-builder script (Section 5.1).
Verification (2026-08-18). The table was checked against the primary references; no codon changes were warranted, and the rationale is documented here so future edits are evidence-bound:
e_coli_316407.csv;
kazusa.or.jp/codon).Rare-codon list validation (2026-08-18). The §5.2 scan list (AGG/AGA/CGG/CGA/ATA/CTA/CCC/GGA/TTA) was checked against the cell-free literature. Chumpolkulwong et al. 2006 measured five of them as severely depressing E. coli cell-free expression: AGA, AGG, ATA, CCC, CGG. The remaining four (CGA, CTA, GGA, TTA) were tolerated in their S30 extract but are inefficient in cells and depend on minor tRNAs — and the PURE system is more tRNA-limited than an S30 extract (Li et al. 2017; Doerr et al. 2021) — so they are retained as conservative exclusions (excluding them costs nothing, since the MFC table never emits them). TGT and GGG were considered and not added: Cys is decoded by a single wobble tRNA (so TGT carries no tRNA penalty) and the MFC table emits neither codon. The 9-motif list is therefore kept unchanged.
| Element | Sequence (5′ → 3′) | Notes |
|---|---|---|
| T7 promoter | TAATACGACTCACTATAGGG | Doubles as the universal forward primer |
| GG spacer | GG | 2 nt; keeps the T7 +1 transcript start clean |
| SD | AGGAGG | |
| Kozak | GCCACC | |
| Start | ATG | |
| FLAG | GACTACAAAGACGATGACGACAAG | Canonical FLAG epitope DYKDDDDK; no dibasic OmpT cleavage site |
| Double stop | TAATAG | |
| 3′ spacer | GTCGAC | 6 bp |
| T7 terminator | TAGCATAACCCCTTGGGGCCTCTAAACGGGTCTTGAGGGGTTTTTTG | 47 nt |
| Universal R primer | CAAAAAACCCCTCAAGACCCGTTTAGAGGCCCCAAGGGGTTATGCTA | Reverse complement of the terminator |
| Optional c-Myc | GAACAAAAGCTTATTTCTGAAGAGGACTTG | EQKLISEEDL (30 bp), inserted between CDS and TAATAG as a free second detection tag; adds ~$2.7/fragment at $0.09/bp (sequence identical to the YSD 3′ arm, YSD SOP 03) |
Because all 96 + control fragments share identical 5′ and 3′ flanks by construction, one universal primer pair amplifies the entire panel.
| Item | Vendor | Catalog # | Price (2026) | Notes |
|---|---|---|---|---|
| gBlocks gene fragments, 125-3,000 bp (tubes) | IDT | n/a (order item) | $0.09/bp (budget; "from $0.07/bp" all-inclusive launch pricing may apply to eBlocks) | 250-1,000 ng/fragment; 2-4 business days for ≤750 bp (5-8 BD >1,000 bp); median error rate <1:5,000 bp; plate format has a 24-fragment minimum — use tubes |
| Gene Fragments, 0.3-0.5 kb | Twist Bioscience | n/a | $35 flat/fragment ($0.07/bp applies to 0.5-1.8 kb only) | Backup; express 2-4 BD; error rate 1:7,500 |
| Gene Fragments, 200-500 bp | GenScript | n/a | $0.07/bp, $35 minimum charge for <500 bp; 5-7 BD | Fallback; institutional contracts ~20% off (PSU 2024-25 contract) |
| oPools oligo pool (Strategy C only) | IDT | n/a | quote-only; budget $400-1,000 (verify) | 40-350 nt, 4-7 BD, error <1:2,000; minimum pool size ambiguous (~100 per third-party comparison vs "no minimum" per IDT) |
| Ultramer 112-mer (Strategy A forward primer) | IDT | n/a | ~$1.15-1.20/base at 4 nmol (McMaster facility resale) → ~$129-134 | Direct IDT Ultramer pricing: (verify) |
| Standard 25 nmole DNA oligos (universal F/R pair) | IDT | n/a | $0.25-0.80/base (verify); ~$20-40 per pair | IDT list pricing is login-based |
| Q5 2× Master Mix | NEB | TODO(verify) | TODO(verify) | High-fidelity PCR enzyme for universal amplification |
| DNA Clean & Concentrator-5 | Zymo | TODO(verify) | TODO(verify) | Post-PCR cleanup |
| Qubit dsDNA HS Assay Kit | Thermo Fisher | TODO(verify) | TODO(verify) | Template quantification |
| Sanger sequencing | core facility | n/a | $4-8/rxn | UChicago core $4.95 internal / $8.47 external; UTHSC $5; GenHunter $8 |
| Amplicon-EZ barcoded NGS (deconvolution option, Strategy A/C) | Azenta/Genewiz | n/a | from ~€49/sample | 8 business days |
| DNA LoBind tubes, 1.5 mL | Eppendorf | 022431021 | $57.79 / 250 | For fragment/stock dilutions |
| UltraPure DNase/RNase-free water | Thermo Fisher |
Full bill of materials and one-time vs per-campaign split: SOP 02 and Appendix.
Input: the campaign's candidate_table.annotated.parquet, which contains the
candidate_uid and sequence (AA) columns (verified in
affinibind/schema/_candidates.py — CANDIDATE_TABLE_ANNOTATED_SCHEMA;
affinibind/ordering/ysd/cli.py already requires the sequence column and
back-translates AA → DNA for oligo ordering).
Proposed script affinibind/scripts/trfret/build_templates.py — does not
exist yet (planned module; scripts/ currently contains design/export/filter/
fingerprint/generation/ordering/prepare/publishing/rescore/shared — the
scripts/trfret/ subdirectory follows that convention):
candidate_table.annotated.parquet (see affinibind/ingest/_reader.py
for discovery of candidate_table.\{annotated,complex,base\}.parquet).sequence column with the E. coli MFC table
(Section 3.2 — add the table to affinibind/ordering/ivtt/codon_optimizer.py).template_table.tsv — columns: candidate_uid, aa_len,
fragment_len, fragment_sequence, gc_pct, rare_codon_count — plus an
IDT order manifest (Pool name | Sequence convention, as in
affinibind/ordering/ysd/idt_writer.py).The template table is a local working artifact; record fragment lot numbers and
QC outcomes in the WeaveSeq experiment notes when results are pushed
(SOP 07).
| Check | Method | Gate |
|---|---|---|
| Reading frame | Translate all 96 fragments in silico | 0/96 frame or premature-stop errors; ORF = M-DYKDDDDK-<binder>-STOP |
| FLAG present | Sequence scan | 96/96 at the N-terminus, immediately after ATG |
| Double stop | Sequence scan | 96/96 TAATAG before the 3′ spacer |
| Rare codons | Scan AGG/AGA/CGG/CGA/ATA/CTA/CCC/GGA/TTA | 0 hits |
| Internal motifs | Scan CDS for T7 promoter/terminator runs | 0 hits |
| Length sanity | Expected range for 51-80 AA binders | 273-360 bp |
One primer pair amplifies all 96 + controls. Reaction (50 µL, per fragment):
| Component | Volume |
|---|---|
| Q5 2× Master Mix | 25 µL |
10 µM universal F primer (T7: TAATACGACTCACTATAGGG) | 2.5 µL |
| 10 µM universal R primer (rev-comp terminator, Section 3.3) | 2.5 µL |
| gBlock (1-10 ng) | X µL |
| Nuclease-free water | to 50 µL |
Thermocycler program:
| Step | Temp | Time | Cycles |
|---|---|---|---|
| Initial denaturation | 98°C | 30 s | 1 |
| Denaturation | 98°C | 10 s | |
| Annealing | 60°C | 15 s | 12-15 |
| Extension | 72°C | 30 s | |
| Final extension | 72°C | 2 min | 1 |
| Hold | 4°C | ∞ |
Use the minimum cycle count that gives robust yields (≤15 — every extra cycle accumulates polymerase errors and, for mixed templates, bias; each well here is a single fragment, so bias is not the issue, error accumulation is). Run in a 96-well PCR plate with 96 fragments + 2 controls + 1 no-template well per plate.
Order as 2-3 extra gBlocks with the same flank design (~$100-130 total):
| Control | Content | ~Size | Purpose | ~Cost |
|---|---|---|---|---|
| POS1 | FLAG + core streptavidin CDS | ~540 bp | Binds the biotinylated target directly (core streptavidin retains biotin binding, Kd ~10⁻⁷ M — Sano & Cantor, PNAS 1995) → maximal HTRF sandwich signal; validates expression, FLAG detection, and the full FRET geometry end-to-end | ~$38-49 |
| CTRL | FLAG + eGFP CDS | ~870 bp | Expression and donor-arm control; negative control for target binding | ~$61-78 |
| (spare) | duplicate POS1 | ~540 bp | Re-order insurance for the most-used control | ~$38-49 |
Assay-level negative wells — no-template lysate, FLAG-eGFP + biotinylated target, free FLAG peptide (DYKDDDDK) competition at 100 µg/mL, and biotin-BSA acceptor-only — are plate controls defined in SOP 05.
Only viable if fragment synthesis is impossible and an RRL system is procured. Caveats: TnT T7 Quick L1170 is discontinued at Promega (replacement TnT T7 Quick for PCR DNA L5540, 40 rxns, price login-gated — TODO(verify)), and RRL hemoglobin interferes with TR-FRET readouts (US Patent 7,150,973; SOP 01).
Frame math (mandatory 1-nt spacer). FLAG (24 nt) + the pCTCON2 5′ arm
(50 nt, affinibind/ordering/ysd/oligo_builder.py DEFAULT_5PRIME_ARM) = 74 nt ≡
2 mod 3 → the CDS would be out of frame. Inserting a single G spacer
between FLAG and the arm restores the frame; the 50-nt arm then translates as a
~17-AA GS-rich flexible linker. Verified in silico: 0/29 frame or stop errors
with the spacer (local computation).
112-nt forward Ultramer (T7 + GG + SD + Kozak + ATG + FLAG + G spacer + 5′ arm):
TAATACGACTCACTATAGGG GG AGGAGG GCCACC ATG GACTACAAAGACGATGACGACAAG G CTAGTGGTGGAGGAGGCTCTGGTGGAGGCGGTAGCGGAGGCGGAGGGTCG
└─ T7 (20 nt) ──┘ └SD┘ └Kozak┘ └ATG┘ └── FLAG (24 nt) ──┘ └1-nt┘ └──── pCTCON2 5′ arm (50 nt) ────┘
TATCAGATCTCGAGCTATTACAAGTCCTCTTCAGAAATAAGCTTTTGTTC
(YSD SOP 03).TAATAG double stop 14 bp before its 3′
end → the ≥6 bp post-stop requirement is satisfied without modification.| Stage | Method | Gate |
|---|---|---|
| Before ordering | In silico translation of all 96 (Section 5.2) | 0 frame/stop errors; FLAG + TAATAG present; 0 rare codons |
| Order manifest | Diff vendor file vs template table | 99/99 sequences match |
| Post-PCR | Qubit dsDNA HS | Stock sufficient for 250 ng/25 µL IVTT dosing per binder (verify) |
| Post-PCR | Agarose gel 1.5-2% (verify) | Single band at expected size ±10% |
| Sanger (top ~12-20) | Core facility | Exact match to design; else re-order/exclude |
| Storage | −20°C, LoBind tubes | ≤3 freeze-thaw cycles |
Strategy B all-in DNA cost (~$27-34 per binder):
| Line item | Cost |
|---|---|
| 96 gBlocks (~320 bp × $0.09/bp) | $2,150-2,765 |
| 2-3 control gBlocks | $100-130 |
| Universal primer pair | $20-40 (verify) |
| PCR reagents (Q5 MM + cleanup + tips/plates) | ~$150-200 |
| Sanger QC, top 12-20 | $72-160 |
| Total | ~$2,600-3,300 |
The cost-model scenario B line is $3,117 for template DNA (96 gBlocks $2,765 + controls $130 + PCR reagents $150 + Sanger top-12 $72) — see SOP 09 for the full campaign budget.
Turnaround (matches SOP 09 §2-3 — template arrival to Kd answer = 4 days; Sanger is post-hoc QC with a veto on the Day-3 re-expression):
| Milestone | Day |
|---|---|
| Order gBlocks (+ control fragments) | 0 |
| Fragments arrive (2-4 business days, ≤750 bp tier) | 2-4 |
| Fast-lane Day 1: universal PCR + cleanup + QC + Sanger submitted (top 12-20) | arrival + 1 |
| Fast-lane Day 2: 96-well IVTT + single-point TR-FRET screen (SOP 04, SOP 05) | arrival + 2 |
| Fast-lane Day 3: re-express top 12-20 (25 µL) + 12-point Kd titrations (Sanger veto in hand) | arrival + 3 |
| Fast-lane Day 4: Kd fits + WeaveSeq push | arrival + 4 |
End-to-end sequence → answer: ~6-8 calendar days (fragments 2-4 BD + 4-day fast lane); plan ~8-10 with contingencies. Sanger results land on fast-lane Day 2-3 — use them to veto any erroneous dose-response template before the Day-3 re-expression.
Optional pilot: order 3-4 binder gBlocks + POS1 + CTRL first and validate them end-to-end through SOPs 04-05 before committing the full 96 (~+2-3 days). Recommended for the first campaign; skippable thereafter.
| Symptom | Likely Cause | Action |
|---|---|---|
| No amplicon for an individual fragment | Synthesis error (~6% per fragment at 1:5,000/bp) or lost pellet | Verify resuspension (spin, 55°C); re-order from the backup vendor; mark binder "excluded — template QC" in WeaveSeq |
| Multiple bands on gel | Primer mis-priming on GC-rich CDS | Raise annealing to 62-65°C (verify); reduce to 12 cycles; gel-purify the correct band |
| Low expression across the whole panel (SOP 04 QC) | Construct design error | Re-run the Section 5.2 checks; confirm FLAG is in frame and the codon table matches Section 3.2 |
| Truncated products on anti-FLAG QC blot | Frameshift from a synthesis error | Sanger that binder; re-order or drop it |
| A₂₆₀/A₂₈₀ outside 1.8-2.0 | Cleanup carryover | Re-clean with DNA Clean & Concentrator-5; blank against the elution buffer |
| CTRL (FLAG-eGFP) expresses but most binders do not | Unexpectedly — check for residual rare codons or strong secondary structure in the CDS | Re-run the rare-codon scan; redesign problem CDSs with the MFC table or switch to the Twist sequence |
| 10977015 |
| $61.25 / 500 mL |
| Resuspension/elution |
| 96-well PCR plate, full skirt, 0.2 mL | Corning (Axygen) | PCR-96-FS-C | $420.00 / case of 50 | Universal PCR in plate format (or Eppendorf twin.tec 0030128648) |
| MicroAmp Clear Adhesive Film | Thermo Fisher | 4306311 | $219.00 / 100 | Plate sealing |
| Aluminum foil seals for PCR | VWR | 60941-126 | $109.15 / 100 (verify) | Alternative sealing |
affinibind/ordering/ysd/codon_optimizer.py (MFC
strategy, yeast table _SCEREVISIAE_CODONS), affinibind/ordering/ysd/oligo_builder.py
(pCTCON2 5′/3′ arms, TAATAG position), affinibind/schema/_candidates.py
(candidate_uid + sequence columns), affinibind/ordering/ysd/cli.py
(sequence-column requirement and back-translation).