Code beautification with uncrustify
[alexxy/gromacs.git] / src / tools / gmx_kinetics.c
index ef2f3f0dc3723a4d1a2b7eef157ed35535db257f..624b84825e5b6eac0984ccd3e1d8fa0b70786492 100644 (file)
@@ -1,11 +1,11 @@
 /*
- * 
+ *
  *                This source code is part of
- * 
+ *
  *                 G   R   O   M   A   C   S
- * 
+ *
  *          GROningen MAchine for Chemical Simulations
- * 
+ *
  *                        VERSION 3.2.0
  * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
- * 
+ *
  * If you want to redistribute modifications, please consider that
  * scientific software is very special. Version control is crucial -
  * bugs must be traceable. We will be happy to consider code for
  * inclusion in the official distribution, but derived work must not
  * be called official GROMACS. Details are found in the README & COPYING
  * files - if they are missing, get the official version at www.gromacs.org.
- * 
+ *
  * To help us fund GROMACS development, we humbly ask that you cite
  * the papers on the package - you can find them in the top README file.
- * 
+ *
  * For more info, check our website at http://www.gromacs.org
- * 
+ *
  * And Hey:
  * Green Red Orange Magenta Azure Cyan Skyblue
  */
 #include "physics.h"
 #include "gmx_ana.h"
 
-enum { epAuf, epEuf, epAfu, epEfu, epNR };
-enum { eqAif, eqEif, eqAfi, eqEfi, eqAui, eqEui, eqAiu, eqEiu, eqNR };
+enum {
+    epAuf, epEuf, epAfu, epEfu, epNR
+};
+enum {
+    eqAif, eqEif, eqAfi, eqEfi, eqAui, eqEui, eqAiu, eqEiu, eqNR
+};
 static char *eep[epNR] = { "Af", "Ef", "Au", "Eu" };
-static char *eeq[eqNR] = { "Aif","Eif","Afi","Efi","Aui","Eui","Aiu","Eiu" };
+static char *eeq[eqNR] = { "Aif", "Eif", "Afi", "Efi", "Aui", "Eui", "Aiu", "Eiu" };
 
 typedef struct {
-  int nreplica;   /* Number of replicas in the calculation                   */
-  int nframe;     /* Number of time frames                                   */
-  int nstate;     /* Number of states the system can be in, e.g. F,I,U       */
-  int nparams;    /* Is 2, 4 or 8                                            */
-  gmx_bool *bMask;    /* Determine whether this replica is part of the d2 comp.  */
-  gmx_bool bSum;
-  gmx_bool bDiscrete; /* Use either discrete folding (0/1) or a continuous       */
-                  /* criterion */
-  int nmask;      /* Number of replicas taken into account                   */
-  real dt;        /* Timestep between frames                                 */
-  int  j0,j1;     /* Range of frames used in calculating delta               */
-  real **temp,**data,**data2;
-  int  **state;   /* State index running from 0 (F) to nstate-1 (U)          */
-  real **beta,**fcalt,**icalt;
-  real *time,*sumft,*sumit,*sumfct,*sumict;
-  real *params;
-  real *d2_replica;
+    int       nreplica;  /* Number of replicas in the calculation                   */
+    int       nframe;    /* Number of time frames                                   */
+    int       nstate;    /* Number of states the system can be in, e.g. F,I,U       */
+    int       nparams;   /* Is 2, 4 or 8                                            */
+    gmx_bool *bMask;     /* Determine whether this replica is part of the d2 comp.  */
+    gmx_bool  bSum;
+    gmx_bool  bDiscrete; /* Use either discrete folding (0/1) or a continuous       */
+    /* criterion */
+    int       nmask;     /* Number of replicas taken into account                   */
+    real      dt;        /* Timestep between frames                                 */
+    int       j0, j1;    /* Range of frames used in calculating delta               */
+    real    **temp, **data, **data2;
+    int     **state;     /* State index running from 0 (F) to nstate-1 (U)          */
+    real    **beta, **fcalt, **icalt;
+    real     *time, *sumft, *sumit, *sumfct, *sumict;
+    real     *params;
+    real     *d2_replica;
 } t_remd_data;
 
 #ifdef HAVE_LIBGSL
@@ -85,808 +89,990 @@ typedef struct {
 
 static char *itoa(int i)
 {
-  static char ptr[12];
-  
-  sprintf(ptr,"%d",i);
-  return ptr;
+    static char ptr[12];
+
+    sprintf(ptr, "%d", i);
+    return ptr;
 }
 
-static char *epnm(int nparams,int index)
+static char *epnm(int nparams, int index)
 {
-  static char buf[32],from[8],to[8];
-  int    nn,ni,ii;
-  
-  range_check(index,0,nparams);
-  if ((nparams == 2) || (nparams == 4))
-    return eep[index];
-  else if ((nparams > 4) && (nparams % 4 == 0))
-    return eeq[index];
-  else 
-    gmx_fatal(FARGS,"Don't know how to handle %d parameters",nparams);
-    
-  return NULL;
+    static char buf[32], from[8], to[8];
+    int         nn, ni, ii;
+
+    range_check(index, 0, nparams);
+    if ((nparams == 2) || (nparams == 4))
+    {
+        return eep[index];
+    }
+    else if ((nparams > 4) && (nparams % 4 == 0))
+    {
+        return eeq[index];
+    }
+    else
+    {
+        gmx_fatal(FARGS, "Don't know how to handle %d parameters", nparams);
+    }
+
+    return NULL;
 }
 
-static gmx_bool bBack(t_remd_data *d) 
+static gmx_bool bBack(t_remd_data *d)
 {
-  return (d->nparams > 2);
+    return (d->nparams > 2);
 }
 
-static real is_folded(t_remd_data *d,int irep,int jframe)
+static real is_folded(t_remd_data *d, int irep, int jframe)
 {
-  if (d->state[irep][jframe] == 0)
-    return 1.0;
-  else
-    return 0.0;
+    if (d->state[irep][jframe] == 0)
+    {
+        return 1.0;
+    }
+    else
+    {
+        return 0.0;
+    }
 }
 
-static real is_unfolded(t_remd_data *d,int irep,int jframe)
+static real is_unfolded(t_remd_data *d, int irep, int jframe)
 {
-  if (d->state[irep][jframe] == d->nstate-1)
-    return 1.0;
-  else
-    return 0.0;
+    if (d->state[irep][jframe] == d->nstate-1)
+    {
+        return 1.0;
+    }
+    else
+    {
+        return 0.0;
+    }
 }
 
-static real is_intermediate(t_remd_data *d,int irep,int jframe)
+static real is_intermediate(t_remd_data *d, int irep, int jframe)
 {
-  if ((d->state[irep][jframe] == 1) && (d->nstate > 2))
-    return 1.0;
-  else
-    return 0.0;
+    if ((d->state[irep][jframe] == 1) && (d->nstate > 2))
+    {
+        return 1.0;
+    }
+    else
+    {
+        return 0.0;
+    }
 }
 
 static void integrate_dfdt(t_remd_data *d)
 {
-  int    i,j;
-  double beta,ddf,ddi,df,db,fac,sumf,sumi,area;
-  
-  d->sumfct[0] = 0;
-  d->sumict[0] = 0;
-  for(i=0; (i<d->nreplica); i++) {
-    if (d->bMask[i]) {
-      if (d->bDiscrete) {
-       ddf = 0.5*d->dt*is_folded(d,i,0);
-       ddi = 0.5*d->dt*is_intermediate(d,i,0);
-      }
-      else {
-       ddf = 0.5*d->dt*d->state[i][0];
-       ddi = 0.0;
-      }
-      d->fcalt[i][0] = ddf;
-      d->icalt[i][0] = ddi;
-      d->sumfct[0]  += ddf;
-      d->sumict[0]  += ddi;
-    }
-  }
-  for(j=1; (j<d->nframe); j++) {
-    if (j==d->nframe-1)
-      fac = 0.5*d->dt;
-    else
-      fac = d->dt;
-    sumf = sumi = 0;
-    for(i=0; (i<d->nreplica); i++) {
-      if (d->bMask[i]) {
-       beta = d->beta[i][j];
-       if ((d->nstate <= 2) || d->bDiscrete) {
-         if (d->bDiscrete) 
-           df = (d->params[epAuf]*exp(-beta*d->params[epEuf])*
-                 is_unfolded(d,i,j));
-         else {
-           area = (d->data2 ? d->data2[i][j] : 1.0);
-           df   =  area*d->params[epAuf]*exp(-beta*d->params[epEuf]);
-         }
-         if (bBack(d)) {
-           db = 0;
-           if (d->bDiscrete) 
-             db = (d->params[epAfu]*exp(-beta*d->params[epEfu])*
-                   is_folded(d,i,j));
-           else 
-             gmx_fatal(FARGS,"Back reaction not implemented with continuous");
-           ddf = fac*(df-db);
-         }
-         else
-           ddf = fac*df;
-         d->fcalt[i][j] = d->fcalt[i][j-1] + ddf;
-         sumf += ddf;
-       }
-       else {
-         ddf = fac*((d->params[eqAif]*exp(-beta*d->params[eqEif])*
-                     is_intermediate(d,i,j)) -
-                    (d->params[eqAfi]*exp(-beta*d->params[eqEfi])*
-                     is_folded(d,i,j)));
-         ddi = fac*((d->params[eqAui]*exp(-beta*d->params[eqEui])*
-                     is_unfolded(d,i,j)) -
-                    (d->params[eqAiu]*exp(-beta*d->params[eqEiu])*
-                     is_intermediate(d,i,j)));
-         d->fcalt[i][j] = d->fcalt[i][j-1] + ddf;
-         d->icalt[i][j] = d->icalt[i][j-1] + ddi;
-         sumf += ddf;
-         sumi += ddi;
-       }
-      }
-    }
-    d->sumfct[j] = d->sumfct[j-1] + sumf;
-    d->sumict[j] = d->sumict[j-1] + sumi;
-  }
-  if (debug) {
-    fprintf(debug,"@type xy\n");
-    for(j=0; (j<d->nframe); j++) {
-      fprintf(debug,"%8.3f  %12.5e\n",d->time[j],d->sumfct[j]);
-    }
-    fprintf(debug,"&\n");
-  }
+    int    i, j;
+    double beta, ddf, ddi, df, db, fac, sumf, sumi, area;
+
+    d->sumfct[0] = 0;
+    d->sumict[0] = 0;
+    for (i = 0; (i < d->nreplica); i++)
+    {
+        if (d->bMask[i])
+        {
+            if (d->bDiscrete)
+            {
+                ddf = 0.5*d->dt*is_folded(d, i, 0);
+                ddi = 0.5*d->dt*is_intermediate(d, i, 0);
+            }
+            else
+            {
+                ddf = 0.5*d->dt*d->state[i][0];
+                ddi = 0.0;
+            }
+            d->fcalt[i][0] = ddf;
+            d->icalt[i][0] = ddi;
+            d->sumfct[0]  += ddf;
+            d->sumict[0]  += ddi;
+        }
+    }
+    for (j = 1; (j < d->nframe); j++)
+    {
+        if (j == d->nframe-1)
+        {
+            fac = 0.5*d->dt;
+        }
+        else
+        {
+            fac = d->dt;
+        }
+        sumf = sumi = 0;
+        for (i = 0; (i < d->nreplica); i++)
+        {
+            if (d->bMask[i])
+            {
+                beta = d->beta[i][j];
+                if ((d->nstate <= 2) || d->bDiscrete)
+                {
+                    if (d->bDiscrete)
+                    {
+                        df = (d->params[epAuf]*exp(-beta*d->params[epEuf])*
+                              is_unfolded(d, i, j));
+                    }
+                    else
+                    {
+                        area = (d->data2 ? d->data2[i][j] : 1.0);
+                        df   =  area*d->params[epAuf]*exp(-beta*d->params[epEuf]);
+                    }
+                    if (bBack(d))
+                    {
+                        db = 0;
+                        if (d->bDiscrete)
+                        {
+                            db = (d->params[epAfu]*exp(-beta*d->params[epEfu])*
+                                  is_folded(d, i, j));
+                        }
+                        else
+                        {
+                            gmx_fatal(FARGS, "Back reaction not implemented with continuous");
+                        }
+                        ddf = fac*(df-db);
+                    }
+                    else
+                    {
+                        ddf = fac*df;
+                    }
+                    d->fcalt[i][j] = d->fcalt[i][j-1] + ddf;
+                    sumf          += ddf;
+                }
+                else
+                {
+                    ddf = fac*((d->params[eqAif]*exp(-beta*d->params[eqEif])*
+                                is_intermediate(d, i, j)) -
+                               (d->params[eqAfi]*exp(-beta*d->params[eqEfi])*
+                                is_folded(d, i, j)));
+                    ddi = fac*((d->params[eqAui]*exp(-beta*d->params[eqEui])*
+                                is_unfolded(d, i, j)) -
+                               (d->params[eqAiu]*exp(-beta*d->params[eqEiu])*
+                                is_intermediate(d, i, j)));
+                    d->fcalt[i][j] = d->fcalt[i][j-1] + ddf;
+                    d->icalt[i][j] = d->icalt[i][j-1] + ddi;
+                    sumf          += ddf;
+                    sumi          += ddi;
+                }
+            }
+        }
+        d->sumfct[j] = d->sumfct[j-1] + sumf;
+        d->sumict[j] = d->sumict[j-1] + sumi;
+    }
+    if (debug)
+    {
+        fprintf(debug, "@type xy\n");
+        for (j = 0; (j < d->nframe); j++)
+        {
+            fprintf(debug, "%8.3f  %12.5e\n", d->time[j], d->sumfct[j]);
+        }
+        fprintf(debug, "&\n");
+    }
 }
 
 static void sum_ft(t_remd_data *d)
 {
-  int i,j;
-  double fac;
-    
-  for(j=0; (j<d->nframe); j++) {
-    d->sumft[j] = 0;
-    d->sumit[j] = 0;
-    if ((j == 0) || (j==d->nframe-1))
-      fac = d->dt*0.5;
-    else
-      fac = d->dt;
-    for(i=0; (i<d->nreplica); i++) {
-      if (d->bMask[i]) {
-       if (d->bDiscrete) {
-         d->sumft[j] += fac*is_folded(d,i,j);
-         d->sumit[j] += fac*is_intermediate(d,i,j);
-       }
-       else 
-         d->sumft[j] += fac*d->state[i][j];
-      }
-    }
-  }
+    int    i, j;
+    double fac;
+
+    for (j = 0; (j < d->nframe); j++)
+    {
+        d->sumft[j] = 0;
+        d->sumit[j] = 0;
+        if ((j == 0) || (j == d->nframe-1))
+        {
+            fac = d->dt*0.5;
+        }
+        else
+        {
+            fac = d->dt;
+        }
+        for (i = 0; (i < d->nreplica); i++)
+        {
+            if (d->bMask[i])
+            {
+                if (d->bDiscrete)
+                {
+                    d->sumft[j] += fac*is_folded(d, i, j);
+                    d->sumit[j] += fac*is_intermediate(d, i, j);
+                }
+                else
+                {
+                    d->sumft[j] += fac*d->state[i][j];
+                }
+            }
+        }
+    }
 }
 
 static double calc_d2(t_remd_data *d)
 {
-  int    i,j;
-  double dd2,d2=0,dr2,tmp;
-  
-  integrate_dfdt(d);
-  
-  if (d->bSum) {
-    for(j=d->j0; (j<d->j1); j++) {
-      if (d->bDiscrete) {
-       d2  += sqr(d->sumft[j]-d->sumfct[j]);
-       if (d->nstate > 2)
-         d2 += sqr(d->sumit[j]-d->sumict[j]);
-      }
-      else
-       d2  += sqr(d->sumft[j]-d->sumfct[j]);
-    }   
-  }   
-  else {
-    for(i=0; (i<d->nreplica); i++) {
-      dr2 = 0;
-      if (d->bMask[i]) {
-       for(j=d->j0; (j<d->j1); j++) {
-         tmp  = sqr(is_folded(d,i,j)-d->fcalt[i][j]);
-         d2  += tmp;
-         dr2 += tmp; 
-         if (d->nstate > 2) {
-           tmp = sqr(is_intermediate(d,i,j)-d->icalt[i][j]);
-           d2  += tmp;
-           dr2 += tmp;
-         }
-       }
-       d->d2_replica[i] = dr2/(d->j1-d->j0);
-      }
-    }
-  }
-  dd2 = (d2/(d->j1-d->j0))/(d->bDiscrete ? d->nmask : 1);
-   
-  return dd2;
+    int    i, j;
+    double dd2, d2 = 0, dr2, tmp;
+
+    integrate_dfdt(d);
+
+    if (d->bSum)
+    {
+        for (j = d->j0; (j < d->j1); j++)
+        {
+            if (d->bDiscrete)
+            {
+                d2  += sqr(d->sumft[j]-d->sumfct[j]);
+                if (d->nstate > 2)
+                {
+                    d2 += sqr(d->sumit[j]-d->sumict[j]);
+                }
+            }
+            else
+            {
+                d2  += sqr(d->sumft[j]-d->sumfct[j]);
+            }
+        }
+    }
+    else
+    {
+        for (i = 0; (i < d->nreplica); i++)
+        {
+            dr2 = 0;
+            if (d->bMask[i])
+            {
+                for (j = d->j0; (j < d->j1); j++)
+                {
+                    tmp  = sqr(is_folded(d, i, j)-d->fcalt[i][j]);
+                    d2  += tmp;
+                    dr2 += tmp;
+                    if (d->nstate > 2)
+                    {
+                        tmp  = sqr(is_intermediate(d, i, j)-d->icalt[i][j]);
+                        d2  += tmp;
+                        dr2 += tmp;
+                    }
+                }
+                d->d2_replica[i] = dr2/(d->j1-d->j0);
+            }
+        }
+    }
+    dd2 = (d2/(d->j1-d->j0))/(d->bDiscrete ? d->nmask : 1);
+
+    return dd2;
 }
 
-static double my_f(const gsl_vector *v,void *params)
+static double my_f(const gsl_vector *v, void *params)
 {
-  t_remd_data *d = (t_remd_data *) params;
-  double penalty=0;
-  int i;
-  
-  for(i=0; (i<d->nparams); i++) {
-    d->params[i] = gsl_vector_get(v, i);
-    if (d->params[i] < 0)
-      penalty += 10;
-  }
-  if (penalty > 0)
-    return penalty;
-  else
-    return calc_d2(d);
+    t_remd_data *d       = (t_remd_data *) params;
+    double       penalty = 0;
+    int          i;
+
+    for (i = 0; (i < d->nparams); i++)
+    {
+        d->params[i] = gsl_vector_get(v, i);
+        if (d->params[i] < 0)
+        {
+            penalty += 10;
+        }
+    }
+    if (penalty > 0)
+    {
+        return penalty;
+    }
+    else
+    {
+        return calc_d2(d);
+    }
 }
 
-static void optimize_remd_parameters(FILE *fp,t_remd_data *d,int maxiter,
-                                    real tol)
+static void optimize_remd_parameters(FILE *fp, t_remd_data *d, int maxiter,
+                                     real tol)
 {
-  real   size,d2;
-  int    iter = 0;
-  int    status = 0;
-  int    i;
-
-  const gsl_multimin_fminimizer_type *T;
-  gsl_multimin_fminimizer *s;
-
-  gsl_vector *x,*dx;
-  gsl_multimin_function my_func;
-
-  my_func.f      = &my_f;
-  my_func.n      = d->nparams;
-  my_func.params = (void *) d;
-
-  /* Starting point */
-  x = gsl_vector_alloc (my_func.n);
-  for(i=0; (i<my_func.n); i++)
-    gsl_vector_set (x, i, d->params[i]);
-  
-  /* Step size, different for each of the parameters */
-  dx = gsl_vector_alloc (my_func.n);
-  for(i=0; (i<my_func.n); i++)
-    gsl_vector_set (dx, i, 0.1*d->params[i]);
-
-  T = gsl_multimin_fminimizer_nmsimplex;
-  s = gsl_multimin_fminimizer_alloc (T, my_func.n);
-
-  gsl_multimin_fminimizer_set (s, &my_func, x, dx);
-  gsl_vector_free (x);
-  gsl_vector_free (dx);
-
-  printf ("%5s","Iter");
-  for(i=0; (i<my_func.n); i++) 
-    printf(" %12s",epnm(my_func.n,i));
-  printf (" %12s %12s\n","NM Size","Chi2");
-  
-  do  {
-    iter++;
-    status = gsl_multimin_fminimizer_iterate (s);
-    
-    if (status != 0)
-      gmx_fatal(FARGS,"Something went wrong in the iteration in minimizer %s",
-               gsl_multimin_fminimizer_name(s));
-               
-    d2     = gsl_multimin_fminimizer_minimum(s);
-    size   = gsl_multimin_fminimizer_size(s);
-    status = gsl_multimin_test_size(size,tol);
-    
-    if (status == GSL_SUCCESS)
-      printf ("Minimum found using %s at:\n",
-             gsl_multimin_fminimizer_name(s));
-  
-    printf ("%5d", iter);
-    for(i=0; (i<my_func.n); i++) 
-      printf(" %12.4e",gsl_vector_get (s->x,i));
-    printf (" %12.4e %12.4e\n",size,d2);
-  }
-  while ((status == GSL_CONTINUE) && (iter < maxiter));
-  
-  gsl_multimin_fminimizer_free (s);
+    real   size, d2;
+    int    iter   = 0;
+    int    status = 0;
+    int    i;
+
+    const gsl_multimin_fminimizer_type *T;
+    gsl_multimin_fminimizer            *s;
+
+    gsl_vector                         *x, *dx;
+    gsl_multimin_function               my_func;
+
+    my_func.f      = &my_f;
+    my_func.n      = d->nparams;
+    my_func.params = (void *) d;
+
+    /* Starting point */
+    x = gsl_vector_alloc (my_func.n);
+    for (i = 0; (i < my_func.n); i++)
+    {
+        gsl_vector_set (x, i, d->params[i]);
+    }
+
+    /* Step size, different for each of the parameters */
+    dx = gsl_vector_alloc (my_func.n);
+    for (i = 0; (i < my_func.n); i++)
+    {
+        gsl_vector_set (dx, i, 0.1*d->params[i]);
+    }
+
+    T = gsl_multimin_fminimizer_nmsimplex;
+    s = gsl_multimin_fminimizer_alloc (T, my_func.n);
+
+    gsl_multimin_fminimizer_set (s, &my_func, x, dx);
+    gsl_vector_free (x);
+    gsl_vector_free (dx);
+
+    printf ("%5s", "Iter");
+    for (i = 0; (i < my_func.n); i++)
+    {
+        printf(" %12s", epnm(my_func.n, i));
+    }
+    printf (" %12s %12s\n", "NM Size", "Chi2");
+
+    do
+    {
+        iter++;
+        status = gsl_multimin_fminimizer_iterate (s);
+
+        if (status != 0)
+        {
+            gmx_fatal(FARGS, "Something went wrong in the iteration in minimizer %s",
+                      gsl_multimin_fminimizer_name(s));
+        }
+
+        d2     = gsl_multimin_fminimizer_minimum(s);
+        size   = gsl_multimin_fminimizer_size(s);
+        status = gsl_multimin_test_size(size, tol);
+
+        if (status == GSL_SUCCESS)
+        {
+            printf ("Minimum found using %s at:\n",
+                    gsl_multimin_fminimizer_name(s));
+        }
+
+        printf ("%5d", iter);
+        for (i = 0; (i < my_func.n); i++)
+        {
+            printf(" %12.4e", gsl_vector_get (s->x, i));
+        }
+        printf (" %12.4e %12.4e\n", size, d2);
+    }
+    while ((status == GSL_CONTINUE) && (iter < maxiter));
+
+    gsl_multimin_fminimizer_free (s);
 }
 
-static void preprocess_remd(FILE *fp,t_remd_data *d,real cutoff,real tref,
-                           real ucut,gmx_bool bBack,real Euf,real Efu,
-                           real Ei,real t0,real t1,gmx_bool bSum,gmx_bool bDiscrete,
-                           int nmult)
+static void preprocess_remd(FILE *fp, t_remd_data *d, real cutoff, real tref,
+                            real ucut, gmx_bool bBack, real Euf, real Efu,
+                            real Ei, real t0, real t1, gmx_bool bSum, gmx_bool bDiscrete,
+                            int nmult)
 {
-  int i,j,ninter;
-  real dd,tau_f,tau_u;
-
-  ninter = (ucut > cutoff) ? 1 : 0;
-  if (ninter && (ucut <= cutoff))
-    gmx_fatal(FARGS,"You have requested an intermediate but the cutoff for intermediates %f is smaller than the normal cutoff(%f)",ucut,cutoff);
-    
-  if (!bBack) {
-    d->nparams = 2;
-    d->nstate  = 2;
-  }
-  else {
-    d->nparams = 4*(1+ninter);
-    d->nstate  = 2+ninter;
-  }
-  d->bSum      = bSum;
-  d->bDiscrete = bDiscrete;
-  snew(d->beta, d->nreplica);
-  snew(d->state,d->nreplica);
-  snew(d->bMask,d->nreplica);
-  snew(d->d2_replica,d->nreplica);
-  snew(d->sumft,d->nframe);
-  snew(d->sumit,d->nframe);
-  snew(d->sumfct,d->nframe);
-  snew(d->sumict,d->nframe);
-  snew(d->params,d->nparams);
-  snew(d->fcalt,d->nreplica);
-  snew(d->icalt,d->nreplica);
-  
-  /* convert_times(d->nframe,d->time); */
-  
-  if (t0 < 0)
-    d->j0 = 0;
-  else
-    for(d->j0=0; (d->j0<d->nframe) && (d->time[d->j0] < t0); d->j0++)
-      ;
-  if (t1 < 0)
-    d->j1=d->nframe;
-  else
-    for(d->j1=0; (d->j1<d->nframe) && (d->time[d->j1] < t1); d->j1++)
-      ;
-  if ((d->j1-d->j0) < d->nparams+2)
-    gmx_fatal(FARGS,"Start (%f) or end time (%f) for fitting inconsistent. Reduce t0, increase t1 or supply more data",t0,t1);
-  fprintf(fp,"Will optimize from %g to %g\n",
-         d->time[d->j0],d->time[d->j1-1]);  
-  d->nmask = d->nreplica;
-  for(i=0; (i<d->nreplica); i++) {
-    snew(d->beta[i],d->nframe);
-    snew(d->state[i],d->nframe);
-    snew(d->fcalt[i],d->nframe);
-    snew(d->icalt[i],d->nframe);
-    d->bMask[i] = TRUE;
-    for(j=0; (j<d->nframe); j++) {
-      d->beta[i][j] = 1.0/(BOLTZ*d->temp[i][j]);
-      dd = d->data[i][j];
-      if (bDiscrete) {
-       if (dd <= cutoff)
-         d->state[i][j] = 0;
-       else if ((ucut > cutoff) && (dd <= ucut))
-         d->state[i][j] = 1;
-       else
-         d->state[i][j] = d->nstate-1;
-      }
-      else
-       d->state[i][j] = dd*nmult;
-    }
-  }
-  sum_ft(d);
-  
-  /* Assume forward rate constant is half the total time in this
-   * simulation and backward is ten times as long */
-  if (bDiscrete) {
-    tau_f = d->time[d->nframe-1];
-    tau_u = 4*tau_f;
-    d->params[epEuf] = Euf;
-    d->params[epAuf] = exp(d->params[epEuf]/(BOLTZ*tref))/tau_f;
-    if (bBack) {
-      d->params[epEfu] = Efu;
-      d->params[epAfu] = exp(d->params[epEfu]/(BOLTZ*tref))/tau_u;
-      if (ninter >0) {
-       d->params[eqEui] = Ei;
-       d->params[eqAui] = exp(d->params[eqEui]/(BOLTZ*tref))/tau_u;
-       d->params[eqEiu] = Ei;
-       d->params[eqAiu] = exp(d->params[eqEiu]/(BOLTZ*tref))/tau_u;
-      }
-    }
-    else {
-      d->params[epAfu]  = 0;
-      d->params[epEfu]  = 0;
-    }
-  }
-  else {
-    d->params[epEuf] = Euf;
-    if (d->data2)
-      d->params[epAuf] = 0.1;
+    int  i, j, ninter;
+    real dd, tau_f, tau_u;
+
+    ninter = (ucut > cutoff) ? 1 : 0;
+    if (ninter && (ucut <= cutoff))
+    {
+        gmx_fatal(FARGS, "You have requested an intermediate but the cutoff for intermediates %f is smaller than the normal cutoff(%f)", ucut, cutoff);
+    }
+
+    if (!bBack)
+    {
+        d->nparams = 2;
+        d->nstate  = 2;
+    }
     else
-      d->params[epAuf] = 20.0;
-  }
+    {
+        d->nparams = 4*(1+ninter);
+        d->nstate  = 2+ninter;
+    }
+    d->bSum      = bSum;
+    d->bDiscrete = bDiscrete;
+    snew(d->beta, d->nreplica);
+    snew(d->state, d->nreplica);
+    snew(d->bMask, d->nreplica);
+    snew(d->d2_replica, d->nreplica);
+    snew(d->sumft, d->nframe);
+    snew(d->sumit, d->nframe);
+    snew(d->sumfct, d->nframe);
+    snew(d->sumict, d->nframe);
+    snew(d->params, d->nparams);
+    snew(d->fcalt, d->nreplica);
+    snew(d->icalt, d->nreplica);
+
+    /* convert_times(d->nframe,d->time); */
+
+    if (t0 < 0)
+    {
+        d->j0 = 0;
+    }
+    else
+    {
+        for (d->j0 = 0; (d->j0 < d->nframe) && (d->time[d->j0] < t0); d->j0++)
+        {
+            ;
+        }
+    }
+    if (t1 < 0)
+    {
+        d->j1 = d->nframe;
+    }
+    else
+    {
+        for (d->j1 = 0; (d->j1 < d->nframe) && (d->time[d->j1] < t1); d->j1++)
+        {
+            ;
+        }
+    }
+    if ((d->j1-d->j0) < d->nparams+2)
+    {
+        gmx_fatal(FARGS, "Start (%f) or end time (%f) for fitting inconsistent. Reduce t0, increase t1 or supply more data", t0, t1);
+    }
+    fprintf(fp, "Will optimize from %g to %g\n",
+            d->time[d->j0], d->time[d->j1-1]);
+    d->nmask = d->nreplica;
+    for (i = 0; (i < d->nreplica); i++)
+    {
+        snew(d->beta[i], d->nframe);
+        snew(d->state[i], d->nframe);
+        snew(d->fcalt[i], d->nframe);
+        snew(d->icalt[i], d->nframe);
+        d->bMask[i] = TRUE;
+        for (j = 0; (j < d->nframe); j++)
+        {
+            d->beta[i][j] = 1.0/(BOLTZ*d->temp[i][j]);
+            dd            = d->data[i][j];
+            if (bDiscrete)
+            {
+                if (dd <= cutoff)
+                {
+                    d->state[i][j] = 0;
+                }
+                else if ((ucut > cutoff) && (dd <= ucut))
+                {
+                    d->state[i][j] = 1;
+                }
+                else
+                {
+                    d->state[i][j] = d->nstate-1;
+                }
+            }
+            else
+            {
+                d->state[i][j] = dd*nmult;
+            }
+        }
+    }
+    sum_ft(d);
+
+    /* Assume forward rate constant is half the total time in this
+     * simulation and backward is ten times as long */
+    if (bDiscrete)
+    {
+        tau_f            = d->time[d->nframe-1];
+        tau_u            = 4*tau_f;
+        d->params[epEuf] = Euf;
+        d->params[epAuf] = exp(d->params[epEuf]/(BOLTZ*tref))/tau_f;
+        if (bBack)
+        {
+            d->params[epEfu] = Efu;
+            d->params[epAfu] = exp(d->params[epEfu]/(BOLTZ*tref))/tau_u;
+            if (ninter > 0)
+            {
+                d->params[eqEui] = Ei;
+                d->params[eqAui] = exp(d->params[eqEui]/(BOLTZ*tref))/tau_u;
+                d->params[eqEiu] = Ei;
+                d->params[eqAiu] = exp(d->params[eqEiu]/(BOLTZ*tref))/tau_u;
+            }
+        }
+        else
+        {
+            d->params[epAfu]  = 0;
+            d->params[epEfu]  = 0;
+        }
+    }
+    else
+    {
+        d->params[epEuf] = Euf;
+        if (d->data2)
+        {
+            d->params[epAuf] = 0.1;
+        }
+        else
+        {
+            d->params[epAuf] = 20.0;
+        }
+    }
 }
 
-static real tau(real A,real E,real T)
+static real tau(real A, real E, real T)
 {
-  return exp(E/(BOLTZ*T))/A;
+    return exp(E/(BOLTZ*T))/A;
 }
 
-static real folded_fraction(t_remd_data *d,real tref)
+static real folded_fraction(t_remd_data *d, real tref)
 {
-  real tauf,taub;
-  
-  tauf = tau(d->params[epAuf],d->params[epEuf],tref);
-  taub = tau(d->params[epAfu],d->params[epEfu],tref);
-  
-  return (taub/(tauf+taub));
+    real tauf, taub;
+
+    tauf = tau(d->params[epAuf], d->params[epEuf], tref);
+    taub = tau(d->params[epAfu], d->params[epEfu], tref);
+
+    return (taub/(tauf+taub));
 }
 
-static void print_tau(FILE *gp,t_remd_data *d,real tref)
+static void print_tau(FILE *gp, t_remd_data *d, real tref)
 {
-  real tauf,taub,ddd,fff,DG,DH,TDS,Tm,Tb,Te,Fb,Fe,Fm;
-  int  i,np=d->nparams;
-  
-  ddd = calc_d2(d);
-  fprintf(gp,"Final value for Chi2 = %12.5e (%d replicas)\n",ddd,d->nmask);
-  tauf = tau(d->params[epAuf],d->params[epEuf],tref);
-  fprintf(gp,"%s = %12.5e %s = %12.5e (kJ/mole)\n",
-         epnm(np,epAuf),d->params[epAuf],
-         epnm(np,epEuf),d->params[epEuf]);
-  if (bBack(d)) {
-    taub = tau(d->params[epAfu],d->params[epEfu],tref);
-    fprintf(gp,"%s = %12.5e %s = %12.5e (kJ/mole)\n",
-           epnm(np,epAfu),d->params[epAfu],
-           epnm(np,epEfu),d->params[epEfu]);
-    fprintf(gp,"Equilibrium properties at T = %g\n",tref);
-    fprintf(gp,"tau_f = %8.3f ns, tau_b = %8.3f ns\n",tauf/1000,taub/1000);
-    fff = taub/(tauf+taub);
-    DG  = BOLTZ*tref*log(fff/(1-fff));
-    DH  = d->params[epEfu]-d->params[epEuf];
-    TDS = DH-DG;
-    fprintf(gp,"Folded fraction     F = %8.3f\n",fff);
-    fprintf(gp,"Unfolding energies: DG = %8.3f  DH = %8.3f TDS = %8.3f\n",
-           DG,DH,TDS);
-    Tb = 260;
-    Te = 420;
-    Tm = 0;
-    Fm = 0;
-    Fb = folded_fraction(d,Tb);
-    Fe = folded_fraction(d,Te);
-    while((Te-Tb > 0.001) && (Fm != 0.5)) {
-      Tm = 0.5*(Tb+Te);
-      Fm = folded_fraction(d,Tm);
-      if (Fm > 0.5) {
-       Fb = Fm;
-       Tb = Tm;
-      }
-      else if (Fm < 0.5) {
-       Te = Tm;
-       Fe = Fm;
-      }
-    }
-    if ((Fb-0.5)*(Fe-0.5) <= 0)
-      fprintf(gp,"Melting temperature Tm = %8.3f K\n",Tm);
-    else 
-      fprintf(gp,"No melting temperature detected between 260 and 420K\n");
-    if (np > 4) {
-      char *ptr;
-      fprintf(gp,"Data for intermediates at T = %g\n",tref);
-      fprintf(gp,"%8s  %10s  %10s  %10s\n","Name","A","E","tau");
-      for(i=0; (i<np/2); i++) {
-       tauf = tau(d->params[2*i],d->params[2*i+1],tref);
-       ptr = epnm(d->nparams,2*i);
-       fprintf(gp,"%8s  %10.3e  %10.3e  %10.3e\n",ptr+1,
-               d->params[2*i],d->params[2*i+1],tauf/1000);
-      }
-    }
-  }
-  else {
-    fprintf(gp,"Equilibrium properties at T = %g\n",tref);
-    fprintf(gp,"tau_f = %8.3f\n",tauf);
-  }
+    real tauf, taub, ddd, fff, DG, DH, TDS, Tm, Tb, Te, Fb, Fe, Fm;
+    int  i, np = d->nparams;
+
+    ddd = calc_d2(d);
+    fprintf(gp, "Final value for Chi2 = %12.5e (%d replicas)\n", ddd, d->nmask);
+    tauf = tau(d->params[epAuf], d->params[epEuf], tref);
+    fprintf(gp, "%s = %12.5e %s = %12.5e (kJ/mole)\n",
+            epnm(np, epAuf), d->params[epAuf],
+            epnm(np, epEuf), d->params[epEuf]);
+    if (bBack(d))
+    {
+        taub = tau(d->params[epAfu], d->params[epEfu], tref);
+        fprintf(gp, "%s = %12.5e %s = %12.5e (kJ/mole)\n",
+                epnm(np, epAfu), d->params[epAfu],
+                epnm(np, epEfu), d->params[epEfu]);
+        fprintf(gp, "Equilibrium properties at T = %g\n", tref);
+        fprintf(gp, "tau_f = %8.3f ns, tau_b = %8.3f ns\n", tauf/1000, taub/1000);
+        fff = taub/(tauf+taub);
+        DG  = BOLTZ*tref*log(fff/(1-fff));
+        DH  = d->params[epEfu]-d->params[epEuf];
+        TDS = DH-DG;
+        fprintf(gp, "Folded fraction     F = %8.3f\n", fff);
+        fprintf(gp, "Unfolding energies: DG = %8.3f  DH = %8.3f TDS = %8.3f\n",
+                DG, DH, TDS);
+        Tb = 260;
+        Te = 420;
+        Tm = 0;
+        Fm = 0;
+        Fb = folded_fraction(d, Tb);
+        Fe = folded_fraction(d, Te);
+        while ((Te-Tb > 0.001) && (Fm != 0.5))
+        {
+            Tm = 0.5*(Tb+Te);
+            Fm = folded_fraction(d, Tm);
+            if (Fm > 0.5)
+            {
+                Fb = Fm;
+                Tb = Tm;
+            }
+            else if (Fm < 0.5)
+            {
+                Te = Tm;
+                Fe = Fm;
+            }
+        }
+        if ((Fb-0.5)*(Fe-0.5) <= 0)
+        {
+            fprintf(gp, "Melting temperature Tm = %8.3f K\n", Tm);
+        }
+        else
+        {
+            fprintf(gp, "No melting temperature detected between 260 and 420K\n");
+        }
+        if (np > 4)
+        {
+            char *ptr;
+            fprintf(gp, "Data for intermediates at T = %g\n", tref);
+            fprintf(gp, "%8s  %10s  %10s  %10s\n", "Name", "A", "E", "tau");
+            for (i = 0; (i < np/2); i++)
+            {
+                tauf = tau(d->params[2*i], d->params[2*i+1], tref);
+                ptr  = epnm(d->nparams, 2*i);
+                fprintf(gp, "%8s  %10.3e  %10.3e  %10.3e\n", ptr+1,
+                        d->params[2*i], d->params[2*i+1], tauf/1000);
+            }
+        }
+    }
+    else
+    {
+        fprintf(gp, "Equilibrium properties at T = %g\n", tref);
+        fprintf(gp, "tau_f = %8.3f\n", tauf);
+    }
 }
 
-static void dump_remd_parameters(FILE *gp,t_remd_data *d,const char *fn,
-                                const char *fn2,const char *rfn,
-                                const char *efn,const char *mfn,int skip,real tref,
-                                output_env_t oenv)
+static void dump_remd_parameters(FILE *gp, t_remd_data *d, const char *fn,
+                                 const char *fn2, const char *rfn,
+                                 const char *efn, const char *mfn, int skip, real tref,
+                                 output_env_t oenv)
 {
-  FILE *fp,*hp;
-  int  i,j,np=d->nparams;
-  real rhs,tauf,taub,fff,DG;
-  real *params;
-  const char *leg[] = { "Measured", "Fit", "Difference" };
-  const char *mleg[] = { "Folded fraction","DG (kJ/mole)"};
-  char **rleg;
-  real fac[] = { 0.97, 0.98, 0.99, 1.0, 1.01, 1.02, 1.03 };
+    FILE       *fp, *hp;
+    int         i, j, np = d->nparams;
+    real        rhs, tauf, taub, fff, DG;
+    real       *params;
+    const char *leg[]  = { "Measured", "Fit", "Difference" };
+    const char *mleg[] = { "Folded fraction", "DG (kJ/mole)"};
+    char      **rleg;
+    real        fac[] = { 0.97, 0.98, 0.99, 1.0, 1.01, 1.02, 1.03 };
 #define NFAC asize(fac)
-  real d2[NFAC];
-  double norm;
-    
-  integrate_dfdt(d);
-  print_tau(gp,d,tref);
-  norm = (d->bDiscrete ? 1.0/d->nmask : 1.0);
-  
-  if (fn) {
-    fp = xvgropen(fn,"Optimized fit to data","Time (ps)","Fraction Folded",oenv);
-    xvgr_legend(fp,asize(leg),leg,oenv);
-    for(i=0; (i<d->nframe); i++) {
-      if ((skip <= 0) || ((i % skip) == 0)) {
-       fprintf(fp,"%12.5e  %12.5e  %12.5e  %12.5e\n",d->time[i],
-               d->sumft[i]*norm,d->sumfct[i]*norm,
-               (d->sumft[i]-d->sumfct[i])*norm);
-      }
+    real        d2[NFAC];
+    double      norm;
+
+    integrate_dfdt(d);
+    print_tau(gp, d, tref);
+    norm = (d->bDiscrete ? 1.0/d->nmask : 1.0);
+
+    if (fn)
+    {
+        fp = xvgropen(fn, "Optimized fit to data", "Time (ps)", "Fraction Folded", oenv);
+        xvgr_legend(fp, asize(leg), leg, oenv);
+        for (i = 0; (i < d->nframe); i++)
+        {
+            if ((skip <= 0) || ((i % skip) == 0))
+            {
+                fprintf(fp, "%12.5e  %12.5e  %12.5e  %12.5e\n", d->time[i],
+                        d->sumft[i]*norm, d->sumfct[i]*norm,
+                        (d->sumft[i]-d->sumfct[i])*norm);
+            }
+        }
+        ffclose(fp);
     }
-    ffclose(fp);
-  }
-  if (!d->bSum && rfn) {
-    snew(rleg,d->nreplica*2);
-    for(i=0; (i<d->nreplica); i++) {
-      snew(rleg[2*i],32);
-      snew(rleg[2*i+1],32);
-      sprintf(rleg[2*i],"\\f{4}F(t) %d",i);
-      sprintf(rleg[2*i+1],"\\f{12}F \\f{4}(t) %d",i);
-    }
-    fp = xvgropen(rfn,"Optimized fit to data","Time (ps)","Fraction Folded",oenv);
-    xvgr_legend(fp,d->nreplica*2,(const char**)rleg,oenv);
-    for(j=0; (j<d->nframe); j++) {
-      if ((skip <= 0) || ((j % skip) == 0)) {
-       fprintf(fp,"%12.5e",d->time[j]);
-       for(i=0; (i<d->nreplica); i++) 
-         fprintf(fp,"  %5f  %9.2e",is_folded(d,i,j),d->fcalt[i][j]);
-       fprintf(fp,"\n");
-      }
+    if (!d->bSum && rfn)
+    {
+        snew(rleg, d->nreplica*2);
+        for (i = 0; (i < d->nreplica); i++)
+        {
+            snew(rleg[2*i], 32);
+            snew(rleg[2*i+1], 32);
+            sprintf(rleg[2*i], "\\f{4}F(t) %d", i);
+            sprintf(rleg[2*i+1], "\\f{12}F \\f{4}(t) %d", i);
+        }
+        fp = xvgropen(rfn, "Optimized fit to data", "Time (ps)", "Fraction Folded", oenv);
+        xvgr_legend(fp, d->nreplica*2, (const char**)rleg, oenv);
+        for (j = 0; (j < d->nframe); j++)
+        {
+            if ((skip <= 0) || ((j % skip) == 0))
+            {
+                fprintf(fp, "%12.5e", d->time[j]);
+                for (i = 0; (i < d->nreplica); i++)
+                {
+                    fprintf(fp, "  %5f  %9.2e", is_folded(d, i, j), d->fcalt[i][j]);
+                }
+                fprintf(fp, "\n");
+            }
+        }
+        ffclose(fp);
     }
-    ffclose(fp);
-  }
-
-  if (fn2 && (d->nstate > 2)) {
-    fp = xvgropen(fn2,"Optimized fit to data","Time (ps)",
-                 "Fraction Intermediate",oenv);
-    xvgr_legend(fp,asize(leg),leg,oenv);
-    for(i=0; (i<d->nframe); i++) {
-      if ((skip <= 0) || ((i % skip) == 0))
-       fprintf(fp,"%12.5e  %12.5e  %12.5e  %12.5e\n",d->time[i],
-               d->sumit[i]*norm,d->sumict[i]*norm,
-               (d->sumit[i]-d->sumict[i])*norm);
+
+    if (fn2 && (d->nstate > 2))
+    {
+        fp = xvgropen(fn2, "Optimized fit to data", "Time (ps)",
+                      "Fraction Intermediate", oenv);
+        xvgr_legend(fp, asize(leg), leg, oenv);
+        for (i = 0; (i < d->nframe); i++)
+        {
+            if ((skip <= 0) || ((i % skip) == 0))
+            {
+                fprintf(fp, "%12.5e  %12.5e  %12.5e  %12.5e\n", d->time[i],
+                        d->sumit[i]*norm, d->sumict[i]*norm,
+                        (d->sumit[i]-d->sumict[i])*norm);
+            }
+        }
+        ffclose(fp);
+    }
+    if (mfn)
+    {
+        if (bBack(d))
+        {
+            fp = xvgropen(mfn, "Melting curve", "T (K)", "", oenv);
+            xvgr_legend(fp, asize(mleg), mleg, oenv);
+            for (i = 260; (i <= 420); i++)
+            {
+                tauf = tau(d->params[epAuf], d->params[epEuf], 1.0*i);
+                taub = tau(d->params[epAfu], d->params[epEfu], 1.0*i);
+                fff  = taub/(tauf+taub);
+                DG   = BOLTZ*i*log(fff/(1-fff));
+                fprintf(fp, "%5d  %8.3f  %8.3f\n", i, fff, DG);
+            }
+            ffclose(fp);
+        }
+    }
+
+    if (efn)
+    {
+        snew(params, d->nparams);
+        for (i = 0; (i < d->nparams); i++)
+        {
+            params[i] = d->params[i];
+        }
+
+        hp = xvgropen(efn, "Chi2 as a function of relative parameter",
+                      "Fraction", "Chi2", oenv);
+        for (j = 0; (j < d->nparams); j++)
+        {
+            /* Reset all parameters to optimized values */
+            fprintf(hp, "@type xy\n");
+            for (i = 0; (i < d->nparams); i++)
+            {
+                d->params[i] = params[i];
+            }
+            /* Now modify one of them */
+            for (i = 0; (i < NFAC); i++)
+            {
+                d->params[j] = fac[i]*params[j];
+                d2[i]        = calc_d2(d);
+                fprintf(gp, "%s = %12g  d2 = %12g\n", epnm(np, j), d->params[j], d2[i]);
+                fprintf(hp, "%12g  %12g\n", fac[i], d2[i]);
+            }
+            fprintf(hp, "&\n");
+        }
+        ffclose(hp);
+        for (i = 0; (i < d->nparams); i++)
+        {
+            d->params[i] = params[i];
+        }
+        sfree(params);
+    }
+    if (!d->bSum)
+    {
+        for (i = 0; (i < d->nreplica); i++)
+        {
+            fprintf(gp, "Chi2[%3d] = %8.2e\n", i, d->d2_replica[i]);
+        }
     }
-    ffclose(fp);
-  }
-  if (mfn) {
-    if (bBack(d)) {
-      fp = xvgropen(mfn,"Melting curve","T (K)","",oenv);
-      xvgr_legend(fp,asize(mleg),mleg,oenv);
-      for(i=260; (i<=420); i++) {
-       tauf = tau(d->params[epAuf],d->params[epEuf],1.0*i);
-       taub = tau(d->params[epAfu],d->params[epEfu],1.0*i);
-       fff  = taub/(tauf+taub);
-       DG   = BOLTZ*i*log(fff/(1-fff));
-       fprintf(fp,"%5d  %8.3f  %8.3f\n",i,fff,DG);
-      }
-      ffclose(fp);
-    }
-  }
-  
-  if (efn) {
-    snew(params,d->nparams);
-    for(i=0; (i<d->nparams); i++)
-      params[i] = d->params[i];
-    
-    hp = xvgropen(efn,"Chi2 as a function of relative parameter",
-                 "Fraction","Chi2",oenv);
-    for(j=0; (j<d->nparams); j++) {
-      /* Reset all parameters to optimized values */
-      fprintf(hp,"@type xy\n");
-      for(i=0; (i<d->nparams); i++) 
-       d->params[i] = params[i];
-      /* Now modify one of them */
-      for(i=0; (i<NFAC); i++) {
-       d->params[j] = fac[i]*params[j];
-       d2[i] = calc_d2(d);
-       fprintf(gp,"%s = %12g  d2 = %12g\n",epnm(np,j),d->params[j],d2[i]);
-       fprintf(hp,"%12g  %12g\n",fac[i],d2[i]);
-      }
-      fprintf(hp,"&\n");
-    }
-    ffclose(hp);
-    for(i=0; (i<d->nparams); i++) 
-      d->params[i] = params[i];
-    sfree(params);
-  }
-  if (!d->bSum) {
-    for(i=0; (i<d->nreplica); i++)
-      fprintf(gp,"Chi2[%3d] = %8.2e\n",i,d->d2_replica[i]);
-  }
 }
 #endif /*HAVE_LIBGSL*/
 
-int gmx_kinetics(int argc,char *argv[])
+int gmx_kinetics(int argc, char *argv[])
 {
-  const char *desc[] = {
-    "[TT]g_kinetics[tt] reads two [TT].xvg[tt] files, each one containing data for N replicas.",
-    "The first file contains the temperature of each replica at each timestep,",
-    "and the second contains real values that can be interpreted as",
-    "an indicator for folding. If the value in the file is larger than",
-    "the cutoff it is taken to be unfolded and the other way around.[PAR]",
-    "From these data an estimate of the forward and backward rate constants",
-    "for folding is made at a reference temperature. In addition,",
-    "a theoretical melting curve and free energy as a function of temperature",
-    "are printed in an [TT].xvg[tt] file.[PAR]",
-    "The user can give a max value to be regarded as intermediate",
-    "([TT]-ucut[tt]), which, when given will trigger the use of an intermediate state",
-    "in the algorithm to be defined as those structures that have",
-    "cutoff < DATA < ucut. Structures with DATA values larger than ucut will",
-    "not be regarded as potential folders. In this case 8 parameters are optimized.[PAR]",
-    "The average fraction foled is printed in an [TT].xvg[tt] file together with the fit to it.", 
-    "If an intermediate is used a further file will show the build of the intermediate and the fit to that process.[PAR]",
-    "The program can also be used with continuous variables (by setting",
-    "[TT]-nodiscrete[tt]). In this case kinetics of other processes can be",
-    "studied. This is very much a work in progress and hence the manual",
-    "(this information) is lagging behind somewhat.[PAR]",
-    "In order to compile this program you need access to the GNU",
-    "scientific library."
-  };
-  static int  nreplica  = 1;
-  static real tref      = 298.15;
-  static real cutoff    = 0.2;
-  static real ucut      = 0.0;
-  static real Euf       = 10;
-  static real Efu       = 30;
-  static real Ei        = 10;
-  static gmx_bool bHaveT    = TRUE;
-  static real t0        = -1;
-  static real t1        = -1;
-  static real tb        = 0;
-  static real te        = 0;
-  static real tol       = 1e-3;
-  static int  maxiter   = 100;
-  static int  skip      = 0;
-  static int  nmult     = 1;
-  static gmx_bool bBack     = TRUE;
-  static gmx_bool bSplit    = TRUE;
-  static gmx_bool bSum      = TRUE;
-  static gmx_bool bDiscrete = TRUE;
-  t_pargs pa[] = {
-    { "-time",    FALSE, etBOOL, {&bHaveT},
-      "Expect a time in the input" },
-    { "-b",       FALSE, etREAL, {&tb},
-      "First time to read from set" },
-    { "-e",       FALSE, etREAL, {&te},
-      "Last time to read from set" },
-    { "-bfit",    FALSE, etREAL, {&t0},
-      "Time to start the fit from" },
-    { "-efit",    FALSE, etREAL, {&t1},
-      "Time to end the fit" },
-    { "-T",       FALSE, etREAL, {&tref},
-      "Reference temperature for computing rate constants" },
-    { "-n",       FALSE, etINT, {&nreplica},
-      "Read data for this number of replicas. Only necessary when files are written in xmgrace format using @type and & as delimiters." },
-    { "-cut",     FALSE, etREAL, {&cutoff},
-      "Cut-off (max) value for regarding a structure as folded" },
-    { "-ucut",    FALSE, etREAL, {&ucut},
-      "Cut-off (max) value for regarding a structure as intermediate (if not folded)" },
-    { "-euf",     FALSE, etREAL, {&Euf},
-      "Initial guess for energy of activation for folding (kJ/mol)" },
-    { "-efu",     FALSE, etREAL, {&Efu},
-      "Initial guess for energy of activation for unfolding (kJ/mol)" },
-    { "-ei",      FALSE, etREAL, {&Ei},
-      "Initial guess for energy of activation for intermediates (kJ/mol)" },
-    { "-maxiter", FALSE, etINT, {&maxiter},
-      "Max number of iterations" },
-    { "-back",    FALSE, etBOOL, {&bBack},
-      "Take the back reaction into account" },
-    { "-tol",     FALSE, etREAL,{&tol},
-      "Absolute tolerance for convergence of the Nelder and Mead simplex algorithm" },
-    { "-skip",    FALSE, etINT, {&skip},
-      "Skip points in the output [TT].xvg[tt] file" },
-    { "-split",   FALSE, etBOOL,{&bSplit},
-      "Estimate error by splitting the number of replicas in two and refitting" },
-    { "-sum",     FALSE, etBOOL,{&bSum},
-      "Average folding before computing [GRK]chi[grk]^2" },
-    { "-discrete", FALSE, etBOOL, {&bDiscrete},
-      "Use a discrete folding criterion (F <-> U) or a continuous one" },
-    { "-mult",    FALSE, etINT, {&nmult},
-      "Factor to multiply the data with before discretization" }
-  };
+    const char     *desc[] = {
+        "[TT]g_kinetics[tt] reads two [TT].xvg[tt] files, each one containing data for N replicas.",
+        "The first file contains the temperature of each replica at each timestep,",
+        "and the second contains real values that can be interpreted as",
+        "an indicator for folding. If the value in the file is larger than",
+        "the cutoff it is taken to be unfolded and the other way around.[PAR]",
+        "From these data an estimate of the forward and backward rate constants",
+        "for folding is made at a reference temperature. In addition,",
+        "a theoretical melting curve and free energy as a function of temperature",
+        "are printed in an [TT].xvg[tt] file.[PAR]",
+        "The user can give a max value to be regarded as intermediate",
+        "([TT]-ucut[tt]), which, when given will trigger the use of an intermediate state",
+        "in the algorithm to be defined as those structures that have",
+        "cutoff < DATA < ucut. Structures with DATA values larger than ucut will",
+        "not be regarded as potential folders. In this case 8 parameters are optimized.[PAR]",
+        "The average fraction foled is printed in an [TT].xvg[tt] file together with the fit to it.",
+        "If an intermediate is used a further file will show the build of the intermediate and the fit to that process.[PAR]",
+        "The program can also be used with continuous variables (by setting",
+        "[TT]-nodiscrete[tt]). In this case kinetics of other processes can be",
+        "studied. This is very much a work in progress and hence the manual",
+        "(this information) is lagging behind somewhat.[PAR]",
+        "In order to compile this program you need access to the GNU",
+        "scientific library."
+    };
+    static int      nreplica  = 1;
+    static real     tref      = 298.15;
+    static real     cutoff    = 0.2;
+    static real     ucut      = 0.0;
+    static real     Euf       = 10;
+    static real     Efu       = 30;
+    static real     Ei        = 10;
+    static gmx_bool bHaveT    = TRUE;
+    static real     t0        = -1;
+    static real     t1        = -1;
+    static real     tb        = 0;
+    static real     te        = 0;
+    static real     tol       = 1e-3;
+    static int      maxiter   = 100;
+    static int      skip      = 0;
+    static int      nmult     = 1;
+    static gmx_bool bBack     = TRUE;
+    static gmx_bool bSplit    = TRUE;
+    static gmx_bool bSum      = TRUE;
+    static gmx_bool bDiscrete = TRUE;
+    t_pargs         pa[]      = {
+        { "-time",    FALSE, etBOOL, {&bHaveT},
+          "Expect a time in the input" },
+        { "-b",       FALSE, etREAL, {&tb},
+          "First time to read from set" },
+        { "-e",       FALSE, etREAL, {&te},
+          "Last time to read from set" },
+        { "-bfit",    FALSE, etREAL, {&t0},
+          "Time to start the fit from" },
+        { "-efit",    FALSE, etREAL, {&t1},
+          "Time to end the fit" },
+        { "-T",       FALSE, etREAL, {&tref},
+          "Reference temperature for computing rate constants" },
+        { "-n",       FALSE, etINT, {&nreplica},
+          "Read data for this number of replicas. Only necessary when files are written in xmgrace format using @type and & as delimiters." },
+        { "-cut",     FALSE, etREAL, {&cutoff},
+          "Cut-off (max) value for regarding a structure as folded" },
+        { "-ucut",    FALSE, etREAL, {&ucut},
+          "Cut-off (max) value for regarding a structure as intermediate (if not folded)" },
+        { "-euf",     FALSE, etREAL, {&Euf},
+          "Initial guess for energy of activation for folding (kJ/mol)" },
+        { "-efu",     FALSE, etREAL, {&Efu},
+          "Initial guess for energy of activation for unfolding (kJ/mol)" },
+        { "-ei",      FALSE, etREAL, {&Ei},
+          "Initial guess for energy of activation for intermediates (kJ/mol)" },
+        { "-maxiter", FALSE, etINT, {&maxiter},
+          "Max number of iterations" },
+        { "-back",    FALSE, etBOOL, {&bBack},
+          "Take the back reaction into account" },
+        { "-tol",     FALSE, etREAL, {&tol},
+          "Absolute tolerance for convergence of the Nelder and Mead simplex algorithm" },
+        { "-skip",    FALSE, etINT, {&skip},
+          "Skip points in the output [TT].xvg[tt] file" },
+        { "-split",   FALSE, etBOOL, {&bSplit},
+          "Estimate error by splitting the number of replicas in two and refitting" },
+        { "-sum",     FALSE, etBOOL, {&bSum},
+          "Average folding before computing [GRK]chi[grk]^2" },
+        { "-discrete", FALSE, etBOOL, {&bDiscrete},
+          "Use a discrete folding criterion (F <-> U) or a continuous one" },
+        { "-mult",    FALSE, etINT, {&nmult},
+          "Factor to multiply the data with before discretization" }
+    };
 #define NPA asize(pa)
 
-  FILE        *fp;
-  real        dt_t,dt_d,dt_d2;
-  int         nset_t,nset_d,nset_d2,n_t,n_d,n_d2,i;
-  const char  *tfile,*dfile,*dfile2;
-  t_remd_data remd; 
-  output_env_t oenv; 
-  
-  t_filenm fnm[] = { 
-    { efXVG, "-f",    "temp",    ffREAD   },
-    { efXVG, "-d",    "data",    ffREAD   },
-    { efXVG, "-d2",   "data2",   ffOPTRD  },
-    { efXVG, "-o",    "ft_all",  ffWRITE  },
-    { efXVG, "-o2",   "it_all",  ffOPTWR  },
-    { efXVG, "-o3",   "ft_repl", ffOPTWR  },
-    { efXVG, "-ee",   "err_est", ffOPTWR  },
-    { efLOG, "-g",    "remd",    ffWRITE  },
-    { efXVG, "-m",    "melt",    ffWRITE  }
-  }; 
-#define NFILE asize(fnm) 
-
-  parse_common_args(&argc,argv,PCA_CAN_VIEW | PCA_BE_NICE | PCA_TIME_UNIT,
-                   NFILE,fnm,NPA,pa,asize(desc),desc,0,NULL,&oenv); 
+    FILE        *fp;
+    real         dt_t, dt_d, dt_d2;
+    int          nset_t, nset_d, nset_d2, n_t, n_d, n_d2, i;
+    const char  *tfile, *dfile, *dfile2;
+    t_remd_data  remd;
+    output_env_t oenv;
+
+    t_filenm     fnm[] = {
+        { efXVG, "-f",    "temp",    ffREAD   },
+        { efXVG, "-d",    "data",    ffREAD   },
+        { efXVG, "-d2",   "data2",   ffOPTRD  },
+        { efXVG, "-o",    "ft_all",  ffWRITE  },
+        { efXVG, "-o2",   "it_all",  ffOPTWR  },
+        { efXVG, "-o3",   "ft_repl", ffOPTWR  },
+        { efXVG, "-ee",   "err_est", ffOPTWR  },
+        { efLOG, "-g",    "remd",    ffWRITE  },
+        { efXVG, "-m",    "melt",    ffWRITE  }
+    };
+#define NFILE asize(fnm)
+
+    parse_common_args(&argc, argv, PCA_CAN_VIEW | PCA_BE_NICE | PCA_TIME_UNIT,
+                      NFILE, fnm, NPA, pa, asize(desc), desc, 0, NULL, &oenv);
 
 #ifdef HAVE_LIBGSL
-  please_cite(stdout,"Spoel2006d");
-  if (cutoff < 0)
-    gmx_fatal(FARGS,"cutoff should be >= 0 (rather than %f)",cutoff);
-
-  tfile   = opt2fn("-f",NFILE,fnm);
-  dfile   = opt2fn("-d",NFILE,fnm);
-  dfile2  = opt2fn_null("-d2",NFILE,fnm);
-  
-  fp = ffopen(opt2fn("-g",NFILE,fnm),"w");
-  
-  remd.temp = read_xvg_time(tfile,bHaveT,
-                           opt2parg_bSet("-b",NPA,pa),tb,
-                           opt2parg_bSet("-e",NPA,pa),te,
-                           nreplica,&nset_t,&n_t,&dt_t,&remd.time);
-  printf("Read %d sets of %d points in %s, dt = %g\n\n",nset_t,n_t,tfile,dt_t);
-  sfree(remd.time);
-  
-  remd.data = read_xvg_time(dfile,bHaveT,
-                           opt2parg_bSet("-b",NPA,pa),tb,
-                           opt2parg_bSet("-e",NPA,pa),te,
-                           nreplica,&nset_d,&n_d,&dt_d,&remd.time);
-  printf("Read %d sets of %d points in %s, dt = %g\n\n",nset_d,n_d,dfile,dt_d);
-
-  if ((nset_t != nset_d) || (n_t != n_d) || (dt_t != dt_d))
-    gmx_fatal(FARGS,"Files %s and %s are inconsistent. Check log file",
-             tfile,dfile);
-
-  if (dfile2) {
-    remd.data2 = read_xvg_time(dfile2,bHaveT,
-                              opt2parg_bSet("-b",NPA,pa),tb,
-                              opt2parg_bSet("-e",NPA,pa),te,
-                              nreplica,&nset_d2,&n_d2,&dt_d2,&remd.time);
-    printf("Read %d sets of %d points in %s, dt = %g\n\n",
-          nset_d2,n_d2,dfile2,dt_d2);
-    if ((nset_d2 != nset_d) || (n_d != n_d2) || (dt_d != dt_d2))
-      gmx_fatal(FARGS,"Files %s and %s are inconsistent. Check log file",
-               dfile,dfile2);
-  }
-  else {
-    remd.data2 = NULL;
-  }
-  
-  remd.nreplica  = nset_d;
-  remd.nframe    = n_d;
-  remd.dt        = 1;
-  preprocess_remd(fp,&remd,cutoff,tref,ucut,bBack,Euf,Efu,Ei,t0,t1,
-                 bSum,bDiscrete,nmult);
-  
-  optimize_remd_parameters(fp,&remd,maxiter,tol);
-  
-  dump_remd_parameters(fp,&remd,opt2fn("-o",NFILE,fnm),
-                      opt2fn_null("-o2",NFILE,fnm),
-                      opt2fn_null("-o3",NFILE,fnm),
-                      opt2fn_null("-ee",NFILE,fnm),
-                      opt2fn("-m",NFILE,fnm),skip,tref,oenv);
-
-  if (bSplit) {
-    printf("Splitting set of replicas in two halves\n");
-    for(i=0; (i<remd.nreplica); i++) 
-      remd.bMask[i] = FALSE;
-    remd.nmask = 0;
-    for(i=0; (i<remd.nreplica); i+=2) {
-      remd.bMask[i] = TRUE;
-      remd.nmask++;
-    }
-    sum_ft(&remd);
-    optimize_remd_parameters(fp,&remd,maxiter,tol);
-    dump_remd_parameters(fp,&remd,"test1.xvg",NULL,NULL,NULL,NULL,skip,tref,oenv);
-    
-    for(i=0; (i<remd.nreplica); i++) 
-      remd.bMask[i] = !remd.bMask[i];
-    remd.nmask = remd.nreplica - remd.nmask;
-    
-    sum_ft(&remd);
-    optimize_remd_parameters(fp,&remd,maxiter,tol);
-    dump_remd_parameters(fp,&remd,"test2.xvg",NULL,NULL,NULL,NULL,skip,tref,oenv);
-    
-    for(i=0; (i<remd.nreplica); i++) 
-      remd.bMask[i] = FALSE;
-    remd.nmask = 0;
-    for(i=0; (i<remd.nreplica/2); i++) {
-      remd.bMask[i] = TRUE;
-      remd.nmask++;
-    }
-    sum_ft(&remd);
-    optimize_remd_parameters(fp,&remd,maxiter,tol);
-    dump_remd_parameters(fp,&remd,"test1.xvg",NULL,NULL,NULL,NULL,skip,tref,oenv);
-    
-    for(i=0; (i<remd.nreplica); i++) 
-      remd.bMask[i] = FALSE;
-    remd.nmask = 0;
-    for(i=remd.nreplica/2; (i<remd.nreplica); i++) {
-      remd.bMask[i] = TRUE;
-      remd.nmask++;
-    }
-    sum_ft(&remd);
-    optimize_remd_parameters(fp,&remd,maxiter,tol);
-    dump_remd_parameters(fp,&remd,"test1.xvg",NULL,NULL,NULL,NULL,skip,tref,oenv);
-  }
-  ffclose(fp);
-  
-  view_all(oenv, NFILE, fnm);
-  
-  thanx(stderr);
+    please_cite(stdout, "Spoel2006d");
+    if (cutoff < 0)
+    {
+        gmx_fatal(FARGS, "cutoff should be >= 0 (rather than %f)", cutoff);
+    }
+
+    tfile   = opt2fn("-f", NFILE, fnm);
+    dfile   = opt2fn("-d", NFILE, fnm);
+    dfile2  = opt2fn_null("-d2", NFILE, fnm);
+
+    fp = ffopen(opt2fn("-g", NFILE, fnm), "w");
+
+    remd.temp = read_xvg_time(tfile, bHaveT,
+                              opt2parg_bSet("-b", NPA, pa), tb,
+                              opt2parg_bSet("-e", NPA, pa), te,
+                              nreplica, &nset_t, &n_t, &dt_t, &remd.time);
+    printf("Read %d sets of %d points in %s, dt = %g\n\n", nset_t, n_t, tfile, dt_t);
+    sfree(remd.time);
+
+    remd.data = read_xvg_time(dfile, bHaveT,
+                              opt2parg_bSet("-b", NPA, pa), tb,
+                              opt2parg_bSet("-e", NPA, pa), te,
+                              nreplica, &nset_d, &n_d, &dt_d, &remd.time);
+    printf("Read %d sets of %d points in %s, dt = %g\n\n", nset_d, n_d, dfile, dt_d);
+
+    if ((nset_t != nset_d) || (n_t != n_d) || (dt_t != dt_d))
+    {
+        gmx_fatal(FARGS, "Files %s and %s are inconsistent. Check log file",
+                  tfile, dfile);
+    }
+
+    if (dfile2)
+    {
+        remd.data2 = read_xvg_time(dfile2, bHaveT,
+                                   opt2parg_bSet("-b", NPA, pa), tb,
+                                   opt2parg_bSet("-e", NPA, pa), te,
+                                   nreplica, &nset_d2, &n_d2, &dt_d2, &remd.time);
+        printf("Read %d sets of %d points in %s, dt = %g\n\n",
+               nset_d2, n_d2, dfile2, dt_d2);
+        if ((nset_d2 != nset_d) || (n_d != n_d2) || (dt_d != dt_d2))
+        {
+            gmx_fatal(FARGS, "Files %s and %s are inconsistent. Check log file",
+                      dfile, dfile2);
+        }
+    }
+    else
+    {
+        remd.data2 = NULL;
+    }
+
+    remd.nreplica  = nset_d;
+    remd.nframe    = n_d;
+    remd.dt        = 1;
+    preprocess_remd(fp, &remd, cutoff, tref, ucut, bBack, Euf, Efu, Ei, t0, t1,
+                    bSum, bDiscrete, nmult);
+
+    optimize_remd_parameters(fp, &remd, maxiter, tol);
+
+    dump_remd_parameters(fp, &remd, opt2fn("-o", NFILE, fnm),
+                         opt2fn_null("-o2", NFILE, fnm),
+                         opt2fn_null("-o3", NFILE, fnm),
+                         opt2fn_null("-ee", NFILE, fnm),
+                         opt2fn("-m", NFILE, fnm), skip, tref, oenv);
+
+    if (bSplit)
+    {
+        printf("Splitting set of replicas in two halves\n");
+        for (i = 0; (i < remd.nreplica); i++)
+        {
+            remd.bMask[i] = FALSE;
+        }
+        remd.nmask = 0;
+        for (i = 0; (i < remd.nreplica); i += 2)
+        {
+            remd.bMask[i] = TRUE;
+            remd.nmask++;
+        }
+        sum_ft(&remd);
+        optimize_remd_parameters(fp, &remd, maxiter, tol);
+        dump_remd_parameters(fp, &remd, "test1.xvg", NULL, NULL, NULL, NULL, skip, tref, oenv);
+
+        for (i = 0; (i < remd.nreplica); i++)
+        {
+            remd.bMask[i] = !remd.bMask[i];
+        }
+        remd.nmask = remd.nreplica - remd.nmask;
+
+        sum_ft(&remd);
+        optimize_remd_parameters(fp, &remd, maxiter, tol);
+        dump_remd_parameters(fp, &remd, "test2.xvg", NULL, NULL, NULL, NULL, skip, tref, oenv);
+
+        for (i = 0; (i < remd.nreplica); i++)
+        {
+            remd.bMask[i] = FALSE;
+        }
+        remd.nmask = 0;
+        for (i = 0; (i < remd.nreplica/2); i++)
+        {
+            remd.bMask[i] = TRUE;
+            remd.nmask++;
+        }
+        sum_ft(&remd);
+        optimize_remd_parameters(fp, &remd, maxiter, tol);
+        dump_remd_parameters(fp, &remd, "test1.xvg", NULL, NULL, NULL, NULL, skip, tref, oenv);
+
+        for (i = 0; (i < remd.nreplica); i++)
+        {
+            remd.bMask[i] = FALSE;
+        }
+        remd.nmask = 0;
+        for (i = remd.nreplica/2; (i < remd.nreplica); i++)
+        {
+            remd.bMask[i] = TRUE;
+            remd.nmask++;
+        }
+        sum_ft(&remd);
+        optimize_remd_parameters(fp, &remd, maxiter, tol);
+        dump_remd_parameters(fp, &remd, "test1.xvg", NULL, NULL, NULL, NULL, skip, tref, oenv);
+    }
+    ffclose(fp);
+
+    view_all(oenv, NFILE, fnm);
+
+    thanx(stderr);
 #else
-  fprintf(stderr,"This program should be compiled with the GNU scientific library. Please install the library and reinstall GROMACS.\n");
+    fprintf(stderr, "This program should be compiled with the GNU scientific library. Please install the library and reinstall GROMACS.\n");
 #endif /*HAVE_LIBGSL*/
-  
-  return 0;
+
+    return 0;
 }