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 package ffx.openmm;
39
40 import com.sun.jna.ptr.PointerByReference;
41 import edu.uiowa.jopenmm.OpenMM_Vec3;
42
43 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_destroy;
44 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getDataTypes;
45 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getEnergyParameterDerivatives;
46 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getForces;
47 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getKineticEnergy;
48 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getParameters;
49 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getPeriodicBoxVectors;
50 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getPeriodicBoxVolume;
51 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getPositions;
52 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getPotentialEnergy;
53 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getStepCount;
54 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getTime;
55 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_State_getVelocities;
56
57
58
59
60
61
62
63
64
65
66
67 public class State {
68
69
70
71
72 PointerByReference pointer;
73
74
75
76
77
78
79 public State(PointerByReference pointer) {
80 this.pointer = pointer;
81 }
82
83
84
85
86 public void destroy() {
87 if (pointer != null) {
88 OpenMM_State_destroy(pointer);
89 pointer = null;
90 }
91 }
92
93
94
95
96
97
98 public int getDataTypes() {
99 return OpenMM_State_getDataTypes(pointer);
100 }
101
102
103
104
105
106
107 public PointerByReference getEnergyParameterDerivatives() {
108 return OpenMM_State_getEnergyParameterDerivatives(pointer);
109 }
110
111
112
113
114
115
116 public double[] getForces() {
117 Vec3Array forces = new Vec3Array(OpenMM_State_getForces(pointer));
118 return forces.getArray();
119 }
120
121
122
123
124
125
126 public double getKineticEnergy() {
127 return OpenMM_State_getKineticEnergy(pointer);
128 }
129
130
131
132
133
134
135 public PointerByReference getParameters() {
136 return OpenMM_State_getParameters(pointer);
137 }
138
139
140
141
142
143
144 public double[][] getPeriodicBoxVectors() {
145 OpenMM_Vec3 a = new OpenMM_Vec3();
146 OpenMM_Vec3 b = new OpenMM_Vec3();
147 OpenMM_Vec3 c = new OpenMM_Vec3();
148 OpenMM_State_getPeriodicBoxVectors(pointer, a, b, c);
149 double[][] latticeVectors = new double[3][3];
150 latticeVectors[0][0] = a.x;
151 latticeVectors[0][1] = a.y;
152 latticeVectors[0][2] = a.z;
153 latticeVectors[1][0] = b.x;
154 latticeVectors[1][1] = b.y;
155 latticeVectors[1][2] = b.z;
156 latticeVectors[2][0] = c.x;
157 latticeVectors[2][1] = c.y;
158 latticeVectors[2][2] = c.z;
159 return latticeVectors;
160 }
161
162
163
164
165
166
167 public double getPeriodicBoxVolume() {
168 return OpenMM_State_getPeriodicBoxVolume(pointer);
169 }
170
171
172
173
174
175
176 public PointerByReference getPointer() {
177 return pointer;
178 }
179
180
181
182
183
184
185 public double[] getPositions() {
186 Vec3Array positions = new Vec3Array(OpenMM_State_getPositions(pointer));
187 return positions.getArray();
188 }
189
190
191
192
193
194
195 public double getPotentialEnergy() {
196 return OpenMM_State_getPotentialEnergy(pointer);
197 }
198
199
200
201
202
203
204 public long getStepCount() {
205 return OpenMM_State_getStepCount(pointer);
206 }
207
208
209
210
211
212
213 public double getTime() {
214 return OpenMM_State_getTime(pointer);
215 }
216
217
218
219
220
221
222 public double[] getVelocities() {
223 Vec3Array velocities = new Vec3Array(OpenMM_State_getVelocities(pointer));
224 return velocities.getArray();
225 }
226
227 }