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
|
// -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//
#ifndef BALL_STRUCTURE_RMSDMINIMIZER_H
#define BALL_STRUCTURE_RMSDMINIMIZER_H
#ifndef BALL_STRUCTURE_ATOMBIJECTION_H
# include <BALL/STRUCTURE/atomBijection.h>
#endif
#ifndef BALL_MATHS_MATRIX44_H
# include <BALL/MATHS/matrix44.h>
#endif
namespace BALL
{
/** RMSD minimizer class.
This class computes the optimal transformation mapping
one set of three-dimensional points onto another set of
points. It implements the algorithm by Coutsalis et al.
(J. Comput. Chem., 25(15), 1849 (2004)), which computes
the RMSD-optimal transformation by solving an eigenvalue
problem.
\par
\ingroup StructureMapping
*/
class BALL_EXPORT RMSDMinimizer
{
public:
class BALL_EXPORT IncompatibleCoordinateSets
: public Exception::GeneralException
{
public:
IncompatibleCoordinateSets(const char*, int, Size, Size);
};
class BALL_EXPORT TooFewCoordinates
: public Exception::GeneralException
{
public:
TooFewCoordinates(const char*, int, Size);
};
typedef std::vector<Vector3> PointVector;
typedef std::pair<Matrix4x4, double> Result;
/**
* @throws BALL::RMSDMinimizer::IncompatibleCoordinateSets
* @throws BALL::RMSDMinimizer::TooFewCoordinates
*/
static Result computeTransformation(const AtomBijection& ab);
/**
* @throws BALL::RMSDMinimizer::IncompatibleCoordinateSets
* @throws BALL::RMSDMinimizer::TooFewCoordinates
*/
static Result computeTransformation(const PointVector& X, const PointVector& Y);
/**
* @throws BALL::RMSDMinimizer::IncompatibleCoordinateSets
* @throws BALL::RMSDMinimizer::TooFewCoordinates
*/
static double minimizeRMSD(AtomContainer& a, AtomContainer& b);
};
} // namespace BALL
#endif // BALL_STRUCTURE_RMSDMINIMIZER_H
|