5U-R-RL

Generalized model with one binding-incompetent conformation of R (for example, closed) and many binding-competent (for example, open) leading to one nal bound (closed) conformation of R

Back to Contents

Goals

In this document, I am developing equilibrium thermodynamic equations to calculate concentrations of species at all points in titrations

Back to Contents

1. Definitions

clean up workspace

reset()

Set path to save results into:

ProjectName:="5U-R-RL";
CurrentPath:="/Users/kovrigin_laptop/Documents/Workspace/Global_Analysis/IDAP/Mathematical_models/Equilibrium_thermodynamic_models/U-multi-path-models/nU/5U-R-RL";

Binding constants

All binding constants I am using are association constants.

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

To denote "primed" species, I will use p_1 for ', p_2 for '', etc.

K_A'

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

K_A''

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

K_A'''

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

K_A''''

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

K_A'''''

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

Formation of binding-competent isomers

K_B_1_p_1

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

K_B_1_p_2

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

K_B_1_p_3

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

K_B_1_p_4

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

K_B_1_p_5

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

Induced-fit step (only one independent constant)

K_B_2_p_1

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

Total concentrations

Rtot - total concentration of the  receptor

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

Ltot - total concentration of the  ligand

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

Equilibrium concentrations

R_seq - equilibrium concentration of the binding-INcompetent receptor form

R_seq;
assumeAlso(R_seq>0):
assumeAlso(R_seq<=Rtot):
assumeAlso(R_seq,R_):

Equilibrium concentrations of the binding competent receptor isomers Rn*

R_p_1eq

R_p_1eq;
assumeAlso(R_p_1eq>0):
assumeAlso(R_p_1eq<=Rtot):
assumeAlso(R_p_1eq,R_):

R_p_2eq

R_p_2eq;
assumeAlso(R_p_2eq>0):
assumeAlso(R_p_2eq<=Rtot):
assumeAlso(R_p_2eq,R_):

R_p_3eq

R_p_3eq;
assumeAlso(R_p_3eq>0):
assumeAlso(R_p_3eq<=Rtot):
assumeAlso(R_p_3eq,R_):

R_p_4eq

R_p_4eq;
assumeAlso(R_p_4eq>0):
assumeAlso(R_p_4eq<=Rtot):
assumeAlso(R_p_4eq,R_):

R_p_5eq

R_p_5eq;
assumeAlso(R_p_5eq>0):
assumeAlso(R_p_5eq<=Rtot):
assumeAlso(R_p_5eq,R_):

Equilibrium concentrations of the bound receptor isomers Rn'L

R_p_1Leq

R_p_1Leq;
assumeAlso(R_p_1Leq>0):
assumeAlso(R_p_1Leq<Rtot):
assumeAlso(R_p_1Leq<Ltot):
assumeAlso(R_p_1Leq,R_):

R_p_2Leq

R_p_2Leq;
assumeAlso(R_p_2Leq>0):
assumeAlso(R_p_2Leq<Rtot):
assumeAlso(R_p_2Leq<Ltot):
assumeAlso(R_p_2Leq,R_):

R_p_3Leq

R_p_3Leq;
assumeAlso(R_p_3Leq>0):
assumeAlso(R_p_3Leq<Rtot):
assumeAlso(R_p_3Leq<Ltot):
assumeAlso(R_p_3Leq,R_):

R_p_4Leq

R_p_4Leq;
assumeAlso(R_p_4Leq>0):
assumeAlso(R_p_4Leq<Rtot):
assumeAlso(R_p_4Leq<Ltot):
assumeAlso(R_p_4Leq,R_):

R_p_5Leq

R_p_5Leq;
assumeAlso(R_p_5Leq>0):
assumeAlso(R_p_5Leq<Rtot):
assumeAlso(R_p_5Leq<Ltot):
assumeAlso(R_p_5Leq,R_):

Equilibrium concentrations of other species

Leq - equilibrium concentration of a free ligand

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

R_sLeq - equilibrium concentration of the final receptor-ligand complex, R*L

R_sLeq;
assumeAlso(R_sLeq>0):
assumeAlso(R_sLeq<Rtot):
assumeAlso(R_sLeq<Ltot):
assumeAlso(R_sLeq,R_):

Check what we defined

anames(Properties,User);

Back to Contents

2. Basic equilibrium equations

Mass conservation equations

eq2_1:= Rtot = R_seq + \
R_p_1eq + R_p_2eq +  R_p_3eq + R_p_4eq +  R_p_5eq + \
R_p_1Leq + R_p_2Leq + R_p_3Leq + R_p_4Leq + R_p_5Leq + \
R_sLeq;
eq2_2:= Ltot = Leq + R_p_1Leq + R_p_2Leq + R_p_3Leq + R_p_4Leq + R_p_5Leq + R_sLeq;

Equilibrium constants for formation of binding-competent isomers

HINT: When increasing number of species: do not increase equation number, add a, b, c, ... modifier instead because then you do NOT need to modify equation numbers in most of the following derivation!

eq2_3_1:= K_B_1_p_1 = R_p_1eq/R_seq

eq2_3_2:= K_B_1_p_2 = R_p_2eq/R_seq

eq2_3_3:= K_B_1_p_3 = R_p_3eq/R_seq

eq2_3_4:= K_B_1_p_4 = R_p_4eq/R_seq

eq2_3_5:= K_B_1_p_5 = R_p_5eq/R_seq

Equilibrium association constants

eq2_4_1:= K_A_p_1 = R_p_1Leq/(R_p_1eq*Leq)

eq2_4_2:= K_A_p_2 = R_p_2Leq/(R_p_2eq*Leq)

eq2_4_3:= K_A_p_3 = R_p_3Leq/(R_p_3eq*Leq)

eq2_4_4:= K_A_p_4 = R_p_4Leq/(R_p_4eq*Leq)

eq2_4_5:= K_A_p_5 = R_p_5Leq/(R_p_5eq*Leq)

Independent equilibrium constant for the induced fit step

eq2_5:= K_B_2_p_1 = R_sLeq/R_p_1Leq

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).

I will express concentrations in the following order:

- R*L <- R'L <- R' <- R*

- Rn'L<- Rn' <- R*

- Then I express R* out of Ltot equation and substitute to Rtot equation

- Last, I will express L from Rtot equation

Mass conservation laws will keep the equation number and will be with incremented with a letter as I proceed with substitutions

eq3_0a:= eq2_1

eq3_1a:= eq2_2

Section 3.2: Express R*L

R*L

eq2_5;
solve(%,R_sLeq):
%[1][1]:
eq3_2:= R_sLeq=%

Substitute into the mass conservation laws:

eq3_0a;
% | eq3_2:
eq3_0b:= %

eq3_1a;
% | eq3_2:
eq3_1b:= %

Section 3.3: Express Rn'L species

NOTE: For better system of numbering mass conservation law equations see Section 3.4

R'L

eq2_4_1;

solve(%,R_p_1Leq):
%[1][1]:
eq3_3_1:= R_p_1Leq=%

Substitute into the mass conservation laws:

eq3_0b;
% | eq3_3_1:
eq3_0c:= %

eq3_1b;
% | eq3_3_1:
eq3_1c:= %

R''L

eq2_4_2;

solve(%,R_p_2Leq):
%[1][1]:
eq3_3_2:= R_p_2Leq=%

Substitute into the mass conservation laws:

eq3_0c;
% | eq3_3_2:
eq3_0d:= %

eq3_1c;
% | eq3_3_2:
eq3_1d:= %

R'''L

eq2_4_3;

solve(%,R_p_3Leq):
%[1][1]:
eq3_3_3:= R_p_3Leq=%

Substitute into the mass conservation laws:

eq3_0d;
% | eq3_3_3:
eq3_0e:= %

eq3_1d;
% | eq3_3_3:
eq3_1e:= %

R''''L

eq2_4_4;

solve(%,R_p_4Leq):
%[1][1]:
eq3_3_4:= R_p_4Leq=%

Substitute into the mass conservation laws:

eq3_0e;
% | eq3_3_4:
eq3_0f:= %

eq3_1e;
% | eq3_3_4:
eq3_1f:= %

R'''''L

eq2_4_5;

solve(%,R_p_5Leq):
%[1][1]:
eq3_3_5:= R_p_5Leq=%

Substitute into the mass conservation laws:

eq3_0f;
% | eq3_3_5:
eq3_0g:= %

eq3_1f;
% | eq3_3_5:
eq3_1g:= %

Section 3.4: Express R'n

Mass conservation laws in this section (I AM SWITCHING HERE TO A MORE FLEXIBLE NUMBERING OF EQUATIONS):

eq3_4_R_a:=eq3_0g;
eq3_4_L_a:=eq3_1g;

R'

eq2_3_1;
solve(%,R_p_1eq):
%[2][1]:
eq3_4_1:= R_p_1eq=%

Substitute into the mass conservation laws:

eq3_4_R_a;
% | eq3_4_1:
eq3_4_R_b:= %

eq3_4_L_a;
% | eq3_4_1:
eq3_4_L_b:= %

R''

eq2_3_2;
solve(%,R_p_2eq):
%[2][1]:
eq3_4_2:= R_p_2eq=%

Substitute into the mass conservation laws:

eq3_4_R_b;
% | eq3_4_2:
eq3_4_R_c:= %

eq3_4_L_b;
% | eq3_4_2:
eq3_4_L_c:= %

R'''

eq2_3_3;
solve(%,R_p_3eq):
%[2][1]:
eq3_4_3:= R_p_3eq=%

Substitute into the mass conservation laws:

eq3_4_R_c;
% | eq3_4_3:
eq3_4_R_d:= %

eq3_4_L_c;
% | eq3_4_3:
eq3_4_L_d:= %

R''''

eq2_3_4;
solve(%,R_p_4eq):
%[2][1]:
eq3_4_4:= R_p_4eq=%

Substitute into the mass conservation laws:

eq3_4_R_d;
% | eq3_4_4:
eq3_4_R_e:= %

eq3_4_L_d;
% | eq3_4_4:
eq3_4_L_e:= %

R'''''

eq2_3_5;
solve(%,R_p_5eq):
%[2][1]:
eq3_4_5:= R_p_5eq=%

Substitute into the mass conservation laws:

eq3_4_R_e;
% | eq3_4_5:
eq3_4_R_f:= %

eq3_4_L_e;
% | eq3_4_5:
eq3_4_L_f:= %

Section 3.5: Final expressions

Aim to obtain  Rtot=f(Leq, constants) function

Mass conservation laws here:

eq3_5_R:=eq3_4_R_f;
eq3_5_L:=eq3_4_L_f

express R_seq from conservation law for ligand  (Ltot=...)

eq3_5_L;
solve(%,R_seq):
%[1][1]:
eq3_5_1:= R_seq = %

substitute in the conservation law for receptor:  (Rtot=...)

eq3_5_R;
% | eq3_5_1;
temp1:=%[2];
temp2:=Simplify(%);
// test
temp1=temp2;
Simplify(%);
// Assemble a final equation
eq3_5_2:= Rtot =temp2

Attempt to solve for Leq

Leq_solutions:=solve(eq3_5_2, Leq)

Extract solutions:

solution_lines:=4:
eq3_5_3:=  Leq_solutions[i,1] \$ i=1..solution_lines;
nops(%)

Extract unique solutions

solution1:=eq3_5_3[2][1];
solution2:=eq3_5_3[3][1] ;

If having a sequence of roots: Is 1st solution a combination of 2nd and 3rd?

/*
solutionA:=eq3_13[1];   // a sequence of roots

if solution2 in solutionA
then print(Unquoted,"First set of roots contains the second root.");
else print(Unquoted,"First  set of roots  DOES NOT contain the second root!");
end_if;

if solution3 in solutionA
then print(Unquoted,"First set of roots contains the third root.");
else print(Unquoted,"First  set of roots  DOES NOT contain the third root!");
end_if;
*/

Section 3.6: Analysis of solutions

Check correctness of the solution by substitution

eq3_5_2;
// Check the 1st solution
test1:=eq3_5_2 | Leq=solution1;
normal(%);
Simplify(%);
bool(%)

works!

eq3_5_2;
// Check the 2nd solution
test1:=eq3_5_2 | Leq=solution2;
normal(%);
Simplify(%);
bool(%)

correct!

Test which solution is meaningful numerically

solution1;
% | K_B_1_p_1=1 | K_B_1_p_2=1 |  K_B_1_p_3=1 | K_B_1_p_4=1 |  K_B_1_p_5=1 | \
K_A_p_1=1 | K_A_p_2=1 | K_A_p_3=1 | K_A_p_4=1 | K_A_p_5=1 | \
K_B_2_p_1=1 |  Rtot=1 | Ltot=1;
float(%)

meaningless

solution2;
% | K_B_1_p_1=1 | K_B_1_p_2=1 |  K_B_1_p_3=1 | K_B_1_p_4=1 |  K_B_1_p_5=1 | \
K_A_p_1=1 | K_A_p_2=1 | K_A_p_3=1 | K_A_p_4=1 | K_A_p_5=1 | \
K_B_2_p_1=1 |  Rtot=1 | Ltot=1;
float(%)

meaningful

Re-check meaningful solution by substitution and calculation:

test1:=eq3_5_2 | Leq=solution2;
result:= \
% | K_B_1_p_1=1 | K_B_1_p_2=1 |  K_B_1_p_3=1 | K_B_1_p_4=1 |  K_B_1_p_5=1 | \
K_A_p_1=1 | K_A_p_2=1 | K_A_p_3=1 | K_A_p_4=1 | K_A_p_5=1 | \
K_B_2_p_1=1 |  Rtot=1 | Ltot=1;

Simplify(result);
float(result);

correct solution!!!

Choose as a final solution

eq3_6_2:= Leq = solution2

Summary of equations for all species

Show species names

anames(Properties,User);

Name equations to recognize them in a different context

Leq_5U_R_RL:=eq3_6_2

R_seq_5U_R_RL:= eq3_5_1

R_p_1eq_5U_R_RL:= eq3_4_1

R_p_2eq_5U_R_RL:= eq3_4_2

R_p_3eq_5U_R_RL:= eq3_4_3

R_p_4eq_5U_R_RL:= eq3_4_4

R_p_5eq_5U_R_RL:= eq3_4_5

R_p_1Leq_5U_R_RL:= eq3_3_1

R_p_2Leq_5U_R_RL:= eq3_3_2

R_p_3Leq_5U_R_RL:= eq3_3_3

R_p_4Leq_5U_R_RL:= eq3_3_4

R_p_5Leq_5U_R_RL:= eq3_3_5

R_sLeq_5U_R_RL:= eq3_2

Create functions for computing concentrations

Here I only check that the results are numerically meaningful--functions were created right. Scientific meaningfulness will be analyzed in a separate notebook 'Analysis'.

(use --> to force direct substitution):

fLeq_5U_R_RL:= (Rtot, Ltot,  K_B_1_p_1, K_B_1_p_2,  K_B_1_p_3, K_B_1_p_4,  K_B_1_p_5, \
K_A_p_1,   K_A_p_2,    K_A_p_3,   K_A_p_4,    K_A_p_5, \
K_B_2_p_1) --> Leq_5U_R_RL[2]

//test operation
fLeq_5U_R_RL(1,1,1,1,1,1,1,1,1,1,1,1,1):
float(%)

=> OK

fR_seq_5U_R_RL:= (Rtot, Ltot,  K_B_1_p_1, K_B_1_p_2,  K_B_1_p_3, K_B_1_p_4,  K_B_1_p_5, \
K_A_p_1,   K_A_p_2,    K_A_p_3,   K_A_p_4,    K_A_p_5, \
K_B_2_p_1) --> R_seq_5U_R_RL[2] | Leq_5U_R_RL

//test operation
fR_seq_5U_R_RL(1,1,1,1,1,1,1,1,1,1,1,1,1):
float(%)

=> OK

fR_p_1eq_5U_R_RL:=(Rtot, Ltot,  K_B_1_p_1, K_B_1_p_2,  K_B_1_p_3, K_B_1_p_4,  K_B_1_p_5, \
K_A_p_1,   K_A_p_2,    K_A_p_3,   K_A_p_4,    K_A_p_5, \
K_B_2_p_1) --> R_p_1eq_5U_R_RL[2] | R_seq_5U_R_RL | Leq_5U_R_RL

//test operation
fR_p_1eq_5U_R_RL(1,1,1,1,1,1,1,1,1,1,1,1,1):
float(%)

=> OK

fR_p_2eq_5U_R_RL:=(Rtot, Ltot,  K_B_1_p_1, K_B_1_p_2,  K_B_1_p_3, K_B_1_p_4,  K_B_1_p_5, \
K_A_p_1,   K_A_p_2,    K_A_p_3,   K_A_p_4,    K_A_p_5, \
K_B_2_p_1) --> R_p_2eq_5U_R_RL[2] | R_seq_5U_R_RL | Leq_5U_R_RL;
//test operation
fR_p_2eq_5U_R_RL(1,1,1,1,1,1,1,1,1,1,1,1,1):
float(%)

ok

fR_p_3eq_5U_R_RL:=(Rtot, Ltot,  K_B_1_p_1, K_B_1_p_2,  K_B_1_p_3, K_B_1_p_4,  K_B_1_p_5, \
K_A_p_1,   K_A_p_2,    K_A_p_3,   K_A_p_4,    K_A_p_5, \
K_B_2_p_1) --> R_p_3eq_5U_R_RL[2] | R_seq_5U_R_RL | Leq_5U_R_RL;
//test operation
fR_p_3eq_5U_R_RL(1,1,1,1,1,1,1,1,1,1,1,1,1):
float(%)

OK

fR_p_4eq_5U_R_RL:=(Rtot, Ltot,  K_B_1_p_1, K_B_1_p_2,  K_B_1_p_3, K_B_1_p_4,  K_B_1_p_5, \
K_A_p_1,   K_A_p_2,    K_A_p_3,   K_A_p_4,    K_A_p_5, \
K_B_2_p_1) --> R_p_4eq_5U_R_RL[2] | R_seq_5U_R_RL | Leq_5U_R_RL;
//test operation
fR_p_4eq_5U_R_RL(1,1,1,1,1,1,1,1,1,1,1,1,1):
float(%)

OK

fR_p_5eq_5U_R_RL:=(Rtot, Ltot,  K_B_1_p_1, K_B_1_p_2,  K_B_1_p_3, K_B_1_p_4,  K_B_1_p_5, \
K_A_p_1,   K_A_p_2,    K_A_p_3,   K_A_p_4,    K_A_p_5, \
K_B_2_p_1) --> R_p_5eq_5U_R_RL[2] | R_seq_5U_R_RL | Leq_5U_R_RL;
//test operation
fR_p_5eq_5U_R_RL(1,1,1,1,1,1,1,1,1,1,1,1,1):
float(%)

OK

fR_p_1Leq_5U_R_RL:=(Rtot, Ltot,  K_B_1_p_1, K_B_1_p_2,  K_B_1_p_3, K_B_1_p_4,  K_B_1_p_5, \
K_A_p_1,   K_A_p_2,    K_A_p_3,   K_A_p_4,    K_A_p_5, \
K_B_2_p_1) --> R_p_1Leq_5U_R_RL[2] |  R_p_1eq_5U_R_RL | R_seq_5U_R_RL | Leq_5U_R_RL;
//test operation
fR_p_1Leq_5U_R_RL(1,1,1,1,1,1,1,1,1,1,1,1,1):
float(%)