ForceFields::ForceField Class Reference

A class to store forcefields and handle minimization. More...

#include <ForceField.h>

List of all members.

Public Member Functions

 ForceField (unsigned int dimension=3)
 construct with a dimension
 ~ForceField ()
void initialize ()
 does initialization
double calcEnergy () const
 calculates and returns the energy based on existing positions in the forcefield
double calcEnergy (double *pos)
 calculates and returns the energy of the position passed in
void calcGrad (double *forces) const
 calculates the gradient of the energy at the current position
void calcGrad (double *pos, double *forces)
 calculates the gradient of the energy at the provided position
int minimize (unsigned int maxIts=200, double forceTol=1e-4, double energyTol=1e-6)
 minimizes the energy of the system by following gradients
RDGeom::PointPtrVectpositions ()
 returns a reference to our points (a PointPtrVect)
const RDGeom::PointPtrVectpositions () const
ContribPtrVectcontribs ()
 returns a reference to our contribs (a ContribPtrVect)
const ContribPtrVectcontribs () const
double distance (unsigned int i, unsigned int j, double *pos=0)
 returns the distance between two points
double distance (unsigned int i, unsigned int j, double *pos=0) const
 returns the distance between two points
unsigned int dimension () const
 returns the dimension of the forcefield
unsigned int numPoints () const
 returns the number of points the ForceField is handling
INT_VECTfixedPoints ()
const INT_VECTfixedPoints () const

Protected Member Functions

void scatter (double *pos) const
 scatter our positions into an array
void gather (double *pos)
 update our positions from an array
void initDistanceMatrix ()
 initializes our internal distance matrix

Protected Attributes

unsigned int d_dimension
bool df_init
 whether or not we've been initialized
unsigned int d_numPoints
 the number of active points
double * dp_distMat
 our internal distance matrix
RDGeom::PointPtrVect d_positions
 pointers to the points we're using
ContribPtrVect d_contribs
 contributions to the energy
INT_VECT d_fixedPoints
unsigned int d_matSize


Detailed Description

A class to store forcefields and handle minimization.

A force field is used like this (schematically):

       ForceField ff;

       // add contributions:
       for contrib in contribs:
         ff.contribs().push_back(contrib);
         
       // set up the points:
       for positionPtr in positions:
         ff.positions().push_back(point);

       // initialize:
       ff.initialize()

       // and minimize:
       needsMore = ff.minimize();

     

Notes:

Definition at line 51 of file ForceField.h.


Constructor & Destructor Documentation

ForceFields::ForceField::ForceField ( unsigned int  dimension = 3  )  [inline]

construct with a dimension

Definition at line 54 of file ForceField.h.

ForceFields::ForceField::~ForceField (  ) 


Member Function Documentation

void ForceFields::ForceField::initialize (  ) 

does initialization

double ForceFields::ForceField::calcEnergy (  )  const

calculates and returns the energy based on existing positions in the forcefield

Returns:
the current energy
Note: This function is less efficient than calcEnergy with postions passed in as double * the positions need to be converted to double * here

double ForceFields::ForceField::calcEnergy ( double *  pos  ) 

calculates and returns the energy of the position passed in

Parameters:
pos an array of doubles. Should be 3*this->numPoints() long.
Returns:
the current energy
Side effects:
  • Calling this resets the current distance matrix
  • The individual contributions may further update the distance matrix

void ForceFields::ForceField::calcGrad ( double *  forces  )  const

calculates the gradient of the energy at the current position

Parameters:
forces an array of doubles. Should be 3*this->numPoints() long.
Note: This function is less efficient than calcGrad with positions passed in the positions need to be converted to double * here

void ForceFields::ForceField::calcGrad ( double *  pos,
double *  forces 
)

calculates the gradient of the energy at the provided position

Parameters:
pos an array of doubles. Should be 3*this->numPoints() long.
forces an array of doubles. Should be 3*this->numPoints() long.
Side effects:
  • The individual contributions may modify the distance matrix

int ForceFields::ForceField::minimize ( unsigned int  maxIts = 200,
double  forceTol = 1e-4,
double  energyTol = 1e-6 
)

minimizes the energy of the system by following gradients

Parameters:
maxIts the maximum number of iterations to try
forceTol the convergence criterion for forces
energyTol the convergence criterion for energies
Returns:
an integer value indicating whether or not the convergence criteria were achieved:
  • 0: indicates success
  • 1: the minimization did not converge in maxIts iterations.

RDGeom::PointPtrVect& ForceFields::ForceField::positions (  )  [inline]

returns a reference to our points (a PointPtrVect)

Definition at line 128 of file ForceField.h.

References d_positions.

const RDGeom::PointPtrVect& ForceFields::ForceField::positions (  )  const [inline]

Definition at line 129 of file ForceField.h.

References d_positions.

ContribPtrVect& ForceFields::ForceField::contribs (  )  [inline]

returns a reference to our contribs (a ContribPtrVect)

Definition at line 132 of file ForceField.h.

References d_contribs.

const ContribPtrVect& ForceFields::ForceField::contribs (  )  const [inline]

Definition at line 133 of file ForceField.h.

References d_contribs.

double ForceFields::ForceField::distance ( unsigned int  i,
unsigned int  j,
double *  pos = 0 
)

returns the distance between two points

Parameters:
i point index
j point index
pos (optional) If this argument is provided, it will be used to provide the positions of points. pos should be 3*this->numPoints() long.
Returns:
the distance
Side effects:
  • if the distance between i and j has not previously been calculated, our internal distance matrix will be updated.

double ForceFields::ForceField::distance ( unsigned int  i,
unsigned int  j,
double *  pos = 0 
) const

returns the distance between two points

Parameters:
i point index
j point index
pos (optional) If this argument is provided, it will be used to provide the positions of points. pos should be 3*this->numPoints() long.
Returns:
the distance
Note: The internal distance matrix is not updated in this case

unsigned int ForceFields::ForceField::dimension (  )  const [inline]

returns the dimension of the forcefield

Definition at line 167 of file ForceField.h.

References d_dimension.

Referenced by DistGeom::FourthDimContrib::FourthDimContrib().

unsigned int ForceFields::ForceField::numPoints (  )  const [inline]

returns the number of points the ForceField is handling

Definition at line 172 of file ForceField.h.

References d_numPoints.

INT_VECT& ForceFields::ForceField::fixedPoints (  )  [inline]

Definition at line 174 of file ForceField.h.

References d_fixedPoints.

const INT_VECT& ForceFields::ForceField::fixedPoints (  )  const [inline]

Definition at line 175 of file ForceField.h.

References d_fixedPoints.

void ForceFields::ForceField::scatter ( double *  pos  )  const [protected]

scatter our positions into an array

Parameters:
pos should be 3*this->numPoints() long;

void ForceFields::ForceField::gather ( double *  pos  )  [protected]

update our positions from an array

Parameters:
pos should be 3*this->numPoints() long;

void ForceFields::ForceField::initDistanceMatrix (  )  [protected]

initializes our internal distance matrix


Member Data Documentation

unsigned int ForceFields::ForceField::d_dimension [protected]

Definition at line 175 of file ForceField.h.

Referenced by dimension().

whether or not we've been initialized

Definition at line 179 of file ForceField.h.

unsigned int ForceFields::ForceField::d_numPoints [protected]

the number of active points

Definition at line 180 of file ForceField.h.

Referenced by numPoints().

our internal distance matrix

Definition at line 181 of file ForceField.h.

pointers to the points we're using

Definition at line 182 of file ForceField.h.

Referenced by positions().

contributions to the energy

Definition at line 183 of file ForceField.h.

Referenced by contribs().

Definition at line 184 of file ForceField.h.

Referenced by fixedPoints().

unsigned int ForceFields::ForceField::d_matSize [protected]

Definition at line 185 of file ForceField.h.


The documentation for this class was generated from the following file:

Generated on Fri Apr 3 06:03:03 2009 for RDCode by  doxygen 1.5.6