This notebook models a competition assay using an HP D300 with a 384-well plate
In [5]:
import numpy
In [40]:
# Inhibitor data from Table S4 (XLS) from http://dx.doi.org/10.1038/nbt.1990
imatinib_Kd = 1.1 * 1e-9; # Kd in M for unphosphorylated ABL
bosutinib_Kd = 0.12 * 1e-9; # Kd (M) for unphosphorylated ABL
max_bosutinib_concentration = 25e-6 # M
min_bosutinib_concentration = 0.075e-6 # M
nwells = 12 # number of wells for assay
nrows = 8 # number of rows per plate
protein_concentration = 0.250e-6; # protein concentration in plate (M)
assay_volume = 100e-6; # volume in plate (L)
protein_molecular_weight = 32.49e3 # g/mol
# Detection limit based on BioTek H4 specs and Nick's estimate of bosutinib fluorescence efficiency.
fluorescein_detection_limit = 15e-12 * 200e-6; # detection limit (mol)
detection_limit = 100 * fluorescein_detection_limit;
# Detection limit based on Nick's bosutinib:Abl paper.
# 1 nM in 1.5 mL cuvette.
detection_limit = 1e-9 * 1.5e-3; # detection limit (mol)
In [41]:
total_volume_per_plate = nwells * nrows * assay_volume
total_protein_mass = protein_concentration * total_volume_per_plate * protein_molecular_weight
print "Total protein per plate: %.3f mL of %.3f uM protein (%.3f mg)" % (total_volume_per_plate / 1e-3, protein_concentration/1e-6, total_protein_mass / 1e-3)
In [42]:
from models import CompetitiveBindingModel
experiments = list()
receptors = ['ABL'] # list of receptors
ligands = ['imatinib', 'bosutinib'] # list of ligands
imatinib_concentration = 0.0
bosutinib_concentration = 1.0e-6
Ka_n = numpy.array([1./imatinib_Kd, 1./bosutinib_Kd]) # association constants
C0_R = protein_concentration
#ligand_concentrations = numpy.array([1e-12, 10e-12, 100e-12, 1e-9, 10e-8, 100e-8, 1e-6, 10e-6]); # concentrations
ligand_concentrations = numpy.logspace(min_bosutinib_concentration, max_bosutinib_concentration, nwells); # concentrations
nconcentrations = len(ligand_concentrations)
C_n = numpy.zeros([nconcentrations, 2], numpy.float64);
for (index, bosutinib_concentration) in enumerate(ligand_concentrations):
C0_Ln = numpy.array([imatinib_concentration, bosutinib_concentration])
C_n[index,:] = CompetitiveBindingModel.equilibrium_concentrations(Ka_n, C0_R, C0_Ln, assay_volume)
# Plot results
import pylab
bosutinib_complex_moles = assay_volume * C_n[:,1]
pylab.semilogx(ligand_concentrations, bosutinib_complex_moles, 'ko');
pylab.xlabel('bosutinib concentration');
pylab.ylabel('bosutinib complex (mol)');
pylab.hold(True);
pylab.plot([min(ligand_concentrations), max(ligand_concentrations)], [detection_limit, detection_limit], 'r-');
In [43]:
def compute_fluorescence(imatinib_concentration=0.0):
from models import CompetitiveBindingModel
Ka_n = numpy.array([1./imatinib_Kd, 1./bosutinib_Kd]) # association constants
C0_R = protein_concentration
ligand_concentrations = numpy.logspace(numpy.log10(min_bosutinib_concentration), numpy.log10(max_bosutinib_concentration), nwells); # concentrations
nconcentrations = len(ligand_concentrations)
C_n = numpy.zeros([nconcentrations, 2], numpy.float64);
for (index, bosutinib_concentration) in enumerate(ligand_concentrations):
C0_Ln = numpy.array([imatinib_concentration, bosutinib_concentration])
C_n[index,:] = CompetitiveBindingModel.equilibrium_concentrations(Ka_n, C0_R, C0_Ln, assay_volume)
binding_complex_moles = assay_volume * C_n[:,1]
return [ligand_concentrations, binding_complex_moles]
def plot_given_imatinib_concentration(imatinib_concentration=0.0):
[ligand_concentrations, no_imatinib] = compute_fluorescence(imatinib_concentration=0.0)
[ligand_concentrations, with_imatinib] = compute_fluorescence(imatinib_concentration=imatinib_concentration)
# Plot results
import pylab
pylab.semilogx(ligand_concentrations, no_imatinib, 'ko');
pylab.hold(True);
pylab.semilogx(ligand_concentrations, with_imatinib, 'ro');
pylab.xlabel('bosutinib concentration');
pylab.ylabel('bosutinib complex (mol)');
pylab.hold(True);
pylab.plot([min(ligand_concentrations), max(ligand_concentrations)], [detection_limit, detection_limit], 'r-');
In [44]:
plot_given_imatinib_concentration(imatinib_concentration=0.0)
In [45]:
plot_given_imatinib_concentration(imatinib_concentration=1.0e-9)
In [46]:
plot_given_imatinib_concentration(imatinib_concentration=1.0e-6)
In [47]:
plot_given_imatinib_concentration(imatinib_concentration=10.0e-6)
In [48]:
plot_given_imatinib_concentration(imatinib_concentration=100.0e-6)
In [48]:
In [48]:
In [14]: