diff -Naur varargs/genesis/src/kinetics/enz.c bugfix/genesis/src/kinetics/enz.c --- varargs/genesis/src/kinetics/enz.c 2004-09-20 13:29:22.000000000 -0300 +++ bugfix/genesis/src/kinetics/enz.c 2004-10-15 13:43:02.000000000 -0300 @@ -5,7 +5,11 @@ ** GNU Library General Public License. ** See the file COPYRIGHT for the full notice. **********************************************************************/ -static char rcsid[] = "$Id: enz.c,v 1.5 2003/05/29 22:26:40 gen-dbeeman Exp $"; +static char rcsid[] = "$Id: enz.c,v 1.5 2003/05/29 22:26:40 gen-dbeeman Exp$"; + +/* Updated June 2004 by Upi Bhalla to correct a bug which caused failure + on some non-Linux systems such as IRIX +*/ /* ** $Log: enz.c,v $ @@ -124,10 +128,22 @@ double** data = enz->msgdata + enz->msgcount[0]; int** se = enz->se + enz->msgcount[0]; int j; + double *lastptr = NULL; for (j = 0; j < enz->msgcount[1]; j++, data++, se++) { + if (lastptr == *data) { + if (n <= 0) + break; + psub *= (--n); + } else { + lastptr = *data; + n = *lastptr; + psub *= n; + } +/* n = **data; psub *= n; +*/ if (minsub > n && **se == 0) minsub = n; } @@ -187,7 +203,7 @@ double stoch_limit = KIN_STOCH_PROB_LIMIT / dt; double **data = enz->msgdata + enz->msgcount[0]; int **se = enz->se + enz->msgcount[0]; - double n; + double n = 0; double B = nenz * enz->k1 * dt; double nComplex = enz->nComplex; double sA; @@ -195,6 +211,7 @@ double eA; double denz; double dsub; + double *lastptr; /* Ensure that nComplex is rounded up or down if it goes below * stoch limit */ @@ -203,14 +220,28 @@ nComplex = floor(nComplex) + (sprng() < (nComplex - floor(nComplex))); } + if (nComplex < 0) + nComplex = 0; sA = enz->k2 * nComplex * dt; pA = enz->k3 * nComplex * dt; eA = sA + pA; + lastptr = NULL; for (j = 0; j < enz->msgcount[1]; j++, data++, se++) { + if (lastptr == *data) { + if (n <= 0) + break; + B *= (--n); + } else { + lastptr = *data; + n = *lastptr; + B *= n; + } +/* n = **data; B *= n; +*/ if (minsub > n && **se == 0) minsub = n; } @@ -244,7 +275,8 @@ nenz -= denz; /* Now update the values */ - enz->nComplex += denz; + /* enz->nComplex += denz; */ + enz->nComplex = nComplex + denz; data = enz->msgdata; se = enz->se; for (j = 0; j < enz->msgcount[0]; j++, data++, se++) { @@ -493,6 +525,7 @@ enz->vol = 1; enz->oldmsgmode = 0; enz->complex_stoch_flag = enz->sub_stoch_flag = 0; + return(1); break; } } diff -Naur varargs/genesis/src/kinetics/file_info.c bugfix/genesis/src/kinetics/file_info.c --- varargs/genesis/src/kinetics/file_info.c 2004-09-20 13:29:22.000000000 -0300 +++ bugfix/genesis/src/kinetics/file_info.c 2004-10-15 13:43:02.000000000 -0300 @@ -1,5 +1,9 @@ static char rcsid[] = "$Id: file_info.c,v 1.2 2003/05/30 22:25:25 gen-dbeeman Exp $"; +/* Feb 2004 fixes by Clayton Fan and Upi Bhalla for compiling with gcc + under Solaris 8 +*/ + /* ** $Log: file_info.c,v $ ** Revision 1.2 2003/05/30 22:25:25 gen-dbeeman @@ -40,7 +44,7 @@ char **ret; #ifdef Solaris - ret = "Error"; + ret = (char**)(NULLArgv()); /* proper cast added by Upi Bhalla */ printf("Warning: do_dir_list not supported on Solaris\n"); #else initopt(argc, argv, "directory_path"); @@ -68,9 +72,9 @@ int len; char *f; int version = 0; - + char **ret; /* added by C.Fan */ #ifdef Solaris - ret = "Error"; + ret = (char**)(NULLArgv()); /* proper cast added by Upi Bhalla */ printf("Warning: do_max_file_version not supported on Solaris\n"); #else initopt(argc, argv, "directory_path file_basename"); diff -Naur varargs/genesis/src/kinetics/pool.c bugfix/genesis/src/kinetics/pool.c --- varargs/genesis/src/kinetics/pool.c 2004-09-20 13:29:22.000000000 -0300 +++ bugfix/genesis/src/kinetics/pool.c 2004-10-15 13:43:02.000000000 -0300 @@ -5,8 +5,12 @@ ** GNU Library General Public License. ** See the file COPYRIGHT for the full notice. **********************************************************************/ -static char rcsid[] = "$Id: pool.c,v 1.5 2003/05/29 22:26:40 gen-dbeeman Exp $"; - +static char rcsid[] = "$Id: pool.c,v 1.5 2003/05/29 22:26:40 gen-dbeeman Exp$"; + +/* Updated June 2004 by Upi Bhalla to correct a bug which caused failure + on some non-Linux systems such as IRIX +*/ + /* ** $Log: pool.c,v $ ** Revision 1.5 2003/05/29 22:26:40 gen-dbeeman @@ -302,6 +306,7 @@ pool->oldmsgmode = 0; for (i = 0; i < KIN_POOL_MSGCOUNT; i++) pool->msgcount[i] = 0; + return(1); } break; case SET : diff -Naur varargs/genesis/src/kinetics/reac.c bugfix/genesis/src/kinetics/reac.c --- varargs/genesis/src/kinetics/reac.c 2004-09-20 13:29:22.000000000 -0300 +++ bugfix/genesis/src/kinetics/reac.c 2004-10-15 13:43:02.000000000 -0300 @@ -5,8 +5,17 @@ ** GNU Library General Public License. ** See the file COPYRIGHT for the full notice. **********************************************************************/ -static char rcsid[] = "$Id: reac.c,v 1.5 2003/05/29 22:26:40 gen-dbeeman Exp $"; - +static char rcsid[] = "$Id: reac.c,v 1.5 2003/05/29 22:26:40 gen-dbeeman Exp$"; + +/* + Updated 8 June 2004, Upi Bhalla. Put in fix for the case of + higher-order reactions. If 2A -> B then the transition + prob goes as nA * (nA - 1) rather than nA * nA. The current + fix assumes that lookups for the same substrate will occur + consecutively, which is normally the case in kinetikit-defined + reaction schemes. +*/ + /* ** $Log: reac.c,v $ ** Revision 1.5 2003/05/29 22:26:40 gen-dbeeman @@ -87,19 +96,39 @@ int sf; if (substrate_rate > 0) { + double* lastptr = NULL; for (j = 0; j < rm0; j++, data++, se++) { + if (lastptr == *data) { + substrate_rate *= (--n) ; + } else { + lastptr = *data; + n = *lastptr; + substrate_rate *= n; + } +/* Pre 2004 version: neater but misses out higher-order issues. n = **data; substrate_rate *= n; - if (submin > n && **se == 0) - submin = n; +*/ + if (submin > n && **se == 0) + submin = n; } sf = (submin < KIN_STOCH_MOL_LIMIT || substrate_rate < KIN_STOCH_PROB_LIMIT); } if (product_rate > 0) { + double* lastptr = NULL; for (j = 0; j < reac->msgcount[1]; j++, data++, se++) { + if (lastptr == *data) { + product_rate *= (--n) ; + } else { + lastptr = *data; + n = *lastptr; + product_rate *= n; + } +/* n = **data; product_rate *= n; +*/ if (prdmin > n && **se == 0) prdmin = n; } @@ -282,6 +311,7 @@ break; case CREATE: reac->oldmsgmode = 0; + return(1); break; } } diff -Naur varargs/genesis/src/kinetics/text.c bugfix/genesis/src/kinetics/text.c --- varargs/genesis/src/kinetics/text.c 2004-09-20 13:29:22.000000000 -0300 +++ bugfix/genesis/src/kinetics/text.c 2004-10-15 13:43:02.000000000 -0300 @@ -6,7 +6,11 @@ ** See the file COPYRIGHT for the full notice. **********************************************************************/ static char rcsid[] = "$Id: text.c,v 1.1 2003/05/30 18:07:56 gen-dbeeman Exp $"; - + +/* Updated June 2004 by Upi Bhalla to correct a bug which caused failure + on some non-Linux systems such as IRIX +*/ + /* ** $Log: text.c,v $ ** Revision 1.1 2003/05/30 18:07:56 gen-dbeeman @@ -181,6 +185,7 @@ case CREATE: text->str = calloc(TEXT_START_SIZE, sizeof(char)); text->len = TEXT_START_SIZE; + return(1); break; } }