This file is indexed.

/usr/include/gromacs/hackblock.h is in gromacs-dev 4.6.5-1build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
/*
 * 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.
 * Copyright (c) 2012,2013, by the GROMACS development team, led by
 * David van der Spoel, Berk Hess, 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 _hackblock_h
#define _hackblock_h

#include "visibility.h"
#include "typedefs.h"
#include "pdbio.h"
#include "grompp.h"
#include "gpp_atomtype.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Used for reading .rtp/.tdb */
/* ebtsBONDS must be the first, new types can be added to the end */
/* these *MUST* correspond to the arrays in hackblock.c */
enum {
    ebtsBONDS, ebtsANGLES, ebtsPDIHS, ebtsIDIHS, ebtsEXCLS, ebtsCMAP, ebtsNR
};
extern const char *btsNames[ebtsNR];
extern const int   btsNiatoms[ebtsNR];

/* if changing any of these structs, make sure that all of the
   free/clear/copy/merge_t_* functions stay updated */

/* BONDEDS */
typedef struct {
    char  *a[MAXATOMLIST]; /* atom names */
    char  *s;              /* optional define string which gets copied from
                              .rtp/.tdb to .top and will be parsed by cpp
                              during grompp */
} t_rbonded;

typedef struct {
    int        type;     /* The type of bonded interaction */
    int        nb;       /* number of bondeds */
    t_rbonded *b;        /* bondeds */
} t_rbondeds;

/* RESIDUES (rtp) */
typedef struct {
    char         *resname;
    /* The base file name this rtp entry was read from */
    char         *filebase;
    /* atom data */
    int           natom;
    t_atom       *atom;
    char       ***atomname;
    int          *cgnr;
    /* Bonded interaction setup */
    gmx_bool      bKeepAllGeneratedDihedrals;
    int           nrexcl;
    gmx_bool      bGenerateHH14Interactions;
    gmx_bool      bRemoveDihedralIfWithImproper;
    /* list of bonded interactions to add */
    t_rbondeds    rb[ebtsNR];
} t_restp;

/* Block to hack residues */
typedef struct {
    int      nr;      /* Number of atoms to hack    */
    char    *oname;   /* Old name                   */
    char    *nname;   /* New name                   */
    /* the type of hack depends on the setting of oname and nname:
     * if oname==NULL                we're adding, must have tp>0 also!
     * if oname!=NULL && nname==NULL we're deleting
     * if oname!=NULL && nname!=NULL we're replacing
     */
    t_atom     *atom; /* New atom data              */
    int         cgnr; /* chargegroup number. if not read will be NOTSET */
    int         tp;   /* Type of attachment (1..11) */
    int         nctl; /* How many control atoms there are */
    char       *a[4]; /* Control atoms i,j,k,l	  */
    gmx_bool    bAlreadyPresent;
    gmx_bool    bXSet;
    rvec        newx; /* calculated new position    */
    atom_id     newi; /* new atom index number (after additions) */
} t_hack;

typedef struct {
    char      *name;     /* Name of hack block (residue or terminus) */
    char      *filebase; /* The base file name this entry was read from */
    int        nhack;    /* Number of atoms to hack                  */
    int        maxhack;  /* used for efficient srenew-ing            */
    t_hack    *hack;     /* Hack list                                */
    /* list of bonded interactions to add */
    t_rbondeds rb[ebtsNR];
} t_hackblock;

/* all libraries and other data to protonate a structure or trajectory */
typedef struct {
    gmx_bool        bInit; /* true after init; set false by init_t_protonate */
    /* force field name: */
    char            FF[10];
    /* libarary data: */
    int            *nab;
    t_hack        **ab;
    t_hackblock    *ah, *ntdb, *ctdb;
    t_hackblock   **sel_ntdb, **sel_ctdb;
    int             nah;
    t_symtab        tab;
    /* residue indices (not numbers!) of the N and C termini */
    int            *rN, *rC;
    gpp_atomtype_t  atype;
    /* protonated topology: */
    t_atoms        *patoms;
    /* unprotonated topology: */
    t_atoms        *upatoms;

} t_protonate;

typedef struct {
    char *res1, *res2;
    char *atom1, *atom2;
    char *newres1, *newres2;
    int   nbond1, nbond2;
    real  length;
} t_specbond;

t_specbond *get_specbonds(int *nspecbond);
void done_specbonds(int nsb, t_specbond sb[]);

void free_t_restp(int nrtp, t_restp **rtp);
void free_t_hack(int nh, t_hack **h);
void free_t_hackblock(int nhb, t_hackblock **hb);
/* free the whole datastructure */

void clear_t_hackblock(t_hackblock *hb);
void clear_t_hack(t_hack *hack);
/* reset struct */

gmx_bool merge_t_bondeds(t_rbondeds s[], t_rbondeds d[],
                         gmx_bool bMin, gmx_bool bPlus);
/* add s[].b[] to d[].b[]
 * If bMin==TRUE, don't copy bondeds with atoms starting with '-'
 * If bPlus==TRUE, don't copy bondeds with atoms starting with '+'
 * Returns if bonds were removed at the termini.
 */

void copy_t_restp(t_restp *s, t_restp *d);
void copy_t_hack(t_hack *s, t_hack *d);
void copy_t_hackblock(t_hackblock *s, t_hackblock *d);
/* make copy of whole datastructure */

void merge_hacks_lo(int ns, t_hack *s, int *nd, t_hack **d);
/* add s[] to *d[] */

void merge_hacks(t_hackblock *s, t_hackblock *d);
/* add s->hacks[] to d->hacks[] */

void merge_t_hackblock(t_hackblock *s, t_hackblock *d);
/* add s->hacks[] and s->rb[] to d*/

void dump_hb(FILE *out, int nres, t_hackblock hb[]);
/* print out whole datastructure */

GMX_LIBGMXPREPROCESS_EXPORT
void init_t_protonate(t_protonate *protonate);
/* initialize t_protein struct */

#ifdef __cplusplus
}
#endif

#endif  /* _hackblock_h */