--- /dev/null
+#ifndef MSADist_h\r
+#define MSADist_h\r
+\r
+#include <math.h>\r
+\r
+double GetScoreDist(const MSA &msa, unsigned SeqIndex1, unsigned SeqIndex2);\r
+\r
+class MSADist\r
+ {\r
+public:\r
+ MSADist(DISTANCE Distance)\r
+ {\r
+ m_Distance = Distance;\r
+ }\r
+\r
+ double ComputeDist(const MSA &msa, unsigned uSeqIndex1, unsigned uSeqIndex2)\r
+ {\r
+ if (m_Distance == DISTANCE_ScoreDist)\r
+ return GetScoreDist(msa, uSeqIndex1, uSeqIndex2);\r
+\r
+ double dPctId = msa.GetPctIdentityPair(uSeqIndex1, uSeqIndex2);\r
+ switch(m_Distance)\r
+ {\r
+ case DISTANCE_PctIdKimura:\r
+ return KimuraDist(dPctId);\r
+ case DISTANCE_PctIdLog:\r
+ if (dPctId < 0.05)\r
+ dPctId = 0.05;\r
+ return -log(dPctId);\r
+ }\r
+ Quit("MSADist::ComputeDist, invalid DISTANCE_%u", m_Distance);\r
+ return 0;\r
+ }\r
+\r
+private:\r
+ DISTANCE m_Distance;\r
+ };\r
+\r
+#endif // MSADist_h\r