EKM 31

Derivation of the thermodynamic equilibrium relationships for a ligand binding to two different receptors

U__U model

images from /Users/kovrigin/Documents/Workspace/Data/Data.XVIII/EKM31.CON58.Ion_Titrations/1.MuPad_derivations/U__U_model.pdf

Back to Contents

Goals

Here I will derive equations for equilibrium between two different receptors competing for the same ligand. Specific case: divalent ion binding to remote site in Ras and, at the same time, to free GNP or EDTA in solution.

Back to Contents

1. Definitions

clean up workspace

reset()

Set path to save results into:

ProjectName:="U__U";
CurrentPath:="/Users/kovrigin/Documents/Workspace/Data/Data.XVIII/EKM31.CON58.Ion_Titrations/1.MuPad_derivations/";

Binding and isomerization constants

All binding constants I am using are association constants.

These relationships serve as restraints for solve(), but not restrict these values in calculations!

K_A_1

K_A_1 ;
assumeAlso(K_A_1  > 0):
assumeAlso(K_A_1 , R_)

K_A_2

K_A_2 ;
assumeAlso(K_A_2  > 0):
assumeAlso(K_A_2 , R_):

Total concentrations

Rtot - total concentration of the receptor

Rtot;
assumeAlso(Rtot>0):
assumeAlso(Rtot,R_):

Ltot - total concentration of the first ligand

Ltot;
assumeAlso(Ltot>0):
assumeAlso(Ltot,R_):

Ptot - total concentration of the second receptor

Ptot;
assumeAlso(Ptot>0):
assumeAlso(Ptot,R_):

Equilibrium concentrations

Req - equilibrium concentration of the first receptor

Req;
assumeAlso(Req>0):
assumeAlso(Req<Rtot):
assumeAlso(Req,R_):

Peq - equilibrium concentration of the second receptor

Peq;
assumeAlso(Peq>0):
assumeAlso(Peq<Ptot):
assumeAlso(Peq,R_):

Leq - equilibrium concentration of a free ligand

Leq;
assumeAlso(Leq>0):
assumeAlso(Leq<Ltot):
assumeAlso(Leq,R_):

RLeq - equilibrium concentration of the first receptor-ligand complex

RLeq;
assumeAlso(RLeq>0):
assumeAlso(RLeq<Rtot):
assumeAlso(RLeq,R_):

PLeq - equilibrium concentration of the second receptor-ligand complex

PLeq;
assumeAlso(PLeq>0):
assumeAlso(PLeq<Ptot):
assumeAlso(PLeq,R_):

Check what we defined

anames(Properties,User);

Back to Contents

2. Basic equilibrium equations

Mass conservation equations

eq2_1:=  Rtot = Req + RLeq;
eq2_2:=  Ptot = Peq + PLeq;
eq2_3:=  Ltot = Leq + PLeq + RLeq;

Equilibrium constants

eq2_4:= K_A_1 = RLeq / (Req*Leq);

eq2_5:= K_A_2 = PLeq / (Peq*Leq)

Back to Contents

3. Derivation of equations for equilibrium concentrations

Express Leq as a function of all constants and total concentrations. If insoluble ---express Rtot=f(Leq and all constants).

First,  express RLeq and PLeq from mass conservation laws

eq2_1;eq2_2; eq2_3

RLeq=f(...)

solve(eq2_1,RLeq);
%[1];
eq3_1a:= RLeq = %

PLeq=f(...)

solve(eq2_2,PLeq);
%[1];
eq3_1b:= PLeq = %

Substitute these results into

-> Ltot=f(...)

eq3_1c:= eq2_3 | eq3_1a | eq3_1b

-> K_A_1=f(...)

eq2_4 ;
eq3_3:= % | eq3_1a

-> K_A_2=f(...)

eq2_5;
eq3_4:= % | eq3_1b

Express Peq and Req from the last equations

Req=f(...)

eq3_3;
solve(%,Req);
eq3_5:= Req = %[1];

Peq=f(...)

eq3_4;
solve(%,Peq);
eq3_6:= Peq = %[1];

Substitute into mass conservation law for L

Ltot=f(...)

eq3_1c;
% | eq3_5 | eq3_6;
eq3_7:= %:

Solve it for Leq

solutions3_7:=solve(eq3_7, Leq)

Insoluble.

Express Rtot for numeric solution

solve(eq3_7, Rtot):
eq3_8:= Rtot = %[1][1];

Back to Contents

4. Prepare equations for a numeric solution

Summary of final equations

ProjectName

Reassign names for storage

Rtot=f([L],...)

Rtot_U_U:=eq3_8

[R]=f([L],...)

Req_U_U:=eq3_5

[P]=f([L],...)

Peq_U_U:=eq3_6

[RL]=f([L],...)

RLeq_U_U:=eq3_1a

[PL]=f([L],...)

PLeq_U_U:=eq3_1b

Prepare functions for numeric solution and evaluation

A function for numeric solving for [L].

fRtot_U_U:=(Ptot, Ltot, Leq, K_A_1, K_A_2)--> eq3_8[2]

Assume some constant values for testing

Total_P:=1e-3:
Total_L:=10e-3:
Eq_L:=9e-3:
Ka1:=1e3:
Ka2:=2e4:

Test fRtot:

Total_R:=fRtot_U_U(Total_P, Total_L, Eq_L, Ka1, Ka2)

=> equation works OK

A procedure for numeric solving of R(tot)=f([L],...) thus creating a function [L]=f(Rtot,...)

WARNING: Make sure the Leq search starts with a non-zero value!

pnLeq_U_U:= proc(Total_R, Total_P, Total_L, Ka1, Ka2)

/* Parameter names should be different from
variable names used in the equation!!!

If you see an error message:
"Error: Illegal operand [_index];
during evaluation of 'your function name'"
it means fsolve returned FAIL and you need to check
values of all parameters passed to the function fRtot

*/

local result;
begin
// print(Total_R, Total_P, Total_L, Ka1, Ka2);
// numeric solving equation for Leq in a restricted range.
// WARNING: make sure the range starts with a non-zero number!!!!
// Also: variable to solve has to be called 'x' !!!
result:=numeric::fsolve(
Total_R-fRtot_U_U(Total_P, Total_L, x, Ka1, Ka2),
x=10e-32..Total_L);
// print(result);
// extract answer from equation
result[1][2]
end_proc;

Test its operation

pnLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2)

=> OK

Define procedures to compute equilibrium concentrations of all species

[R]

Req_U_U;
pnReq_U_U:=proc(Total_R, Total_P, Total_L, Ka1, Ka2)
// Parameter names should be different from
// variable names used in the equation!!!
local  L;
begin

L:=pnLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);

// Equation for [R]
Req_U_U[2] | Rtot=Total_R | Leq=L | K_A_1=Ka1;

end_proc

test

pnReq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);
// test for not having some parameters 'hard-coded' by unwanted substitution.
pnReq_U_U(1, 1, 1, 1, 1);

=> OK

[P]

Peq_U_U;
pnPeq_U_U:=proc(Total_R, Total_P, Total_L, Ka1, Ka2)
// Parameter names should be different from
// variable names used in the equation!!!
local  L;
begin

L:=pnLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);

// Equation for [P]
Peq_U_U[2] | Ptot=Total_P | Leq=L | K_A_2=Ka2;

end_proc

test

pnPeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);
// test for not having some parameters 'hard-coded' by unwanted substitution.
pnPeq_U_U(2, 2, 2, 2, 2);

[PL]

PLeq_U_U;
pnPLeq_U_U:=proc(Total_R, Total_P, Total_L, Ka1, Ka2)
// Parameter names should be different from
// variable names used in the equation!!!
local  L;
begin

L:=pnLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);
P:=pnPeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);

// Equation for [P]
PLeq_U_U[2] | Ptot=Total_P | Peq=P;

end_proc

test

pnPLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);
// test for not having some parameters 'hard-coded' by unwanted substitution.
pnPeq_U_U(2, 2, 2, 2, 2);

[RL]

RLeq_U_U;
pnRLeq_U_U:=proc(Total_R, Total_P, Total_L, Ka1, Ka2)
// Parameter names should be different from
// variable names used in the equation!!!
local  L;
begin

L:=pnLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);
R:=pnReq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);

// Equation for [P]
RLeq_U_U[2] | Rtot=Total_R | Req=R;

end_proc

test

pnRLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2);
// test for not having some parameters 'hard-coded' by unwanted substitution.
pnReq_U_U(2, 2, 2, 2, 2);

Final test of all procedures (use mass conservation laws)

Substitute into mass conservation law equations and observe equalities

eq2_1;
eq2_1 | Rtot=Total_R
| RLeq=pnRLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2)
| Req=pnReq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2)

=>OK

eq2_2;
eq2_2 | Ptot=Total_P
| PLeq=pnPLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2)
| Peq=pnPeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2)

=>OK

eq2_3;
eq2_3 | Ltot=Total_L
| PLeq=pnPLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2)
| RLeq=pnRLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2)
| Leq=pnLeq_U_U(Total_R, Total_P, Total_L, Ka1, Ka2)

=>OK

Back to Contents

5. Save results on disk

(you can retrieve them later by executing: fread(filename,Quiet))

ProjectName

filename:=CurrentPath.ProjectName.".mb";
write(filename,
// Equations
Rtot_U_U,
Req_U_U,
Peq_U_U,
RLeq_U_U,
PLeq_U_U,

// Function for numeric solving
fRtot_U_U,

// Final procedures
pnLeq_U_U,
pnReq_U_U,
pnPeq_U_U,
pnRLeq_U_U,
pnPLeq_U_U)

Back to Contents

Conclusions

1. This system is analytically insoluble.

2. I derived numeric solutions and saved them.

Back to Contents