00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: RMSDMinimizer.h,v 1.3.18.1 2007/03/25 21:25:22 oliver Exp $ 00005 // 00006 // Author: 00007 // Oliver Kohlbacher 00008 // 00009 00010 #ifndef BALL_STRUCTURE_RMSDMINIMIZER_H 00011 #define BALL_STRUCTURE_RMSDMINIMIZER_H 00012 00013 #ifndef BALL_STRUCTURE_ATOMBIJECTION_H 00014 # include <BALL/STRUCTURE/atomBijection.h> 00015 #endif 00016 00017 #ifndef BALL_MATHS_MATRIX44_H 00018 # include <BALL/MATHS/matrix44.h> 00019 #endif 00020 00021 namespace BALL 00022 { 00023 00039 class BALL_EXPORT RMSDMinimizer 00040 { 00041 public: 00042 class BALL_EXPORT IncompatibleCoordinateSets 00043 : public Exception::GeneralException 00044 { 00045 public: 00046 IncompatibleCoordinateSets(const char*, int, Size, Size); 00047 }; 00048 00049 class BALL_EXPORT TooFewCoordinates 00050 : public Exception::GeneralException 00051 { 00052 public: 00053 TooFewCoordinates(const char*, int, Size); 00054 }; 00055 00056 typedef std::vector<Vector3> PointVector; 00057 typedef std::pair<Matrix4x4, double> Result; 00058 00059 static Result computeTransformation(const AtomBijection& ab) 00060 throw(RMSDMinimizer::IncompatibleCoordinateSets, RMSDMinimizer::TooFewCoordinates); 00061 00062 static Result computeTransformation(const PointVector& X, const PointVector& Y) 00063 throw(RMSDMinimizer::IncompatibleCoordinateSets, RMSDMinimizer::TooFewCoordinates); 00064 }; 00065 00066 } // namespace BALL 00067 00068 #endif // BALL_STRUCTURE_RMSDMINIMIZER_H