Hybridization chain reaction

In this case study, we demonstrate how EQTK can be used to compute equilibrium concentrations of a large number of chemical species by considering initiated living polymerization.

Dirks and Pierce (PNAS, 2004) published a living polymerization system constructed from single-stranded DNA molecules known as hybridization chain reaction, or HCR. The HCR system consists of three strand species in a dilute solution, initiator (I), hairpin 1 (H1), and hairpin 2 (H2), and is shown in the figure below. The sequences of the respective components are such that H1 and H2 minimally interact with each other in the absence of initiator, I. When I is introduced, H1 opens up, and can then bind H2. H2 in turn can bind another H1. This continues to form an initiated polymer of alternating H1 and H2 molecules.


Our goal in this case study is to compute the fraction of H1 and H2 molecules that are present in HCR polymers of each possible length \(n\). That is, we seek to understand how the H1 and H2 monomers are distributed among HCR polymers of various lengths. To be clear how we define polymer length, an HCR polymer of length \(5\) contains, in addition to the initiator strand, three H1 molecules and two H2 molecules.

To start the analysis, we import Numpy and EQTK, and additionally HoloViews for plotting, also setting some nice defaults for the plots.

import numpy as np
import eqtk

import holoviews as hv
        color=hv.Cycle(['#4c78a8', '#f58518', '#e45756']),
        fontsize=dict(labels=12, legend=8),
WARNING:param.main: pandas could not register all extension types imports failed with the following error: cannot import name 'ABCIndexClass' from 'pandas.core.dtypes.generic' (/Users/bois/opt/anaconda3/lib/python3.8/site-packages/pandas/core/dtypes/generic.py)