00001
00002
00003
00004
00005 #ifndef BALL_STRUCTURE_RMSDMINIMIZER_H
00006 #define BALL_STRUCTURE_RMSDMINIMIZER_H
00007
00008 #ifndef BALL_STRUCTURE_ATOMBIJECTION_H
00009 # include <BALL/STRUCTURE/atomBijection.h>
00010 #endif
00011
00012 #ifndef BALL_MATHS_MATRIX44_H
00013 # include <BALL/MATHS/matrix44.h>
00014 #endif
00015
00016 namespace BALL
00017 {
00018
00034 class BALL_EXPORT RMSDMinimizer
00035 {
00036 public:
00037 class BALL_EXPORT IncompatibleCoordinateSets
00038 : public Exception::GeneralException
00039 {
00040 public:
00041 IncompatibleCoordinateSets(const char*, int, Size, Size);
00042 };
00043
00044 class BALL_EXPORT TooFewCoordinates
00045 : public Exception::GeneralException
00046 {
00047 public:
00048 TooFewCoordinates(const char*, int, Size);
00049 };
00050
00051 typedef std::vector<Vector3> PointVector;
00052 typedef std::pair<Matrix4x4, double> Result;
00053
00054 static Result computeTransformation(const AtomBijection& ab)
00055 throw(RMSDMinimizer::IncompatibleCoordinateSets, RMSDMinimizer::TooFewCoordinates);
00056
00057 static Result computeTransformation(const PointVector& X, const PointVector& Y)
00058 throw(RMSDMinimizer::IncompatibleCoordinateSets, RMSDMinimizer::TooFewCoordinates);
00059
00060 static double minimizeRMSD(AtomContainer& a, AtomContainer& b)
00061 throw(RMSDMinimizer::IncompatibleCoordinateSets, RMSDMinimizer::TooFewCoordinates);
00062
00063 };
00064
00065 }
00066
00067 #endif // BALL_STRUCTURE_RMSDMINIMIZER_H