752ccb48a75f942384873fb4eed6ae1dd5255391
[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     SIP_PYOBJECT /* char** */      name /NoSetter/ {      /* Pointer to the residue name          */
59     %GetCode
60         sipPy = sipBuildResult(NULL, "A", (sipCpp->name) ? *(sipCpp->name) : NULL);
61     %End
62     };
63     int             nr;         /* Residue number                       */
64     unsigned char   ic;         /* Code for insertion of residues       */
65     int             chainnum;   /* Iincremented at TER or new chain id  */
66     char            chainid;    /* Chain identifier written/read to pdb */
67     SIP_PYOBJECT /* char** */      rtp /NoSetter/ {       /* rtp building block name (optional)   */
68     %GetCode
69         sipPy = sipBuildResult(NULL, "A", (sipCpp->rtp) ? *(sipCpp->rtp) : NULL);
70     %End
71     };
72 };
73
74 struct t_pdbinfo {
75
76 %TypeHeaderCode
77 #include <gromacs/topology/atoms.h>
78 %End
79
80     int      type;              /* PDB record name                      */
81     int      atomnr;            /* PDB atom number                      */
82     char     altloc;            /* Alternate location indicator         */
83     char    *atomnm /NoSetter/; /* True atom name including leading spaces */
84     double   occup;             /* Occupancy                            */
85     double   bfac;              /* B-factor                             */
86     bool bAnisotropic;          /* (an)isotropic switch                 */
87     SIP_PYOBJECT /* int * */ uij /NoSetter/ {
88     %GetCode
89         sipPy = sipConvertToArray(sipCpp->uij, "i", 6, SIP_READ_ONLY);
90     %End
91     };
92 };
93
94 struct t_grps {
95
96 %TypeHeaderCode
97 #include <gromacs/topology/atoms.h>
98 %End
99
100     int   nr;                   /* Number of different groups           */
101     SIP_PYOBJECT /* int* */ nm_ind /NoSetter/ {
102     %GetCode
103         sipPy = sipConvertToArray(sipCpp->nm_ind, "i", sipCpp->nr, SIP_READ_ONLY);
104     %End
105     };
106 };
107
108
109 struct t_atoms {
110
111 %TypeHeaderCode
112 #include <gromacs/topology/atoms.h>
113 // Sip creates 'copy_[typename]' functions. In this case it coincides with function from atoms.h, so we need to rename it.
114 #define copy_t_atoms copy_t_atoms_sip
115 %End
116
117     int            nr;          /* Nr of atoms                          */
118     t_atom        *atom /NoSetter/ {
119     %GetCode
120         sipPy = sipConvertToTypedArray(sipCpp->atom, sipType_t_atom, NULL, sizeof(t_atom), sipCpp->nr, SIP_READ_ONLY);
121     %End
122     };
123     PStringListWrapper atomname /NoSetter/ {
124     %GetCode
125         PStringListWrapper *wrapper = new PStringListWrapper(sipCpp->atomname, sipCpp->nr);
126         sipPy = sipConvertFromType(wrapper, sipType_PStringListWrapper, Py_None);
127     %End
128     };
129     PStringListWrapper atomtype /NoSetter/ {
130     %GetCode
131         PStringListWrapper *wrapper = new PStringListWrapper(sipCpp->atomtype, sipCpp->nr);
132         sipPy = sipConvertFromType(wrapper, sipType_PStringListWrapper, Py_None);
133     %End
134     };
135     PStringListWrapper atomtypeB /NoSetter/ {
136     %GetCode
137         PStringListWrapper *wrapper = new PStringListWrapper(sipCpp->atomname, sipCpp->nr);
138         sipPy = sipConvertFromType(wrapper, sipType_PStringListWrapper, Py_None);
139     %End
140     };
141
142     int              nres;
143     t_resinfo       *resinfo /NoSetter/ {
144     %GetCode
145         sipPy = sipConvertToTypedArray(sipCpp->resinfo, sipType_t_resinfo, NULL, sizeof(t_resinfo), sipCpp->nres, SIP_READ_ONLY);
146     %End
147     };
148     // FIXME: how many pdbinfo's are there?
149     t_pdbinfo       *pdbinfo /NoSetter/ {
150     %GetCode
151         sipPy = sipConvertToTypedArray(sipCpp->pdbinfo, sipType_t_pdbinfo, NULL, sizeof(t_pdbinfo), sipCpp->nres, SIP_READ_ONLY);
152     %End
153     };
154 };