+++ /dev/null
-#include "muscle.h"\r
-#include <math.h>\r
-#include "tree.h"\r
-#include "seqvect.h"\r
-#include "profile.h"\r
-#include "msa.h"\r
-#include "pwpath.h"\r
-#include "distfunc.h"\r
-\r
-#define TRACE 0\r
-\r
-void ProgressiveAlign(const SeqVect &v, const Tree &GuideTree, MSA &a)\r
- {\r
- assert(GuideTree.IsRooted());\r
-\r
-#if TRACE\r
- Log("GuideTree:\n");\r
- GuideTree.LogMe();\r
-#endif\r
-\r
- const unsigned uSeqCount = v.Length();\r
- const unsigned uNodeCount = 2*uSeqCount - 1;\r
-\r
- ProgNode *ProgNodes = new ProgNode[uNodeCount];\r
-\r
- unsigned uJoin = 0;\r
- unsigned uTreeNodeIndex = GuideTree.FirstDepthFirstNode();\r
- SetProgressDesc("Align node");\r
- do\r
- {\r
- if (GuideTree.IsLeaf(uTreeNodeIndex))\r
- {\r
- if (uTreeNodeIndex >= uNodeCount)\r
- Quit("TreeNodeIndex=%u NodeCount=%u\n", uTreeNodeIndex, uNodeCount);\r
- ProgNode &Node = ProgNodes[uTreeNodeIndex];\r
- unsigned uId = GuideTree.GetLeafId(uTreeNodeIndex);\r
- if (uId >= uSeqCount)\r
- Quit("Seq index out of range");\r
- const Seq &s = *(v[uId]);\r
- Node.m_MSA.FromSeq(s);\r
- Node.m_MSA.SetSeqId(0, uId);\r
- Node.m_uLength = Node.m_MSA.GetColCount();\r
- }\r
- else\r
- {\r
- Progress(uJoin, uSeqCount - 1);\r
- ++uJoin;\r
-\r
- const unsigned uMergeNodeIndex = uTreeNodeIndex;\r
- ProgNode &Parent = ProgNodes[uMergeNodeIndex];\r
-\r
- const unsigned uLeft = GuideTree.GetLeft(uTreeNodeIndex);\r
- const unsigned uRight = GuideTree.GetRight(uTreeNodeIndex);\r
-\r
- ProgNode &Node1 = ProgNodes[uLeft];\r
- ProgNode &Node2 = ProgNodes[uRight];\r
-\r
- PWPath Path;\r
- AlignTwoMSAs(Node1.m_MSA, Node2.m_MSA, Parent.m_MSA, Path);\r
- Parent.m_uLength = Parent.m_MSA.GetColCount();\r
-\r
- Node1.m_MSA.Clear();\r
- Node2.m_MSA.Clear();\r
- }\r
- uTreeNodeIndex = GuideTree.NextDepthFirstNode(uTreeNodeIndex);\r
- }\r
- while (NULL_NEIGHBOR != uTreeNodeIndex);\r
- ProgressStepsDone();\r
-\r
- unsigned uRootNodeIndex = GuideTree.GetRootNodeIndex();\r
- const ProgNode &RootProgNode = ProgNodes[uRootNodeIndex];\r
- a.Copy(RootProgNode.m_MSA);\r
-\r
- delete[] ProgNodes;\r
- ProgNodes = 0;\r
- }\r