GBVIParameters.h 11.5 KB
Newer Older
Mark Friedrichs's avatar
Mark Friedrichs committed
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

/* Portions copyright (c) 2006-2009 Stanford University and Simbios.
 * Contributors: Pande Group
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject
 * to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

#ifndef __GBVIParameters_H__
#define __GBVIParameters_H__

28
#include "SimTKOpenMMCommon.h"
Mark Friedrichs's avatar
Mark Friedrichs committed
29

30
namespace OpenMM {
Mark Friedrichs's avatar
Mark Friedrichs committed
31

Mark Friedrichs's avatar
Mark Friedrichs committed
32
class GBVIParameters {
Mark Friedrichs's avatar
Mark Friedrichs committed
33
34
35

   public:

36
37
38
39
40
41
42
43
44
45
46
47
48
49
    /** 
     * This is an enumeration of the different methods that may be used for scaling of the Born radii.
     */
    enum BornRadiusScalingMethod {
        /**
         * No scaling method is applied.
         */
        NoScaling          = 0,
        /**
         * Use quintic spline scaling function
         */
        QuinticSpline       = 1
    };  

Mark Friedrichs's avatar
Mark Friedrichs committed
50
51
   private:

Mark Friedrichs's avatar
Mark Friedrichs committed
52
53
54
55
56
      int _numberOfAtoms;

      RealOpenMM _solventDielectric;
      RealOpenMM _soluteDielectric;
      RealOpenMM _electricConstant;
Mark Friedrichs's avatar
Mark Friedrichs committed
57

Mark Friedrichs's avatar
Mark Friedrichs committed
58
      // parameter vectors
Mark Friedrichs's avatar
Mark Friedrichs committed
59

Mark Friedrichs's avatar
Mark Friedrichs committed
60
61
62
      RealOpenMMVector _atomicRadii;
      RealOpenMMVector _scaledRadii;
      RealOpenMMVector _gammaParameters;
Mark Friedrichs's avatar
Mark Friedrichs committed
63
64
65

      // cutoff and periodic boundary conditions
      
Mark Friedrichs's avatar
Mark Friedrichs committed
66
67
      bool _cutoff;
      bool _periodic;
68
      OpenMM::RealVec _periodicBoxVectors[3];
Mark Friedrichs's avatar
Mark Friedrichs committed
69
      RealOpenMM _cutoffDistance;
Mark Friedrichs's avatar
Mark Friedrichs committed
70

71
72
73
74
      int _bornRadiusScalingMethod;
      RealOpenMM _quinticLowerLimitFactor;
      RealOpenMM _quinticUpperBornRadiusLimit;

Mark Friedrichs's avatar
Mark Friedrichs committed
75
76
77
78
79
80
81
82
83
84
   public:

      /**---------------------------------------------------------------------------------------
      
         GBVIParameters constructor (Simbios) 
      
         @param numberOfAtoms       number of atoms
      
         --------------------------------------------------------------------------------------- */
      
85
       GBVIParameters(int numberOfAtoms);
Mark Friedrichs's avatar
Mark Friedrichs committed
86
87
88
89
90
91
92

      /**---------------------------------------------------------------------------------------
      
         GBVIParameters destructor (Simbios) 
      
         --------------------------------------------------------------------------------------- */
      
93
       ~GBVIParameters();
Mark Friedrichs's avatar
Mark Friedrichs committed
94
95
96

      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
97
         Get number of atoms
Mark Friedrichs's avatar
Mark Friedrichs committed
98
      
Mark Friedrichs's avatar
Mark Friedrichs committed
99
         @return number of atoms
Mark Friedrichs's avatar
Mark Friedrichs committed
100
101
      
         --------------------------------------------------------------------------------------- */
Mark Friedrichs's avatar
Mark Friedrichs committed
102

103
      int getNumberOfAtoms() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
104

Mark Friedrichs's avatar
Mark Friedrichs committed
105
106
      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
107
         Get electric constant
Mark Friedrichs's avatar
Mark Friedrichs committed
108
      
Mark Friedrichs's avatar
Mark Friedrichs committed
109
         @return electric constant
Mark Friedrichs's avatar
Mark Friedrichs committed
110
111
      
         --------------------------------------------------------------------------------------- */
Mark Friedrichs's avatar
Mark Friedrichs committed
112

113
      RealOpenMM getElectricConstant() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
114

Mark Friedrichs's avatar
Mark Friedrichs committed
115
116
      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
117
         Get solvent dielectric
Mark Friedrichs's avatar
Mark Friedrichs committed
118
      
Mark Friedrichs's avatar
Mark Friedrichs committed
119
         @return solvent dielectric
Mark Friedrichs's avatar
Mark Friedrichs committed
120
121
122
      
         --------------------------------------------------------------------------------------- */

123
      RealOpenMM getSolventDielectric() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
124

Mark Friedrichs's avatar
Mark Friedrichs committed
125
126
      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
127
         Set solvent dielectric
Mark Friedrichs's avatar
Mark Friedrichs committed
128
      
Mark Friedrichs's avatar
Mark Friedrichs committed
129
         @param solventDielectric solvent dielectric
Mark Friedrichs's avatar
Mark Friedrichs committed
130
131
132
      
         --------------------------------------------------------------------------------------- */

133
      void setSolventDielectric(RealOpenMM solventDielectric);
Mark Friedrichs's avatar
Mark Friedrichs committed
134
135
136

      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
137
         Get solute dielectric
Mark Friedrichs's avatar
Mark Friedrichs committed
138
      
Mark Friedrichs's avatar
Mark Friedrichs committed
139
         @return soluteDielectric
Mark Friedrichs's avatar
Mark Friedrichs committed
140
141
142
      
         --------------------------------------------------------------------------------------- */

143
      RealOpenMM getSoluteDielectric() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
144
145
146

      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
147
         Set solute dielectric
Mark Friedrichs's avatar
Mark Friedrichs committed
148
      
Mark Friedrichs's avatar
Mark Friedrichs committed
149
         @param soluteDielectric solute dielectric
Mark Friedrichs's avatar
Mark Friedrichs committed
150
151
152
      
         --------------------------------------------------------------------------------------- */

153
      void setSoluteDielectric(RealOpenMM soluteDielectric);
Mark Friedrichs's avatar
Mark Friedrichs committed
154
155
156

      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
157
         Return scaled radii
Mark Friedrichs's avatar
Mark Friedrichs committed
158
      
Mark Friedrichs's avatar
Mark Friedrichs committed
159
         @return array
Mark Friedrichs's avatar
Mark Friedrichs committed
160
161
162
      
         --------------------------------------------------------------------------------------- */
      
163
      const RealOpenMMVector& getScaledRadii() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
164
        
Mark Friedrichs's avatar
Mark Friedrichs committed
165
166
      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
167
         Return scaled radii
Mark Friedrichs's avatar
Mark Friedrichs committed
168
      
Mark Friedrichs's avatar
Mark Friedrichs committed
169
170
171
172
         @return array
      
         --------------------------------------------------------------------------------------- */
      
173
      void setScaledRadii(const RealOpenMMVector& scaledRadii);
Mark Friedrichs's avatar
Mark Friedrichs committed
174
175
176
177
178
179
        
      /**---------------------------------------------------------------------------------------
      
         Get AtomicRadii array w/ dielectric offset applied
      
         @return array of atom volumes
Mark Friedrichs's avatar
Mark Friedrichs committed
180
181
182
      
         --------------------------------------------------------------------------------------- */

183
      const RealOpenMMVector& getAtomicRadii() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
184
185
186

      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
187
         Set AtomicRadii array
Mark Friedrichs's avatar
Mark Friedrichs committed
188
      
Mark Friedrichs's avatar
Mark Friedrichs committed
189
         @param atomicRadii vector of atomic radii
Mark Friedrichs's avatar
Mark Friedrichs committed
190
191
192
      
         --------------------------------------------------------------------------------------- */

193
      void setAtomicRadii(const RealOpenMMVector& atomicRadii);
Mark Friedrichs's avatar
Mark Friedrichs committed
194
195
196

      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
197
         Get GammaParameters array
Mark Friedrichs's avatar
Mark Friedrichs committed
198
      
Mark Friedrichs's avatar
Mark Friedrichs committed
199
         @return array of gamma values
Mark Friedrichs's avatar
Mark Friedrichs committed
200
201
202
      
         --------------------------------------------------------------------------------------- */

203
      const RealOpenMMVector& getGammaParameters() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
204
205
206

      /**---------------------------------------------------------------------------------------
      
Mark Friedrichs's avatar
Mark Friedrichs committed
207
208
209
210
211
212
         Set GammaParameters array
      
         @param gammaParameters   array of gamma parameters
      
         --------------------------------------------------------------------------------------- */

213
      void setGammaParameters(const RealOpenMMVector& gammaParameters);
Mark Friedrichs's avatar
Mark Friedrichs committed
214
215
216
217
218
219
220
221
222

      /**---------------------------------------------------------------------------------------

         Set the force to use a cutoff.

         @param distance            the cutoff distance

         --------------------------------------------------------------------------------------- */

223
      void setUseCutoff(RealOpenMM distance);
Mark Friedrichs's avatar
Mark Friedrichs committed
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246

      /**---------------------------------------------------------------------------------------

         Get whether to use a cutoff.

         --------------------------------------------------------------------------------------- */

      bool getUseCutoff();

      /**---------------------------------------------------------------------------------------

         Get the cutoff distance.

         --------------------------------------------------------------------------------------- */

      RealOpenMM getCutoffDistance();

      /**---------------------------------------------------------------------------------------

         Set the force to use periodic boundary conditions.  This requires that a cutoff has
         already been set, and the smallest side of the periodic box is at least twice the cutoff
         distance.

247
         @param vectors    the vectors defining the periodic box
Mark Friedrichs's avatar
Mark Friedrichs committed
248
249
250

         --------------------------------------------------------------------------------------- */

251
      void setPeriodic(OpenMM::RealVec* vectors);
Mark Friedrichs's avatar
Mark Friedrichs committed
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266

      /**---------------------------------------------------------------------------------------

         Get whether to use periodic boundary conditions.

         --------------------------------------------------------------------------------------- */

      bool getPeriodic();

      /**---------------------------------------------------------------------------------------

         Get the periodic box dimension

         --------------------------------------------------------------------------------------- */

267
      const OpenMM::RealVec* getPeriodicBox();
Mark Friedrichs's avatar
Mark Friedrichs committed
268
269
270
271
272
273
274
275
276

      /**---------------------------------------------------------------------------------------
      
         Get tau prefactor
      
         @return (1/e1 - 1/e0), where e1 = solute dielectric, e0 = solvent dielectric
      
         --------------------------------------------------------------------------------------- */
      
277
      RealOpenMM getTau() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
278
      
279
280
281
282
283
284
285
286
    /**---------------------------------------------------------------------------------------
    
       Get bornRadiusScalingMethod
    
       @return bornRadiusScalingMethod
    
       --------------------------------------------------------------------------------------- */
    
287
    int getBornRadiusScalingMethod() const;
288
289
290
291
292
293
294
295
296
    
    /**---------------------------------------------------------------------------------------
    
       Set bornRadiusScalingMethod 
    
       @param bornRadiusScalingMethod bornRadiusScalingMethod
    
       --------------------------------------------------------------------------------------- */
    
297
    void setBornRadiusScalingMethod(int bornRadiusScalingMethod);
298
299
300
301
302
303
304
305
306
    
    /**---------------------------------------------------------------------------------------
    
       Get quinticLowerLimitFactor
    
       @return quinticLowerLimitFactor
    
       --------------------------------------------------------------------------------------- */
    
307
    RealOpenMM getQuinticLowerLimitFactor() const;
308
309
310
311
312
313
314
315
316
    
    /**---------------------------------------------------------------------------------------
    
       Set quinticLowerLimitFactor 
    
       @param quinticLowerLimitFactor quinticLowerLimitFactor
    
       --------------------------------------------------------------------------------------- */
    
317
    void setQuinticLowerLimitFactor(RealOpenMM quinticLowerLimitFactor);
318
319
320
321
322
323
324
325
326
    
    /**---------------------------------------------------------------------------------------
    
       Get quinticUpperBornRadiusLimit
    
       @return quinticUpperBornRadiusLimit
    
       --------------------------------------------------------------------------------------- */
    
327
    RealOpenMM getQuinticUpperBornRadiusLimit() const;
328
329
330
331
332
333
334
335
336
    
    /**---------------------------------------------------------------------------------------
    
       Set quinticUpperBornRadiusLimit 
    
       @param quinticUpperBornRadiusLimit quinticUpperBornRadiusLimit
    
       --------------------------------------------------------------------------------------- */
    
337
    void setQuinticUpperBornRadiusLimit(RealOpenMM quinticUpperSplineLimit);
Mark Friedrichs's avatar
Mark Friedrichs committed
338
339

};
340
341
342

} // namespace OpenMM

Mark Friedrichs's avatar
Mark Friedrichs committed
343
#endif // __GBVIParameters_H__