Models for fitting individual ITC experiments

Basic model pipeline

Under the hood, individual models do the following:

  1. Guess model parameters.
  2. Calculate the concentrations of all molecular species using guessed binding constants (as well as the titration shot sizes and initial concentrations in the cell and syringe).
  3. Calculate the heat change per shot using the guess reaction enthalpies and species concentrations from (2).
  4. Compare the calculated and measured heat changes at each shot.
  5. Iterate through steps 2-4 using nonlinear regression to find maximum likelihood parameter estimates.

Differences from other modeling approaches

  1. In pytc, the heat of dilution is a fittable parameter within each model. It is described as a linear function of titrant concentration. This means that a blank titration should not be subtracted from the heats before fitting. To incorporate a blank titration, globally fit the dilution for the blank and production experiments (see the demo for an example).
  2. The stoichiometry of each model is fixed (rather than fittable). Instead, of a fractional stoichiometry, there is a fraction competent (fx_competent) parameter that floats to account for the fact that not all molecules may be competent to bind in either the titrant or cell. This follows the approach used by sedphat. If this value is very different than one, it may indicate a problem with the experiment.

Specific Models

Blank

Titration of titrant into a cell without a stationary component.

indiv_models.Blank

Model parameters

parameter variable parameter name class
slope of heat of dilution \(q_{slope}\) dilution_heat nuisance
intercept of heat of dilution \(q_{intercept}\) dilution_intercept nuisance

Calculate heat changes

The change in heat for each shot \(i\) (\(\Delta Q_{i}\)) is:

\[ \begin{align}\begin{aligned}q_{dilution,i} = [T]_{i} \times q_{slope} + q_{intercept},\\\Delta Q_{i} = q_{dilution,i},\end{aligned}\end{align} \]

where \([T]_{i}\) is the concentration of titrant at shot \(i\), \(q_{slope}\) is the slope of the heat of dilution (dilution_heat) and \(q_{intercept}\) is the intercept of the heat of dilution (dilution_intercept).

Single-Site Binding

This is a basic, single-site binding model.

indiv_models.SingleSite

Model parameters

parameter variable parameter name class
association constant \(K\) K thermodynamic
binding enthalpy \(\Delta H\) dH thermodynamic
fraction competent fx_competent nuisance
slope of heat of dilution dilution_heat nuisance
intercept of heat of dilution dilution_intercept nuisance

Model Scheme

Scheme is for binding of titrant \(T\) to a stationary species \(S\):

\[S + T \rightleftharpoons TS\]

To describe this, we use the following equilibrium constant:

\[K = \frac{[ST]}{[S]_{free}[T]_{free}}\]

Determine the relative populations of species in solution

We can only manipulate \([T]_{total}\) and \([S]_{total}\) experimentally, so our first goal is to determine the concentration of \([ST]\), which we cannot manipulate or directly observe.

\[K = \frac{[ST]}{([S]_{total} - [ST])([T]_{total}-[ST])},\]
\[K \Big ([S]_{total}[T]_{total} - [ST]([S]_{total} + [T]_{total}) + [ST]^2 \Big ) = [ST],\]
\[[S]_{total}[T]_{total} - [ST](S_{total} + T_{total}) + [ST]^{2} - [ST]/K = 0,\]
\[[S]_{total}[T]_{total} - [ST]([S]_{total} + [T]_{total} + 1/K) + [ST]^2 = 0.\]

The real root of this equation describes \([ST]\) in terms of \(K\) and the total concentrations of \([S]\) and \([T]\):

\[[ST] = \frac{[S]_{total} + [T]_{total} + 1/K - \sqrt{([S]_{total} + [T]_{total} + 1/K)^2 -4[S]_{total}[T]_{total}}}{2}\]

The mole fraction \(ST\) is:

\[x_{ST} = \frac{[ST]}{[S]_{total}}\]

Calculate heat changes

The change in heat for each shot \(i\) (\(\Delta Q_{i}\)) is:

\[\Delta Q_{i} = V_{0}[S]_{total,i}(\Delta H(x_{ST,i} - x_{ST,i-1})) + q_{dilution,i},\]

where \(V_{0}\) is the volume of the cell (fixed) and \(\Delta H\) is the enthalpy of binding. Note that we do not deal with dilution here, as pytc calculates \(x_{ST,i}\) for the entire titration, accouting for dilution at each step. \(V_{0}\) is held constant as the total cell volume (not the volume of solution including the neck) as only the cell, not the neck, is detected in the signal.

Competitive ligand binding

Model binding where two molecules compete for binding to a single other molecule. This model was described by Sigurskjold BW (2000) Analytical Biochemistry 277(2):260-266 (link).

indiv_models.SingleSiteCompetitor

Model parameters

parameter variable parameter name class
association constant for A \(K_{A}\) K thermodynamic
association constant for B \(K_{B}\) Kcompetitor thermodynamic
binding enthalpy for A \(\Delta H_{A}\) dH thermodynamic
binding enthalpy for B \(\Delta H_{B}\) dHcompetitor thermodynamic
fraction competent fx_competent nuisance
slope of heat of dilution dilution_heat nuisance
intercept of heat of dilution dilution_intercept nuisance

Model Scheme

Scheme is for competitive binding of \(A\) and \(B\) to protein \(P\):

\[A + P \rightleftharpoons PA\]
\[B + P \rightleftharpoons PB\]

To describe this, we use the following equilibrium constants:

\[K_{A} = \frac{[PA]}{[P]_{free}[A]_{free}}\]
\[K_{B} = \frac{[PB]}{[P]_{free}[B]_{free}}\]

Determine the relative populations of species in solution

We can only manipulate \([P]_{total}\), \([A]_{total}\) and \([B]_{total}\) experimentally, so our first goal is to determine the concentrations of species such as \([PA]\), which we cannot manipulate or directly observe. Start by writing concentrations as mole fractions:

\[x_{P} = \frac{[P]_{free}}{[P]_{total}}\]
\[x_{PA} = \frac{[PA]}{[P]_{total}}\]
\[x_{PB} = \frac{[PB]}{[P]_{total}}\]
\[x_{P} + x_{PA} + x_{PB} = 1\]

A root of the binding polynomial has been found that describes \(x_{P}\) only in terms of \(K_{A}\), \(K_{B}\), \([A]_{total}\), \([B]_{total}\) and \([P]_{total}\). Start with some convenient definitions:

\[c_{A} = K_{A}[P]_{total}\]
\[c_{B} = K_{B}[P]_{total}\]
\[r_{A} = \frac{[A]_{total}}{P_{total}}\]
\[r_{B} = \frac{[B]_{total}}{P_{total}}\]

The value of \(x_{P}\) is given by:

\[\alpha = \frac{1}{c_{A}} + \frac{1}{c_{B}} + r_{A} + r_{B} - 1\]
\[\beta = \frac{r_{A}-1}{c_{B}} + \frac{r_{B} - 1}{c_{A}} + \frac{1}{c_{A}c_{B}}\]
\[\gamma = -\frac{1}{c_{A}c_{B}}\]
\[\theta = arccos \Big ( \frac{-2\alpha^{3} + 9\alpha \beta -27\gamma}{2\sqrt{(\alpha^2 - 3 \beta)^3}} \Big)\]
\[x_{P} = \frac{2\sqrt{\alpha^2 - 3 \beta}\ cos(\theta/3) - \alpha}{3}\]

Once this is known \(x_{PA}\) and \(x_{PB}\) are uniquely determined by:

\[x_{PA} = \frac{r_{A} x_{P}}{1/C_{A} + x_{P}}\]
\[x_{PB} = \frac{r_{B} x_{P}}{1/C_{B} + x_{P}}\]

Calculate heat changes

The change in heat for each shot \(i\) (\(\Delta Q_{i}\)) is:

\[\Delta Q_{i} = V_{0}P_{total}(\Delta H_{A}(x_{PA,i} - f_{i}x_{PA,i-1}) + \Delta H_{B}(x_{PB,i} - f_{i}x_{PB,i-1})) + q_{dilution},\]

where \(V_{0}\) is the volume of the cell, \(\Delta H_{A}\) is the enthalpy for binding ligand \(A\), \(\Delta H_{B}\) is the enthalpy for binding ligand \(B\). \(f_{i}\) is the dilution factor for each injection:

\[f_{i} = exp(-V_{i}/V_{0}),\]

where \(V_{0}\) is the volume of the cell and \(V_{i}\) is the volume of the \(i\)-th injection.

pytc calculates \(x_{PA,i}\) and friends for the entire titration, correcting for dilution. This means the \(f_{i}\) term is superfluous. Thus, heats are related by:

\[\Delta Q_{i} = V_{0}P_{total,i}(\Delta H_{A}(x_{PA,i} - x_{PA,i-1}) + \Delta H_{B}(x_{PB,i} - x_{PB,i-1})) + q_{dilution}.\]

Note that \(V_{0}\) is held constant (it is the cell volume) as only that volume is detected, not the neck of the cell.

Binding Polynomial

This model was described by Freire et al. (2009). Methods in Enzymology 455:127-155 (link).

indiv_models.BindingPolynomial

Model parameters

parameter variable parameter name class
Adair constant for site 1 \(\beta_{1}\) beta1 thermodynamic
binding enthalpy for site 1 \(\Delta H_{1}\) dH1 thermodynamic
This will have as many \(\beta\) and \(\Delta H\) terms as sites defined in the model.
fraction competent fx_competent nuisance
slope of heat of dilution dilution_heat nuisance
intercept of heat of dilution dilution_intercept nuisance

Model Scheme

The scheme is:

\[S + iT \rightleftharpoons ST_{i}\]

where \(S\) is the stationary species and \(T\) is the titrant. This is an overall binding polynomial, meaning that we account for the total loading of \(i\) molecules of \(T\) onto \(S\). The equilibrium constants (Adair constants) are:

\[\beta_{i} = \frac{[ST_{i}]}{[S][T]^{i}}\]

This model is entirely general (and therefore phenomenological), but is an appropriate starting point for analyzing a complex binding reaction. The Adair constants can be related to a sequential binding model by:

\[S + T \rightleftharpoons ST\]
\[ST + T \rightleftharpoons ST_{2}\]
\[...\]
\[ST_{i-1} + T \rightleftharpoons ST_{i}\]
\[K_{i} = \frac{[ML_{i}]}{[ML_{i-1}][L]} = \frac{\beta_{i}}{\beta_{i-1}}\]

Determine the relative populations of species in solution

The first thing to note is that the binding polynomial \(P\) is a partition function:

\[P = \sum_{i=0}^{n}\frac{[ST_{i}]}{[S]} = \sum_{i=0}^{n} \beta_{i}[T]^{i}\]

This allows us to write equations for the average enthalphy and number of ligand molecules bound:

\[\langle \Delta H \rangle = \frac{\sum_{i=0}^{n} \Delta H_{i} \beta_{i}[T]^{i}} {\sum_{i=0}^{n} \beta_{i}[T]^{i}}\]

and

\[\langle n \rangle = \frac{\sum_{i=0}^{n} i \beta_{i}[T]^{i}} {\sum_{i=0}^{n} \beta_{i}[T]^{i}}\]

This means that obtaining the relative populations of species in solution is (relatively) simple:

\[[T]_{total} = [T]_{bound} + [T]_{free}\]
\[[T]_{total} = \langle n \rangle[S]_{total} + [T]_{free}\]
\[0 = \langle n \rangle[S]_{total} + [T]_{free} - [T]_{total}\]
\[0 = \frac{\sum_{i=0}^{n} i \beta_{i}[T]_{free}^{i}} {\sum_{i=0}^{n} \beta_{i}[T]_{free}^{i}}[S]_{total} + [T]_{free} - [T]_{total}\]

This can then be solved numerically for a value of \([T]_{free}\).

Calculate heat changes

We can relate the heat at shot to the average enthalpies calculated using the value of \(T_{free}\) over the titration. Recalling:

\[\langle \Delta H \rangle = \frac{\sum_{i=0}^{n} \Delta H_{i} \beta_{i}[T]_{free}^{i}} {\sum_{i=0}^{n} \beta_{i}[T]_{free}^{i}}\]

we can calculate the change in heat for shot \(j\) as:

\[\Delta Q_{j} = V_{0} S_{total,j} (\langle \Delta H \rangle_{j} - \langle \Delta H \rangle_{j-1}) + q_{dilution,i}.\]