csk1984
Posts: 2
Joined: 2017-03-06
Location: United States

Hey all,

I am trying to fit some biochemical data and I will need to use the Adair equation which describes multiple binding equilibria. In order to do that, I have to generate a user-defined function that will contain all the Adair equation's unknowns and parameters. Has anybody ever done that?

HJDrescher
Posts: 364
Joined: 2015-01-20
Location: Germany

Do you expect a fixed number / upper bound of ligand binding sites?

The fitfunction itself is simple. However, the interface to the fitting dialogue could be a mess for an unknown amount of sites. Command line / function call will be ok.

HJ

csk1984
Posts: 2
Joined: 2017-03-06
Location: United States

Thanks a lot for your reply! Yes, I am going to have a fixed number of 2 binding sites. Have you ever fit your data using the Adair Eq. in Igor? Did you use a user-defined function?

jjweimer
Posts: 1334
Joined: 2007-08-14
Location: United States

This should do what you need.

```Function Adair_Equation(w,X) : FitFunc
Wave w
Variable X

//CurveFitDialog/ These comments were created by the Curve Fitting dialog. Altering them will
//CurveFitDialog/ make the function less convenient to work with in the Curve Fitting dialog.
//CurveFitDialog/ Equation:
//CurveFitDialog/ f(X) = (1/4)*(K1*X + 2*K2*X^2)/(1 + K1*X + K2*X^2)
//CurveFitDialog/ End of Equation
//CurveFitDialog/ Independent Variables 1
//CurveFitDialog/ X
//CurveFitDialog/ Coefficients 2
//CurveFitDialog/ w[0] = K1
//CurveFitDialog/ w[1] = K2

return (1/2)*(w[0]*X + 2*w[1]*X^2)/(1 + w[0]*X + w[1]*X^2)
End```

EDIT: Fixed mistake to use TWO binding sites.

--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH

[ last edited June 14, 2018 - 10:28 ]
HJDrescher
Posts: 364
Joined: 2015-01-20
Location: Germany

I never used Adair. However, I am using user fit functions extensively.
My solution would have been a carbon copy of JJWeimer's function, he was faster.

In case you will need more binding sites, you can easily modify the fitfunction by adding the higher order terms using Analysis->Curve Fit -> #Select fit function# -> Edit Fit Function.
HJ

jjweimer
Posts: 1334
Joined: 2007-08-14
Location: United States

Here is a general purpose function that should do n binding sites. You will have to do the fit "by hand" (this will not appear in the Curve Fit menu options). This does no error checking, for example whether n > 0.

```Function Adair_Equation(ww,xx) : FitFunc
Wave ww
Variable xx

// ww - coefficients
// ww[0] is number of binding sites
// ww[n] are K factors for each n site

variable nrtn=0, drtn=1, ic

for (ic=1;ic<=ww[0];ic+1)
nrtn += ic*ww[ic]*xx^ic
endfor
for (ic=1;ic<ww[0];ic+1)
drtn += ic*ww[ic]*xx^(ic-1)
endfor

return ((1/ww[0])*nrtn/drtn)
End```

This also may inadvertently allow n to vary as non-integer. The approach might therefore be to test the model with fixed values of n (i.e. use a HOLD wave).

--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH

[ last edited June 14, 2018 - 10:37 ]