Uncoupler: estimation of intrinsic binding and folding thermodynamics from a coupled folding-binding process

©M.A.Williams and University College London 2004-5

This notebook and associated Mathematica package follow the equations and notation of Cliff MJ, Williams MA, Brooke-Smith J, Barford, D & Ladbury JE (2005). Molecular recognition via coupled folding and binding in a TPR domain. J. Mol. Biol. 346, 717-732  with minor syntax modifications. Users of the results of this script are requested to cite the above publication. 

This script is distributed under the terms of the GNU Public Licence. It comes with no warranty or guarantee of fitness for purpose. Neither the author nor UCL accept any liability for any damage or loss arising from its use. Programs derived from this work should acknowledge their origin and the above citation. Modifications to this script and associated package should be clearly marked and notified to the original author.   

NOTATION

(Subscript[ΔG, obs])(T) = observed binding free energy
(Subscript[ΔH, obs])(T) = observed binding enthalpy
(Subscript[ΔS, obs])(T) = observed binding entropy
(Subscript[ΔG, bind])(T) = hypothetical free energy of binding in the absence of folding
(Subscript[ΔH, bind])(T) =  hypothetical binding enthalpy in the absence of folding
(Subscript[ΔS, bind])(T) = hypothetical binding entropy in the absence of folding
(Subscript[ΔG, fold])(T) = observable free energy of folding
(Subscript[ΔH, fold])(T) = observable enthalpy of folding
(Subscript[ΔS, fold])(T) = observable entropy of folding
(Subscript[ΔH, bind]^0)= hypothetical enthalpy of binding in the absence of folding at reference temperature of 298.15K
(Subscript[ΔS, bind]^0)= hypothetical entropy of binding in the absence of folding at reference temperature of 298.15K
(Subscript[ΔC, p,bind]) = heat capacity due to binding
(Subscript[ΔH, fold]^0)= enthalpy of folding at the midpoint temperature (Subscript[T, M])
(Subscript[ΔS, fold]^0)= entropy of folding at the midpoint temperature (Subscript[T, M])
(Subscript[ΔC, p,fold]) = heat capacity change due to folding
(Subscript[f, U])(T) = fraction of unfolded protein
(Subscript[CD, obs])(T)=observed CD signal
(Subscript[CD, F]^0)= CD signal of fully folded protein
(Subscript[m, F])= temperature coefficient of CD signal of folded protein
(Subscript[CD, U]^0)= CD signal of fully unfolded protein
(Subscript[m, U])= temperature coefficient of CD signal of folded protein
(Subscript[T, M])= temperature of midpoint of the folding reaction
(Subscript[T, ref])= arbitrary reference temperature for binding event

The implicit binding constant to free energy conversions assume a 1M standard state.

THE COMBINED CD AND ITC MODEL

The heat capacity of folding and binding reactions are assumed to be constant.
The component enthalpies are consequently linear functions of temperature.

(Subscript[ΔH, fold])(T) = (Subscript[ΔH, fold]^0) + (Subscript[ΔC, p,fold])×(T-(Subscript[T, M]))

(Subscript[ΔH, bind])(T) = (Subscript[ΔH, bind]^0) + (Subscript[ΔC, p,bind])×(T-(Subscript[T, ref]))

Similarly the component entropies in a situation with constant heat capacity are  

(Subscript[ΔS, fold])(T) = (Subscript[ΔS, fold]^0)+ (Subscript[ΔC, p,fold])×ln(T/(Subscript[T, M]))

(Subscript[ΔS, bind])(T) = (Subscript[ΔS, bind]^0)+ (Subscript[ΔC, p,bind])×ln(T/(Subscript[T, ref]))

The free energy of folding as a function of temperature determines the fraction of unfolded protein

(Subscript[ΔG, fold])(T) = (Subscript[ΔH, fold]^0)+ (Subscript[ΔC, p,fold])×(T-(Subscript[T, M])) - T×((Subscript[ΔS, fold]^0)- (Subscript[ΔC, p,fold])×ln(T/(Subscript[T, M])))

For a two-state model of folding the fraction of unfolded protein at any temperature is given by 

(Subscript[f, U])(T) = 1/(1+exp(((-(Subscript[ΔG, fold])( T ))/RT)))

noting that  (Subscript[ΔG, fold])=0at the (Subscript[T, M]) this becomes

(Subscript[f, U])(T) = 1/(1+exp((1/R)( (Subscript[ΔH, fold]^0)×((1/(Subscript[T, M]))-(1/T))+(Subscript[ΔC, p,fold])×(((Subscript[T, M])/T)+ln((T/(Subscript[T, M])))-1))))

which can be experimentally determined from a ft to a far-UV CD signal

(Subscript[CD, obs])(T)=  (1-(Subscript[f, U])(T))×((Subscript[CD, F]^0)+(Subscript[m, F])×(T-(Subscript[T, M])))+(Subscript[f, U])(T)×((Subscript[CD, U]^0)+(Subscript[m, U])×(T-(Subscript[T, M])))

The thermodynamic observables can be expressed in terms of the same parameters

(Subscript[ΔH, obs])(T) =(Subscript[ΔH, bind]^0)+ (Subscript[ΔC, p,bind])×(T-(Subscript[T, ref]))+(Subscript[f, U])(T)×( (Subscript[ΔH, fold]^0)+ (Subscript[ΔC, p,fold])×(T-(Subscript[T, M])))

(Subscript[ΔG, obs])(T) =(Subscript[ΔH, bind]^0) + (Subscript[ΔC, p,bind])×(T-(Subscript[T, ref]))- T×((Subscript[ΔS, bind]^0) + (Subscript[ΔC, p,bind])×ln(T/(Subscript[T, ref])))  + RT×ln(1+exp((1/R)(  (Subscript[ΔH, fold]^0)×((1/T)-(1/(Subscript[T, M])))+(Subscript[ΔC, p,fold])×(1-((Subscript[T, M])/T)-ln((T/(Subscript[T, M])))))))

A non-linear fit to the final three equations is implemented below as a CoupledFoldingBindingFit[] function call. The function returns best fit values for (Subscript[ΔH, bind]^0) , (Subscript[ΔS, bind]^0), (Subscript[ΔC, p,bind]), (Subscript[ΔH, fold])((Subscript[T, M])) , (Subscript[ΔC, p,fold]) , (Subscript[T, M]), (Subscript[CD, F]^0) , (Subscript[CD, U]^0) , (Subscript[m, F]) and  (Subscript[m, U]) together with error estimates dervived by a Monte Carlo method from user supplied estimates of the experimental error in (Subscript[ΔG, obs])(T), (Subscript[ΔH, obs])(T) and CD signal measurements. The fitting algorithm is an iterative procedure, alternating application of the Levenberg-Marquardt optimization method with a parameter randomization step. The algorithm is fairly robust, however reasonable initial guesses at the parameters, perhaps from inspection or fits of the three individual datasets, enhance the likelihood of finding a global optimum.

User Definitions

The Mathematica package file must be in the working directory. 
The arbitrary reference temperature for the binding event should be given in degrees K.

workingdirectory="C:\Documents and Settings\Mark Williams\My Documents\Mathematica_Programs";
outputfilenameprefix="example";
bindingreferencetemp=298.15`;
SetDirectory[workingdirectory];
<<"Uncoupler.m";
<<ErrorBarPlots`;<<PlotLegends`;

Fit to Experimental Data

 The experimental data for (Subscript[ΔG, obs]), (Subscript[ΔH, obs]) and the CD signal at particular temperatures should be entered here. 
 Error estimates for each of the experimental measurements are required, even if they are zero. 
 All datasets are expected to be in the same order and from low to high temperature. 
 Temperatures must be in degrees K. Energies must be in kJ/mol

cdsignal={-14.623,-14.608,-14.622,-14.526,-14.379,-14.271,-14.136,-14.008,-13.932,-13.757,-13.646,-13.420,-13.225,-13.023,-12.686,-12.327,-12.028,-11.694,-11.354,-10.947,-10.601,-10.207,-9.908,-9.483,-9.161,-8.676,-8.312,-7.882,-7.618,-7.428,-7.084,-6.989,-6.765,-6.671,-6.585,-6.504,-6.479,-6.456,-6.395,-6.380,-6.355,-6.305,-6.292,-6.228,-6.210,-6.241,-6.269,-6.262,-6.133,-6.245,-6.182,-6.168,-6.169,-6.195,-6.150,-6.077,-6.076,-6.110,-6.033,-6.075,-6.062};
cderror=Table[0.15,{k,288,348,1}];
cdtemperature={288.15,289.15,290.15,291.15,292.15,293.15,294.15,295.15,296.15,297.15,298.1,299.1,300.1,301.1,302.1,303.15,304.1,305.15,306.15,307.1,308.15,309.15,310.15,311.1,312.1,313.1,314.1,315.15,316.15,317.15,318.15,319.1,320.1,321.1,322.15,323.1,324.15,325.15,327.15,328.15,329.15,329.15,330.15,332.15,332.15,333.15,334.15,336.15,337.15,337.15,338.15,340.15,340.15,341.15,342.15,343.15,344.15,345.15,346.1,347.15,348.05};

Δenthalpy={-33.15,-42.11,-59.34,-80.57,-84.40,-134.61,-193.73,-199.73,-211.25};
Δenthalpytemperature={283.15,288.15,293.15,298.15,298.15,303.15,308.15,310.65,310.65};
Δenthalpyerror={1.2,1.5,2.1,2.8,3.0,4.7,6.8,7.0,7.4};

Δfreeenergy={-41.28,-44.08,-43.43,-41.71,-41.41,-42.54,-41.72,-42.48,-42.82};
Δfreeenergytemperature={283.15,288.15,293.15,298.15,298.15,303.15,308.15,310.65,310.65};
Δfreeenergyerror={1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5};

Generate best fit parameters using the CoupledFoldingBindingFit[] function call.

bestfit=CoupledFoldingBindingFit[cdsignal,cdtemperature,cderror,Δenthalpy, Δenthalpytemperature,Δenthalpyerror,Δfreeenergy, Δfreeenergytemperature,Δfreeenergyerror,bindingreferencetemp];
Print[" Best fit for CD specific parameters :  (Subscript[CD, F]^0) = ",bestfit[[1,1]],", (Subscript[m, F])  = ",bestfit[[1,2]],", (Subscript[CD, U]^0) = ",bestfit[[1,3]],", (Subscript[m, U]) = ",bestfit[[1,4]]];
Print[" Best fit for thermodynamic parameters  : (Subscript[T, M]) = " ,bestfit[[1,5]],", (Subscript[ΔH, fold]^0) = ",bestfit[[1,6]],", (Subscript[ΔC, p, fold]^0) =",bestfit[[1,7]],", (Subscript[ΔH, bind]^0) = ",bestfit[[1,8]],", (Subscript[ΔC, p, bind]^0) = ",bestfit[[1,9]],", (Subscript[ΔS, bind]^0) = ",bestfit[[1,10]] ];

Plot Experimental Data and Fitted Curves

It is important to inspect the fitted curves. 
Do the fits to the datapoints look good? Is the behaviour of the fitted curve reasonable outside the temperature range covered by the data? Poor fits and/or wild oscillations probably mean that the model is not well constrained by the data (also look at the error estimates below). Most problems arise because 1) you need to obtain more data points in order to characterise the temperature dependence accurately 2) you have an `outlier' amongst your data points  3) your system is not two-state.

residuals=Table[{cdtemperature[[j]]-273.15`,cdsignal[[j]]-CDobsUnfolding[bestfit[[1,1]],bestfit[[1,2]],bestfit[[1,3]],bestfit[[1,4]],bestfit[[1,5]],bestfit[[1,6]],bestfit[[1,7]],cdtemperature[[j]]]},{j,1,Length[cdsignal]}];
g1=ErrorListPlot[{Table[{{cdtemperature[[j]]-273.15`,cdsignal[[j]]},ErrorBar[cderror[[j]]]},{j,1,Length[cdsignal]}],Table[{{temp-273.15`,CDobsUnfolding[bestfit[[1,1]],bestfit[[1,2]],bestfit[[1,3]],bestfit[[1,4]],bestfit[[1,5]],bestfit[[1,6]],bestfit[[1,7]],temp]},ErrorBar[temp*0.0]},{temp,273.15`,348.65`,0.5`}]},Joined->{False,True},PlotMarkers->{{,0.03},{,0.01}},PlotRange->{{0,75},{1.1` Min[cdsignal]-2.` Max[{Transpose[residuals][[2]],cderror}],0.9` Max[cdsignal]+2.` Max[{Transpose[residuals][[2]],cderror}]}},Frame->True,PlotLabel->"Best Fit to CD Data",BaseStyle->{FontSize->12,FontWeight->"Bold"},Axes->False,AspectRatio->0.7`,DisplayFunction->Identity];
g2=ListPlot[{residuals},Joined->False,PlotMarkers->{,0.1},Frame->True,GridLines->Automatic,PlotLabel->"Residuals",AspectRatio->0.3`,BaseStyle->{FontSize->10,FontWeight->"Bold"},DisplayFunction->Identity];
residuals=Table[{Δenthalpytemperature[[j]]-273.15`,Δenthalpy[[j]]-DeltaHobs[bestfit[[1,5]],bestfit[[1,6]],bestfit[[1,7]],bestfit[[1,8]],bestfit[[1,9]],bindingreferencetemp,Δenthalpytemperature[[j]]]},{j,1,Length[Δenthalpy]}];
g3=ErrorListPlot[{Table[{{Δenthalpytemperature[[j]]-273.15`,Δenthalpy[[j]]},ErrorBar[Δenthalpyerror[[j]]]},{j,1,Length[Δenthalpy]}],Table[{{temp-273.15`,DeltaHobs[bestfit[[1,5]],bestfit[[1,6]],bestfit[[1,7]],bestfit[[1,8]],bestfit[[1,9]],bindingreferencetemp,temp]},ErrorBar[temp*0.0]},{temp,273.15`,348.65`,0.5`}]},Joined->{False,True},PlotMarkers->{{,0.03},{,0.01}},Frame->True,PlotLabel->"Best Fit to \!\(\*SubscriptBox[\(ΔH\), \(obs\)]\) Data",PlotRange->{{0,75},{1.1` Min[Δenthalpy]-2.` Max[{Transpose[residuals][[2]],Δenthalpyerror}],0.9` Max[Δenthalpy]+2.` Max[{Transpose[residuals][[2]],Δenthalpyerror}]}},BaseStyle->{FontSize->12,FontWeight->"Bold"},Axes->False,AspectRatio->0.7`,DisplayFunction->Identity];g4=ListPlot[{residuals},Joined->False,PlotMarkers->{,0.1},Frame->True,GridLines->Automatic,PlotLabel->"Residuals",AspectRatio->0.3`,BaseStyle->{FontSize->10,FontWeight->"Bold"},DisplayFunction->Identity];
residuals=Table[{Δfreeenergytemperature[[j]]-273.15`,Δfreeenergy[[j]]-DeltaGobs[bestfit[[1,5]],bestfit[[1,6]],bestfit[[1,7]],bestfit[[1,8]],bestfit[[1,9]],bestfit[[1,10]],bindingreferencetemp,Δfreeenergytemperature[[j]]]},{j,1,Length[Δfreeenergy]}];
g5=ErrorListPlot[{Table[{{Δfreeenergytemperature[[j]]-273.15`,Δfreeenergy[[j]]},ErrorBar[Δfreeenergyerror[[j]]]},{j,1,Length[Δfreeenergy]}],Table[{{temp-273.15`,DeltaGobs[bestfit[[1,5]],bestfit[[1,6]],bestfit[[1,7]],bestfit[[1,8]],bestfit[[1,9]],bestfit[[1,10]],bindingreferencetemp,temp]},ErrorBar[temp*0.0]},{temp,273.15`,348.65`,0.5`}]},Joined->{False,True},PlotMarkers->{{,0.03},{,0.01}},Frame->True,PlotLabel->"Best Fit to \!\(\*SubscriptBox[\(ΔG\), \(obs\)]\) Data",PlotRange->{{0,75},{1.1` Min[Δfreeenergy]-2.` Max[{Transpose[residuals][[2]],Δfreeenergyerror}],0.9` Max[Δfreeenergy]+2.` Max[{Transpose[residuals][[2]],Δfreeenergyerror}]}},BaseStyle->{FontSize->12,FontWeight->"Bold"},Axes->False,AspectRatio->0.7`,DisplayFunction->Identity];
g6=ListPlot[{residuals},Joined->False,PlotMarkers->{,0.1},Frame->True,GridLines->Automatic,PlotLabel->"Residuals",AspectRatio->0.3`,BaseStyle->{FontSize->10,FontWeight->"Bold"},DisplayFunction->Identity];
Show[GraphicsGrid[{{g1,g3,g5},{g2,g4,g6}}]]

Generate Monte Carlo Error Estimates

Running a trial with a small number of repeats is recommended in order to check the consistency of the fit to the data. However reliable error estimates require mcrepeats greater than or equal to 100 . 
( The Monte Carlo simulation takes approximately 15 seconds per repeat on  a 2GHz Pentium 4 processor)

mcrepeats=5;
mcparameters={};mcχ={};
Do[
randomizedcdsignal=Table[cdsignal[[j]]+RandomReal[NormalDistribution[0.0,cderror[[j]]]],{j,1,Length[cdsignal]}];
randomizedΔenthalpy=Table[Δenthalpy[[j]]+RandomReal[NormalDistribution[0.0,Δenthalpyerror[[j]]]],{j,1,Length[Δenthalpy]}];
randomizedΔfreeenergy=Table[Δfreeenergy[[j]]+RandomReal[NormalDistribution[0.0,Δfreeenergyerror[[j]]]],{j,1,Length[Δfreeenergy]}];
bestfit=CoupledFoldingBindingFit[randomizedcdsignal,cdtemperature,cderror,randomizedΔenthalpy, Δenthalpytemperature,Δenthalpyerror,randomizedΔfreeenergy, Δfreeenergytemperature,Δfreeenergyerror,bindingreferencetemp];
AppendTo[mcparameters,bestfit[[1]]];
AppendTo[mcχ,bestfit[[2]]];
If[Mod[k,10]==0,Print[" Completed Monte Carlo run no. ",k]];
,{k,1,mcrepeats}];

Print[" Errors from Monte Carlo simulation for CD specific parameters :  (Subscript[CD, F]^0) = ",StandardDeviation[Transpose[mcparameters][[1]]],", (Subscript[m, F])  = ",StandardDeviation[Transpose[mcparameters][[2]]],", (Subscript[CD, U]^0) = ",StandardDeviation[Transpose[mcparameters][[3]]],", (Subscript[m, U]) = ",StandardDeviation[Transpose[mcparameters][[4]]]];
Print[" Errors from Monte Carlo simulation for fitted thermodynamic parameters  : (Subscript[T, M]) = " ,StandardDeviation[Transpose[mcparameters][[5]]],", (Subscript[ΔH, fold]^0) = ",StandardDeviation[Transpose[mcparameters][[6]]],", (Subscript[ΔC, p, fold]^0) =",StandardDeviation[Transpose[mcparameters][[7]]],", (Subscript[ΔH, bind]^0) = ",StandardDeviation[Transpose[mcparameters][[8]]],", (Subscript[ΔC, p, bind]^0) = ",StandardDeviation[Transpose[mcparameters][[9]]],", (Subscript[ΔS, bind]^0) = ",StandardDeviation[Transpose[mcparameters][[10]]] ];

Consistency check
 The following are the median results for the fitted parameters generated during the Monte Carlo simulation. These values should be within one standard deviations of the best fit parameters for your actual data. If they are not, run the the Monte Carlo simulation again in case the first time was just very bad luck. If there is still a discrepency between these values and the best-fit parameters, then this may indicate that there is a problem with analysing your data with the two-state coupled-folding bind model. Such a problem may arise because (most likely first) 1) you need to obtain more data points in order to characterise the temperature dependence accurately, 2) you have an `outlier' amongst your data points,  3) your system is not two-state, 4) there is some numerical instability in the fitting procedure peculiar to the parameter values describing your system .

Print[" Median CD specific parameters from Monte Carlo simulation:  (Subscript[CD, F]^0) = ",Median[Transpose[mcparameters][[1]]],", (Subscript[m, F])  = ",Median[Transpose[mcparameters][[2]]],", (Subscript[CD, U]^0) = ",Median[Transpose[mcparameters][[3]]],", (Subscript[m, U]) = ",Median[Transpose[mcparameters][[4]]]];
Print[" Median fitted thermodynamic parameters from Monte Carlo simulation : (Subscript[T, M]) = " ,Median[Transpose[mcparameters][[5]]],", (Subscript[ΔH, fold]^0) = ",Median[Transpose[mcparameters][[6]]],", (Subscript[ΔC, p, fold]^0) =",Median[Transpose[mcparameters][[7]]],", (Subscript[ΔH, bind]^0) = ",Median[Transpose[mcparameters][[8]]],", (Subscript[ΔC, p, bind]^0) = ",Median[Transpose[mcparameters][[9]]],", (Subscript[ΔS, bind]^0) = ",Median[Transpose[mcparameters][[10]]] ];

Compute Thermodynamic Contributions at Temperature = T 

The best fit parameters and their computed Monte Carlo errors can be used in another Monte Carlo simulation to estimate the seperate contributions from folding and binding to the observed thermodynamics at a user specified temperature T.  (Since this is a fast calculation we use a lot of MC repeats to effectively eliminate sampling errors). 
Please ingnore the complaints about spellings

T=298.15;
Tref=bindingreferencetemp;
mcrep=10000;
mctherm={};
errorTm=StandardDeviation[Transpose[mcparameters][[5]]];
errorΔHfold0=StandardDeviation[Transpose[mcparameters][[6]]];
errorΔCpfold0=StandardDeviation[Transpose[mcparameters][[7]]];
errorΔHbind0=StandardDeviation[Transpose[mcparameters][[8]]];
errorΔCpbind0=StandardDeviation[Transpose[mcparameters][[9]]];
errorΔSbind0=StandardDeviation[Transpose[mcparameters][[10]]];
Do[
Tm=bestfit[[1,5]]+Random[NormalDistribution[0.0,errorTm]];
ΔHfold0=bestfit[[1,6]]+Random[NormalDistribution[0.0,errorΔHfold0]];
ΔCpfold0=bestfit[[1,7]]+Random[NormalDistribution[0.0,errorΔCpfold0]];
ΔHbind0=bestfit[[1,8]]+Random[NormalDistribution[0.0,errorΔHbind0]];
ΔCpbind0=bestfit[[1,9]]+Random[NormalDistribution[0.0,errorΔCpbind0]];
ΔSbind0=bestfit[[1,10]]+Random[NormalDistribution[0.0,errorΔSbind0]];
ΔHbind=ΔHbind0+ΔCpbind0×(T-Tref);
TΔSbind=T*(ΔSbind0+ΔCpbind0×Log[(T/Tref)]);
ΔGbind=ΔHbind0+ΔCpbind0×(T-Tref)-T×(ΔSbind0+ΔCpbind0×Log[(T/Tref)]);
ΔHfold=ΔHfold0+ΔCpfold0×(T-Tm);
TΔSfold=T×((ΔHfold0/Tm)+ΔCpfold0×Log[(T/Tm)]);
ΔGfold=ΔHfold0+ΔCpfold0×(T-Tm)-T×((ΔHfold0/Tm)+ΔCpfold0×Log[(T/Tm)]);
fu=FractionUnfolded[Tm,ΔHfold0,ΔCpfold0,T];
AppendTo[mctherm,{ΔHbind,TΔSbind,ΔGbind,ΔHfold,TΔSfold,ΔGfold,fu}];
,{mcrep}];

Tm=bestfit[[1,5]];
ΔHfold0=bestfit[[1,6]];
ΔCpfold0=bestfit[[1,7]];
ΔHbind0=bestfit[[1,8]];
ΔCpbind0=bestfit[[1,9]];
ΔSbind0=bestfit[[1,10]];
ΔHbind=ΔHbind0+ΔCpbind0×(T-Tref);
TΔSbind=T*(ΔSbind0+ΔCpbind0×Log[(T/Tref)]);
ΔGbind=ΔHbind0+ΔCpbind0×(T-Tref)-T×(ΔSbind0+ΔCpbind0×Log[(T/Tref)]);
ΔHfold=ΔHfold0+ΔCpfold0×(T-Tm);
TΔSfold=T×((ΔHfold0/Tm)+ΔCpfold0×Log[(T/Tm)]);
ΔGfold=ΔHfold0+ΔCpfold0×(T-Tm)-T×((ΔHfold0/Tm)+ΔCpfold0×Log[(T/Tm)]);
fu=FractionUnfolded[Tm,ΔHfold0,ΔCpfold0,T];

Print[" Estimated thermodynamic contributions at : T = " ,T,", (Subscript[ΔH, bind]) = ",ΔHbind,"+/-",StandardDeviation[Transpose[mctherm][[1]]],", T.(Subscript[ΔS, bind]) = ",TΔSbind,"+/-",StandardDeviation[Transpose[mctherm][[2]]],", (Subscript[ΔG, bind]) = ",ΔGbind,"+/-",StandardDeviation[Transpose[mctherm][[3]]],", (Subscript[ΔH, fold]) = ",ΔHfold,"+/-",StandardDeviation[Transpose[mctherm][[4]]],", T.(Subscript[ΔS, fold]) = ",TΔSfold,"+/-",StandardDeviation[Transpose[mctherm][[5]]],", (Subscript[ΔG, fold]) = ",ΔGfold,"+/-",StandardDeviation[Transpose[mctherm][[6]]] ,", fraction unfolded = ",fu,"+/-",StandardDeviation[Transpose[mctherm][[7]]]];