| Line 1: | Line 1: | ||
<html> | <html> | ||
| − | <head> | + | <head><meta charset="utf-8" /> |
| − | + | <title>KinProj_Final</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script> | |
| − | <meta charset="utf-8" /> | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | <title>KinProj_Final | + | |
| − | + | ||
| − | <script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script> | + | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> | <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
<style type="text/css"> | <style type="text/css"> | ||
| Line 11,774: | Line 11,719: | ||
<style type="text/css"> | <style type="text/css"> | ||
/* Overrides of notebook CSS for static HTML export */ | /* Overrides of notebook CSS for static HTML export */ | ||
| − | + | body { | |
| − | + | overflow: visible; | |
| + | padding: 8px; | ||
} | } | ||
| − | + | ||
| − | + | div#notebook { | |
| − | + | overflow: visible; | |
| − | + | border-top: none; | |
| − | + | }@media print { | |
| − | + | div.cell { | |
| − | + | display: block; | |
| − | + | page-break-inside: avoid; | |
| − | + | } | |
| − | + | div.output_wrapper { | |
| − | + | display: block; | |
| − | + | page-break-inside: avoid; | |
| − | + | } | |
| − | + | div.output { | |
| − | + | display: block; | |
| − | + | page-break-inside: avoid; | |
| − | + | } | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | border- | + | |
| − | } | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | . | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | } | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | div. | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | } | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | div. | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | } | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
} | } | ||
</style> | </style> | ||
| Line 11,892: | Line 11,746: | ||
<link rel="stylesheet" href="custom.css"> | <link rel="stylesheet" href="custom.css"> | ||
| − | </ | + | <!-- Loading mathjax macro --> |
| − | + | <!-- Load mathjax --> | |
| − | + | <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML"></script> | |
| + | <!-- MathJax configuration --> | ||
| + | <script type="text/x-mathjax-config"> | ||
| + | MathJax.Hub.Config({ | ||
| + | tex2jax: { | ||
| + | inlineMath: [ ['$','$'], ["\\(","\\)"] ], | ||
| + | displayMath: [ ['$$','$$'], ["\\[","\\]"] ], | ||
| + | processEscapes: true, | ||
| + | processEnvironments: true | ||
| + | }, | ||
| + | // Center justify equations in code and markdown cells. Elsewhere | ||
| + | // we use CSS to left justify single line equations in code cells. | ||
| + | displayAlign: 'center', | ||
| + | "HTML-CSS": { | ||
| + | styles: {'.MathJax_Display': {"margin": 0}}, | ||
| + | linebreaks: { automatic: true } | ||
| + | } | ||
| + | }); | ||
| + | </script> | ||
| + | <!-- End of mathjax configuration --></head> | ||
<body> | <body> | ||
| + | <div tabindex="-1" id="notebook" class="border-box-sizing"> | ||
| + | <div class="container" id="notebook-container"> | ||
| − | |||
| − | |||
| − | |||
| − | |||
<div class="cell border-box-sizing code_cell rendered"> | <div class="cell border-box-sizing code_cell rendered"> | ||
<div class="input"> | <div class="input"> | ||
| Line 12,123: | Line 11,994: | ||
| − | <div id=" | + | <div id="81a33e18-2e22-4db6-8eb3-ba89537a39b0"></div> |
<div class="output_subarea output_javascript "> | <div class="output_subarea output_javascript "> | ||
<script type="text/javascript"> | <script type="text/javascript"> | ||
| − | var element = $('# | + | var element = $('#81a33e18-2e22-4db6-8eb3-ba89537a39b0'); |
(function(root) { | (function(root) { | ||
| Line 12,427: | Line 12,298: | ||
| − | <div id=" | + | <div id="37d359ff-c239-4abd-a0ab-e18e8ba99d7a"></div> |
<div class="output_subarea output_javascript "> | <div class="output_subarea output_javascript "> | ||
<script type="text/javascript"> | <script type="text/javascript"> | ||
| − | var element = $('# | + | var element = $('#37d359ff-c239-4abd-a0ab-e18e8ba99d7a'); |
(function(root) { | (function(root) { | ||
function embed_document(root) { | function embed_document(root) { | ||
| Line 12,506: | Line 12,377: | ||
</div> | </div> | ||
</div> | </div> | ||
| − | </div> | + | </div> |
| − | </div> | + | </div> |
| + | </body> | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
</html> | </html> | ||
Latest revision as of 20:16, 16 October 2019
import bokeh
from bokeh.plotting import Figure, output_notebook, show
import math
import scipy
import numpy as np
from bokeh.layouts import widgetbox, row, column
from bokeh.models import CustomJS, ColumnDataSource, Slider, Button, PreText, TextInput
A = 0.35
Em = 20000*math.pow(10,-6)
L = 1
DNA = 2.5 #(наномоль/л) - концентрация ДНК
Cas1 = 5 #(наномоль/л) - концентрация dCas9_1
Cas2 = 5 #(наномоль/л) - концентрация dCas9_2
print((A/(Em*L))*1000)
SO = ((A/(Em*L))*1000)*4 + 10000 #(наномоль/л) - концентрация субстрата
CpO = 0
if (DNA < Cas1 and DNA < Cas2):
CEBL = DNA
else:
if(Cas1>Cas2):
CEBL = Cas2
else:
CEBL = Cas1
Km = 10*1000 #(наномоль/л)
kcat = 2.22
dt1=[dt for dt in range(0, 3600)] #Изменение времени в секундах
C = [0]*3600
b = 0
#Построение графика
y1 = list(C)
x1 = list(dt1)
source = ColumnDataSource(data=dict(x1=x1, y1=y1))
fig = Figure(plot_width=700, plot_height=500, title="Зависимость концентрации продукта расщепления нитроцефина бета-лактамазой от времени",x_axis_label='Время, с', y_axis_label='Концентрация продукта, нМ')
for i in range(0,3600):
if (i == 0):
Cp = CpO
else:
Cp = Cp + ((kcat*CEBL*(SO - Cp))*(dt1[i] - dt1[i-1])/(Km + (SO - Cp)))
if (Cp >= (A/(Em*L))*1000):
b = i
y1[i] = Cp
print(Cp)
dt1 = [dt for dt in range(0,b)]
x1 = list(dt1)
source = ColumnDataSource(data=dict(x1=x1, y1=y1))
#Перестройка графика при изменении параметров
#Общий callback
callback = CustomJS(args=dict(source=source), code="""
DNA = parseFloat(DNA.value)
Cas1 = parseFloat(Cas1.value)
Cas2 = parseFloat(Cas2.value)
SO = parseInt(SO.value)
CpO = 0
CEBL = 0
if(DNA < Cas1 && DNA < Cas2){CEBL = DNA}else{if(Cas1>Cas2){CEBL = Cas2}else{CEBL = Cas1}}
Km = parseFloat(Km.value)
data = source.data
kcat = 2.22
dt1=data['x1']
C=data['y1']
b = 0
for (var i = 0; i < 3600; i++)
{
if (i == 0)
{
Cp = CpO
}
else
{
Cp = Cp + ((CEBL*kcat*(SO - Cp))*(dt1[i] - dt1[i-1])/(Km + (SO - Cp)))
if (Cp > SO)
{
b = i-1
break;
}
}
C[i] = Cp
}
b.value = b
source.change.emit();
""")
reset = CustomJS(args=dict(source=source), code="""
A = 0.2
Em = 20000*Math.pow(10,-6)
L = 1
DNA = 2.5
Cas1 = 5
Cas2 = 5
SO = (A/(Em*L))*1000
CpO = 0
CEBL = 0
if(DNA < Cas1 && DNA < Cas2){CEBL = DNA}else{if(Cas1>Cas2){CEBL = Cas2}else{CEBL = Cas1}}
Km = 10*1000
kcat = 2.22
data = source.data
dt1=data['x1']
C=data['y1']
b = 0
for (var i = 0; i < 3600; i++)
{
if (i == 0)
{
Cp = CpO
}
else
{
Cp = Cp + ((CEBL*kcat*(SO - Cp))*(dt1[i] - dt1[i-1])/(Km + (SO - Cp)))
if (Cp > SO)
{
b = i-1
break
}
}
C[i] = Cp
}
SO.value = A/(Em*L)
DNA.value = 2
Cas1.value = 3
Cas2.value = 3
Km.value = (10).toString()
source.change.emit();
""")
#Слайдеры
DNAsl = Slider(title = '[DNA], nM', start=0, end=DNA*2, value=DNA, step=0.5, callback=callback)
callback.args["DNA"] = DNAsl
reset.args["DNA"] = DNAsl
Casasl = Slider(title = '[sgRNA-dCas9_1], nM', start=0, end=Cas1*2, value=Cas1, step=0.5, callback=callback)
callback.args["Cas1"] = Casasl
reset.args["Cas1"] = Casasl
Casbsl = Slider(title = '[sgRNA-dCas9_2], nM', start=0, end=Cas2*2, value=Cas2, step=0.5, callback=callback)
callback.args["Cas2"] = Casbsl
reset.args["Cas2"] = Casbsl
SOsl = Slider(title = '[Nitrocefin], nM', start=SO/2, end=SO*2, value=SO, step=5, callback=callback)
callback.args["SO"] = SOsl
reset.args["SO"] = SOsl
#Textbox'ы
IKm = TextInput(callback=callback, value=str(Km))
callback.args["Km"] = IKm
TKm = PreText(text = "Km")
ITime = TextInput(callback=callback, value=str(b))
callback.args["b"] = ITime
Ttime = PreText(text = "time, needed to detect signal")
#Кнопка Reset
resetbt = Button(callback=reset,label="Reset")
fig.circle('x1','y1', source=source, size = 1.5, color = 'red')
output_notebook()
show(column(row(fig,widgetbox(IKm,TKm,ITime,Ttime)),widgetbox(DNAsl,Casasl,Casbsl,SOsl,resetbt)))
Для описания кинетики реакций, используемых в нашем проекте, мы разделили их на три части: • Взаимодействие dCas9 с ДНК (связывание) • Взаимодействие разъединенных доменов бета-лактамазы с образованием молекулы фермента • Фермент-субстратное взаимодействие
Исходя из источников литературы, константы связывания dCas9 с ДНК велики, поэтому ими можно пренебречь, следовательно, в рамках модели считается, что связывание dCas9 c ДНК происходит мгновенно.
Фермент-субстратное взаимодействие описывается уравнением Михаэлиса-Ментен:
$$\frac{d[P]}{dt} = \frac{kcat[E0][S]}{Km + [S]}$$
Модель представляет собой интерактивный график зависимости концентрации продукта гидролиза нитроцефина бета-лактамазой от времени. Уравнение имеет следующий вид:
$$[P] = [P] + \frac{kcat[E][S]dt}{Km + [S]}$$