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)


Total protein per plate: 9.600 mL of 0.250 uM protein (0.078 mg)

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]: