cbcc95aebcf9130a8cb870eea029a7ae62aa65fd
[alexxy/gromacs.git] / src / python / sip / selection / selection.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 %PostInitialisationCode
37 import_array();
38 %End
39
40 enum e_index_t {
41     INDEX_UNKNOWN,
42     INDEX_ATOM,
43     INDEX_RES,
44     INDEX_MOL,
45     INDEX_ALL
46 };
47
48 class SelectionPosition /NoDefaultCtors/ {
49 %TypeHeaderCode
50 #include "gromacs/selection/selection.h"
51 using namespace gmx;
52 %End
53
54 public:
55     e_index_t type();
56     SIP_PYOBJECT x();
57     %MethodCode
58         sipRes = array1dToNumpy(3, sipCpp->x());
59     %End
60     SIP_PYOBJECT v();
61     %MethodCode
62         sipRes = array1dToNumpy(3, sipCpp->v());
63     %End
64     SIP_PYOBJECT f();
65     %MethodCode
66         sipRes = array1dToNumpy(3, sipCpp->f());
67     %End
68     double mass();
69     double charge();
70     int atomCount();
71     SIP_PYOBJECT atomIndices();
72     %MethodCode
73         sipRes = iarray1dToNumpy(sipCpp->atomIndices().size(), sipCpp->atomIndices().data());
74     %End
75     bool selected();
76     int refId();
77     int mappedId();
78 };
79
80 enum e_coverfrac_t {
81     CFRAC_NONE,
82     CFRAC_SOLIDANGLE
83 };
84
85 class Selection {
86 %TypeHeaderCode
87 #include "gromacs/selection/selection.h"
88 #include "numpy_conv.h"
89 using namespace gmx;
90 %End
91
92 public:
93     bool isValid();
94     bool __eq__(const Selection&);
95     bool __ne__(const Selection&);
96     const char* name();
97     const char* selectionText();
98     bool isDynamic();
99     e_index_t type();
100     bool hasOnlyAtoms();
101     int atomCount();
102     SIP_PYOBJECT atomIndices();
103     %MethodCode
104         sipRes = iarray1dToNumpy(sipCpp->atomIndices().size(), sipCpp->atomIndices().data());
105     %End
106     int posCount();
107     SelectionPosition position(int);
108     SIP_PYOBJECT coordinates();
109     %MethodCode
110         sipRes = array2dToNumpy(sipCpp->coordinates().size(), 3, sipCpp->coordinates().data());
111     %End
112     bool hasVelocities();
113     SIP_PYOBJECT velocities();
114     %MethodCode
115         sipRes = array2dToNumpy(sipCpp->velocities().size(), 3, sipCpp->velocities().data());
116     %End
117     bool hasForces();
118     SIP_PYOBJECT forces();
119     %MethodCode
120         sipRes = array2dToNumpy(sipCpp->forces().size(), 3, sipCpp->forces().data());
121     %End
122     SIP_PYOBJECT masses();
123     %MethodCode
124         sipRes = array1dToNumpy(sipCpp->masses().size(), sipCpp->masses().data());
125     %End
126     SIP_PYOBJECT charges();
127     %MethodCode
128         sipRes = array1dToNumpy(sipCpp->charges().size(), sipCpp->charges().data());
129     %End
130     SIP_PYOBJECT refIds();
131     %MethodCode
132         sipRes = iarray1dToNumpy(sipCpp->refIds().size(), sipCpp->refIds().data());
133     %End
134     SIP_PYOBJECT mappedIds();
135     %MethodCode
136         sipRes = iarray1dToNumpy(sipCpp->mappedIds().size(), sipCpp->mappedIds().data());
137     %End
138     bool isCoveredFractionDynamic();
139     double coveredFraction();
140     bool initCoveredFraction(e_coverfrac_t);
141     void setEvaluateVelocities(bool);
142     void setEvaluateForces(bool);
143     void setOriginalId(int, int);
144 };