Sort all includes in src/gromacs
[alexxy/gromacs.git] / src / gromacs / gmxpreprocess / genhydro.c
index c460cd6652c7e964c08ab261f4edf643c408f6c4..3a85fa12094f8a8201a5647d3174d605c1619db1 100644 (file)
 /*
- * 
- *                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.
+ * This file is part of the GROMACS molecular simulation package.
+ *
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2004, The GROMACS development team,
- * check out http://www.gromacs.org for more information.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
+ * Copyright (c) 2001-2004, The GROMACS development team.
+ * Copyright (c) 2013,2014, by the GROMACS development team, led by
+ * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+ * and including many others, as listed in the AUTHORS file in the
+ * top-level source directory and at http://www.gromacs.org.
+ *
+ * GROMACS is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
  * 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.
- * 
+ *
+ * GROMACS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GROMACS; if not, see
+ * http://www.gnu.org/licenses, or write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+ *
+ * If you want to redistribute modifications to GROMACS, 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 http://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:
- * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
+ * the research papers on the package. Check out http://www.gromacs.org.
  */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+#include "gmxpre.h"
 
+#include "genhydro.h"
 
+#include <string.h>
 #include <time.h>
-#include <ctype.h>
-#include "sysstuff.h"
-#include "typedefs.h"
-#include "smalloc.h"
-#include "copyrite.h"
-#include "string2.h"
-#include "confio.h"
-#include "symtab.h"
-#include "vec.h"
-#include "statutil.h"
-#include "futil.h"
-#include "gmx_fatal.h"
-#include "physics.h"
-#include "calch.h"
-#include "genhydro.h"
-#include "h_db.h"
-#include "ter_db.h"
-#include "resall.h"
-#include "pgutil.h"
-#include "network.h"
-#include "macros.h"
-
-static void copy_atom(t_atoms *atoms1,int a1,t_atoms *atoms2,int a2)
+
+#include "gromacs/fileio/confio.h"
+#include "gromacs/gmxpreprocess/calch.h"
+#include "gromacs/gmxpreprocess/h_db.h"
+#include "gromacs/gmxpreprocess/pgutil.h"
+#include "gromacs/gmxpreprocess/resall.h"
+#include "gromacs/gmxpreprocess/ter_db.h"
+#include "gromacs/legacyheaders/network.h"
+#include "gromacs/legacyheaders/typedefs.h"
+#include "gromacs/math/vec.h"
+#include "gromacs/topology/symtab.h"
+#include "gromacs/utility/cstringutil.h"
+#include "gromacs/utility/fatalerror.h"
+#include "gromacs/utility/futil.h"
+#include "gromacs/utility/smalloc.h"
+
+static void copy_atom(t_atoms *atoms1, int a1, t_atoms *atoms2, int a2)
 {
-  atoms2->atom[a2] = atoms1->atom[a1];
-  snew(atoms2->atomname[a2],1);
-  *atoms2->atomname[a2]=strdup(*atoms1->atomname[a1]);
+    atoms2->atom[a2] = atoms1->atom[a1];
+    snew(atoms2->atomname[a2], 1);
+    *atoms2->atomname[a2] = gmx_strdup(*atoms1->atomname[a1]);
 }
 
-static atom_id pdbasearch_atom(const char *name,int resind,t_atoms *pdba,
-                              const char *searchtype,gmx_bool bAllowMissing)
+static atom_id pdbasearch_atom(const char *name, int resind, t_atoms *pdba,
+                               const char *searchtype, gmx_bool bAllowMissing)
 {
-  int  i;
-  
-  for(i=0; (i<pdba->nr) && (pdba->atom[i].resind != resind); i++)
-    ;
-    
-  return search_atom(name,i,pdba,
-                    searchtype,bAllowMissing);
+    int  i;
+
+    for (i = 0; (i < pdba->nr) && (pdba->atom[i].resind != resind); i++)
+    {
+        ;
+    }
+
+    return search_atom(name, i, pdba,
+                       searchtype, bAllowMissing);
 }
 
 static void hacksearch_atom(int *ii, int *jj, char *name,
-                           int nab[], t_hack *ab[], 
-                           int resind, t_atoms *pdba)
+                            int nab[], t_hack *ab[],
+                            int resind, t_atoms *pdba)
 {
-  int  i,j;
-  
-  *ii=-1;
-  if (name[0] == '-') {
-    name++;
-    resind--;
-  }
-  for(i=0; (i<pdba->nr) && (pdba->atom[i].resind != resind); i++)
-    ;
-  for(   ; (i<pdba->nr) && (pdba->atom[i].resind == resind) && (*ii<0); i++)
-    for(j=0; (j < nab[i]) && (*ii<0); j++)
-      if (ab[i][j].nname && strcmp(name,ab[i][j].nname) == 0) {
-       *ii=i;
-       *jj=j;
-      }
-  
-  return;
+    int  i, j;
+
+    *ii = -1;
+    if (name[0] == '-')
+    {
+        name++;
+        resind--;
+    }
+    for (i = 0; (i < pdba->nr) && (pdba->atom[i].resind != resind); i++)
+    {
+        ;
+    }
+    for (; (i < pdba->nr) && (pdba->atom[i].resind == resind) && (*ii < 0); i++)
+    {
+        for (j = 0; (j < nab[i]) && (*ii < 0); j++)
+        {
+            if (ab[i][j].nname && strcmp(name, ab[i][j].nname) == 0)
+            {
+                *ii = i;
+                *jj = j;
+            }
+        }
+    }
+
+    return;
 }
 
-void dump_ab(FILE *out,int natom,int nab[], t_hack *ab[], gmx_bool bHeader)
+void dump_ab(FILE *out, int natom, int nab[], t_hack *ab[], gmx_bool bHeader)
 {
-  int i,j;
-  
-#define SS(s) (s)?(s):"-"
-  /* dump ab */
-  if (bHeader)
-    fprintf(out,"ADDBLOCK (t_hack) natom=%d\n"
-           "%4s %2s %-4s %-4s %2s %-4s %-4s %-4s %-4s %1s %s\n",
-           natom,"atom","nr","old","new","tp","ai","aj","ak","al","a","x");
-  for(i=0; i<natom; i++)
-    for(j=0; j<nab[i]; j++)
-      fprintf(out,"%4d %2d %-4s %-4s %2d %-4s %-4s %-4s %-4s %s %g %g %g\n",
-             i+1, ab[i][j].nr, SS(ab[i][j].oname), SS(ab[i][j].nname),
-             ab[i][j].tp, 
-             SS(ab[i][j].AI), SS(ab[i][j].AJ),
-             SS(ab[i][j].AK), SS(ab[i][j].AL),
-             ab[i][j].atom?"+":"", 
-             ab[i][j].newx[XX], ab[i][j].newx[YY], ab[i][j].newx[ZZ]);
+    int i, j;
+
+#define SS(s) (s) ? (s) : "-"
+    /* dump ab */
+    if (bHeader)
+    {
+        fprintf(out, "ADDBLOCK (t_hack) natom=%d\n"
+                "%4s %2s %-4s %-4s %2s %-4s %-4s %-4s %-4s %1s %s\n",
+                natom, "atom", "nr", "old", "new", "tp", "ai", "aj", "ak", "al", "a", "x");
+    }
+    for (i = 0; i < natom; i++)
+    {
+        for (j = 0; j < nab[i]; j++)
+        {
+            fprintf(out, "%4d %2d %-4s %-4s %2d %-4s %-4s %-4s %-4s %s %g %g %g\n",
+                    i+1, ab[i][j].nr, SS(ab[i][j].oname), SS(ab[i][j].nname),
+                    ab[i][j].tp,
+                    SS(ab[i][j].AI), SS(ab[i][j].AJ),
+                    SS(ab[i][j].AK), SS(ab[i][j].AL),
+                    ab[i][j].atom ? "+" : "",
+                    ab[i][j].newx[XX], ab[i][j].newx[YY], ab[i][j].newx[ZZ]);
+        }
+    }
 #undef SS
 }
 
 static t_hackblock *get_hackblocks(t_atoms *pdba, int nah, t_hackblock ah[],
-                                  int nterpairs,
-                                  t_hackblock **ntdb, t_hackblock **ctdb, 
-                                  int *rN, int *rC)
+                                   int nterpairs,
+                                   t_hackblock **ntdb, t_hackblock **ctdb,
+                                   int *rN, int *rC)
 {
-  int i,rnr;
-  t_hackblock *hb,*ahptr;
-
-  /* make space */
-  snew(hb,pdba->nres);
-  /* first the termini */
-  for(i=0; i<nterpairs; i++) {
-    if (ntdb[i] != NULL) {
-      copy_t_hackblock(ntdb[i], &hb[rN[i]]);
-    }
-    if (ctdb[i] != NULL) {
-      merge_t_hackblock(ctdb[i], &hb[rC[i]]);
-    }
-  }
-  /* then the whole hdb */
-  for(rnr=0; rnr < pdba->nres; rnr++) {
-    ahptr=search_h_db(nah,ah,*pdba->resinfo[rnr].rtp);
-    if ( ahptr ) {
-      if (hb[rnr].name==NULL) {
-           hb[rnr].name=strdup(ahptr->name);
-      }
-      merge_hacks(ahptr, &hb[rnr]);
-    }
-  }
-  return hb;
+    int          i, rnr;
+    t_hackblock *hb, *ahptr;
+
+    /* make space */
+    snew(hb, pdba->nres);
+    /* first the termini */
+    for (i = 0; i < nterpairs; i++)
+    {
+        if (ntdb[i] != NULL)
+        {
+            copy_t_hackblock(ntdb[i], &hb[rN[i]]);
+        }
+        if (ctdb[i] != NULL)
+        {
+            merge_t_hackblock(ctdb[i], &hb[rC[i]]);
+        }
+    }
+    /* then the whole hdb */
+    for (rnr = 0; rnr < pdba->nres; rnr++)
+    {
+        ahptr = search_h_db(nah, ah, *pdba->resinfo[rnr].rtp);
+        if (ahptr)
+        {
+            if (hb[rnr].name == NULL)
+            {
+                hb[rnr].name = gmx_strdup(ahptr->name);
+            }
+            merge_hacks(ahptr, &hb[rnr]);
+        }
+    }
+    return hb;
 }
 
-static void expand_hackblocks_one(t_hackblock *hbr, char *atomname, 
-                                 int *nabi, t_hack **abi, gmx_bool bN, gmx_bool bC)
+static void expand_hackblocks_one(t_hackblock *hbr, char *atomname,
+                                  int *nabi, t_hack **abi, gmx_bool bN, gmx_bool bC)
 {
-  int j, k, l, d;
-  gmx_bool bIgnore;
-  
-  /* we'll recursively add atoms to atoms */
-  for(j=0; j < hbr->nhack; j++) {
-    /* first check if we're in the N- or C-terminus, then we should ignore 
-       all hacks involving atoms from resp. previous or next residue
-       (i.e. which name begins with '-' (N) or '+' (C) */
-    bIgnore = FALSE;
-    if ( bN ) { /* N-terminus: ignore '-' */
-      for(k=0; k<4 && hbr->hack[j].a[k] && !bIgnore; k++) {
-           bIgnore = hbr->hack[j].a[k][0]=='-';
-      }
-    }
-    if ( bC ) { /* C-terminus: ignore '+' */
-      for(k=0; k<4 && hbr->hack[j].a[k] && !bIgnore; k++) {
-           bIgnore = hbr->hack[j].a[k][0]=='+';
-      }
-    }
-    /* must be either hdb entry (tp>0) or add from tdb (oname==NULL)
-       and first control aton (AI) matches this atom or
-       delete/replace from tdb (oname!=NULL) and oname matches this atom */
-    if (debug) {
-        fprintf(debug," %s",hbr->hack[j].oname?hbr->hack[j].oname:hbr->hack[j].AI);
-    }
-
-    if ( !bIgnore &&
-         ( ( ( hbr->hack[j].tp > 0 || hbr->hack[j].oname==NULL ) &&
-             strcmp(atomname, hbr->hack[j].AI) == 0 ) ||
-           ( hbr->hack[j].oname!=NULL &&
-             strcmp(atomname, hbr->hack[j].oname) == 0) ) ) {
-      /* now expand all hacks for this atom */
-      if (debug) {
-         fprintf(debug," +%dh",hbr->hack[j].nr);
-      }
-      srenew(*abi,*nabi + hbr->hack[j].nr);
-      for(k=0; k < hbr->hack[j].nr; k++) {
-           copy_t_hack(&hbr->hack[j], &(*abi)[*nabi + k]);
-           (*abi)[*nabi + k].bXSet = FALSE;
-           /* if we're adding (oname==NULL) and don't have a new name (nname) 
-           yet, build it from atomname */
-           if ( (*abi)[*nabi + k].nname==NULL ) {
-               if ( (*abi)[*nabi + k].oname==NULL ) {
-                   (*abi)[*nabi + k].nname=strdup(atomname);
-                   (*abi)[*nabi + k].nname[0]='H';
-               }
-           } else {
-               if (gmx_debug_at) {
-                   fprintf(debug,"Hack '%s' %d, replacing nname '%s' with '%s' (old name '%s')\n",
-                           atomname,j,
-                           (*abi)[*nabi + k].nname,hbr->hack[j].nname,
-                           (*abi)[*nabi + k].oname ? (*abi)[*nabi + k].oname : "");
-               }
-           sfree((*abi)[*nabi + k].nname);
-           (*abi)[*nabi + k].nname=strdup(hbr->hack[j].nname);
-           }
-
-           if (hbr->hack[j].tp == 10 && k == 2) {
-               /* This is a water virtual site, not a hydrogen */
-               /* Ugly hardcoded name hack */
-               (*abi)[*nabi + k].nname[0] = 'M';
-           } else if (hbr->hack[j].tp == 11 && k >= 2) {
-               /* This is a water lone pair, not a hydrogen */
-               /* Ugly hardcoded name hack */
-               srenew((*abi)[*nabi + k].nname,4);
-               (*abi)[*nabi + k].nname[0] = 'L';
-               (*abi)[*nabi + k].nname[1] = 'P';
-               (*abi)[*nabi + k].nname[2] = '1' + k - 2;
-               (*abi)[*nabi + k].nname[3] = '\0';
-           } else if ( hbr->hack[j].nr > 1 ) {
-               /* adding more than one atom, number them */
-               l = strlen((*abi)[*nabi + k].nname);
-               srenew((*abi)[*nabi + k].nname, l+2);
-               (*abi)[*nabi + k].nname[l]   = '1' + k;
-               (*abi)[*nabi + k].nname[l+1] = '\0';
-           }
-      }
-      (*nabi) += hbr->hack[j].nr;
-      
-      /* add hacks to atoms we've just added */
-      if ( hbr->hack[j].tp > 0 || hbr->hack[j].oname==NULL ) {
-             for(k=0; k < hbr->hack[j].nr; k++) {
-               expand_hackblocks_one(hbr, (*abi)[*nabi-hbr->hack[j].nr+k].nname, 
-                               nabi, abi, bN, bC);
-          }
-      }
-    }
-  }
+    int      j, k, l, d;
+    gmx_bool bIgnore;
+
+    /* we'll recursively add atoms to atoms */
+    for (j = 0; j < hbr->nhack; j++)
+    {
+        /* first check if we're in the N- or C-terminus, then we should ignore
+           all hacks involving atoms from resp. previous or next residue
+           (i.e. which name begins with '-' (N) or '+' (C) */
+        bIgnore = FALSE;
+        if (bN) /* N-terminus: ignore '-' */
+        {
+            for (k = 0; k < 4 && hbr->hack[j].a[k] && !bIgnore; k++)
+            {
+                bIgnore = hbr->hack[j].a[k][0] == '-';
+            }
+        }
+        if (bC) /* C-terminus: ignore '+' */
+        {
+            for (k = 0; k < 4 && hbr->hack[j].a[k] && !bIgnore; k++)
+            {
+                bIgnore = hbr->hack[j].a[k][0] == '+';
+            }
+        }
+        /* must be either hdb entry (tp>0) or add from tdb (oname==NULL)
+           and first control aton (AI) matches this atom or
+           delete/replace from tdb (oname!=NULL) and oname matches this atom */
+        if (debug)
+        {
+            fprintf(debug, " %s", hbr->hack[j].oname ? hbr->hack[j].oname : hbr->hack[j].AI);
+        }
+
+        if (!bIgnore &&
+            ( ( ( hbr->hack[j].tp > 0 || hbr->hack[j].oname == NULL ) &&
+                strcmp(atomname, hbr->hack[j].AI) == 0 ) ||
+              ( hbr->hack[j].oname != NULL &&
+                strcmp(atomname, hbr->hack[j].oname) == 0) ) )
+        {
+            /* now expand all hacks for this atom */
+            if (debug)
+            {
+                fprintf(debug, " +%dh", hbr->hack[j].nr);
+            }
+            srenew(*abi, *nabi + hbr->hack[j].nr);
+            for (k = 0; k < hbr->hack[j].nr; k++)
+            {
+                copy_t_hack(&hbr->hack[j], &(*abi)[*nabi + k]);
+                (*abi)[*nabi + k].bXSet = FALSE;
+                /* if we're adding (oname==NULL) and don't have a new name (nname)
+                   yet, build it from atomname */
+                if ( (*abi)[*nabi + k].nname == NULL)
+                {
+                    if ( (*abi)[*nabi + k].oname == NULL)
+                    {
+                        (*abi)[*nabi + k].nname    = gmx_strdup(atomname);
+                        (*abi)[*nabi + k].nname[0] = 'H';
+                    }
+                }
+                else
+                {
+                    if (gmx_debug_at)
+                    {
+                        fprintf(debug, "Hack '%s' %d, replacing nname '%s' with '%s' (old name '%s')\n",
+                                atomname, j,
+                                (*abi)[*nabi + k].nname, hbr->hack[j].nname,
+                                (*abi)[*nabi + k].oname ? (*abi)[*nabi + k].oname : "");
+                    }
+                    sfree((*abi)[*nabi + k].nname);
+                    (*abi)[*nabi + k].nname = gmx_strdup(hbr->hack[j].nname);
+                }
+
+                if (hbr->hack[j].tp == 10 && k == 2)
+                {
+                    /* This is a water virtual site, not a hydrogen */
+                    /* Ugly hardcoded name hack */
+                    (*abi)[*nabi + k].nname[0] = 'M';
+                }
+                else if (hbr->hack[j].tp == 11 && k >= 2)
+                {
+                    /* This is a water lone pair, not a hydrogen */
+                    /* Ugly hardcoded name hack */
+                    srenew((*abi)[*nabi + k].nname, 4);
+                    (*abi)[*nabi + k].nname[0] = 'L';
+                    (*abi)[*nabi + k].nname[1] = 'P';
+                    (*abi)[*nabi + k].nname[2] = '1' + k - 2;
+                    (*abi)[*nabi + k].nname[3] = '\0';
+                }
+                else if (hbr->hack[j].nr > 1)
+                {
+                    /* adding more than one atom, number them */
+                    l = strlen((*abi)[*nabi + k].nname);
+                    srenew((*abi)[*nabi + k].nname, l+2);
+                    (*abi)[*nabi + k].nname[l]   = '1' + k;
+                    (*abi)[*nabi + k].nname[l+1] = '\0';
+                }
+            }
+            (*nabi) += hbr->hack[j].nr;
+
+            /* add hacks to atoms we've just added */
+            if (hbr->hack[j].tp > 0 || hbr->hack[j].oname == NULL)
+            {
+                for (k = 0; k < hbr->hack[j].nr; k++)
+                {
+                    expand_hackblocks_one(hbr, (*abi)[*nabi-hbr->hack[j].nr+k].nname,
+                                          nabi, abi, bN, bC);
+                }
+            }
+        }
+    }
 }
 
-static void expand_hackblocks(t_atoms *pdba, t_hackblock hb[], 
-                             int nab[], t_hack *ab[], 
-                             int nterpairs, int *rN, int *rC)
+static void expand_hackblocks(t_atoms *pdba, t_hackblock hb[],
+                              int nab[], t_hack *ab[],
+                              int nterpairs, int *rN, int *rC)
 {
-  int i,j;
-  gmx_bool bN,bC;
-  
-  for(i=0; i < pdba->nr; i++) {
-    bN = FALSE;
-    for(j=0; j<nterpairs && !bN; j++)
-      bN = pdba->atom[i].resind==rN[j];
-    bC = FALSE;
-    for(j=0; j<nterpairs && !bC; j++)
-      bC = pdba->atom[i].resind==rC[j];
-
-    /* add hacks to this atom */
-    expand_hackblocks_one(&hb[pdba->atom[i].resind], *pdba->atomname[i], 
-                         &nab[i], &ab[i], bN, bC);
-  }
-  if (debug) fprintf(debug,"\n");
+    int      i, j;
+    gmx_bool bN, bC;
+
+    for (i = 0; i < pdba->nr; i++)
+    {
+        bN = FALSE;
+        for (j = 0; j < nterpairs && !bN; j++)
+        {
+            bN = pdba->atom[i].resind == rN[j];
+        }
+        bC = FALSE;
+        for (j = 0; j < nterpairs && !bC; j++)
+        {
+            bC = pdba->atom[i].resind == rC[j];
+        }
+
+        /* add hacks to this atom */
+        expand_hackblocks_one(&hb[pdba->atom[i].resind], *pdba->atomname[i],
+                              &nab[i], &ab[i], bN, bC);
+    }
+    if (debug)
+    {
+        fprintf(debug, "\n");
+    }
 }
 
 static int check_atoms_present(t_atoms *pdba, int nab[], t_hack *ab[])
 {
-  int i, j, k, d, rnr, nadd;
-  
-  nadd=0;
-  for(i=0; i < pdba->nr; i++) {
-    rnr = pdba->atom[i].resind;
-    for(j=0; j<nab[i]; j++) {
-      if ( ab[i][j].oname==NULL ) { 
-       /* we're adding */
-       if (ab[i][j].nname == NULL)
-         gmx_incons("ab[i][j].nname not allocated");
-       /* check if the atom is already present */
-       k = pdbasearch_atom(ab[i][j].nname, rnr, pdba, "check", TRUE);
-       if ( k != -1 ) {
-         /* We found the added atom. */
-         ab[i][j].bAlreadyPresent = TRUE;
-         if (debug) {
-           fprintf(debug,"Atom '%s' in residue '%s' %d is already present\n",
-                   ab[i][j].nname,
-                   *pdba->resinfo[rnr].name,pdba->resinfo[rnr].nr);
-         }
-       } else {
-         ab[i][j].bAlreadyPresent = FALSE;
-         /* count how many atoms we'll add */
-         nadd++;
-       }
-      } else if ( ab[i][j].nname==NULL ) {
-       /* we're deleting */
-       nadd--;
-      }
-    }
-  }
-  
-  return nadd;
+    int i, j, k, d, rnr, nadd;
+
+    nadd = 0;
+    for (i = 0; i < pdba->nr; i++)
+    {
+        rnr = pdba->atom[i].resind;
+        for (j = 0; j < nab[i]; j++)
+        {
+            if (ab[i][j].oname == NULL)
+            {
+                /* we're adding */
+                if (ab[i][j].nname == NULL)
+                {
+                    gmx_incons("ab[i][j].nname not allocated");
+                }
+                /* check if the atom is already present */
+                k = pdbasearch_atom(ab[i][j].nname, rnr, pdba, "check", TRUE);
+                if (k != -1)
+                {
+                    /* We found the added atom. */
+                    ab[i][j].bAlreadyPresent = TRUE;
+                    if (debug)
+                    {
+                        fprintf(debug, "Atom '%s' in residue '%s' %d is already present\n",
+                                ab[i][j].nname,
+                                *pdba->resinfo[rnr].name, pdba->resinfo[rnr].nr);
+                    }
+                }
+                else
+                {
+                    ab[i][j].bAlreadyPresent = FALSE;
+                    /* count how many atoms we'll add */
+                    nadd++;
+                }
+            }
+            else if (ab[i][j].nname == NULL)
+            {
+                /* we're deleting */
+                nadd--;
+            }
+        }
+    }
+
+    return nadd;
 }
 
 static void calc_all_pos(t_atoms *pdba, rvec x[], int nab[], t_hack *ab[],
-                        gmx_bool bCheckMissing)
+                         gmx_bool bCheckMissing)
 {
-  int i, j, ii, jj, m, ia, d, rnr,l=0;
+    int      i, j, ii, jj, m, ia, d, rnr, l = 0;
 #define MAXH 4
-  rvec xa[4];     /* control atoms for calc_h_pos */
-  rvec xh[MAXH]; /* hydrogen positions from calc_h_pos */
-  gmx_bool bFoundAll;
-
-  jj = 0;
-  
-  for(i=0; i < pdba->nr; i++) {
-    rnr   = pdba->atom[i].resind;
-    for(j=0; j < nab[i]; j+=ab[i][j].nr) {
-      /* check if we're adding: */
-      if (ab[i][j].oname==NULL && ab[i][j].tp > 0) {
-           bFoundAll = TRUE;
-           for(m=0; (m<ab[i][j].nctl && bFoundAll); m++) {
-               ia = pdbasearch_atom(ab[i][j].a[m], rnr, pdba,
-                              bCheckMissing ? "atom" : "check",
-                              !bCheckMissing);
-           if (ia < 0) {
-               /* not found in original atoms, might still be in t_hack (ab) */
-               hacksearch_atom(&ii, &jj, ab[i][j].a[m], nab, ab, rnr, pdba);
-               if (ii >= 0) {
-                   copy_rvec(ab[ii][jj].newx, xa[m]);
-               } else {
-                   bFoundAll = FALSE;
-                   if (bCheckMissing) {
-                           gmx_fatal(FARGS,"Atom %s not found in residue %s %d"
-                                   ", rtp entry %s"
-                                   " while adding hydrogens",
-                                   ab[i][j].a[m],
-                                   *pdba->resinfo[rnr].name,
-                                   pdba->resinfo[rnr].nr,
-                                   *pdba->resinfo[rnr].rtp);
-                   }
-               }
-         } else {
-           copy_rvec(x[ia], xa[m]);
-      }
-       }
-       if (bFoundAll) {
-         for(m=0; (m<MAXH); m++)
-           for(d=0; d<DIM; d++)
-             if (m<ab[i][j].nr)
-               xh[m][d] = 0;
-             else
-               xh[m][d] = NOTSET;
-         calc_h_pos(ab[i][j].tp, xa, xh, &l);
-         for(m=0; m<ab[i][j].nr; m++) {
-           copy_rvec(xh[m],ab[i][j+m].newx);
-           ab[i][j+m].bXSet = TRUE;
-         }
-       }
-      }
-    }
-  }
+    rvec     xa[4];    /* control atoms for calc_h_pos */
+    rvec     xh[MAXH]; /* hydrogen positions from calc_h_pos */
+    gmx_bool bFoundAll;
+
+    jj = 0;
+
+    for (i = 0; i < pdba->nr; i++)
+    {
+        rnr   = pdba->atom[i].resind;
+        for (j = 0; j < nab[i]; j += ab[i][j].nr)
+        {
+            /* check if we're adding: */
+            if (ab[i][j].oname == NULL && ab[i][j].tp > 0)
+            {
+                bFoundAll = TRUE;
+                for (m = 0; (m < ab[i][j].nctl && bFoundAll); m++)
+                {
+                    ia = pdbasearch_atom(ab[i][j].a[m], rnr, pdba,
+                                         bCheckMissing ? "atom" : "check",
+                                         !bCheckMissing);
+                    if (ia < 0)
+                    {
+                        /* not found in original atoms, might still be in t_hack (ab) */
+                        hacksearch_atom(&ii, &jj, ab[i][j].a[m], nab, ab, rnr, pdba);
+                        if (ii >= 0)
+                        {
+                            copy_rvec(ab[ii][jj].newx, xa[m]);
+                        }
+                        else
+                        {
+                            bFoundAll = FALSE;
+                            if (bCheckMissing)
+                            {
+                                gmx_fatal(FARGS, "Atom %s not found in residue %s %d"
+                                          ", rtp entry %s"
+                                          " while adding hydrogens",
+                                          ab[i][j].a[m],
+                                          *pdba->resinfo[rnr].name,
+                                          pdba->resinfo[rnr].nr,
+                                          *pdba->resinfo[rnr].rtp);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        copy_rvec(x[ia], xa[m]);
+                    }
+                }
+                if (bFoundAll)
+                {
+                    for (m = 0; (m < MAXH); m++)
+                    {
+                        for (d = 0; d < DIM; d++)
+                        {
+                            if (m < ab[i][j].nr)
+                            {
+                                xh[m][d] = 0;
+                            }
+                            else
+                            {
+                                xh[m][d] = NOTSET;
+                            }
+                        }
+                    }
+                    calc_h_pos(ab[i][j].tp, xa, xh, &l);
+                    for (m = 0; m < ab[i][j].nr; m++)
+                    {
+                        copy_rvec(xh[m], ab[i][j+m].newx);
+                        ab[i][j+m].bXSet = TRUE;
+                    }
+                }
+            }
+        }
+    }
 }
 
-static void free_ab(int natoms,int *nab,t_hack **ab)
+static void free_ab(int natoms, int *nab, t_hack **ab)
 {
-  int i;
+    int i;
 
-  for(i=0; i<natoms; i++) {
-    free_t_hack(nab[i], &ab[i]);
-  }
-  sfree(nab);
-  sfree(ab);
+    for (i = 0; i < natoms; i++)
+    {
+        free_t_hack(nab[i], &ab[i]);
+    }
+    sfree(nab);
+    sfree(ab);
 }
 
-static int add_h_low(t_atoms **pdbaptr, rvec *xptr[], 
-                    int nah, t_hackblock ah[],
-                    int nterpairs, t_hackblock **ntdb, t_hackblock **ctdb, 
-                    int *rN, int *rC, gmx_bool bCheckMissing,
-                    int **nabptr, t_hack ***abptr,
-                    gmx_bool bUpdate_pdba, gmx_bool bKeep_old_pdba)
+static int add_h_low(t_atoms **pdbaptr, rvec *xptr[],
+                     int nah, t_hackblock ah[],
+                     int nterpairs, t_hackblock **ntdb, t_hackblock **ctdb,
+                     int *rN, int *rC, gmx_bool bCheckMissing,
+                     int **nabptr, t_hack ***abptr,
+                     gmx_bool bUpdate_pdba, gmx_bool bKeep_old_pdba)
 {
-  t_atoms     *newpdba=NULL,*pdba=NULL;
-  int         nadd;
-  int         i,newi,j,d,natoms,nalreadypresent;
-  int         *nab=NULL;
-  t_hack      **ab=NULL;
-  t_hackblock *hb;
-  rvec        *xn;
-  gmx_bool        bKeep_ab;
-  
-  /* set flags for adding hydrogens (according to hdb) */
-  pdba=*pdbaptr;
-  natoms=pdba->nr;
-  
-  if (nabptr && abptr) {
-    /* the first time these will be pointers to NULL, but we will
-       return in them the completed arrays, which we will get back
-       the second time */
-    nab = *nabptr;
-    ab  = *abptr;
-    bKeep_ab=TRUE;
-    if (debug) fprintf(debug,"pointer to ab found\n");
-  } else {
-    bKeep_ab=FALSE;
-  }
-  
-  if (nab && ab) {
-    /* WOW, everything was already figured out */
-    bUpdate_pdba = FALSE;
-    if (debug) fprintf(debug,"pointer to non-null ab found\n");
-  } else {
-    /* We'll have to do all the hard work */
-    bUpdate_pdba = TRUE;
-    /* first get all the hackblocks for each residue: */
-    hb = get_hackblocks(pdba, nah, ah, nterpairs, ntdb, ctdb, rN, rC);
-    if (debug) dump_hb(debug, pdba->nres, hb);
-    
-    /* expand the hackblocks to atom level */
-    snew(nab,natoms);
-    snew(ab,natoms);
-    expand_hackblocks(pdba, hb, nab, ab, nterpairs, rN, rC);
-    free_t_hackblock(pdba->nres, &hb);
-  }
-  
-  if (debug) { 
-    fprintf(debug,"before calc_all_pos\n");
-    dump_ab(debug, natoms, nab, ab, TRUE);
-  }
-  
-  /* Now calc the positions */
-  calc_all_pos(pdba, *xptr, nab, ab, bCheckMissing);
-
-  if (debug) { 
-    fprintf(debug,"after calc_all_pos\n");
-    dump_ab(debug, natoms, nab, ab, TRUE);
-  }
-  
-  if (bUpdate_pdba) {
-    /* we don't have to add atoms that are already present in pdba,
-       so we will remove them from the ab (t_hack) */
-    nadd = check_atoms_present(pdba, nab, ab);
-    if (debug) {
-      fprintf(debug, "removed add hacks that were already in pdba:\n");
-      dump_ab(debug, natoms, nab, ab, TRUE);
-      fprintf(debug, "will be adding %d atoms\n",nadd);
-    }
-    
-    /* Copy old atoms, making space for new ones */
-    snew(newpdba,1);
-    init_t_atoms(newpdba,natoms+nadd,FALSE);
-    newpdba->nres    = pdba->nres;   
-    sfree(newpdba->resinfo);
-    newpdba->resinfo = pdba->resinfo;
-  } else {
-    nadd = 0;
-  }
-  if (debug) fprintf(debug,"snew xn for %d old + %d new atoms %d total)\n",
-                    natoms, nadd, natoms+nadd);
-
-  if (nadd == 0) {
-    /* There is nothing to do: return now */
-    if (!bKeep_ab) {
-      free_ab(natoms,nab,ab);
-    }
-
-    return natoms;
-  }
-
-  snew(xn,natoms+nadd);
-  newi=0;
-  for(i=0; (i<natoms); i++) {
-    /* check if this atom wasn't scheduled for deletion */
-    if ( nab[i]==0 || (ab[i][0].nname != NULL) ) {
-      if (newi >= natoms+nadd) {
-       /*gmx_fatal(FARGS,"Not enough space for adding atoms");*/
-       nadd+=10;
-       srenew(xn,natoms+nadd);
-       if (bUpdate_pdba) {
-         srenew(newpdba->atom,natoms+nadd);
-         srenew(newpdba->atomname,natoms+nadd);
-       }
-       debug_gmx();
-      }
-      if (debug) fprintf(debug,"(%3d) %3d %4s %4s%3d %3d",
-                        i+1, newi+1, *pdba->atomname[i],
-                        *pdba->resinfo[pdba->atom[i].resind].name,
-                        pdba->resinfo[pdba->atom[i].resind].nr, nab[i]);
-      if (bUpdate_pdba)
-       copy_atom(pdba,i, newpdba,newi);
-      copy_rvec((*xptr)[i],xn[newi]);
-      /* process the hacks for this atom */
-      nalreadypresent = 0;
-      for(j=0; j<nab[i]; j++) {
-       if ( ab[i][j].oname==NULL ) { /* add */
-         newi++;
-         if (newi >= natoms+nadd) {
-           /* gmx_fatal(FARGS,"Not enough space for adding atoms");*/
-           nadd+=10;
-           srenew(xn,natoms+nadd);
-           if (bUpdate_pdba) {
-             srenew(newpdba->atom,natoms+nadd);
-             srenew(newpdba->atomname,natoms+nadd);
-           }
-           debug_gmx();
-         }
-         if (bUpdate_pdba) {
-           newpdba->atom[newi].resind=pdba->atom[i].resind;
-         }
-         if (debug) fprintf(debug," + %d",newi+1);
-       }
-       if (ab[i][j].nname != NULL &&
-           (ab[i][j].oname == NULL ||
-            strcmp(ab[i][j].oname,*newpdba->atomname[newi]) == 0)) {
-         /* add or replace */
-         if (ab[i][j].oname == NULL && ab[i][j].bAlreadyPresent) {
-           /* This atom is already present, copy it from the input. */
-           nalreadypresent++;
-           if (bUpdate_pdba) {
-             copy_atom(pdba,i+nalreadypresent, newpdba,newi);
-           }
-           copy_rvec((*xptr)[i+nalreadypresent],xn[newi]);
-         } else {
-         if (bUpdate_pdba) {
-           if (gmx_debug_at) {
-             fprintf(debug,"Replacing %d '%s' with (old name '%s') %s\n",
-                     newi,
-                     (newpdba->atomname[newi] && *newpdba->atomname[newi]) ? *newpdba->atomname[newi] : "",
-                     ab[i][j].oname ? ab[i][j].oname : "",
-                     ab[i][j].nname);
-           }
-           snew(newpdba->atomname[newi],1);
-           *newpdba->atomname[newi]=strdup(ab[i][j].nname);
-           if ( ab[i][j].oname!=NULL && ab[i][j].atom ) { /* replace */
-/*           newpdba->atom[newi].m    = ab[i][j].atom->m; */
-/*           newpdba->atom[newi].q    = ab[i][j].atom->q; */
-/*           newpdba->atom[newi].type = ab[i][j].atom->type; */
-           }
-         }
-         if (ab[i][j].bXSet)
-           copy_rvec(ab[i][j].newx, xn[newi]);
-         }
-         if (bUpdate_pdba && debug) 
-           fprintf(debug," %s %g %g",*newpdba->atomname[newi],
-                   newpdba->atom[newi].m,newpdba->atom[newi].q);
-       }
-      }
-      newi++;
-      i += nalreadypresent;
-      if (debug) fprintf(debug,"\n");
-    }
-  }
-  if (bUpdate_pdba)
-    newpdba->nr = newi;
-  
-  if ( bKeep_ab ) {
-    *nabptr=nab;
-    *abptr=ab;
-  } else {
-    /* Clean up */
-    free_ab(natoms,nab,ab);
-  }
-    
-  if ( bUpdate_pdba ) {
-    if ( !bKeep_old_pdba ) {
-      for(i=0; i < natoms; i++) {
-       /* Do not free the atomname string itself, it might be in symtab */
-       /* sfree(*(pdba->atomname[i])); */
-       /* sfree(pdba->atomname[i]); */
-      }
-      sfree(pdba->atomname);
-      sfree(pdba->atom);
-      sfree(pdba->pdbinfo);
-      sfree(pdba);
-    }
-    *pdbaptr=newpdba;
-  } else
-    nadd = newi-natoms;
-  
-  sfree(*xptr);
-  *xptr=xn;
-  
-  return newi;
+    t_atoms        *newpdba = NULL, *pdba = NULL;
+    int             nadd;
+    int             i, newi, j, d, natoms, nalreadypresent;
+    int            *nab = NULL;
+    t_hack        **ab  = NULL;
+    t_hackblock    *hb;
+    rvec           *xn;
+    gmx_bool        bKeep_ab;
+
+    /* set flags for adding hydrogens (according to hdb) */
+    pdba   = *pdbaptr;
+    natoms = pdba->nr;
+
+    if (nabptr && abptr)
+    {
+        /* the first time these will be pointers to NULL, but we will
+           return in them the completed arrays, which we will get back
+           the second time */
+        nab      = *nabptr;
+        ab       = *abptr;
+        bKeep_ab = TRUE;
+        if (debug)
+        {
+            fprintf(debug, "pointer to ab found\n");
+        }
+    }
+    else
+    {
+        bKeep_ab = FALSE;
+    }
+
+    if (nab && ab)
+    {
+        /* WOW, everything was already figured out */
+        bUpdate_pdba = FALSE;
+        if (debug)
+        {
+            fprintf(debug, "pointer to non-null ab found\n");
+        }
+    }
+    else
+    {
+        /* We'll have to do all the hard work */
+        bUpdate_pdba = TRUE;
+        /* first get all the hackblocks for each residue: */
+        hb = get_hackblocks(pdba, nah, ah, nterpairs, ntdb, ctdb, rN, rC);
+        if (debug)
+        {
+            dump_hb(debug, pdba->nres, hb);
+        }
+
+        /* expand the hackblocks to atom level */
+        snew(nab, natoms);
+        snew(ab, natoms);
+        expand_hackblocks(pdba, hb, nab, ab, nterpairs, rN, rC);
+        free_t_hackblock(pdba->nres, &hb);
+    }
+
+    if (debug)
+    {
+        fprintf(debug, "before calc_all_pos\n");
+        dump_ab(debug, natoms, nab, ab, TRUE);
+    }
+
+    /* Now calc the positions */
+    calc_all_pos(pdba, *xptr, nab, ab, bCheckMissing);
+
+    if (debug)
+    {
+        fprintf(debug, "after calc_all_pos\n");
+        dump_ab(debug, natoms, nab, ab, TRUE);
+    }
+
+    if (bUpdate_pdba)
+    {
+        /* we don't have to add atoms that are already present in pdba,
+           so we will remove them from the ab (t_hack) */
+        nadd = check_atoms_present(pdba, nab, ab);
+        if (debug)
+        {
+            fprintf(debug, "removed add hacks that were already in pdba:\n");
+            dump_ab(debug, natoms, nab, ab, TRUE);
+            fprintf(debug, "will be adding %d atoms\n", nadd);
+        }
+
+        /* Copy old atoms, making space for new ones */
+        snew(newpdba, 1);
+        init_t_atoms(newpdba, natoms+nadd, FALSE);
+        newpdba->nres    = pdba->nres;
+        sfree(newpdba->resinfo);
+        newpdba->resinfo = pdba->resinfo;
+    }
+    else
+    {
+        nadd = 0;
+    }
+    if (debug)
+    {
+        fprintf(debug, "snew xn for %d old + %d new atoms %d total)\n",
+                natoms, nadd, natoms+nadd);
+    }
+
+    if (nadd == 0)
+    {
+        /* There is nothing to do: return now */
+        if (!bKeep_ab)
+        {
+            free_ab(natoms, nab, ab);
+        }
+
+        return natoms;
+    }
+
+    snew(xn, natoms+nadd);
+    newi = 0;
+    for (i = 0; (i < natoms); i++)
+    {
+        /* check if this atom wasn't scheduled for deletion */
+        if (nab[i] == 0 || (ab[i][0].nname != NULL) )
+        {
+            if (newi >= natoms+nadd)
+            {
+                /*gmx_fatal(FARGS,"Not enough space for adding atoms");*/
+                nadd += 10;
+                srenew(xn, natoms+nadd);
+                if (bUpdate_pdba)
+                {
+                    srenew(newpdba->atom, natoms+nadd);
+                    srenew(newpdba->atomname, natoms+nadd);
+                }
+                debug_gmx();
+            }
+            if (debug)
+            {
+                fprintf(debug, "(%3d) %3d %4s %4s%3d %3d",
+                        i+1, newi+1, *pdba->atomname[i],
+                        *pdba->resinfo[pdba->atom[i].resind].name,
+                        pdba->resinfo[pdba->atom[i].resind].nr, nab[i]);
+            }
+            if (bUpdate_pdba)
+            {
+                copy_atom(pdba, i, newpdba, newi);
+            }
+            copy_rvec((*xptr)[i], xn[newi]);
+            /* process the hacks for this atom */
+            nalreadypresent = 0;
+            for (j = 0; j < nab[i]; j++)
+            {
+                if (ab[i][j].oname == NULL) /* add */
+                {
+                    newi++;
+                    if (newi >= natoms+nadd)
+                    {
+                        /* gmx_fatal(FARGS,"Not enough space for adding atoms");*/
+                        nadd += 10;
+                        srenew(xn, natoms+nadd);
+                        if (bUpdate_pdba)
+                        {
+                            srenew(newpdba->atom, natoms+nadd);
+                            srenew(newpdba->atomname, natoms+nadd);
+                        }
+                        debug_gmx();
+                    }
+                    if (bUpdate_pdba)
+                    {
+                        newpdba->atom[newi].resind = pdba->atom[i].resind;
+                    }
+                    if (debug)
+                    {
+                        fprintf(debug, " + %d", newi+1);
+                    }
+                }
+                if (ab[i][j].nname != NULL &&
+                    (ab[i][j].oname == NULL ||
+                     strcmp(ab[i][j].oname, *newpdba->atomname[newi]) == 0))
+                {
+                    /* add or replace */
+                    if (ab[i][j].oname == NULL && ab[i][j].bAlreadyPresent)
+                    {
+                        /* This atom is already present, copy it from the input. */
+                        nalreadypresent++;
+                        if (bUpdate_pdba)
+                        {
+                            copy_atom(pdba, i+nalreadypresent, newpdba, newi);
+                        }
+                        copy_rvec((*xptr)[i+nalreadypresent], xn[newi]);
+                    }
+                    else
+                    {
+                        if (bUpdate_pdba)
+                        {
+                            if (gmx_debug_at)
+                            {
+                                fprintf(debug, "Replacing %d '%s' with (old name '%s') %s\n",
+                                        newi,
+                                        (newpdba->atomname[newi] && *newpdba->atomname[newi]) ? *newpdba->atomname[newi] : "",
+                                        ab[i][j].oname ? ab[i][j].oname : "",
+                                        ab[i][j].nname);
+                            }
+                            snew(newpdba->atomname[newi], 1);
+                            *newpdba->atomname[newi] = gmx_strdup(ab[i][j].nname);
+                            if (ab[i][j].oname != NULL && ab[i][j].atom) /* replace */
+                            {                                            /*          newpdba->atom[newi].m    = ab[i][j].atom->m; */
+/*        newpdba->atom[newi].q    = ab[i][j].atom->q; */
+/*        newpdba->atom[newi].type = ab[i][j].atom->type; */
+                            }
+                        }
+                        if (ab[i][j].bXSet)
+                        {
+                            copy_rvec(ab[i][j].newx, xn[newi]);
+                        }
+                    }
+                    if (bUpdate_pdba && debug)
+                    {
+                        fprintf(debug, " %s %g %g", *newpdba->atomname[newi],
+                                newpdba->atom[newi].m, newpdba->atom[newi].q);
+                    }
+                }
+            }
+            newi++;
+            i += nalreadypresent;
+            if (debug)
+            {
+                fprintf(debug, "\n");
+            }
+        }
+    }
+    if (bUpdate_pdba)
+    {
+        newpdba->nr = newi;
+    }
+
+    if (bKeep_ab)
+    {
+        *nabptr = nab;
+        *abptr  = ab;
+    }
+    else
+    {
+        /* Clean up */
+        free_ab(natoms, nab, ab);
+    }
+
+    if (bUpdate_pdba)
+    {
+        if (!bKeep_old_pdba)
+        {
+            for (i = 0; i < natoms; i++)
+            {
+                /* Do not free the atomname string itself, it might be in symtab */
+                /* sfree(*(pdba->atomname[i])); */
+                /* sfree(pdba->atomname[i]); */
+            }
+            sfree(pdba->atomname);
+            sfree(pdba->atom);
+            sfree(pdba->pdbinfo);
+            sfree(pdba);
+        }
+        *pdbaptr = newpdba;
+    }
+    else
+    {
+        nadd = newi-natoms;
+    }
+
+    sfree(*xptr);
+    *xptr = xn;
+
+    return newi;
 }
 
-void deprotonate(t_atoms *atoms,rvec *x)
+void deprotonate(t_atoms *atoms, rvec *x)
 {
-  int  i,j;
-  
-  j=0;
-  for(i=0; i<atoms->nr; i++) {
-    if ( (*atoms->atomname[i])[0] != 'H' ) {
-      atoms->atomname[j]=atoms->atomname[i];
-      atoms->atom[j]=atoms->atom[i];
-      copy_rvec(x[i],x[j]);
-      j++;
-    }
-  }
-  atoms->nr=j;
+    int  i, j;
+
+    j = 0;
+    for (i = 0; i < atoms->nr; i++)
+    {
+        if ( (*atoms->atomname[i])[0] != 'H')
+        {
+            atoms->atomname[j] = atoms->atomname[i];
+            atoms->atom[j]     = atoms->atom[i];
+            copy_rvec(x[i], x[j]);
+            j++;
+        }
+    }
+    atoms->nr = j;
 }
 
-int add_h(t_atoms **pdbaptr, rvec *xptr[], 
-         int nah, t_hackblock ah[],
-         int nterpairs, t_hackblock **ntdb, t_hackblock **ctdb, 
-         int *rN, int *rC, gmx_bool bAllowMissing,
-         int **nabptr, t_hack ***abptr,
-         gmx_bool bUpdate_pdba, gmx_bool bKeep_old_pdba)
+int add_h(t_atoms **pdbaptr, rvec *xptr[],
+          int nah, t_hackblock ah[],
+          int nterpairs, t_hackblock **ntdb, t_hackblock **ctdb,
+          int *rN, int *rC, gmx_bool bAllowMissing,
+          int **nabptr, t_hack ***abptr,
+          gmx_bool bUpdate_pdba, gmx_bool bKeep_old_pdba)
 {
-  int nold,nnew,niter;
-
-  /* Here we loop to be able to add atoms to added atoms.
-   * We should not check for missing atoms here.
-   */
-  niter = 0;
-  nnew = 0;
-  do {
-    nold = nnew;
-    nnew = add_h_low(pdbaptr,xptr,nah,ah,nterpairs,ntdb,ctdb,rN,rC,FALSE,
-                    nabptr,abptr,bUpdate_pdba,bKeep_old_pdba);
-    niter++;
-    if (niter > 100) {
-      gmx_fatal(FARGS,"More than 100 iterations of add_h. Maybe you are trying to replace an added atom (this is not supported)?");
-    }
-  } while (nnew > nold);
-  
-  if (!bAllowMissing) {
-    /* Call add_h_low once more, now only for the missing atoms check */
-    add_h_low(pdbaptr,xptr,nah,ah,nterpairs,ntdb,ctdb,rN,rC,TRUE,
-             nabptr,abptr,bUpdate_pdba,bKeep_old_pdba);
-  }
-
-  return nnew;
+    int nold, nnew, niter;
+
+    /* Here we loop to be able to add atoms to added atoms.
+     * We should not check for missing atoms here.
+     */
+    niter = 0;
+    nnew  = 0;
+    do
+    {
+        nold = nnew;
+        nnew = add_h_low(pdbaptr, xptr, nah, ah, nterpairs, ntdb, ctdb, rN, rC, FALSE,
+                         nabptr, abptr, bUpdate_pdba, bKeep_old_pdba);
+        niter++;
+        if (niter > 100)
+        {
+            gmx_fatal(FARGS, "More than 100 iterations of add_h. Maybe you are trying to replace an added atom (this is not supported)?");
+        }
+    }
+    while (nnew > nold);
+
+    if (!bAllowMissing)
+    {
+        /* Call add_h_low once more, now only for the missing atoms check */
+        add_h_low(pdbaptr, xptr, nah, ah, nterpairs, ntdb, ctdb, rN, rC, TRUE,
+                  nabptr, abptr, bUpdate_pdba, bKeep_old_pdba);
+    }
+
+    return nnew;
 }
 
-int protonate(t_atoms **atomsptr,rvec **xptr,t_protonate *protdata)
+int protonate(t_atoms **atomsptr, rvec **xptr, t_protonate *protdata)
 {
 #define NTERPAIRS 1
-  t_atoms *atoms;
-  gmx_bool    bUpdate_pdba,bKeep_old_pdba;
-  int     nntdb,nctdb,nt,ct;
-  int     nadd;
-  
-  atoms=NULL;
-  if ( !protdata->bInit ) {
-    if (debug) {
-         fprintf(debug,"protonate: Initializing protdata\n");
-    }
-
-    /* set forcefield to use: */
-    strcpy(protdata->FF,"gmx2.ff");
-
-    /* get the databases: */
-    protdata->nah = read_h_db(protdata->FF,&protdata->ah);
-    open_symtab(&protdata->tab); 
-    protdata->atype = read_atype(protdata->FF,&protdata->tab);
-    nntdb = read_ter_db(protdata->FF,'n',&protdata->ntdb,protdata->atype);
-    if (nntdb < 1) {
-      gmx_fatal(FARGS,"no N-terminus database");
-    }
-    nctdb = read_ter_db(protdata->FF,'c',&protdata->ctdb,protdata->atype);
-    if (nctdb < 1) {
-      gmx_fatal(FARGS,"no C-terminus database");
-    }
-    
-    /* set terminus types: -NH3+ (different for Proline) and -COO- */
-    atoms=*atomsptr;
-    snew(protdata->sel_ntdb, NTERPAIRS);
-    snew(protdata->sel_ctdb, NTERPAIRS);
-
-    if (nntdb>=4 && nctdb>=2) {
-        /* Yuk, yuk, hardcoded default termini selections !!! */
-        if (strncmp(*atoms->resinfo[atoms->atom[atoms->nr-1].resind].name,"PRO",3)==0) {
-               nt = 3;
-        } else {
-           nt = 1;
+    t_atoms    *atoms;
+    gmx_bool    bUpdate_pdba, bKeep_old_pdba;
+    int         nntdb, nctdb, nt, ct;
+    int         nadd;
+
+    atoms = NULL;
+    if (!protdata->bInit)
+    {
+        if (debug)
+        {
+            fprintf(debug, "protonate: Initializing protdata\n");
         }
-        ct = 1;
-    } else {
-        nt = 0;
-        ct = 0;
-    }
-    protdata->sel_ntdb[0]=&(protdata->ntdb[nt]);
-    protdata->sel_ctdb[0]=&(protdata->ctdb[ct]);
-  
-    /* set terminal residue numbers: */
-    snew(protdata->rN, NTERPAIRS);
-    snew(protdata->rC, NTERPAIRS);
-    protdata->rN[0]=0;
-    protdata->rC[0]=atoms->atom[atoms->nr-1].resind;
-    
-    /* keep unprotonated topology: */
-    protdata->upatoms = atoms;
-    /* we don't have these yet: */
-    protdata->patoms = NULL;
-    bUpdate_pdba=TRUE;
-    bKeep_old_pdba=TRUE;
-    
-    /* clear hackblocks: */
-    protdata->nab=NULL;
-    protdata->ab=NULL;
-    
-    /* set flag to show we're initialized: */
-    protdata->bInit=TRUE;
-  } else {
-    if (debug) {
-        fprintf(debug,"protonate: using available protdata\n");
-    }
-    /* add_h will need the unprotonated topology again: */
-    atoms = protdata->upatoms;
-    bUpdate_pdba=FALSE;
-    bKeep_old_pdba=FALSE;
-  }
-  
-  /* now protonate */
-  nadd = add_h(&atoms, xptr, protdata->nah, protdata->ah,
-              NTERPAIRS, protdata->sel_ntdb, protdata->sel_ctdb,
-              protdata->rN, protdata->rC, TRUE,
-              &protdata->nab, &protdata->ab, bUpdate_pdba, bKeep_old_pdba);
-  if ( ! protdata->patoms ) {
-    /* store protonated topology */
-    protdata->patoms = atoms;
-  }
-  *atomsptr = protdata->patoms;
-  if (debug) {
-    fprintf(debug,"natoms: %d -> %d (nadd=%d)\n",
-                   protdata->upatoms->nr, protdata->patoms->nr, nadd);
-  }
-  return nadd;
-#undef NTERPAIRS  
-}
 
+        /* set forcefield to use: */
+        strcpy(protdata->FF, "oplsaa.ff");
+
+        /* get the databases: */
+        protdata->nah = read_h_db(protdata->FF, &protdata->ah);
+        open_symtab(&protdata->tab);
+        protdata->atype = read_atype(protdata->FF, &protdata->tab);
+        nntdb           = read_ter_db(protdata->FF, 'n', &protdata->ntdb, protdata->atype);
+        if (nntdb < 1)
+        {
+            gmx_fatal(FARGS, "no N-terminus database");
+        }
+        nctdb = read_ter_db(protdata->FF, 'c', &protdata->ctdb, protdata->atype);
+        if (nctdb < 1)
+        {
+            gmx_fatal(FARGS, "no C-terminus database");
+        }
+
+        /* set terminus types: -NH3+ (different for Proline) and -COO- */
+        atoms = *atomsptr;
+        snew(protdata->sel_ntdb, NTERPAIRS);
+        snew(protdata->sel_ctdb, NTERPAIRS);
+
+        if (nntdb >= 4 && nctdb >= 2)
+        {
+            /* Yuk, yuk, hardcoded default termini selections !!! */
+            if (strncmp(*atoms->resinfo[atoms->atom[atoms->nr-1].resind].name, "PRO", 3) == 0)
+            {
+                nt = 3;
+            }
+            else
+            {
+                nt = 1;
+            }
+            ct = 1;
+        }
+        else
+        {
+            nt = 0;
+            ct = 0;
+        }
+        protdata->sel_ntdb[0] = &(protdata->ntdb[nt]);
+        protdata->sel_ctdb[0] = &(protdata->ctdb[ct]);
+
+        /* set terminal residue numbers: */
+        snew(protdata->rN, NTERPAIRS);
+        snew(protdata->rC, NTERPAIRS);
+        protdata->rN[0] = 0;
+        protdata->rC[0] = atoms->atom[atoms->nr-1].resind;
+
+        /* keep unprotonated topology: */
+        protdata->upatoms = atoms;
+        /* we don't have these yet: */
+        protdata->patoms = NULL;
+        bUpdate_pdba     = TRUE;
+        bKeep_old_pdba   = TRUE;
+
+        /* clear hackblocks: */
+        protdata->nab = NULL;
+        protdata->ab  = NULL;
+
+        /* set flag to show we're initialized: */
+        protdata->bInit = TRUE;
+    }
+    else
+    {
+        if (debug)
+        {
+            fprintf(debug, "protonate: using available protdata\n");
+        }
+        /* add_h will need the unprotonated topology again: */
+        atoms          = protdata->upatoms;
+        bUpdate_pdba   = FALSE;
+        bKeep_old_pdba = FALSE;
+    }
+
+    /* now protonate */
+    nadd = add_h(&atoms, xptr, protdata->nah, protdata->ah,
+                 NTERPAIRS, protdata->sel_ntdb, protdata->sel_ctdb,
+                 protdata->rN, protdata->rC, TRUE,
+                 &protdata->nab, &protdata->ab, bUpdate_pdba, bKeep_old_pdba);
+    if (!protdata->patoms)
+    {
+        /* store protonated topology */
+        protdata->patoms = atoms;
+    }
+    *atomsptr = protdata->patoms;
+    if (debug)
+    {
+        fprintf(debug, "natoms: %d -> %d (nadd=%d)\n",
+                protdata->upatoms->nr, protdata->patoms->nr, nadd);
+    }
+    return nadd;
+#undef NTERPAIRS
+}