/usr/include/openbabel-2.0/openbabel/grid.h is in libopenbabel-dev 2.3.2+dfsg-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 | /**********************************************************************
grid.h - Handle grids of values.
Copyright (C) 1998-2001 by OpenEye Scientific Software, Inc.
Some portions Copyright (C) 2001-2006 by Geoffrey R. Hutchison
Some Portions Copyright (C) 2008 by Marcus D. Hanwell
This file is part of the Open Babel project.
For more information, see <http://openbabel.org/>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
***********************************************************************/
#ifndef OB_GRID_H
#define OB_GRID_H
#include <openbabel/babelconfig.h>
#include <openbabel/math/vector3.h>
#include <openbabel/base.h>
// Necessary evil for 2.x series -- should use OBMol* below
#include <openbabel/mol.h>
#include <iosfwd>
#include <algorithm>
#include <vector>
#include <string>
namespace OpenBabel
{
// Forward declaration
class OBMol;
//! \class OBGrid grid.h <openbabel/grid.h>
//! \brief A base grid class
class OBAPI OBGrid: public OBBase
{
protected:
double _xmin,_xmax,_ymin,_ymax,_zmin,_zmax; //!< the min/max axes in XYZ axes (i.e., the box)
public:
OBGrid() {}
//! \brief Initialize the grid based on a box around the molecule @p box
//! Subclasses should overload this method -- this only tracks the
//! dimension of the box itself
virtual void Init(OBMol &box);
//! \return the minimum x point of the grid
double GetXmin() const { return(_xmin); }
//! \return the minimum y point of the grid
double GetYmin() const { return(_ymin); }
//! \return the minimum z point of the grid
double GetZmin() const { return(_zmin); }
//! \return the maximum x point of the grid
double GetXmax() const { return(_xmax); }
//! \return the maximum y point of the grid
double GetYmax() const { return(_ymax); }
//! \return the maximum z point of the grid
double GetZmax() const { return(_zmax); }
//! \return whether the supplied XYZ coordinates fall within the box
bool PointIsInBox(double x,double y,double z)
{
return (x>=_xmin) && (x<=_xmax) &&
(y>=_ymin) && (y<=_ymax) &&
(z>=_zmin) && (z<=_zmax);
}
//! \return true if the point falls within the box
bool PointIsInBox(double *c)
{
return (c[0]>=_xmin) && (c[0]<=_xmax) &&
(c[1]>=_ymin) && (c[1]<=_ymax) &&
(c[2]>=_zmin) && (c[2]<=_zmax);
}
//! \return true if the point falls within the box
bool PointIsInBox(vector3 v)
{
return (v.x() >= _xmin) && (v.x() <=_xmax) &&
(v.y()>=_ymin) && (v.y()<=_ymax) &&
(v.z()>=_zmin) && (v.z()<=_zmax);
}
};
//! \class OBFloatGrid grid.h <openbabel/grid.h>
//! \brief Handle double precision floating point 3D grids (e.g., charge density around an OBMol)
//!
//! Supports input/output and base functionality for simple 3D discrete grids
//! of some function -- typically around a molecule. Typically you will want
//! to use OBGridData which uses OBFloatGrid to store its data.
//! \sa OBGridData
class OBAPI OBFloatGrid: public OBGrid
{
protected:
std::vector<double> _values; //!< floating point values
int *_ival; //!< for integer values (deprecated)
double _midz,_midx,_midy; //!< center of grid in world coordinates
int _ydim,_xdim,_zdim; //!< grid dimensions
double _spacing,_inv_spa; //!< spacing between grid points and its inverse
double _halfSpace; //!< half of the grid spacing
//! Three axes (i.e., translation vectors like a unit cell)
vector3 _xAxis, _yAxis, _zAxis;
public:
OBFloatGrid() : _ival(NULL), _halfSpace(0.0) {}
~OBFloatGrid()
{
if (_ival) delete [] _ival;
}
//! Initialize the grid using this molecule as a box (plus a padding)
//! with the supplied spacing between points.
void Init(OBMol &box,double spacing, double pad=0.0);
//! \return the minimum point in the grid.
vector3 GetMin() { return vector3(_xmin, _ymin, _zmin); }
//! Get the minimum point in the grid.
//! \deprecated Will be removed.
//! Use \sa GetMin()
void GetMin(double *a)
{
a[0]=_xmin;
a[1]=_ymin;
a[2]=_zmin;
}
//! \return the minimum point in the grid.
vector3 GetMax() { return vector3(_xmax, _ymax, _zmax); }
//! Get the maximum point in the grid.
//! \deprecated Will be removed.
//! \sa GetMax()
void GetMax(double *a)
{
a[0]=_xmax;
a[1]=_ymax;
a[2]=_zmax;
}
//! \return The grid spacing.
double GetSpacing() const { return(_spacing); }
//! Get the grid spacing.
//! \deprecated Will be removed.
//! \sa GetSpacing()
void GetSpacing(double &s)
{
s=_spacing;
}
//! \return Inverse of the grid spacing.
double GetScale() const { return(_inv_spa); }
//! \return Half of the spacing between grid points.
double GetHalfSpace() const {return(_halfSpace);}
//! \return Size of the grid in the x dimension.
int GetXdim() const { return(_xdim); }
//! \return Size of the grid in the y dimension.
int GetYdim() const { return(_ydim); }
//! \return Size of the grid in the z dimension.
int GetZdim() const { return(_zdim); }
//! Get the x, y and z dimensions (must pass an double[3] at least).
//! \deprecated May be removed in future.
//! \sa GetXdim() \sa GetYdim() \sa GetZdim()
void GetDim(int *a)
{
a[0]=_xdim;
a[1]=_ydim;
a[2]=_zdim;
}
//! \return Position of the center of the grid.
vector3 GetMidpointVector()
{
vector3 v;
v.Set(_midx,_midy,_midz);
return(v);
}
//! \return X axis direction.
vector3 GetXAxis() const
{
return _xAxis;
}
//! \return Y axis direction.
vector3 GetYAxis() const
{
return _yAxis;
}
//! \return Z axis direction.
vector3 GetZAxis() const
{
return _zAxis;
}
//! Sets the number of points in the x, y and z directions.
void SetNumberOfPoints(int nx, int ny, int nz);
//! Set the direction of the x axis.
void SetXAxis(vector3);
//! Set the direction of the y axis.
void SetYAxis(vector3);
//! Set the direction of the z axis.
void SetZAxis(vector3);
//! Set the limits (i.e., the origin point and the axes)
//! NOTE: You must set the number of points first,
//! with SetNumberOfPoints
//! so the grid spacing can be calculated
void SetLimits(const vector3& origin, const vector3& x, const vector3& y,
const vector3& z);
//! \deprecated Will be removed.
//! \sa SetLimits(const vector3& origin, const vector3& x, const vector3& y, const vector3& z)
void SetLimits(const double origin[3], const double x[3], const double y[3],
const double z[3]);
//! Get a copy of the vector that stores the points in the grid.
std::vector<double> GetDataVector();
//! Set the values in the grid to those in the vector passed. Note that the
//! vector must be of the same dimensions as the grid based on the values
//! given in SetNumberOfPoints(int nx, int ny, int nz).
void SetVals(const std::vector<double> & vals);
//! \return Pointer to the first element of the grid point data stored as a
//! one dimensional array.
//! \deprecated Will be removed.
//! \sa GetDataVector()
double *GetVals() { return(&_values[0]); }
//! \return Value at the point in the grid specified by i, j and k.
double GetValue(int i, int j, int k)
{
if (i*_ydim*_zdim + j*_zdim + k > _xdim*_ydim*_zdim)
return 0.0;
else
return _values[i*_ydim*_zdim + j*_zdim + k];
}
//! \deprecated Will be removed.
//! \sa SetVals(const std::vector<double> & vals)
void SetVals(double *ptr)
{
for (int i = 0; i < _xdim*_ydim*_zdim; ++i)
_values[i] = ptr[i];
}
//! Set the value at the grid point specified by i, j and k to val.
bool SetValue(int i, int j, int k, double val)
{
if (i*_ydim*_zdim + j*_zdim + k > _xdim*_ydim*_zdim)
return false;
_values[i*_ydim*_zdim + j*_zdim + k] = val;
return true;
}
//! \return Position of the center of the grid.
vector3 Center()
{
return vector3(_midx,_midy,_midz);
}
friend std::ostream& operator<< ( std::ostream&, const OBFloatGrid& ) ;
friend std::istream& operator>> ( std::istream&,OBFloatGrid& ) ;
//! \return the value at the given point (rounding as needed)
double Inject(double x,double y,double z);
void IndexToCoords(int idx, double &x, double &y, double &z);
void CoordsToIndex(int*,double*);
int CoordsToIndex(double x, double y, double z);
//! \return the interpolated value for the given point
double Interpolate(double,double,double);
//! \return the interpolated value for the given point and set the dx, dy, dz derivatives
double InterpolateDerivatives(double,double,double,double *derivatives);
};
#ifndef OBPolarGrid
#define OBPolarGrid 0x01 /* polar interactions? */
#endif //OBPolarGrid
#ifndef OBLipoGrid
#define OBLipoGrid 0x02 /* lipophilicity? */
#endif //OBLipoGrid
//! \class OBProxGrid grid.h <openbabel/grid.h>
//! \brief A grid for determining the proximity of a given point to atoms in an OBMol
//! \deprecated May be removed in the future, since docking is not a key feature
class OBAPI OBProxGrid: public OBGrid
{
protected:
int _gridtype;
int _nxinc,_nyinc,_nzinc,_maxinc;
double _inc;
std::vector<std::vector<int> > cell;
public:
OBProxGrid(int gridtype=0)
{
_gridtype=gridtype;
}
~OBProxGrid()
{}
void Setup(OBMol &mol,OBMol &box, double cutoff,double resolution = 0.5);
void Setup(OBMol &mol,OBMol &box, double cutoff,
std::vector<bool> &use,double resolution = 0.5);
std::vector<int> *GetProxVector(double,double,double);
std::vector<int> *GetProxVector(double*);
bool LipoGrid()
{
return((_gridtype&OBLipoGrid) ? true : false);
}
bool PolarGrid()
{
return(_gridtype&OBPolarGrid);
}
void SetGridType(int gridtype)
{
_gridtype = gridtype;
}
};
// scoring function used: PLP = Piecewise Linear Potential or ChemScore algorithm
typedef enum { Undefined = -1, PLP, ChemScore } score_t;
//! \class OBScoreGrid grid.h <openbabel/grid.h>
//! \brief A base class for scoring docking interactions between multiple molecules
//! \deprecated Will disappear in future versions. Use your own code.
class OBAPI OBScoreGrid
{
protected:
score_t gridtype;
bool verbose;
public:
double score;
OBScoreGrid(void) { verbose = false; }
virtual ~OBScoreGrid(void) {}
void SetVerbose(bool v) { verbose = v; }
void SetType(score_t type) { gridtype = type; }
score_t GetType(void) { return gridtype; }
virtual void Clear(void) { }
virtual double Eval(double *) { return -1; }
virtual double Eval(OBMol &mol){return Eval(mol.GetCoordinates());}
virtual void Init(OBMol &, OBMol &, std::string &, double){}
virtual void Setup(OBMol &) {}
virtual void Setup(OBMol &, std::vector<int> &){}
virtual void Setup(std::vector<int> &) {}
virtual void Config(std::string) {}
virtual bool Read(std::string) { return false; }
virtual bool Write(std::string) { return false; }
virtual vector3 Center() { return VZero; }
virtual vector3 CenterMol(OBMol &) { return VZero; }
};
} // end namespace OpenBabel
#endif // OB_GRID_H
//! \file grid.h
//! \brief Handle grids of values.
|