Commit f092c152 authored by HUANG Wei Chih's avatar HUANG Wei Chih
Browse files

make zero-order ultrasensitivity be in mass-action kinetics

parent 84a00a16
......@@ -2200,8 +2200,10 @@ pos_sigmoid_to_PIVP( OdeSystem, X, Z ) :-
% pos_sigmoid_to_PIVP( +OdeSystem, +VariableXName, +VariableZName )
constant( true, True ),
Threshold is True / 2,
new_variable( T ),
zero_order_to_PIVP( OdeSystem, Threshold, X, _, Z ).
zero_order_ma_to_PIVP( OdeSystem, Threshold, X, _, T ),
multiplication_to_PIVP( OdeSystem, T, 0.01, Z ).
% }}}
/* z = neg_sigmoid( x ):{{{
*
......@@ -2216,8 +2218,10 @@ neg_sigmoid_to_PIVP( OdeSystem, X, Z ) :-
% neg_sigmoid_to_PIVP( +OdeSystem, +VariableXName, +VariableZName )
constant( true, True ),
Threshold is True / 2,
new_variable( T ),
zero_order_to_PIVP( OdeSystem, Threshold, X, Z, _ ).
zero_order_ma_to_PIVP( OdeSystem, Threshold, X, T, _ ),
multiplication_to_PIVP( OdeSystem, T, 0.01, Z ).
% }}}
/* z = pos_number_to_bool( x ):{{{
*
......@@ -2230,7 +2234,9 @@ neg_sigmoid_to_PIVP( OdeSystem, X, Z ) :-
pos_number_to_bool_to_PIVP( OdeSystem, X, Z ) :-
% pos_number_to_bool_to_PIVP( +OdeSytem, +VariableXName, +VariableZName )
zero_order_to_PIVP( OdeSystem, 0.2, X, _, Z ).
new_variable( T ),
zero_order_ma_to_PIVP( OdeSystem, 0.2, X, _, T ),
multiplication_to_PIVP( OdeSystem, T, 0.01, Z ).
pos_number_to_bool_to_PIVP( OdeSystem, X, Z, bidir ) :-
% pos_number_to_bool_to_PIVP( +OdeSytem, +VariableXName, +VariableZName, bidir )
......@@ -2252,7 +2258,9 @@ pos_number_to_bool_to_PIVP( OdeSystem, X, Z, bidir ) :-
neg_number_to_bool_to_PIVP( OdeSystem, X, Z ) :-
% neg_number_to_bool_to_PIVP( +OdeSytem, +VariableXName, +VariableZName )
zero_order_to_PIVP( OdeSystem, 0.2, X, Z, _ ).
new_variable( T ),
zero_order_ma_to_PIVP( OdeSystem, 0.2, X, T, _ ),
multiplication_to_PIVP( OdeSystem, T, 0.01, Z ).
neg_number_to_bool_to_PIVP( OdeSystem, X, Z, bidir ) :-
% neg_number_to_bool_to_PIVP( +OdeSytem, +VariableXName, +VariableZName, bidir )
......@@ -2823,6 +2831,134 @@ mm_to_reaction( Kcat, Km, SY, X, Y ) :-
MM = ( Kcat * [SY] * [X] / ( Km + [X] ) ),
add_reaction( MM for X =[ SY ]=> Y ).
%}}}
% zero-order ultrasensitivity ma{{{
/*
* This implement the zero order ultrasensitivity and
* using Goldbeter-Koshland kinetics.
* The mechenism is similar to the CMOS logic gate.
*
* sx
* |
* <--
* x y
* -->
* |
* sy
*
* sx: switch to x
* sy: switch to y
*
* Goldbeter-Koshland kinetics:
*
* z = x + y
* v1 = k_cat_sy * sy
* v2 = k_cat_sx * sx
* J1 = Km_sy / z
* J2 = Km_sx / z
* B = v2 - v1 + J1 * v2 + J2 * v1
*
* y = 2 * v1 * J2 / ( B + sqrt( B ^ 2 - 4 * ( v2 - v1 ) * v1 * J2 ) )
*
* v2 control the threshold of the sigmoid function
* J1, J2 control the quality of sigmoid function( smaller J => steeper sigmoid )
*
* current parameter:
*
* z = true
* v1 = sy
* v2 = threshold
* J1 = 0.001
* J2 = 0.001
*/
zero_order_ma_to_PIVP( OdeSystem, Threshold, SY, X, Y ) :- % differential semantic
% zero_order_ma_to_PIVP( +OdeSystem, +Thrshold:int, +VariableSYName, +VariableXName, +VarialbeYName )
variable( SY, [ SYP, _ ] ),
!,
get_variable_positive( X, XP ),
get_variable_positive( Y, YP ),
zero_order_ma_to_PIVP( OdeSystem, Threshold, SYP, XP, YP, true, true, false ).
zero_order_ma_to_PIVP( OdeSystem, Threshold, SY, X, Y, Inverse ) :- % differential semantic
% zero_order_ma_to_PIVP( +OdeSystem, +Thrshold:int, +VariableSYName, +VariableXName, +VarialbeYName, +Inverse:bool )
variable( SY, [ SYP, _ ] ),
!,
get_variable_positive( X, XP ),
get_variable_positive( Y, YP ),
zero_order_ma_to_PIVP( OdeSystem, Threshold, SYP, XP, YP, true, true, Inverse ).
zero_order_ma_to_PIVP( OdeSystem, Threshold, SY, X, Y, InitX, InitY, Inverse ) :- % differential semantic
% zero_order_ma_to_PIVP( +OdeSystem, +Thrshold:int, +VariableSYName, +VariableXName, +VarialbeYName, +Inverse:bool )
variable( SY, [ SYP, _ ] ),
!,
get_variable_positive( X, XP ),
get_variable_positive( Y, YP ),
zero_order_ma_to_PIVP( OdeSystem, Threshold, SYP, XP, YP, InitX, InitY, Inverse ).
zero_order_ma_to_PIVP( OdeSystem, Threshold, SY, X, Y, InitX, InitY, Inverse ) :- % non differential semantic
% zero_order_ma_to_PIVP( +OdeSystem, +Thrshold:int, +VariableSYName, +VariableXName, +VarialbeYName, +Inverse:bool )
!,
init_zero_order_ma( OdeSystem, Threshold, X, Y, SX, KcatSX, KcatSY, KmSX, KmSY, InitX, InitY, Inverse ),
gk_to_reaction( OdeSystem, KcatSX, KmSX, KcatSY, KmSY, SX, SY, X, Y ).
init_zero_order_ma( _, Threshold, X, Y, SX, KcatSX, KcatSY, KmSX, KmSY, InitX, InitY, Inverse ) :-
% init_zero_order( +OdeSystem, +Threshold:int, +VariableXName, +VariableYName, -VariableSXName, -KcatSX:real, -KcatSY:real, -KmSX:real, -KmSY:real, +Inverse:bool )
constant( true, True ),
constant( false, False ),
KcatSX is 1,
KcatSY is 1,
KmSX is 0.001 * True,
KmSY is 0.001 * True,
SXInit is Threshold / KcatSX,
new_symbol( SX, SXInit ),
(
Inverse == true
->
XInit = False,
YInit is True * 100
;
XInit is True * 100,
YInit = False
),
(
InitY == true
->
change_symbol_attr( Y, [ init: YInit ] )
;
true
),
(
InitX == true
->
change_symbol_attr( X, [ init: XInit ] )
;
true
).
gk_to_reaction( OdeSystem, KcatSX, KmSX, KcatSY, KmSY, SX, SY, X, Y ) :-
% gk_to_reaction( +KcatSX:real, +KmSX:real, +KcatSY:real, +KmSY:real, +VariableSXName, +VariableSYName, +VariableXName, +VariableYName )
KfSY is 1 / KmSY,
KfSX is 1 / KmSX,
KrSY is 1,
KrSX is 1,
new_symbol( IY ),
new_symbol( IX ),
new_symbol( SYT ),
new_symbol( SXT ),
add_ode( OdeSystem, d( SYT ) / dt = SY - SYT ),
add_ode( OdeSystem, d( SXT ) / dt = SX - SXT ),
add_reaction( 'MA'(KfSY) for X + SYT => IY ),
add_reaction( 'MA'(KrSY) for IY => SYT + X ),
add_reaction( 'MA'(KcatSY) for IY => SYT + Y ),
add_reaction( 'MA'(KfSX) for Y + SXT => IX ),
add_reaction( 'MA'(KrSX) for IX => SXT + Y ),
add_reaction( 'MA'(KcatSX) for IX => SXT + X ),
add_reaction( IX + IY => X + Y ).
%}}}
% control flow{{{
:- discontiguous branch_to_PIVP/5.
/* z = pre x post:{{{
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment