ldhfn <- function(g, X)
{
# fit of ldh data to rate law for compulsory ordered bi-bi, with [Q] = 0, 
# and with E.A.P abortive complex (equil constant KiP), 
# and with E.B.Q abortive complex (kinetic constant KIB_K3K4)
# for fitting, assume E.B.Q complex not significant (fix C3 at low value)
# data in matrix X, with column dimnames 
# "v0", "v0calc", "weight", "[A]", "[B]", "[P]"
#	
# g[1] = V
# g[2] = KmA
# g[3] = KmB
# g[4] = KmAB
# g[5] = KmQ/KmPQ = C1
# g[6] = 1/KiP = C2
# g[7] = KIB_K3K4 = C3
#	
	g <- as.double(g)
	range.g <- range(g[1:7])
	if(range.g[1] <= 0 || range.g[2] >= 1e+38)
		return(1e+38)
	V <- g[1]
	KmA <- g[2]
	KmB <- g[3]
	KmAB <- g[4]
	C1 <- g[5]
	C2 <- g[6]
	C3 <- g[7]
	v <- X[, "v0"]
	b <- X[, "[B]"]
	a <- X[, "[A]"]
	p <- X[, "[P]"]
	wt <- X[, "weight"]
	denom <- 1 + C1 * p + KmA/a + KmB/b * (1 + C1 * p) * (1 + C2 * p) +
		KmAB/a/b * (1 + C1 * p) + C3 * b
	vcalc <- V/denom
	res <- v - vcalc
	if(exists("SIMPFIT.temp"))
		SIMPFIT.temp[, "v0calc"] <<- vcalc
	sum((res * wt)^2)
}
ldhfn.p <- matrix(c(
1,  0.001, 0.01, 0.001,    0.001, 1e-06,    1e-10, 
10, 0.001, 0.01, 0.001,    0.001, 1e-06,    1e-10, 
1,  0.100, 0.01, 0.001,    0.001, 1e-06,    1e-10, 
1,  0.001, 1.00, 0.001,    0.001, 1e-06,    1e-10, 
1,  0.001, 0.01, 0.100,    0.001, 1e-06,    1e-10, 
1,  0.001, 0.01, 0.001,    0.100, 1e-06,    1e-10, 
1,  0.001, 0.01, 0.001,    0.001, 1e-02,    1e-10
), nrow=7, ncol=7, byrow=T, dimnames=list(NULL, c(
"Vmax", "KmA", "KmB", "KmAB", "KmQ/KmPQ", "1/KiP", "KIB_K3K4"
)))
ldhfn.dat <- matrix(c(
0.0320,      0,      1, 0.011, 0.15,   0, 
0.0412,      0,      1, 0.015, 0.15,   0, 
0.0477,      0,      1, 0.022, 0.15,   0, 
0.0601,      0,      1, 0.035, 0.15,   0, 
0.0407,      0,      1, 0.011, 0.22,   0, 
0.0477,      0,      1, 0.015, 0.22,   0, 
0.0604,      0,      1, 0.022, 0.22,   0, 
0.0679,      0,      1, 0.035, 0.22,   0, 
0.0474,      0,      1, 0.011, 0.35,   0, 
0.0581,      0,      1, 0.015, 0.35,   0, 
0.0727,      0,      1, 0.022, 0.35,   0, 
0.0836,      0,      1, 0.035, 0.35,   0, 
0.0534,      0,      1, 0.011, 0.70,   0, 
0.0660,      0,      1, 0.015, 0.70,   0, 
0.0808,      0,      1, 0.022, 0.70,   0, 
0.1033,      0,      1, 0.035, 0.70,   0, 
0.0338,      0,      1, 0.011, 0.15,   0, 
0.0564,      0,      1, 0.035, 0.15,   0, 
0.0542,      0,      1, 0.011, 0.70,   0, 
0.1043,      0,      1, 0.035, 0.70,   0, 
0.0268,      0,      1, 0.035, 0.15, 150, 
0.0319,      0,      1, 0.035, 0.22, 150, 
0.0450,      0,      1, 0.035, 0.35, 150, 
0.0628,      0,      1, 0.035, 0.70, 150, 
0.0276,      0,      1, 0.035, 0.15, 150, 
0.0623,      0,      1, 0.035, 0.70, 150
), nrow=26, ncol=6, byrow=T, dimnames=list(1:26, c(
"v0", "v0calc", "weight", "[A]", "[B]", "[P]"
)))
