UniformGrid3D.h
Go to the documentation of this file.
//
// Copyright (C) 2005-2013 Greg Landrum and Rational Discovery LLC
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
#include <RDGeneral/export.h>
#ifndef _UNIFORMGRID3D_H_20050124_1703
#define _UNIFORMGRID3D_H_20050124_1703
#include "point.h"
#include <DataStructs/DiscreteValueVect.h>
#include "Grid3D.h"
#include <iostream>
namespace RDGeom {
class RDKIT_RDGEOMETRYLIB_EXPORT UniformGrid3D : public Grid3D {
public:
//! \brief ctor
/*
\param dimX: the x dimension of the grid, in Angstroms
\param dimY: the y dimension of the grid, in Angstroms
\param dimZ: the z dimension of the grid, in Angstroms
\param spacing: the grid spacing, in Angstroms
\param valType: the data type of the grid (determines the number of bits
per point)
\param offset: OPTIONAL: the offset of the grid from (0,0,0), in
Angstroms.
\b Note: the values of arguments such as \c dimX and \c spacing
don't actually need to be in Angstroms, but they should be internally
consistent.
*/
UniformGrid3D(double dimX, double dimY, double dimZ, double spacing = 0.5,
RDKit::DiscreteValueVect::DiscreteValueType valType =
RDKit::DiscreteValueVect::TWOBITVALUE,
const RDGeom::Point3D *offset = 0) {
if (offset == 0) {
initGrid(dimX, dimY, dimZ, spacing, valType,
Point3D(-0.5 * dimX, -0.5 * dimY, -0.5 * dimZ));
} else {
initGrid(dimX, dimY, dimZ, spacing, valType, *offset);
}
}
//! copy ctor
UniformGrid3D(const UniformGrid3D &other);
//! construct from a string pickle
UniformGrid3D(const std::string &pkl);
//! construct from a text pickle
UniformGrid3D(const char *pkl, unsigned int);
UniformGrid3D &operator=(const UniformGrid3D &other);
~UniformGrid3D();
//! \brief Get the index of the grid point closest to point
//!
//! \return the integer index, -1 if the specified point is outside the grid
int getGridPointIndex(const Point3D &point) const;
//! \brief Get the value at the grid point closest to the specified point
//!
//! \return the integer value, -1 if the specified index is outside the grid
int getVal(const Point3D &point) const;
//! \brief Get the value at a specified grid point
//!
//! \return the unsigned integer value
unsigned int getVal(unsigned int pointId) const;
//! \brief Set the value at the grid point closest to the specified point
//!
//! doesn't do anything if the point is outside the grid
void setVal(const Point3D &point, unsigned int val);
//! \brief get the location of the specified grid point
Point3D getGridPointLoc(unsigned int pointId) const;
//! \brief Set the value at the specified grid point
void setVal(unsigned int pointId, unsigned int val);
//! \brief get the size of the grid (number of grid points)
unsigned int getSize() const { return d_numX * d_numY * d_numZ; };
//! \brief set the occupancy for a multi-layered sphere
/*!
This function encodes the occupancy for a sphere and multiple layers around
it
\param center location of the sphere center
\param radius Radius of the base sphere
\param stepSize thickness of each layer on top of the base sphere
\param maxNumLayers maximum number of layers, if -1 this is
determined by
the number of bits used per grid points in the
storage
\param ignoreOutOfBound if true, ignore if center is outside the grid,
otherwise throw
an exception
*/
void setSphereOccupancy(const Point3D &center, double radius, double stepSize,
int maxNumLayers = -1, bool ignoreOutOfBound = true);
//! \brief get the index of the grid point given the x, y, z indices
//!
//! \return the integer value, -1 if the indices are outside the grid
int getGridIndex(unsigned int xi, unsigned int yi, unsigned int zi) const;
//! \brief get the x, y, and z indices of a grid-point index
//!
void getGridIndices(unsigned int idx, unsigned int &xi, unsigned int &yi,
unsigned int &zi) const;
//! \brief get the number of grid points along x-axis
unsigned int getNumX() const { return d_numX; };
//! \brief get the number of grid points along y-axis
unsigned int getNumY() const { return d_numY; };
//! \brief get the number of grid points along z-axis
unsigned int getNumZ() const { return d_numZ; };
//! \brief get the grid's offset
const Point3D &getOffset() const { return d_offSet; };
//! \brief get the grid's spacing
double getSpacing() const { return d_spacing; };
//! \brief return a \b const pointer to our occupancy vector
const RDKit::DiscreteValueVect *getOccupancyVect() const {
return dp_storage;
};
//! \brief returns true if the grid \c other has parameters
//! compatible with ours.
virtual bool compareParams(const UniformGrid3D &other) const;
//! \brief calculates the union between the data on this grid and
//! that on \c other.
//! This grid is modified.
//! NOTE that the grids must have the same parameters.
UniformGrid3D &operator|=(const UniformGrid3D &other);
//! \brief calculates the intersection between the data on this grid and
//! that on \c other.
//! This grid is modified.
//! NOTE that the grids must have the same parameters.
UniformGrid3D &operator&=(const UniformGrid3D &other);
//! \brief calculates the sum of the data on this grid and
//! that on \c other.
//! This grid is modified.
//! NOTE that the grids must have the same parameters.
UniformGrid3D &operator+=(const UniformGrid3D &other);
//! \brief calculates the difference between the data on this grid and
//! that on \c other.
//! This grid is modified.
//! NOTE that the grids must have the same parameters.
UniformGrid3D &operator-=(const UniformGrid3D &other);
//! \brief create and return a pickle
std::string toString() const;
UniformGrid3D operator&(const UniformGrid3D &other) const {
PRECONDITION(dp_storage, "bad storage");
PRECONDITION(compareParams(other), "mismatched params");
UniformGrid3D res(d_numX * d_spacing, d_numY * d_spacing,
d_numZ * d_spacing, d_spacing, dp_storage->getValueType(),
&d_offSet);
return res;
};
private:
//! \brief internal initialization code
/*
\param dimX: the x dimension of the grid, in Angstroms
\param dimY: the y dimension of the grid, in Angstroms
\param dimZ: the z dimension of the grid, in Angstroms
\param spacing: the grid spacing, in Angstroms
\param valType: the data type of the grid (determines the number of bits
per point)
\param offset: the offset of the grid from (0,0,0), in Angstroms.
\param data: (optional) a pointer to a DiscreteValueVect to use, we
take
ownership of the pointer.
*/
void initGrid(double dimX, double dimY, double dimZ, double spacing,
RDKit::DiscreteValueVect::DiscreteValueType valType,
const RDGeom::Point3D &offSet,
RDKit::DiscreteValueVect *data = 0);
unsigned int d_numX, d_numY,
d_numZ; //! number of grid points along x, y, z axes
double d_spacing; //! grid spacing
Point3D d_offSet; //! the grid offset (from the origin)
RDKit::DiscreteValueVect
*dp_storage; //! storage for values at each grid point
//! \brief construct from a pickle
void initFromText(const char *pkl, const unsigned int length);
};
//! \brief writes the contents of the grid to a stream
/*
The grid is written in GRD format
*/
RDKIT_RDGEOMETRYLIB_EXPORT void writeGridToStream(const UniformGrid3D &grid,
std::ostream &outStrm);
//! \brief writes the contents of the grid to a named file
/*
The grid is written in GRD format
*/
RDKIT_RDGEOMETRYLIB_EXPORT void writeGridToFile(const UniformGrid3D &grid,
const std::string &filename);
} // namespace RDGeom
#endif
RDKit::DiscreteValueVect::DiscreteValueType
DiscreteValueType
used to define the possible range of the values
Definition: DiscreteValueVect.h:29
point.h
DiscreteValueVect.h
RDGeom
Definition: TorsionAngleM6.h:20
RDGeom::Point3D
Definition: point.h:46
RDGeom::UniformGrid3D::getOccupancyVect
const RDKit::DiscreteValueVect * getOccupancyVect() const
return a const pointer to our occupancy vector
Definition: UniformGrid3D.h:133
RDKIT_RDGEOMETRYLIB_EXPORT
#define RDKIT_RDGEOMETRYLIB_EXPORT
Definition: export.h:515
RDGeom::UniformGrid3D::getNumX
unsigned int getNumX() const
get the number of grid points along x-axis
Definition: UniformGrid3D.h:118
RDGeom::UniformGrid3D::UniformGrid3D
UniformGrid3D(double dimX, double dimY, double dimZ, double spacing=0.5, RDKit::DiscreteValueVect::DiscreteValueType valType=RDKit::DiscreteValueVect::TWOBITVALUE, const RDGeom::Point3D *offset=0)
ctor
Definition: UniformGrid3D.h:38
RDKit::DiscreteValueVect
a class for efficiently storing vectors of discrete values
Definition: DiscreteValueVect.h:24
RDGeom::Grid3D
Virtual base class for a grid object.
Definition: Grid3D.h:37
RDGeom::UniformGrid3D::operator&
UniformGrid3D operator&(const UniformGrid3D &other) const
Definition: UniformGrid3D.h:164
RDGeom::UniformGrid3D::getSpacing
double getSpacing() const
get the grid's spacing
Definition: UniformGrid3D.h:130
Grid3D.h
RDGeom::UniformGrid3D::getOffset
const Point3D & getOffset() const
get the grid's offset
Definition: UniformGrid3D.h:127
PRECONDITION
#define PRECONDITION(expr, mess)
Definition: Invariant.h:109
RDGeom::UniformGrid3D::getNumZ
unsigned int getNumZ() const
get the number of grid points along z-axis
Definition: UniformGrid3D.h:124
RDKit::DiscreteValueVect::TWOBITVALUE
Definition: DiscreteValueVect.h:31
RDGeom::UniformGrid3D::getSize
unsigned int getSize() const
get the size of the grid (number of grid points)
Definition: UniformGrid3D.h:86
RDGeom::writeGridToFile
RDKIT_RDGEOMETRYLIB_EXPORT void writeGridToFile(const UniformGrid3D &grid, const std::string &filename)
writes the contents of the grid to a named file
RDGeom::writeGridToStream
RDKIT_RDGEOMETRYLIB_EXPORT void writeGridToStream(const UniformGrid3D &grid, std::ostream &outStrm)
writes the contents of the grid to a stream
RDGeom::UniformGrid3D
Definition: UniformGrid3D.h:20
RDGeom::UniformGrid3D::getNumY
unsigned int getNumY() const
get the number of grid points along y-axis
Definition: UniformGrid3D.h:121
export.h