Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / refinetree.cpp
diff --git a/website/archive/binaries/mac/src/muscle/refinetree.cpp b/website/archive/binaries/mac/src/muscle/refinetree.cpp
new file mode 100644 (file)
index 0000000..313bbed
--- /dev/null
@@ -0,0 +1,59 @@
+#include "muscle.h"\r
+#include "msa.h"\r
+#include "tree.h"\r
+#include "profile.h"\r
+#include <stdio.h>\r
+\r
+void RefineTree(MSA &msa, Tree &tree)\r
+       {\r
+       const unsigned uSeqCount = msa.GetSeqCount();\r
+       if (tree.GetLeafCount() != uSeqCount)\r
+               Quit("Refine tree, tree has different number of nodes");\r
+\r
+       if (uSeqCount < 3)\r
+               return;\r
+\r
+#if    DEBUG\r
+       ValidateMuscleIds(msa);\r
+       ValidateMuscleIds(tree);\r
+#endif\r
+\r
+       unsigned *IdToDiffsLeafNodeIndex = new unsigned[uSeqCount];\r
+       unsigned uDiffsCount = uSeqCount;\r
+       Tree Tree2;\r
+       for (unsigned uIter = 0; uIter < g_uMaxTreeRefineIters; ++uIter)\r
+               {\r
+               TreeFromMSA(msa, Tree2, g_Cluster2, g_Distance2, g_Root2, g_pstrDistMxFileName2);\r
+\r
+#if    DEBUG\r
+               ValidateMuscleIds(Tree2);\r
+#endif\r
+\r
+               Tree Diffs;\r
+               DiffTrees(Tree2, tree, Diffs, IdToDiffsLeafNodeIndex);\r
+\r
+               tree.Copy(Tree2);\r
+\r
+               const unsigned uNewDiffsNodeCount = Diffs.GetNodeCount();\r
+               const unsigned uNewDiffsCount = (uNewDiffsNodeCount - 1)/2;\r
+\r
+               if (0 == uNewDiffsCount || uNewDiffsCount >= uDiffsCount)\r
+                       {\r
+                       ProgressStepsDone();\r
+                       break;\r
+                       }\r
+               uDiffsCount = uNewDiffsCount;\r
+\r
+               MSA msa2;\r
+               RealignDiffs(msa, Diffs, IdToDiffsLeafNodeIndex, msa2);\r
+\r
+#if    DEBUG\r
+               ValidateMuscleIds(msa2);\r
+#endif\r
+\r
+               msa.Copy(msa2);\r
+               SetCurrentAlignment(msa);\r
+               }\r
+\r
+       delete[] IdToDiffsLeafNodeIndex;\r
+       }\r