The experiment was performed on April 20, 2016. Full details can be found in Fluorescence Assay Lab Notebook in the google doc.
Roughly, 50 uL of 0.5uM of p38 in Kinase Buffer in a 384 well plate. A 24 well titration of each ligand was performed by the D300. A row of just buffer with the ligand titration was also measured along side our binding assay. In half the plate DMSO concentrations were normalized. In the other half they were not. (Note it is likely Gefitinib was not dispensed for unknown reasons, but just an observation upon watching the EVO pipette.)
DMSO percent in the DMSO backfill is to normalize concentration to the highest concentration which is: 0.2% DMSO
In [3]:
from assaytools import platereader
import matplotlib.pyplot as plt
import string
%pylab inline
In [4]:
part1 = "p38_singlet1_20160420_153238.xml"
part2 = "p38_singlet2_20160420_154750.xml"
In [5]:
part1_data = platereader.read_icontrol_xml(part1)
part2_data = platereader.read_icontrol_xml(part2)
In [6]:
#part1_data
In [7]:
part1_data.keys()
Out[7]:
In [8]:
part2_data.keys()
Out[8]:
In [9]:
part1_data_A = platereader.select_data(part1_data, '280_480_TOP_120', 'A')
In [10]:
part1_data_B = platereader.select_data(part1_data, '280_480_TOP_120', 'B')
In [11]:
well = dict()
for j in string.ascii_uppercase:
for i in range(1,25):
well['%s' %j + '%s' %i] = i
In [12]:
def plotting(data_protein,data_buffer,ligand):
x,y = [],[]
for key in data_protein:
x.append(ligand[key])
y.append(data_protein[key])
a,b = [],[]
for key in data_buffer:
a.append(ligand[key])
b.append(data_buffer[key])
plt.scatter(x,y)
plt.scatter(a,b,color='k');
In [13]:
plotting(part1_data_A,part1_data_B,well)
In [14]:
part1_data_C = platereader.select_data(part1_data, '280_480_TOP_120', 'C')
part1_data_D = platereader.select_data(part1_data, '280_480_TOP_120', 'D')
In [15]:
plotting(part1_data_C,part1_data_D,well)
In [16]:
part1_data_E = platereader.select_data(part1_data, '280_480_TOP_120', 'E')
part1_data_F = platereader.select_data(part1_data, '280_480_TOP_120', 'F')
plotting(part1_data_E,part1_data_F,well)
In [17]:
part1_data_G = platereader.select_data(part1_data, '280_480_TOP_120', 'G')
part1_data_H = platereader.select_data(part1_data, '280_480_TOP_120', 'H')
plotting(part1_data_G,part1_data_H,well)
In [18]:
part1_data_I = platereader.select_data(part1_data, '280_480_TOP_120', 'I')
part1_data_J = platereader.select_data(part1_data, '280_480_TOP_120', 'J')
plotting(part1_data_I,part1_data_J,well)
plotting(part1_data_A,part1_data_B,well)
In [19]:
part1_data_K = platereader.select_data(part1_data, '280_480_TOP_120', 'K')
part1_data_L = platereader.select_data(part1_data, '280_480_TOP_120', 'L')
plotting(part1_data_K,part1_data_L,well)
plotting(part1_data_C,part1_data_D,well)
In [20]:
part1_data_M = platereader.select_data(part1_data, '280_480_TOP_120', 'M')
part1_data_N = platereader.select_data(part1_data, '280_480_TOP_120', 'N')
plotting(part1_data_M,part1_data_N,well)
plotting(part1_data_E,part1_data_F,well)
In [21]:
part1_data_O = platereader.select_data(part1_data, '280_480_TOP_120', 'O')
part1_data_P = platereader.select_data(part1_data, '280_480_TOP_120', 'P')
plotting(part1_data_O,part1_data_P,well)
plotting(part1_data_G,part1_data_H,well)
In [22]:
part1_data_O
Out[22]:
In [23]:
#While this way of plotting works fine, I need to have this data in a list in the right order
#to analyze as I currently have it
In [24]:
Lstated = np.array([20.0e-6,14.0e-6,9.82e-6,6.88e-6,4.82e-6,3.38e-6,2.37e-6,1.66e-6,1.16e-6,0.815e-6,0.571e-6,0.4e-6,0.28e-6,0.196e-6,0.138e-6,0.0964e-6,0.0676e-6,0.0474e-6,0.0320e-6,0.0240e-6,0.0160e-6,0.0120e-6,0.008e-6,0.00001e-6], np.float64) # ligand concentration, M
In [25]:
#sorted(well.keys(), key=lambda k:well[k])
In [ ]:
In [ ]:
In [26]:
def reorder2list(data,wells):
sorted_keys = sorted(well.keys(), key=lambda k:well[k])
reorder_data = []
for key in sorted_keys:
try:
reorder_data.append(data[key])
except:
pass
reorder_data = np.asarray(reorder_data,np.float64)
return reorder_data
In [ ]:
In [ ]:
In [27]:
reorder_A = reorder2list(part1_data_A,well)
In [28]:
part1_data_A
Out[28]:
In [29]:
reorder_A
Out[29]:
In [30]:
reorder_B = reorder2list(part1_data_B,well)
In [31]:
plt.semilogx()
plt.plot(Lstated,reorder_A,Lstated,reorder_B);
Analysis
Below everything needs to be changed to be relevant to 384 well plate.
In [32]:
# Stated concentrations of protein and ligand.
#ligand_conc from before
Pstated = 0.5e-6 * np.ones([24],np.float64) # protein concentration, M
In [33]:
# Assay configuration details
import math
assay_volume = 50e-6 # assay volume, L
well_area = 0.1369 # well area, cm^2 for 4ti-0203 [http://4ti.co.uk/files/3113/4217/2464/4ti-0201.pdf]
path_length = assay_volume * 1000 / well_area # cm, needed for inner filter effect corrections
# Uncertainties in protein and ligand concentrations.
dPstated = 0.35 * Pstated # protein concentration uncertainty
dLstated = 0.08 * Lstated # ligand concentraiton uncertainty (due to gravimetric preparation and HP D300 dispensing)
In [40]:
def quick_model(protein_data, buffer_data,name):
reorder_protein = reorder2list(protein_data,well)
reorder_buffer = reorder2list(buffer_data,well)
from assaytools import pymcmodels
pymc_model = pymcmodels.make_model(Pstated, dPstated, Lstated, dLstated,
top_complex_fluorescence=reorder_protein,
top_ligand_fluorescence=reorder_buffer,
use_primary_inner_filter_correction=True,
use_secondary_inner_filter_correction=True,
assay_volume=assay_volume, DG_prior='uniform')
mcmc = pymcmodels.run_mcmc(pymc_model)
from assaytools import plots
figure = plots.plot_measurements(Lstated, Pstated, pymc_model, mcmc=mcmc)
map = pymcmodels.map_fit(pymc_model)
pymcmodels.show_summary(pymc_model, map, mcmc)
DeltaG = map.DeltaG.value
np.save('DeltaG_%s.npy'%name,DeltaG)
np.save('DeltaG_trace_%s.npy'%name,mcmc.DeltaG.trace())
In [41]:
quick_model(part1_data_A,part1_data_B,'BOS_w_backfill')
In [42]:
quick_model(part1_data_I,part1_data_J,'BOS')
In [43]:
DeltaG_trace_BOS_w_backfill = np.load('DeltaG_trace_BOS_w_backfill.npy')
DeltaG_trace_BOS = np.load('DeltaG_trace_BOS.npy')
In [146]:
import pandas as pd
bos_affinity = pd.read_csv('../literature_affinity/bosutinib.csv')
# bos_affinity[['Name in screen']] == 'p38-alpha'
# bos_affinity[['Affinity (nM)']]
bos_affinity[bos_affinity['Name in screen'] == 'p38-alpha']['Affinity (nM)']
#bos_affinity.
Out[146]:
In [65]:
plt.hist(DeltaG_trace_BOS, 40, alpha=0.75, label='Bos no backfill')
plt.hist(DeltaG_trace_BOS_w_backfill, 40, alpha=0.75, label='Bos with backfill')
plt.plot([DeltaG_trace_BOS_w_backfill.mean(),DeltaG_trace_BOS_w_backfill.mean()],[0, 350],'g-')
plt.plot([DeltaG_trace_BOS.mean(),DeltaG_trace_BOS.mean()],[0, 350],'b-')
#plt.plot([literature_Bos,literature_Bos],[0, 350],'r-',label='IUPHARM data')
plt.xlabel('$\Delta G$ ($k_B T$)');
plt.ylabel('$P(\Delta G)$');
plt.title('histogram of estimates for binding free energy');
plt.legend(loc=0);
In [149]:
quick_model(part1_data_C,part1_data_D,'BSI_w_backfill')
In [150]:
quick_model(part1_data_K,part1_data_L,'BSI')
In [151]:
DeltaG_trace_BSI_w_backfill = np.load('DeltaG_trace_BSI_w_backfill.npy')
DeltaG_trace_BSI = np.load('DeltaG_trace_BSI.npy')
In [153]:
plt.hist(DeltaG_trace_BSI, 40, alpha=0.75, label='Bsi no backfill')
plt.hist(DeltaG_trace_BSI_w_backfill, 40, alpha=0.75, label='Bsi with backfill')
plt.plot([DeltaG_trace_BSI_w_backfill.mean(),DeltaG_trace_BSI_w_backfill.mean()],[0, 350],'g-')
plt.plot([DeltaG_trace_BSI.mean(),DeltaG_trace_BSI.mean()],[0, 350],'b-')
#plt.plot([literature_Bos,literature_Bos],[0, 350],'r-',label='IUPHARM data')
plt.xlabel('$\Delta G$ ($k_B T$)');
plt.ylabel('$P(\Delta G)$');
plt.title('histogram of estimates for binding free energy');
plt.legend(loc=0);
In [154]:
quick_model(part1_data_E,part1_data_F,'ERL_w_backfill')
In [155]:
quick_model(part1_data_M,part1_data_N,'ERL')
In [156]:
DeltaG_trace_ERL_w_backfill = np.load('DeltaG_trace_ERL_w_backfill.npy')
DeltaG_trace_ERL = np.load('DeltaG_trace_ERL.npy')
In [157]:
plt.hist(DeltaG_trace_ERL, 40, alpha=0.75, label='Erl no backfill')
plt.hist(DeltaG_trace_ERL_w_backfill, 40, alpha=0.75, label='Erl with backfill')
plt.plot([DeltaG_trace_ERL_w_backfill.mean(),DeltaG_trace_ERL_w_backfill.mean()],[0, 350],'g-')
plt.plot([DeltaG_trace_ERL.mean(),DeltaG_trace_ERL.mean()],[0, 350],'b-')
#plt.plot([literature_Bos,literature_Bos],[0, 350],'r-',label='IUPHARM data')
plt.xlabel('$\Delta G$ ($k_B T$)');
plt.ylabel('$P(\Delta G)$');
plt.title('histogram of estimates for binding free energy');
plt.legend(loc=0);
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
Summary of differences in bar chart: http://matplotlib.org/examples/api/barchart_demo.html