From: Teemu Murtola Date: Thu, 5 Jun 2014 04:08:22 +0000 (+0300) Subject: Move residuetype handling to its own file. X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=f5a0474fe484723243ca14ba27633404795ee42a;p=alexxy%2Fgromacs.git Move residuetype handling to its own file. Change-Id: I430dcb08db65479d4865e032a24effbacc87d28e --- diff --git a/src/gromacs/fileio/pdbio.c b/src/gromacs/fileio/pdbio.c index ecbfa7c75b..39b8355b6d 100644 --- a/src/gromacs/fileio/pdbio.c +++ b/src/gromacs/fileio/pdbio.c @@ -54,7 +54,7 @@ #include "gromacs/math/vec.h" #include "gromacs/pbcutil/pbc.h" #include "gromacs/topology/atomprop.h" -#include "gromacs/topology/index.h" +#include "gromacs/topology/residuetypes.h" #include "gromacs/topology/symtab.h" #include "gromacs/topology/topology.h" #include "gromacs/utility/cstringutil.h" diff --git a/src/gromacs/gmxana/dlist.c b/src/gromacs/gmxana/dlist.c index f44fe45ec8..90ac8732c9 100644 --- a/src/gromacs/gmxana/dlist.c +++ b/src/gromacs/gmxana/dlist.c @@ -41,10 +41,11 @@ #include #include -#include "gromacs/utility/smalloc.h" #include "gstat.h" + +#include "gromacs/topology/residuetypes.h" #include "gromacs/utility/fatalerror.h" -#include "gromacs/topology/index.h" +#include "gromacs/utility/smalloc.h" t_dlist *mk_dlist(FILE *log, t_atoms *atoms, int *nlist, diff --git a/src/gromacs/gmxana/gmx_chi.c b/src/gromacs/gmxana/gmx_chi.c index 89882e96e9..b0f46c0a09 100644 --- a/src/gromacs/gmxana/gmx_chi.c +++ b/src/gromacs/gmxana/gmx_chi.c @@ -50,7 +50,7 @@ #include "macros.h" #include "gromacs/math/utilities.h" #include "gromacs/math/units.h" -#include "gromacs/topology/index.h" +#include "gromacs/topology/residuetypes.h" #include "gromacs/utility/smalloc.h" #include "gromacs/commandline/pargs.h" #include "gromacs/fileio/tpxio.h" diff --git a/src/gromacs/gmxana/gstat.h b/src/gromacs/gmxana/gstat.h index 8c9895a855..7bfb9a257d 100644 --- a/src/gromacs/gmxana/gstat.h +++ b/src/gromacs/gmxana/gstat.h @@ -41,6 +41,7 @@ #include "../legacyheaders/oenv.h" #include "../commandline/pargs.h" #include "../topology/index.h" +#include "../topology/residuetypes.h" #ifdef __cplusplus extern "C" { diff --git a/src/gromacs/gmxpreprocess/gen_vsite.c b/src/gromacs/gmxpreprocess/gen_vsite.c index 3dfbaa48bd..c3cdddb597 100644 --- a/src/gromacs/gmxpreprocess/gen_vsite.c +++ b/src/gromacs/gmxpreprocess/gen_vsite.c @@ -49,12 +49,12 @@ #include "gromacs/math/vec.h" #include "toputil.h" #include "gromacs/math/units.h" -#include "gromacs/topology/index.h" #include "names.h" #include "gromacs/utility/futil.h" #include "gpp_atomtype.h" #include "fflibutil.h" +#include "gromacs/topology/residuetypes.h" #include "gromacs/topology/symtab.h" #include "gromacs/utility/cstringutil.h" #include "gromacs/utility/fatalerror.h" diff --git a/src/gromacs/gmxpreprocess/pdb2gmx.c b/src/gromacs/gmxpreprocess/pdb2gmx.c index 883d5b79c3..cf0bc05f2f 100644 --- a/src/gromacs/gmxpreprocess/pdb2gmx.c +++ b/src/gromacs/gmxpreprocess/pdb2gmx.c @@ -71,6 +71,7 @@ #include "gromacs/topology/atomprop.h" #include "gromacs/topology/block.h" #include "gromacs/topology/index.h" +#include "gromacs/topology/residuetypes.h" #include "gromacs/topology/symtab.h" #include "gromacs/utility/smalloc.h" #include "gromacs/utility/fatalerror.h" diff --git a/src/gromacs/gmxpreprocess/pdb2top.cpp b/src/gromacs/gmxpreprocess/pdb2top.cpp index a71f273c87..676ba94c42 100644 --- a/src/gromacs/gmxpreprocess/pdb2top.cpp +++ b/src/gromacs/gmxpreprocess/pdb2top.cpp @@ -57,7 +57,6 @@ #include "gromacs/fileio/pdbio.h" #include "gen_ad.h" #include "gromacs/fileio/filenm.h" -#include "gromacs/topology/index.h" #include "gen_vsite.h" #include "add_par.h" #include "toputil.h" @@ -65,6 +64,7 @@ #include "copyrite.h" #include "gromacs/fileio/strdb.h" +#include "gromacs/topology/residuetypes.h" #include "gromacs/topology/symtab.h" #include "gromacs/utility/exceptions.h" #include "gromacs/utility/fatalerror.h" diff --git a/src/gromacs/gmxpreprocess/xlate.c b/src/gromacs/gmxpreprocess/xlate.c index faf148c120..b9400345dd 100644 --- a/src/gromacs/gmxpreprocess/xlate.c +++ b/src/gromacs/gmxpreprocess/xlate.c @@ -42,12 +42,12 @@ #include #include "typedefs.h" -#include "gromacs/topology/index.h" #include "fflibutil.h" #include "hackblock.h" #include "xlate.h" #include "gromacs/fileio/strdb.h" +#include "gromacs/topology/residuetypes.h" #include "gromacs/topology/symtab.h" #include "gromacs/utility/cstringutil.h" #include "gromacs/utility/fatalerror.h" diff --git a/src/gromacs/gmxpreprocess/xlate.h b/src/gromacs/gmxpreprocess/xlate.h index 83d667b0b3..9ed45b9b75 100644 --- a/src/gromacs/gmxpreprocess/xlate.h +++ b/src/gromacs/gmxpreprocess/xlate.h @@ -38,7 +38,7 @@ #ifndef GMX_GMXPREPROCESS_XLATE_H #define GMX_GMXPREPROCESS_XLATE_H -#include "gromacs/topology/index.h" +#include "gromacs/topology/residuetypes.h" #ifdef __cplusplus extern "C" { diff --git a/src/gromacs/topology/atomprop.cpp b/src/gromacs/topology/atomprop.cpp index 09cb30785b..5bba287459 100644 --- a/src/gromacs/topology/atomprop.cpp +++ b/src/gromacs/topology/atomprop.cpp @@ -46,7 +46,7 @@ #include "gromacs/fileio/strdb.h" #include "gromacs/legacyheaders/copyrite.h" #include "gromacs/math/utilities.h" -#include "gromacs/topology/index.h" +#include "gromacs/topology/residuetypes.h" #include "gromacs/utility/cstringutil.h" #include "gromacs/utility/fatalerror.h" #include "gromacs/utility/futil.h" diff --git a/src/gromacs/topology/index.cpp b/src/gromacs/topology/index.cpp index 31b2e663cc..d0afa4658f 100644 --- a/src/gromacs/topology/index.cpp +++ b/src/gromacs/topology/index.cpp @@ -55,22 +55,11 @@ #include "gromacs/topology/atoms.h" #include "gromacs/topology/block.h" #include "gromacs/topology/invblock.h" +#include "gromacs/topology/residuetypes.h" #include "gromacs/utility/cstringutil.h" #include "gromacs/utility/fatalerror.h" -#include "gromacs/utility/futil.h" #include "gromacs/utility/smalloc.h" -const char gmx_residuetype_undefined[] = "Other"; - -struct gmx_residuetype -{ - int n; - char ** resname; - char ** restype; - -}; - - static gmx_bool gmx_ask_yesno(gmx_bool bASK) { char c; @@ -586,239 +575,6 @@ static void analyse_prot(const char ** restype, t_atoms *atoms, } - - -/* Return 0 if the name was found, otherwise -1. - * p_restype is set to a pointer to the type name, or 'Other' if we did not find it. - */ -int -gmx_residuetype_get_type(gmx_residuetype_t rt, const char * resname, const char ** p_restype) -{ - int i, rc; - - rc = -1; - for (i = 0; i < rt->n && rc; i++) - { - rc = gmx_strcasecmp(rt->resname[i], resname); - } - - *p_restype = (rc == 0) ? rt->restype[i-1] : gmx_residuetype_undefined; - - return rc; -} - -int -gmx_residuetype_add(gmx_residuetype_t rt, const char *newresname, const char *newrestype) -{ - int found; - const char * p_oldtype; - - found = !gmx_residuetype_get_type(rt, newresname, &p_oldtype); - - if (found && gmx_strcasecmp(p_oldtype, newrestype)) - { - fprintf(stderr, "Warning: Residue '%s' already present with type '%s' in database, ignoring new type '%s'.", - newresname, p_oldtype, newrestype); - } - - if (found == 0) - { - srenew(rt->resname, rt->n+1); - srenew(rt->restype, rt->n+1); - rt->resname[rt->n] = strdup(newresname); - rt->restype[rt->n] = strdup(newrestype); - rt->n++; - } - - return 0; -} - - -int -gmx_residuetype_init(gmx_residuetype_t *prt) -{ - FILE * db; - char line[STRLEN]; - char resname[STRLEN], restype[STRLEN], dum[STRLEN]; - struct gmx_residuetype *rt; - - snew(rt, 1); - *prt = rt; - - rt->n = 0; - rt->resname = NULL; - rt->restype = NULL; - - db = libopen("residuetypes.dat"); - - while (get_a_line(db, line, STRLEN)) - { - strip_comment(line); - trim(line); - if (line[0] != '\0') - { - if (sscanf(line, "%s %s %s", resname, restype, dum) != 2) - { - gmx_fatal(FARGS, "Incorrect number of columns (2 expected) for line in residuetypes.dat"); - } - gmx_residuetype_add(rt, resname, restype); - } - } - - fclose(db); - - return 0; -} - - - -int -gmx_residuetype_destroy(gmx_residuetype_t rt) -{ - int i; - - for (i = 0; i < rt->n; i++) - { - sfree(rt->resname[i]); - sfree(rt->restype[i]); - } - sfree(rt->resname); - sfree(rt->restype); - sfree(rt); - - return 0; -} - -int -gmx_residuetype_get_alltypes(gmx_residuetype_t rt, - const char *** p_typenames, - int * ntypes) -{ - int i, n; - const char ** my_typename; - - n = 0; - my_typename = NULL; - for (i = 0; i < rt->n; i++) - { - const char *const p = rt->restype[i]; - bool bFound = false; - for (int j = 0; j < n && !bFound; j++) - { - assert(my_typename != NULL); - bFound = !gmx_strcasecmp(p, my_typename[j]); - } - if (!bFound) - { - srenew(my_typename, n+1); - my_typename[n] = p; - n++; - } - } - *ntypes = n; - *p_typenames = my_typename; - - return 0; -} - - - -gmx_bool -gmx_residuetype_is_protein(gmx_residuetype_t rt, const char *resnm) -{ - gmx_bool rc; - const char *p_type; - - if (gmx_residuetype_get_type(rt, resnm, &p_type) == 0 && - gmx_strcasecmp(p_type, "Protein") == 0) - { - rc = TRUE; - } - else - { - rc = FALSE; - } - return rc; -} - -gmx_bool -gmx_residuetype_is_dna(gmx_residuetype_t rt, const char *resnm) -{ - gmx_bool rc; - const char *p_type; - - if (gmx_residuetype_get_type(rt, resnm, &p_type) == 0 && - gmx_strcasecmp(p_type, "DNA") == 0) - { - rc = TRUE; - } - else - { - rc = FALSE; - } - return rc; -} - -gmx_bool -gmx_residuetype_is_rna(gmx_residuetype_t rt, const char *resnm) -{ - gmx_bool rc; - const char *p_type; - - if (gmx_residuetype_get_type(rt, resnm, &p_type) == 0 && - gmx_strcasecmp(p_type, "RNA") == 0) - { - rc = TRUE; - } - else - { - rc = FALSE; - } - return rc; -} - -/* Return the size of the arrays */ -int -gmx_residuetype_get_size(gmx_residuetype_t rt) -{ - return rt->n; -} - -/* Search for a residuetype with name resnm within the - * gmx_residuetype database. Return the index if found, - * otherwise -1. - */ -int -gmx_residuetype_get_index(gmx_residuetype_t rt, const char *resnm) -{ - int i, rc; - - rc = -1; - for (i = 0; i < rt->n && rc; i++) - { - rc = gmx_strcasecmp(rt->resname[i], resnm); - } - - return (0 == rc) ? i-1 : -1; -} - -/* Return the name of the residuetype with the given index, or - * NULL if not found. */ -const char * -gmx_residuetype_get_name(gmx_residuetype_t rt, int index) -{ - if (index >= 0 && index < rt->n) - { - return rt->resname[index]; - } - else - { - return NULL; - } -} - - - void analyse(t_atoms *atoms, t_blocka *gb, char ***gn, gmx_bool bASK, gmx_bool bVerb) { gmx_residuetype_t rt = NULL; diff --git a/src/gromacs/topology/index.h b/src/gromacs/topology/index.h index 91ec2ce8e1..4bba1f8021 100644 --- a/src/gromacs/topology/index.h +++ b/src/gromacs/topology/index.h @@ -95,47 +95,6 @@ typedef struct { t_cluster_ndx *cluster_index(FILE *fplog, const char *ndx); -typedef struct gmx_residuetype *gmx_residuetype_t; - -int -gmx_residuetype_init(gmx_residuetype_t *rt); - -int -gmx_residuetype_destroy(gmx_residuetype_t rt); - -int -gmx_residuetype_get_type(gmx_residuetype_t rt, const char * resname, const char ** p_restype); - -int -gmx_residuetype_add(gmx_residuetype_t rt, const char *newresname, const char *newrestype); - -int -gmx_residuetype_get_alltypes(gmx_residuetype_t rt, - const char *** p_typenames, - int * ntypes); - -gmx_bool -gmx_residuetype_is_protein(gmx_residuetype_t rt, const char *resnm); - -gmx_bool -gmx_residuetype_is_dna(gmx_residuetype_t rt, const char *resnm); - -gmx_bool -gmx_residuetype_is_rna(gmx_residuetype_t rt, const char *resnm); - -int -gmx_residuetype_get_size(gmx_residuetype_t rt); - -int -gmx_residuetype_get_index(gmx_residuetype_t rt, const char *resnm); - -const char * -gmx_residuetype_get_name(gmx_residuetype_t rt, int index); - - - - - void write_index(const char *outf, struct t_blocka *b, char **gnames, gmx_bool bDuplicate, int natoms); /* Writes index blocks to outf (writes an indexfile) */ diff --git a/src/gromacs/topology/residuetypes.cpp b/src/gromacs/topology/residuetypes.cpp new file mode 100644 index 0000000000..461405b82f --- /dev/null +++ b/src/gromacs/topology/residuetypes.cpp @@ -0,0 +1,277 @@ +/* + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 2010,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. + * + * 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 research papers on the package. Check out http://www.gromacs.org. + */ +#include "gromacs/topology/residuetypes.h" + +#include +#include + +#include "gromacs/fileio/strdb.h" +#include "gromacs/utility/cstringutil.h" +#include "gromacs/utility/fatalerror.h" +#include "gromacs/utility/futil.h" +#include "gromacs/utility/smalloc.h" + +const char gmx_residuetype_undefined[] = "Other"; + +struct gmx_residuetype +{ + int n; + char ** resname; + char ** restype; +}; + +int +gmx_residuetype_init(gmx_residuetype_t *prt) +{ + FILE * db; + char line[STRLEN]; + char resname[STRLEN], restype[STRLEN], dum[STRLEN]; + struct gmx_residuetype *rt; + + snew(rt, 1); + *prt = rt; + + rt->n = 0; + rt->resname = NULL; + rt->restype = NULL; + + db = libopen("residuetypes.dat"); + + while (get_a_line(db, line, STRLEN)) + { + strip_comment(line); + trim(line); + if (line[0] != '\0') + { + if (sscanf(line, "%1000s %1000s %1000s", resname, restype, dum) != 2) + { + gmx_fatal(FARGS, "Incorrect number of columns (2 expected) for line in residuetypes.dat"); + } + gmx_residuetype_add(rt, resname, restype); + } + } + + fclose(db); + + return 0; +} + +int +gmx_residuetype_destroy(gmx_residuetype_t rt) +{ + int i; + + for (i = 0; i < rt->n; i++) + { + sfree(rt->resname[i]); + sfree(rt->restype[i]); + } + sfree(rt->resname); + sfree(rt->restype); + sfree(rt); + + return 0; +} + +/* Return 0 if the name was found, otherwise -1. + * p_restype is set to a pointer to the type name, or 'Other' if we did not find it. + */ +int +gmx_residuetype_get_type(gmx_residuetype_t rt, const char * resname, const char ** p_restype) +{ + int i, rc; + + rc = -1; + for (i = 0; i < rt->n && rc; i++) + { + rc = gmx_strcasecmp(rt->resname[i], resname); + } + + *p_restype = (rc == 0) ? rt->restype[i-1] : gmx_residuetype_undefined; + + return rc; +} + +int +gmx_residuetype_add(gmx_residuetype_t rt, const char *newresname, const char *newrestype) +{ + int found; + const char * p_oldtype; + + found = !gmx_residuetype_get_type(rt, newresname, &p_oldtype); + + if (found && gmx_strcasecmp(p_oldtype, newrestype)) + { + fprintf(stderr, "Warning: Residue '%s' already present with type '%s' in database, ignoring new type '%s'.", + newresname, p_oldtype, newrestype); + } + + if (found == 0) + { + srenew(rt->resname, rt->n+1); + srenew(rt->restype, rt->n+1); + rt->resname[rt->n] = gmx_strdup(newresname); + rt->restype[rt->n] = gmx_strdup(newrestype); + rt->n++; + } + + return 0; +} + +int +gmx_residuetype_get_alltypes(gmx_residuetype_t rt, + const char *** p_typenames, + int * ntypes) +{ + int i, n; + const char ** my_typename; + + n = 0; + my_typename = NULL; + for (i = 0; i < rt->n; i++) + { + const char *const p = rt->restype[i]; + bool bFound = false; + for (int j = 0; j < n && !bFound; j++) + { + assert(my_typename != NULL); + bFound = !gmx_strcasecmp(p, my_typename[j]); + } + if (!bFound) + { + srenew(my_typename, n+1); + my_typename[n] = p; + n++; + } + } + *ntypes = n; + *p_typenames = my_typename; + + return 0; +} + +gmx_bool +gmx_residuetype_is_protein(gmx_residuetype_t rt, const char *resnm) +{ + gmx_bool rc; + const char *p_type; + + if (gmx_residuetype_get_type(rt, resnm, &p_type) == 0 && + gmx_strcasecmp(p_type, "Protein") == 0) + { + rc = TRUE; + } + else + { + rc = FALSE; + } + return rc; +} + +gmx_bool +gmx_residuetype_is_dna(gmx_residuetype_t rt, const char *resnm) +{ + gmx_bool rc; + const char *p_type; + + if (gmx_residuetype_get_type(rt, resnm, &p_type) == 0 && + gmx_strcasecmp(p_type, "DNA") == 0) + { + rc = TRUE; + } + else + { + rc = FALSE; + } + return rc; +} + +gmx_bool +gmx_residuetype_is_rna(gmx_residuetype_t rt, const char *resnm) +{ + gmx_bool rc; + const char *p_type; + + if (gmx_residuetype_get_type(rt, resnm, &p_type) == 0 && + gmx_strcasecmp(p_type, "RNA") == 0) + { + rc = TRUE; + } + else + { + rc = FALSE; + } + return rc; +} + +/* Return the size of the arrays */ +int +gmx_residuetype_get_size(gmx_residuetype_t rt) +{ + return rt->n; +} + +/* Search for a residuetype with name resnm within the + * gmx_residuetype database. Return the index if found, + * otherwise -1. + */ +int +gmx_residuetype_get_index(gmx_residuetype_t rt, const char *resnm) +{ + int i, rc; + + rc = -1; + for (i = 0; i < rt->n && rc; i++) + { + rc = gmx_strcasecmp(rt->resname[i], resnm); + } + + return (0 == rc) ? i-1 : -1; +} + +/* Return the name of the residuetype with the given index, or + * NULL if not found. */ +const char * +gmx_residuetype_get_name(gmx_residuetype_t rt, int index) +{ + if (index >= 0 && index < rt->n) + { + return rt->resname[index]; + } + else + { + return NULL; + } +} diff --git a/src/gromacs/topology/residuetypes.h b/src/gromacs/topology/residuetypes.h new file mode 100644 index 0000000000..82c24e8b0b --- /dev/null +++ b/src/gromacs/topology/residuetypes.h @@ -0,0 +1,86 @@ +/* + * This file is part of the GROMACS molecular simulation package. + * + * Copyright (c) 2010,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. + * + * 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 research papers on the package. Check out http://www.gromacs.org. + */ +#ifndef GMX_TOPOLOGY_RESIDUETYPES_H +#define GMX_TOPOLOGY_RESIDUETYPES_H + +#include "gromacs/utility/basedefinitions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef struct gmx_residuetype *gmx_residuetype_t; + +int +gmx_residuetype_init(gmx_residuetype_t *rt); + +int +gmx_residuetype_destroy(gmx_residuetype_t rt); + +int +gmx_residuetype_get_type(gmx_residuetype_t rt, const char *resname, const char **p_restype); + +int +gmx_residuetype_add(gmx_residuetype_t rt, const char *newresname, const char *newrestype); + +int +gmx_residuetype_get_alltypes(gmx_residuetype_t rt, + const char ***p_typenames, + int *ntypes); + +gmx_bool +gmx_residuetype_is_protein(gmx_residuetype_t rt, const char *resnm); + +gmx_bool +gmx_residuetype_is_dna(gmx_residuetype_t rt, const char *resnm); + +gmx_bool +gmx_residuetype_is_rna(gmx_residuetype_t rt, const char *resnm); + +int +gmx_residuetype_get_size(gmx_residuetype_t rt); + +int +gmx_residuetype_get_index(gmx_residuetype_t rt, const char *resnm); + +const char * +gmx_residuetype_get_name(gmx_residuetype_t rt, int index); + +#ifdef __cplusplus +} +#endif + +#endif