GBVIParameters.h 11.6 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
29
#include "RealVec.h"
#include <vector>
Mark Friedrichs's avatar
Mark Friedrichs committed
30

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

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

   public:

37
38
39
40
41
42
43
44
45
46
47
48
49
50
    /** 
     * 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
51
52
   private:

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

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

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

61
62
63
      std::vector<RealOpenMM> _atomicRadii;
      std::vector<RealOpenMM> _scaledRadii;
      std::vector<RealOpenMM> _gammaParameters;
Mark Friedrichs's avatar
Mark Friedrichs committed
64
65
66

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

184
      const std::vector<RealOpenMM>& getAtomicRadii() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
185
186
187

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

194
      void setAtomicRadii(const std::vector<RealOpenMM>& atomicRadii);
Mark Friedrichs's avatar
Mark Friedrichs committed
195
196
197

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

204
      const std::vector<RealOpenMM>& getGammaParameters() const;
Mark Friedrichs's avatar
Mark Friedrichs committed
205
206
207

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

214
      void setGammaParameters(const std::vector<RealOpenMM>& gammaParameters);
Mark Friedrichs's avatar
Mark Friedrichs committed
215
216
217
218
219
220
221
222
223

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

         Set the force to use a cutoff.

         @param distance            the cutoff distance

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

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

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

         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.

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

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

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

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

         Get whether to use periodic boundary conditions.

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

      bool getPeriodic();

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

         Get the periodic box dimension

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

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

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

};
341
342
343

} // namespace OpenMM

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