+++ /dev/null
-#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