BALL
1.4.1
|
00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 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 } // namespace BALL 00066 00067 #endif // BALL_STRUCTURE_RMSDMINIMIZER_H