Multi-tube design example for orthogonal systems (advanced)

Design small conditional RNAs (scRNAs) for conditional Dicer substrate formation (Hochrein et al., J Am Chem Soc, 2013; see Figure 3).

See the accompanying design specification (PDF files). See also the LaTeX spec file that you can edit to make your own design specs in a standardized format.

This is a 2-step reaction. To design N orthogonal scRNA systems, there are 3 elementary step tubes per system plus 1 global crosstalk tube.

Target test tubes:

  • (Step 0: Reactants) x N orthogonal systems
  • (Step 1: Intermediates) x N orthogonal systems
  • (Step 2: Products) x N orthogonal systems
  • Global crosstalk

Material: RNA
Temperature: 23 C

In [3]:
# Import Python NUPACK module
from nupack import *
In [4]:
# Define physical model
my_model = Model(material='rna', celsius=37)

# Set number of orthogonal systems
systems = 2 

# Initialize working variables
crosstalk_targets = {} 
crosstalk_excludes = [] 
step_tubes = [] 

# Loop over orthogonal systems
for i in range(systems):
    
    # Define sequence domains
    a = Domain('N6', name=['a', i])
    c = Domain('N8', name=['c', i])
    b = Domain('N4', name=['b', i])
    w = Domain('N2', name=['w', i])
    y = Domain('N4', name=['y', i])
    x = Domain('N12',name=['x', i])
    z = Domain('N3', name=['z', i])
    s = Domain('N5', name=['s', i])
    
    # Define strands containing these domains
    sC_out  = TargetStrand([w, x, y, s], name=['sC_out', i])
    sA      = TargetStrand([~c, ~b, ~a, ~z, ~y], name=['sA', i])
    sA_toe  = TargetStrand([~c], name=['sA_toe', i])
    sC      = TargetStrand([w, x, y, s, ~a, ~z, ~y, ~x, ~w], name=['sC', i])
    sC_loop = TargetStrand([s, ~a, ~z], name=['sC_loop', i])
    sB      = TargetStrand([x, y, z, a, b], name=['sB', i])
    sX      = TargetStrand([a, b, c], name=['sX', i])
    
    # Define target complexes
    C      = TargetComplex([sC], 'D2 D12 D4( U5 U6 U3 )', name=['C', i])
    B      = TargetComplex([sB], 'U12 U4 U3 U6 U4', name=['B', i])
    C_loop = TargetComplex([sC_loop], 'U14', name=['C_loop', i])
    AB    = TargetComplex([sA, sB], 'U8 D4 D6 D3 D4(+ U12)', name=['AB', i])
    X      = TargetComplex([sX], 'U18', name=['X', i])
    XA    = TargetComplex([sX, sA], 'D6 D4 D8(+) U3 U4', name=['XA', i])
    C_out  = TargetComplex([sC_out], 'U23', name=['C_out', i])
    BC    = TargetComplex([sB, sC], 'D12 D4 D3 D6 (U4 + U2 U12 U4 U5) U2', name=['BC', i])
    A_toe  = TargetComplex([sA_toe], 'U8', name=['A_toe', i])
    
    # Define 3 elementary step tubes for each orthogonal system
    Step_0 = TargetTube({C: 1e-08, X: 1e-08, AB: 1e-08}, 
        off_targets=SetSpec(max_size=2, include=[[sA], BC], exclude=[XA]), name=['Step_0', i])  
    Step_1 = TargetTube({XA: 1e-08, B: 1e-08}, 
        off_targets=SetSpec(max_size=2, include=[X, AB]), name=['Step_1', i])  
    Step_2 = TargetTube({BC: 1e-08}, 
        off_targets=SetSpec(max_size=2, include=[B, C]), name=['Step_2', i])
    step_tubes += [Step_0, Step_1, Step_2]
    
    # Store contributions to global crosstalk tube
    crosstalk_targets.update({
        AB: 1e-08,
        C: 1e-08,
        X: 1e-08,
        B: 1e-08,
        C_out: 1e-08,
        C_loop: 1e-08,
        A_toe: 1e-08,
    })   
    crosstalk_excludes += [XA, BC, [sX, sA_toe], [sB, sC_loop]]
    
# Define 1 global crosstalk tube 
crosstalk_tube = TargetTube(crosstalk_targets, 
                 off_targets=SetSpec(max_size=2, exclude=crosstalk_excludes), name='Crosstalk')

# Define tube set
my_tubes = step_tubes + [crosstalk_tube]

# Define defect weight of N for global crosstalk tube 
# (maintain balance between elementary step tubes and global crosstalk tube as number of 
# orthogonal systems increases) 
my_weights = Weights(my_tubes)
my_weights[:,:,:,crosstalk_tube] *= systems

# Set a stop condition of 5% 
# Set seed for random number generation to get a reproducible result for this demo
my_options = DesignOptions(f_stop=0.05, seed=93)

# Define and run the test tube design job
my_design = tube_design(tubes=my_tubes, defect_weights=my_weights, model=my_model, options=my_options)
my_results = my_design.run(trials=1)[0]

# Display the design results
my_results
Out[4]:
Domain results:
Domain Sequence
a[0]
CACGAU
a[0]*
AUCGUG
a[1]
AACACU
a[1]*
AGUGUU
b[0]
UUAC
b[0]*
GUAA
b[1]
CCGG
b[1]*
CCGG
c[0]
GCUGCACU
c[0]*
AGUGCAGC
c[1]
UCCACAUG
c[1]*
CAUGUGGA
s[0]
AAAUC
s[0]*
GAUUU
s[1]
AGUUG
s[1]*
CAACU
w[0]
CA
w[0]*
UG
w[1]
CA
w[1]*
UG
x[0]
AUACCUCCCAGC
x[0]*
GCUGGGAGGUAU
x[1]
GAACAAUAUAAA
x[1]*
UUUAUAUUGUUC
y[0]
CCAA
y[0]*
UUGG
y[1]
AACA
y[1]*
UGUU
z[0]
UUA
z[0]*
UAA
z[1]
UAC
z[1]*
GUA
Strand results:
Strand Sequence
sC[1]
CAGAACAAUAUAAAAACAAGUUGAGUGUUGUAUGUUUUUAUAUUGUUCUG
sA_toe[0]
AGUGCAGC
sC_out[1]
CAGAACAAUAUAAAAACAAGUUG
sC_out[0]
CAAUACCUCCCAGCCCAAAAAUC
sA[0]
AGUGCAGCGUAAAUCGUGUAAUUGG
sC_loop[1]
AGUUGAGUGUUGUA
sC[0]
CAAUACCUCCCAGCCCAAAAAUCAUCGUGUAAUUGGGCUGGGAGGUAUUG
sA[1]
CAUGUGGACCGGAGUGUUGUAUGUU
sX[1]
AACACUCCGGUCCACAUG
sA_toe[1]
CAUGUGGA
sB[1]
GAACAAUAUAAAAACAUACAACACUCCGG
sX[0]
CACGAUUUACGCUGCACU
sC_loop[0]
AAAUCAUCGUGUAA
sB[0]
AUACCUCCCAGCCCAAUUACACGAUUUAC
Objective function:
Objective type Value
Weighted ensemble defect 0.0499
Ensemble defect: 0.0435

On-target complex defects:
Complex Complex defect (nt) Normalized complex defect
BC[1] 2.85 0.0361
C_loop[1] 0.0801 0.00572
C[0] 2.58 0.0516
A_toe[1] 0.0401 0.00502
B[0] 1.45 0.0500
C[1] 2.11 0.0422
C_out[0] 0.115 0.00501
AB[1] 1.03 0.0190
BC[0] 1.76 0.0223
X[1] 0.940 0.0522
XA[1] 1.03 0.0239
A_toe[0] 0.0449 0.00561
B[1] 0.600 0.0207
C_loop[0] 0.198 0.0141
AB[0] 0.635 0.0118
C_out[1] 2.67 0.116
X[0] 1.94 0.108
XA[0] 1.13 0.0262
Tube defects:
Tube Tube defect (M) Normalized tube defect
Step_0[0] 6.81e-08 0.0558
Step_1[0] 2.75e-08 0.0382
Step_2[0] 4.31e-08 0.0545
Step_0[1] 4.17e-08 0.0342
Step_1[1] 2.84e-08 0.0394
Step_2[1] 3.03e-08 0.0384
Crosstalk 1.74e-07 0.0443
Complex contributions to tube defects:
Tube On-target complex Structural defect (M) Concentration defect (M) Total defect (M)
Step_0[0] C[0] 2.54e-08 8.30e-09 3.37e-08
Step_0[0] X[0] 1.94e-08 3.69e-11 1.95e-08
Step_0[0] AB[0] 6.25e-09 8.73e-09 1.50e-08
Step_1[0] XA[0] 1.13e-08 1.08e-09 1.23e-08
Step_1[0] B[0] 1.45e-08 7.28e-10 1.52e-08
Step_2[0] BC[0] 1.70e-08 2.60e-08 4.31e-08
Step_0[1] C[1] 2.11e-08 3.03e-10 2.14e-08
Step_0[1] X[1] 9.38e-09 2.83e-10 9.67e-09
Step_0[1] AB[1] 1.03e-08 3.27e-10 1.06e-08
Step_1[1] XA[1] 1.01e-08 7.36e-09 1.75e-08
Step_1[1] B[1] 5.90e-09 5.00e-09 1.09e-08
Step_2[1] BC[1] 2.85e-08 1.83e-09 3.03e-08
Crosstalk AB[0] 6.35e-09 1.64e-13 6.35e-09
Crosstalk C[0] 2.58e-08 2.28e-10 2.60e-08
Crosstalk X[0] 1.92e-08 1.59e-09 2.08e-08
Crosstalk B[0] 1.45e-08 5.40e-10 1.50e-08
Crosstalk C_out[0] 1.15e-09 9.80e-10 2.13e-09
Crosstalk C_loop[0] 1.97e-09 3.73e-10 2.34e-09
Crosstalk A_toe[0] 4.49e-10 1.86e-11 4.67e-10
Crosstalk AB[1] 1.03e-08 3.21e-18 1.03e-08
Crosstalk C[1] 2.11e-08 4.54e-10 2.15e-08
Crosstalk X[1] 8.70e-09 1.35e-08 2.22e-08
Crosstalk B[1] 6.00e-09 1.64e-10 6.16e-09
Crosstalk C_out[1] 2.66e-08 6.24e-10 2.72e-08
Crosstalk C_loop[1] 7.32e-10 1.19e-08 1.27e-08
Crosstalk A_toe[1] 4.01e-10 2.21e-11 4.23e-10
On-target complex concentrations:
Tube Complex Concentration (M) Target concentration (M)
Step_0[0] C[0] 9.83e-09 1.00e-08
Step_0[0] X[0] 1.00e-08 1.00e-08
Step_0[0] AB[0] 9.84e-09 1.00e-08
Step_1[0] XA[0] 9.97e-09 1.00e-08
Step_1[0] B[0] 9.97e-09 1.00e-08
Step_2[0] BC[0] 9.67e-09 1.00e-08
Step_0[1] C[1] 9.99e-09 1.00e-08
Step_0[1] X[1] 9.98e-09 1.00e-08
Step_0[1] AB[1] 9.99e-09 1.00e-08
Step_1[1] XA[1] 9.83e-09 1.00e-08
Step_1[1] B[1] 9.83e-09 1.00e-08
Step_2[1] BC[1] 9.98e-09 1.00e-08
Crosstalk AB[0] 1.00e-08 1.00e-08
Crosstalk C[0] 1.00e-08 1.00e-08
Crosstalk X[0] 9.91e-09 1.00e-08
Crosstalk B[0] 9.98e-09 1.00e-08
Crosstalk C_out[0] 9.96e-09 1.00e-08
Crosstalk C_loop[0] 9.97e-09 1.00e-08
Crosstalk A_toe[0] 1.00e-08 1.00e-08
Crosstalk AB[1] 1.00e-08 1.00e-08
Crosstalk C[1] 9.99e-09 1.00e-08
Crosstalk X[1] 9.25e-09 1.00e-08
Crosstalk B[1] 9.99e-09 1.00e-08
Crosstalk C_out[1] 9.97e-09 1.00e-08
Crosstalk C_loop[1] 9.15e-09 1.00e-08
Crosstalk A_toe[1] 1.00e-08 1.00e-08
Significant off-target complex concentrations (≥ 1% max complex concentration in tube):
Tube Complex Concentration (M)
Step_0[0] (sA[0]) 1.62e-10
Step_0[1]
Step_2[0] B[0] 3.30e-10
Step_2[0] C[0] 3.29e-10
Step_1[1] AB[1] 1.71e-10
Step_1[1] X[1] 1.71e-10
Crosstalk (sC_loop[1]+sX[1]) 7.31e-10
Step_2[1]