Competition anisotropy

In this case study, we demonstrate how the low-level interface of EQTK can be integrated into other code that is just-in-time compiled using Numba. Specifically, we will perform a Markov chain Monte Carlo (MCMC) calculation of competition anisotropy titration curves to infer dissociation constants.

As our example system, we will consider determination of a dissociation constant between two biomolecules using a competition fluorescence anisotropy. The technique relies on the fact that a fluorophore that is excited with polarized light undergoes rotational diffusion during the time it is fluorescing, which leads to depolarized emitted light. The fluorescence anisotropy is related to the rotational diffusion coefficient of the fluorophore. An unbound fluorophore has faster rotational diffusion, and therefore lower anisotropy, than a fluorophore that is bound to another molecule.

If F is the fluorescent molecule and A is its binding partner (our molecule of interest), we have the chemical reaction

\begin{align} \mathrm{AF} \rightleftharpoons \mathrm{A} + \mathrm{F}. \end{align}

The anisotropy, \(r\), is given by

\begin{align} r = \frac{1}{c_\mathrm{F}^0}(r_\mathrm{f} c_{\mathrm{F}} + r_\mathrm{b} c_{\mathrm{AF}}), \end{align}

the concentration-weighted average of the anisotropy of free fluorophore, \(r_\mathrm{f}\), and that of bound fluorophore, \(r_\mathrm{b}\). We define \(K_\mathrm{d,f}\) as the dissociation constant for this reaction. By adjusting the concentration of A and measuring the anisotropy, we can determine \(K_\mathrm{d,f}\) by performing a regression.

With the dissociation constant of the fluorophore in hand, we can then consider the coupled chemical reactions

\begin{align} &\mathrm{AF} \rightleftharpoons \mathrm{A} + \mathrm{F},\\[1em] &\mathrm{AB} \rightleftharpoons \mathrm{A} + \mathrm{B}, \end{align}

where the binding of A and B is of interest. This assay is called a competition assay, as the molecule of interest, B, competes with the fluorophore, F, for binding of A. We wish to determine the dissociation constant, \(K_\mathrm{d}\), of the second reaction. To do this, the concentration of A and F are fixed and the concentration of B is varied. We then perform a regression to get \(K_\mathrm{d}\). This involves a coupled equilibrium, and EQTK can solve for \(c_\mathrm{F}\) and \(c_\mathrm{AF}\), which are required to compute the theoretical anisotropy, \(r\).

Before we begin our analysis, let’s import the necessary packages, including HoloViews for plotting, also setting some nice defaults for the plots.

import numpy as np
import pandas as pd

import eqtk

import numba

import holoviews as hv

        color=hv.Cycle(["#4c78a8", "#f58518", "#e45756"]),
        fontsize=dict(labels=12, legend=8, title=12),
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/