{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Multi-tube design example for orthogonal systems (simple)\n",
"\n",
"Design N orthogonal strand displacement gates. \n",
"\n",
"See the accompanying design specification (PDF file). See also the LaTeX spec file that you can edit to make your own design specs in a standardized format.\n",
"\n",
"This is a 1-step reaction. To design N orthogonal gates, there are 2 elementary step tubes per gate plus 1 global crosstalk tube. \n",
"\n",
"Target test tubes: \n",
"- (Step 0: Reactants) x N orthogonal systems\n",
"- (Step 1: Products) x N orthogonal systems\n",
"- Global crosstalk\n",
"\n",
"Material: RNA \n",
"Temperature: 23 C"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Import Python NUPACK module\n",
"from nupack import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"Domain results:\n",
"
\n",
" \n",
" \n",
" Domain | \n",
" Sequence | \n",
"
\n",
" \n",
" \n",
" \n",
" da[0] | \n",
" CAUACUCCGA | \n",
"
\n",
" \n",
" da[0]* | \n",
" UCGGAGUAUG | \n",
"
\n",
" \n",
" da[1] | \n",
" CACAUGAUUC | \n",
"
\n",
" \n",
" da[1]* | \n",
" GAAUCAUGUG | \n",
"
\n",
" \n",
" da[2] | \n",
" GAACAAGCUA | \n",
"
\n",
" \n",
" da[2]* | \n",
" UAGCUUGUUC | \n",
"
\n",
" \n",
" da[3] | \n",
" CCUUUCUCUC | \n",
"
\n",
" \n",
" da[3]* | \n",
" GAGAGAAAGG | \n",
"
\n",
" \n",
" db[0] | \n",
" AACCCAAC | \n",
"
\n",
" \n",
" db[0]* | \n",
" GUUGGGUU | \n",
"
\n",
" \n",
" db[1] | \n",
" AGAAACGC | \n",
"
\n",
" \n",
" db[1]* | \n",
" GCGUUUCU | \n",
"
\n",
" \n",
" db[2] | \n",
" AACCACAG | \n",
"
\n",
" \n",
" db[2]* | \n",
" CUGUGGUU | \n",
"
\n",
" \n",
" db[3] | \n",
" CUUUCUAC | \n",
"
\n",
" \n",
" db[3]* | \n",
" GUAGAAAG | \n",
"
\n",
" \n",
"
Strand results:\n",
"\n",
" \n",
" \n",
" Strand | \n",
" Sequence | \n",
"
\n",
" \n",
" \n",
" \n",
" sA_toe[2] | \n",
" CUGUGGUU | \n",
"
\n",
" \n",
" sB[2] | \n",
" GAACAAGCUA | \n",
"
\n",
" \n",
" sX[1] | \n",
" CACAUGAUUCAGAAACGC | \n",
"
\n",
" \n",
" sX[2] | \n",
" GAACAAGCUAAACCACAG | \n",
"
\n",
" \n",
" sA[2] | \n",
" CUGUGGUUUAGCUUGUUC | \n",
"
\n",
" \n",
" sA_toe[1] | \n",
" GCGUUUCU | \n",
"
\n",
" \n",
" sA_toe[0] | \n",
" GUUGGGUU | \n",
"
\n",
" \n",
" sA_toe[3] | \n",
" GUAGAAAG | \n",
"
\n",
" \n",
" sX[0] | \n",
" CAUACUCCGAAACCCAAC | \n",
"
\n",
" \n",
" sA[3] | \n",
" GUAGAAAGGAGAGAAAGG | \n",
"
\n",
" \n",
" sB[0] | \n",
" CAUACUCCGA | \n",
"
\n",
" \n",
" sX[3] | \n",
" CCUUUCUCUCCUUUCUAC | \n",
"
\n",
" \n",
" sA[0] | \n",
" GUUGGGUUUCGGAGUAUG | \n",
"
\n",
" \n",
" sB[3] | \n",
" CCUUUCUCUC | \n",
"
\n",
" \n",
" sA[1] | \n",
" GCGUUUCUGAAUCAUGUG | \n",
"
\n",
" \n",
" sB[1] | \n",
" CACAUGAUUC | \n",
"
\n",
" \n",
"
Objective function:\n",
" \n",
" \n",
" Objective type | \n",
" Value | \n",
"
\n",
" \n",
" \n",
" \n",
" Weighted ensemble defect | \n",
" 0.0187 | \n",
"
\n",
" \n",
"
Ensemble defect: 0.0140
On-target complex defects:\n",
" \n",
" \n",
" Complex | \n",
" Complex defect (nt) | \n",
" Normalized complex defect | \n",
"
\n",
" \n",
" \n",
" \n",
" cX[3] | \n",
" 0.00298 | \n",
" 0.000165 | \n",
"
\n",
" \n",
" cAB[2] | \n",
" 0.689 | \n",
" 0.0246 | \n",
"
\n",
" \n",
" cXA[3] | \n",
" 0.189 | \n",
" 0.00526 | \n",
"
\n",
" \n",
" cX[1] | \n",
" 0.659 | \n",
" 0.0366 | \n",
"
\n",
" \n",
" cA_toe[1] | \n",
" 0.0149 | \n",
" 0.00186 | \n",
"
\n",
" \n",
" cB[0] | \n",
" 0.0309 | \n",
" 0.00309 | \n",
"
\n",
" \n",
" cXA[2] | \n",
" 0.226 | \n",
" 0.00629 | \n",
"
\n",
" \n",
" cB[2] | \n",
" 0.0699 | \n",
" 0.00699 | \n",
"
\n",
" \n",
" cAB[0] | \n",
" 0.587 | \n",
" 0.0209 | \n",
"
\n",
" \n",
" cX[0] | \n",
" 0.191 | \n",
" 0.0106 | \n",
"
\n",
" \n",
" cAB[3] | \n",
" 0.139 | \n",
" 0.00497 | \n",
"
\n",
" \n",
" cA_toe[3] | \n",
" 0.00258 | \n",
" 0.000323 | \n",
"
\n",
" \n",
" cXA[0] | \n",
" 0.254 | \n",
" 0.00707 | \n",
"
\n",
" \n",
" cA_toe[2] | \n",
" 0.0107 | \n",
" 0.00134 | \n",
"
\n",
" \n",
" cXA[1] | \n",
" 0.191 | \n",
" 0.00531 | \n",
"
\n",
" \n",
" cA_toe[0] | \n",
" 0.00142 | \n",
" 0.000177 | \n",
"
\n",
" \n",
" cX[2] | \n",
" 0.383 | \n",
" 0.0213 | \n",
"
\n",
" \n",
" cB[3] | \n",
" 0.00 | \n",
" 0.00 | \n",
"
\n",
" \n",
" cAB[1] | \n",
" 0.191 | \n",
" 0.00681 | \n",
"
\n",
" \n",
" cB[1] | \n",
" 0.0377 | \n",
" 0.00377 | \n",
"
\n",
" \n",
"
Tube defects:\n",
" \n",
" \n",
" Tube | \n",
" Tube defect (M) | \n",
" Normalized tube defect | \n",
"
\n",
" \n",
" \n",
" \n",
" reactants[0] | \n",
" 8.52e-09 | \n",
" 0.0185 | \n",
"
\n",
" \n",
" products[0] | \n",
" 2.85e-09 | \n",
" 0.00620 | \n",
"
\n",
" \n",
" reactants[1] | \n",
" 1.53e-08 | \n",
" 0.0333 | \n",
"
\n",
" \n",
" products[1] | \n",
" 2.32e-09 | \n",
" 0.00504 | \n",
"
\n",
" \n",
" reactants[2] | \n",
" 1.57e-08 | \n",
" 0.0341 | \n",
"
\n",
" \n",
" products[2] | \n",
" 3.06e-09 | \n",
" 0.00666 | \n",
"
\n",
" \n",
" reactants[3] | \n",
" 1.81e-09 | \n",
" 0.00394 | \n",
"
\n",
" \n",
" products[3] | \n",
" 1.89e-09 | \n",
" 0.00412 | \n",
"
\n",
" \n",
" crosstalk | \n",
" 3.62e-08 | \n",
" 0.0141 | \n",
"
\n",
" \n",
"
Complex contributions to tube defects:\n",
" \n",
" \n",
" Tube | \n",
" On-target complex | \n",
" Structural defect (M) | \n",
" Concentration defect (M) | \n",
" Total defect (M) | \n",
"
\n",
" \n",
" \n",
" \n",
" reactants[0] | \n",
" cX[0] | \n",
" 1.91e-09 | \n",
" 6.42e-13 | \n",
" 1.91e-09 | \n",
"
\n",
" \n",
" reactants[0] | \n",
" cAB[0] | \n",
" 5.85e-09 | \n",
" 7.63e-10 | \n",
" 6.61e-09 | \n",
"
\n",
" \n",
" products[0] | \n",
" cXA[0] | \n",
" 2.54e-09 | \n",
" 4.72e-14 | \n",
" 2.54e-09 | \n",
"
\n",
" \n",
" products[0] | \n",
" cB[0] | \n",
" 3.09e-10 | \n",
" 1.20e-13 | \n",
" 3.09e-10 | \n",
"
\n",
" \n",
" reactants[1] | \n",
" cX[1] | \n",
" 6.54e-09 | \n",
" 1.31e-09 | \n",
" 7.85e-09 | \n",
"
\n",
" \n",
" reactants[1] | \n",
" cAB[1] | \n",
" 1.87e-09 | \n",
" 5.59e-09 | \n",
" 7.46e-09 | \n",
"
\n",
" \n",
" products[1] | \n",
" cXA[1] | \n",
" 1.91e-09 | \n",
" 3.87e-14 | \n",
" 1.91e-09 | \n",
"
\n",
" \n",
" products[1] | \n",
" cB[1] | \n",
" 3.77e-10 | \n",
" 2.90e-11 | \n",
" 4.06e-10 | \n",
"
\n",
" \n",
" reactants[2] | \n",
" cX[2] | \n",
" 3.83e-09 | \n",
" 1.44e-10 | \n",
" 3.97e-09 | \n",
"
\n",
" \n",
" reactants[2] | \n",
" cAB[2] | \n",
" 6.76e-09 | \n",
" 4.97e-09 | \n",
" 1.17e-08 | \n",
"
\n",
" \n",
" products[2] | \n",
" cXA[2] | \n",
" 2.26e-09 | \n",
" 4.94e-14 | \n",
" 2.26e-09 | \n",
"
\n",
" \n",
" products[2] | \n",
" cB[2] | \n",
" 6.98e-10 | \n",
" 9.88e-11 | \n",
" 7.97e-10 | \n",
"
\n",
" \n",
" reactants[3] | \n",
" cX[3] | \n",
" 2.98e-11 | \n",
" 3.17e-16 | \n",
" 2.98e-11 | \n",
"
\n",
" \n",
" reactants[3] | \n",
" cAB[3] | \n",
" 1.39e-09 | \n",
" 3.94e-10 | \n",
" 1.78e-09 | \n",
"
\n",
" \n",
" products[3] | \n",
" cXA[3] | \n",
" 1.89e-09 | \n",
" 1.15e-13 | \n",
" 1.89e-09 | \n",
"
\n",
" \n",
" products[3] | \n",
" cB[3] | \n",
" 0.00 | \n",
" 3.22e-14 | \n",
" 3.22e-14 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cX[0] | \n",
" 1.89e-09 | \n",
" 1.55e-09 | \n",
" 3.44e-09 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cAB[0] | \n",
" 5.86e-09 | \n",
" 2.84e-10 | \n",
" 6.14e-09 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cA_toe[0] | \n",
" 1.41e-11 | \n",
" 2.41e-10 | \n",
" 2.55e-10 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cB[0] | \n",
" 3.09e-10 | \n",
" 0.00 | \n",
" 3.09e-10 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cX[1] | \n",
" 6.52e-09 | \n",
" 1.74e-09 | \n",
" 8.26e-09 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cAB[1] | \n",
" 1.91e-09 | \n",
" 1.26e-10 | \n",
" 2.03e-09 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cA_toe[1] | \n",
" 1.47e-10 | \n",
" 6.18e-10 | \n",
" 7.66e-10 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cB[1] | \n",
" 3.77e-10 | \n",
" 3.48e-11 | \n",
" 4.12e-10 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cX[2] | \n",
" 3.82e-09 | \n",
" 6.33e-10 | \n",
" 4.45e-09 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cAB[2] | \n",
" 6.88e-09 | \n",
" 9.08e-11 | \n",
" 6.97e-09 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cA_toe[2] | \n",
" 1.07e-10 | \n",
" 1.11e-10 | \n",
" 2.18e-10 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cB[2] | \n",
" 6.98e-10 | \n",
" 1.62e-10 | \n",
" 8.60e-10 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cX[3] | \n",
" 2.98e-11 | \n",
" 5.26e-11 | \n",
" 8.24e-11 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cAB[3] | \n",
" 1.39e-09 | \n",
" 6.26e-13 | \n",
" 1.39e-09 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cA_toe[3] | \n",
" 2.57e-11 | \n",
" 2.40e-10 | \n",
" 2.65e-10 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cB[3] | \n",
" 0.00 | \n",
" 3.05e-10 | \n",
" 3.05e-10 | \n",
"
\n",
" \n",
"
On-target complex concentrations:\n",
"\n",
" \n",
" \n",
" Tube | \n",
" Complex | \n",
" Concentration (M) | \n",
" Target concentration (M) | \n",
"
\n",
" \n",
" \n",
" \n",
" reactants[0] | \n",
" cX[0] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" reactants[0] | \n",
" cAB[0] | \n",
" 9.97e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" products[0] | \n",
" cXA[0] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" products[0] | \n",
" cB[0] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" reactants[1] | \n",
" cX[1] | \n",
" 9.93e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" reactants[1] | \n",
" cAB[1] | \n",
" 9.80e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" products[1] | \n",
" cXA[1] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" products[1] | \n",
" cB[1] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" reactants[2] | \n",
" cX[2] | \n",
" 9.99e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" reactants[2] | \n",
" cAB[2] | \n",
" 9.82e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" products[2] | \n",
" cXA[2] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" products[2] | \n",
" cB[2] | \n",
" 9.99e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" reactants[3] | \n",
" cX[3] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" reactants[3] | \n",
" cAB[3] | \n",
" 9.99e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" products[3] | \n",
" cXA[3] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" products[3] | \n",
" cB[3] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cX[0] | \n",
" 9.91e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cAB[0] | \n",
" 9.99e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cA_toe[0] | \n",
" 9.97e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cB[0] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cX[1] | \n",
" 9.90e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cAB[1] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cA_toe[1] | \n",
" 9.92e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cB[1] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cX[2] | \n",
" 9.96e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cAB[2] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cA_toe[2] | \n",
" 9.99e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cB[2] | \n",
" 9.98e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cX[3] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cAB[3] | \n",
" 1.00e-08 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cA_toe[3] | \n",
" 9.97e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
" crosstalk | \n",
" cB[3] | \n",
" 9.97e-09 | \n",
" 1.00e-08 | \n",
"
\n",
" \n",
"
\n",
"\n",
"Significant off-target complex concentrations (≥ 1% max complex concentration in tube):\n",
"\n",
" \n",
" \n",
" Tube | \n",
" Complex | \n",
" Concentration (M) | \n",
"
\n",
" \n",
" \n",
" \n",
" reactants[1] | \n",
" (sA[1]) | \n",
" 2.00e-10 | \n",
"
\n",
" \n",
" reactants[1] | \n",
" cB[1] | \n",
" 2.00e-10 | \n",
"
\n",
" \n",
" reactants[2] | \n",
" (sA[2]) | \n",
" 1.77e-10 | \n",
"
\n",
" \n",
" reactants[2] | \n",
" cB[2] | \n",
" 1.77e-10 | \n",
"
\n",
" \n",
" products[3] | \n",
" — | \n",
" — | \n",
"
\n",
" \n",
" reactants[0] | \n",
" — | \n",
" — | \n",
"
\n",
" \n",
" reactants[3] | \n",
" — | \n",
" — | \n",
"
\n",
" \n",
" products[2] | \n",
" — | \n",
" — | \n",
"
\n",
" \n",
" products[1] | \n",
" — | \n",
" — | \n",
"
\n",
" \n",
" products[0] | \n",
" — | \n",
" — | \n",
"
\n",
" \n",
" crosstalk | \n",
" — | \n",
" — | \n",
"
\n",
" \n",
"
"
],
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Define physical model\n",
"my_model = Model(material='rna', celsius=23)\n",
"\n",
"# Set number of orthogonal systems\n",
"systems = 4 \n",
"\n",
"# Initialize working variables\n",
"crosstalk_targets = {}\n",
"crosstalk_excludes = []\n",
"step_tubes = []\n",
"\n",
"# Loop over orthogonal systems\n",
"for i in range(systems):\n",
" \n",
" # Define sequence domains\n",
" da = Domain('N10', name=['da', i])\n",
" db = Domain('N8', name=['db', i])\n",
"\n",
" # Define strands containing these domains\n",
" sX = TargetStrand([da, db], name=['sX', i])\n",
" sA = TargetStrand([~db, ~da], name=['sA', i])\n",
" sB = TargetStrand([da], name=['sB', i]) # ~dgate is the reverse complement of dgate\n",
" sA_toe = TargetStrand([~db], name=['sA_toe', i])\n",
" \n",
" # Define target complexes\n",
" cX = TargetComplex([sX], 'U18', name=['cX', i])\n",
" cAB = TargetComplex([sA, sB], 'U8D10+', name=['cAB', i])\n",
" cXA = TargetComplex([sX, sA], 'D18+', name=['cXA', i])\n",
" cB = TargetComplex([sB], 'U10', name=['cB', i])\n",
" cA_toe = TargetComplex([sA_toe], 'U8', name=['cA_toe', i])\n",
" \n",
" # Define 2 elementary step tubes for each orthogonal system\n",
" step0_tube = TargetTube(on_targets={cX: 1e-08, cAB: 1e-08}, \n",
" off_targets=SetSpec(max_size=2, exclude=[cXA]), name=['reactants', i])\n",
" step1_tube = TargetTube(on_targets={cXA: 1e-08, cB: 1e-08}, \n",
" off_targets=SetSpec(max_size=2), name=['products', i])\n",
" step_tubes += [step0_tube, step1_tube]\n",
" \n",
" # Store contributions to global crosstalk tube\n",
" crosstalk_targets.update({cX: 1e-08, cAB: 1e-08, cA_toe: 1e-08, cB:1e-8})\n",
" crosstalk_excludes += [cXA, [sX, sA_toe]]\n",
" \n",
"# Define 1 global crosstalk tube \n",
"crosstalk_tube = TargetTube(on_targets=crosstalk_targets, \n",
" off_targets=SetSpec(max_size=2, exclude=crosstalk_excludes), name='crosstalk')\n",
"\n",
"# Define tube set \n",
"my_tubes = step_tubes + [crosstalk_tube] \n",
" \n",
"# Define defect weight of N for global crosstalk tube \n",
"# (maintain balance between elementary step tubes and global crosstalk tube as number of \n",
"# orthogonal systems increases) \n",
"my_weights = Weights(my_tubes)\n",
"my_weights[:,:,:,crosstalk_tube] *= systems\n",
"\n",
"# Set a stop condition of 2% \n",
"# Set seed for random number generation to get a reproducible result for this demo\n",
"my_options = DesignOptions(f_stop=0.02, seed=93)\n",
"\n",
"# Define and run the test tube design job\n",
"my_design = tube_design(tubes=my_tubes, defect_weights=my_weights, model=my_model, options=my_options)\n",
"my_results = my_design.run(trials=1)[0]\n",
"\n",
"# Display the design results\n",
"my_results"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}