DOI: 10.5061/dryad.g4f4qrfz7
title: Leak-resilient enzyme-free nucleic acid dynamical systems through shadow cancellation

description: DNA strand displacement (DSD) emerged as a prominent reaction motif for
 engineering nucleic acid-based computational devices with programmable
 behaviors. However, strand displacement circuits are susceptible to
 background noise that disrupts the circuit behavior, commonly known as
 leaks. The side effects of leaks are particularly severe in circuits with
 complex dynamical elements (e.g., feedback loops), as their leaks amplify
 nonlinearly, disrupting the circuit function. Shadow cancellation is a
 dynamic leak-elimination strategy originally proposed to control the leak
 growth in such circuits. However, the kinetic restrictions of the proposed
 method introduce a significant design overhead, making it less accessible.
 In this work, we use domain-level DSD simulations to examine the
 method's capabilities, the inner workings of its components, and,
 most importantly, robustness to practical deviations in its design
 requirements. First, we show that the method could stabilize the dynamics
 of several leak-affected catalytic and autocatalytic dynamical systems of
 practical importance. Then, through several probing experiments, we show
 that its design restrictions could be significantly relaxed without
 impacting the circuit function through simple adjustments to the circuit
 parameters. Finally, we discuss several ideas to tackle the practical
 challenges in applying the method to arbitrary DSD circuits, paving the
 way for future experimental work.
description: # Leak-resilient enzyme-free nucleic acid dynamical systems through shadow
 cancellation ## Abbreviations 1. RPS: Rock-Paper-Scissors oscillator 2.
 UNIAMP: Unimolecular autocatalytic amplifier 3. BIAMP: Bimolecular
 autocatalytic amplifier ## Basic commands To run the peppercorn command to
 generate the `*_enum.pil` file and the corresponding plotting data *
 `$FOLDER` - The folder containing the `.pil` file * `$NAME` - The name of
 the `.pil` file without the file extension * `$INTERMEDIATE_PREFIX` -
 Prefix of the intermediates generated * `$LABELS` - Space separated list
 of the chemical species that need to be tracked * `$TIME`  - Time to run
 the simulation for  `./sim.sh $FOLDER $TIME $NAME $LABELS
 $INTERMEDIATE_PREFIX`  To run the `*_enum.pil` file in the folder
 `$FOLDER` * `$NAME` - The name of the `.*_enum_pil` file without the
 `_enum.pil` `./pil.sh $FOLDER $TIME $NAME $LABELS $NAME`  ##
 Produce-Helper Leak mechanism `sLeakWaste = hcjr( fcr mcr scr + fcr( hckr(
 fcr( + ) ) ) ) sbr* @initial 0 nM` `LeakWaste = sc mc fc hcj( + sb* ) fc*(
 hck*( fc*( + ) ) ) @initial 0 nM` This leak rate constant corresponds to
 20 /M/s and is extrapolated from the experimental data in Reynaldo *et
 al.*, `reaction [condensed = 2e-8 /nM/s ] ProduceBCjCk + HelperCCk -&gt;
 LeakWaste + Ck` `reaction [condensed = 2e-8 /nM/s ] sProduceBCjCk +
 sHelperCCk -&gt; sLeakWaste + sCk` ## Jupyter notebooks 1. For generating
 files for rate perturbation: `Rate_Perturbation.ipynb` 2. For generating
 files for leak perturbation: `Leak_Perturbation.ipynb` 3. For generating
 the plots: `GenerateInterfacePlots.ipynb` ### To replicate
 *rate\_perturbed* experiments * `$ROOT` - The root folder
 (e.g., `_1em5`) * `$OUT` - The output folder *
 `$LIST_OF_PERTURBATIONS` - The list of rate perturbations considered
 (e.g., 0, 1, 9, 30, 100) * `$CONC_FACT` - The scale factor by which the
 concentrations of the shadow circuit are scaled down #### Primary command
 `./_1em5_pert_run.sh` This runs the following
 script multiple times for different perturbations * `$LABELS` -
 Space-separated list of the chemical species that need to be tracked
 `./run.sh $ROOT $OUT $TIME $LIST_OF_PERTURBATIONS $LABELS $CONC_FACT` 
 `run.sh` internally runs the following two scripts `./rate_pert.sh
 $LIST_OF_PERTURBATIONS $ROOT $OUT $CONC_FACT` `./pil_all.sh $TIME
 $LIST_OF_PERTURBATIONS $LABELS $OUT` `rate_pert.sh` internally runs
 `rate_pert.py` `frac` is the perturbation factor (e.g., 0, 10, 30, etc.) 
 `python3 rate_pert.py $frac $ROOT $OUT $CONC_FACT` ## To replicate
 *leak\_perturbed* experiments Most variables are similar to those of the
 `rate_perturbed` experiments. We will disambiguate the ones that are
 different here. * `$LIST_OF_PERTURBATIONS` - The list of leak
 perturbations considered (e.g., 0, 100, 200, ...) * `$FOLDERS` - Each
 element of the `$LIST_OF_PERTURBATIONS` `./leak_pert_run.sh $ROOT $OUT
 $TIME $LIST_OF_PERTURBATIONS $LABELS $CONC_FACT` `./leak_pert.sh $FOLDERS
 $ROOT $OUT $CONC_FACT` `cd $ROOT` `./leak_pert_pil_all.sh $TIME $FOLDERS
 $LABELS`