The Binding of Asymmetric Ligands to an Infinite Isotropic Linear Lattice by Alan R. Wolfe

This Mathematica  notebook calculates and plots the Scatchard plot, neighbor-effect parameters, conditional probabilities, and cluster length distribution for the isotropic lattice, asymmetric ligand case.  It can only be used after the appropriate initialization notebook has been evaluated.  To perform the calculations, simply set the input variables to the desired values and execute the Action-Evaluate Notebook command.  This may be repeated with different values for the input variables.

INPUT VARIABLES:

points = 10; k = 1; n = 1; w1 = 2; w2 = 0.1; w3 = 1;

referencePlot = True ; 
Print [ "initial slope = ", initialSlope //N ] ; 
Print [ "deltaA (dimensionless version) = ", deltaA //N ] ;

INPUT VARIABLES - cluster length plots:

rCluster2D = 0.9; maxLength2D = 6; 
points3D = 10; maxLength3D = 5;

rCluster2D*rSat is the r value for which 2D cluster length distribution 
     data will be displayed.  
points3D is the number of equally spaced r values greater than zero 
     for which the cluster length distribution will be displayed in 
     the 3D plots.  
(note - execution will be more efficient if points3D = points).  
maxLength is the maximum cluster length that will be considered.

(* CALCULATE THE NEIGHBOR-EFFECT PARAMETERS AND 
SCATCHARD PLOT *) scroll = 1

(* Initialize loop parameters and output arrays *) 
rSatDetermine ; neChoose ; 
xAxisInterval = rSat/(points) ; 
abscissa = Range [1, points-1] ; abscissa2 = {} ; 
points2 = points ; 
AppendTo [ abscissa2, points2 - 1/2] ; points = points+1 ; 
AppendTo [ abscissa2, points2 - 1/4] ; points = points+1 ; 
abscissa = xAxisInterval Join [ abscissa, abscissa2 ] ; 
E1 = E2 = 1 ;

(* Evaluate neighbor-effect parameters for r < rSat *) scroll = 1

startPrint ; 
dropPoints = 0 ; 
ordinate = Map [ Function [ zz, 
     r = zz ; f = 1 - n r ; x = r/f ; y = x/2 ; 
     If [ needCheck, 
          If [ flag==True, {E1,E2} = {1,1} ; dropPoints = dropPoints + 1] ; 
          If [ flag==False, ne ; checkLimits ; 
               If [ flag==True, dropPoints = dropPoints + 1 ] ] , 
          ne ] ; 
     If [ flag==False, Print [ r//N, "    ", rLf//N ] ] ; 
     {rLf,E1,E2,y,ff} ], abscissa ] ; 
makeReference ;

(* Evaluate NE parameters and conditional probabilities for r = rSat *)  scroll = 1

PrependTo [ ordinate, {k,1,1,0,1} ] ; 
neSat ; AppendTo [ ordinate, {0,E1,E2,0,0} ] ; 
cpSat ;

(* Indicate which equations were used in the calculations *) scroll = 1

Print [ "ne = ", neChoice, "; CP = ", cpChoice ] ;

(* DISPLAY THE SCATCHARD PLOT *) scroll = 1

If [ referencePlot, makePlot2, 
     makePlot [ 1, 0, "r/Lf", "Scatchard plot" ] ] ;

(* PLOT THE NEIGHBOR-EFFECT PARAMETERS *) scroll = 1

makePlot [ 2, 1, "e1","NE for head end of free sites" ]

makePlot [ 3, 1, "e2", "NE for tail end of free sites" ]

(* CALCULATE AND PLOT THE CONDITIONAL PROBABILITIES *) scroll = 1

(* ff *)

makePlot [ 5, 0, "ff", "" ]

(* b1f *)

makeCPplot [ b1f, "   b1f" ]

(* b2f *)

makeCPplot [ b2f, "   b2f" ]

(* fb1 *)

makeCPplot [ fb1, "   fb1" ]

(* fb2 *)

makeCPplot [ fb2, "   fb2" ]

(* b1b1 *)

makeCPplot [ b1b1, "      b1b1" ]

(* b2b2 *)

makeCPplot [ b2b2, "      b2b2" ]

(* b1b2 *)

makeCPplot [ b1b2, "b1b2  (b2b1)" ]

(* CALCULATE, PRINT AND PLOT 3D CLUSTER LENGTH DATA *) scroll = 1

(* calculate and print *)

clusterArray = Table [ 0, {maxLength3D} ] ; 
ligandArray = clusterArray ; 
clusterArray3D = Table [ clusterArray, {points3D+1} ] ; 
ligandArray3D = clusterArray3D ; 
maxLength = maxLength3D ; 
printHeadings ; 
Do [ rCluster = (ij/points3D) ; clusterDistribution ; 
     clusterArray3D[[ij+1]] = clusterArray ; 
     ligandArray3D[[ij+1]] = ligandArray , 
{ ij, 0, points3D} ] ; 
chooseTicks ;

(* plot fraction of clusters, left view *)

threeDplot [ 2.2, -2.4, 1.0, "length         ", "          r/rSat", 
     "f clus.", clusterArray3D, tickArray1 ] ;

(* plot fraction of clusters, right view *)

threeDplot [ 2.2, 2.4, 1.0, "         length", "r/rSat          ", 
     "f clus.", clusterArray3D, tickArray0 ] ;

(* plot fraction of clusters, center view *)

threeDplot [ 2.2, -0.001, 1.0, "     length", "r/rSat", 
     "f clus.", clusterArray3D, tickArray ] ;

(* plot fraction of ligands, left view *)

threeDplot [ 2.2, -2.4, 1.0, "length         ", "          r/rSat", 
     "f lig.", ligandArray3D, tickArray1 ] ;

(* plot fraction of ligands, right view *)

threeDplot [ 2.2, 2.4, 1.0, "         length", "r/rSat          ", 
     "f lig.", ligandArray3D, tickArray0 ] ;

(* plot fraction of ligands, center view *)

threeDplot [ 2.2, -0.001, 1.0, "     length", "r/rSat", 
     "f lig.", ligandArray3D, tickArray ] ;

(* CALCULATE, PRINT AND PLOT 2D CLUSTER LENGTH DATA *) scroll = 1

If [ (flag==False) || (rCluster2D rSat < rError) || (rCluster2D==1), 
     rCluster = rCluster2D ; maxLength = maxLength2D ; 
     clusterArray = Table [ 0, {maxLength} ] ; 
     ligandArray = clusterArray ; 
     printHeadings ; clusterDistribution ] ;

If [ (flag==False) || (rCluster2D rSat < rError) || (rCluster2D==1), 
     Print [ "r = ", rCluster2D rSat, "; average cluster length = ", 
          averageClusterLength ] ] ; 
If [ flag && (rCluster2D rSat>= rError) && (rCluster2D < 1), 
     Print [ "r = ", rCluster2D rSat ] ; 
     Print [ "The average cluster length could not be calculated due to a" ] ; 
     Print [ "computational error." ] ] ;

twoDplot [ "fraction clusters", maxClusters, clusterArray ] ;

twoDplot [ "fraction ligands", maxLigands, ligandArray ] ;

rCluster2D

rCluster2D = 0.99; maxLength2D = 6;

Note - if the values of rCluster2D (= r/rSat) and/or maxLength2D 
are changed and the cell assigning these values is executed, the 
cluster length distribution can be recalculated for the new value(s) 
by selecting the group of cells above this group and executing the 
"Action-Evaluate Selection" command (use menu or "enter" key).