Merge branch 'master' into pygromacs
[alexxy/gromacs.git] / src / python / sip / topology / atoms.sip
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 2014, by the GROMACS development team, led by
5  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
6  * and including many others, as listed in the AUTHORS file in the
7  * top-level source directory and at http://www.gromacs.org.
8  *
9  * GROMACS is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * as published by the Free Software Foundation; either version 2.1
12  * of the License, or (at your option) any later version.
13  *
14  * GROMACS is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with GROMACS; if not, see
21  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
23  *
24  * If you want to redistribute modifications to GROMACS, please
25  * consider that scientific software is very special. Version
26  * control is crucial - bugs must be traceable. We will be happy to
27  * consider code for inclusion in the official distribution, but
28  * derived work must not be called official GROMACS. Details are found
29  * in the README & COPYING files - if they are missing, get the
30  * official version at http://www.gromacs.org.
31  *
32  * To help us fund GROMACS development, we humbly ask that you cite
33  * the research papers on the package. Check out http://www.gromacs.org.
34  */
35
36 struct t_atom {
37
38 %TypeHeaderCode
39 #include <gromacs/topology/atoms.h>
40 %End
41
42     double         m; double q;        /* Mass and charge                      */
43     double         mB; double qB;      /* Mass and charge for Free Energy calc */
44     unsigned short type;        /* Atom type                            */
45     unsigned short typeB;       /* Atom type for Free Energy calc       */
46     int            ptype;       /* Particle type                        */
47     int            resind;      /* Index into resinfo (in t_atoms)      */
48     int            atomnumber;  /* Atomic Number or NOTSET              */
49     char           *elem /NoSetter/;       /* Element name                         */
50 };
51
52 struct t_resinfo {
53
54 %TypeHeaderCode
55 #include <gromacs/topology/atoms.h>
56 %End
57
58     char          **name {      /* Pointer to the residue name          */
59     %GetCode
60         sipPy = sipBuildResult(NULL, "s", *(sipCpp->name));
61     %End
62     %SetCode
63
64     %End
65     };
66     int             nr;         /* Residue number                       */
67     unsigned char   ic;         /* Code for insertion of residues       */
68     int             chainnum;   /* Iincremented at TER or new chain id  */
69     char            chainid;    /* Chain identifier written/read to pdb */
70     char          **rtp {       /* rtp building block name (optional)   */
71     %GetCode
72         sipPy = sipBuildResult(NULL, "s", *(sipCpp->rtp));
73     %End
74     %SetCode
75
76     %End
77     };
78 };
79
80 struct t_pdbinfo {
81
82 %TypeHeaderCode
83 #include <gromacs/topology/atoms.h>
84 %End
85
86     int      type;              /* PDB record name                      */
87     int      atomnr;            /* PDB atom number                      */
88     char     altloc;            /* Alternate location indicator         */
89     char    *atomnm /NoSetter/; /* True atom name including leading spaces */
90     double   occup;             /* Occupancy                            */
91     double   bfac;              /* B-factor                             */
92     bool bAnisotropic;          /* (an)isotropic switch                 */
93     int     *uij {
94     %GetCode
95         sipPy = sipConvertToArray(sipCpp->uij, "i", 6, SIP_READ_ONLY);
96     %End
97     %SetCode
98
99     %End
100     };
101 };
102
103 struct t_grps {
104
105 %TypeHeaderCode
106 #include <gromacs/topology/atoms.h>
107 %End
108
109     int   nr;                   /* Number of different groups           */
110     int  *nm_ind {
111     %GetCode
112         sipPy = sipConvertToArray(sipCpp->nm_ind, "i", sipCpp->nr, SIP_READ_ONLY);
113     %End
114     %SetCode
115
116     %End
117     };
118 };
119
120 struct t_atoms {
121
122 %TypeHeaderCode
123 #include <gromacs/topology/atoms.h>
124 // Sip creates 'copy_[typename]' functions. In this case it coincides with function from atoms.h, so we need to rename it.
125 #define copy_t_atoms copy_t_atoms_sip
126 %End
127
128     int            nr;          /* Nr of atoms                          */
129     t_atom        *atom {
130     %GetCode
131         sipPy = sipConvertToTypedArray(sipCpp->atom, sipType_t_atom, NULL, sizeof(t_atom), sipCpp->nr, SIP_READ_ONLY);
132     %End
133     %SetCode
134
135     %End
136     };
137                                 /*[> The following entries will not       <]
138                                 [> always be used (nres==0)             <]
139     char          ***atomname;  [> Array of pointers to atom name       <]
140                                 [> use: (*(atomname[i]))                <]
141     char          ***atomtype;  [> Array of pointers to atom types      <]
142                                 [> use: (*(atomtype[i]))                <]
143     char          ***atomtypeB; [> Array of pointers to B atom types    <]
144                                 [> use: (*(atomtypeB[i]))               <]*/
145     int              nres;
146     t_resinfo       *resinfo {
147     %GetCode
148         sipPy = sipConvertToTypedArray(sipCpp->resinfo, sipType_t_resinfo, NULL, sizeof(t_resinfo), sipCpp->nres, SIP_READ_ONLY);
149     %End
150     %SetCode
151
152     %End
153     };
154     // FIXME: how many pdbinfo's are there?
155     t_pdbinfo       *pdbinfo {
156     %GetCode
157         sipPy = sipConvertToTypedArray(sipCpp->pdbinfo, sipType_t_pdbinfo, NULL, sizeof(t_pdbinfo), sipCpp->nres, SIP_READ_ONLY);
158     %End
159     %SetCode
160
161     %End
162     };
163 };