+++ /dev/null
-#include "muscle.h"\r
-#include "msa.h"\r
-#include "seqvect.h"\r
-#include "msa.h"\r
-#include "tree.h"\r
-#include "profile.h"\r
-\r
-void MUSCLE(SeqVect &v, MSA &msaOut)\r
- {\r
- const unsigned uSeqCount = v.Length();\r
-\r
- if (0 == uSeqCount)\r
- Quit("No sequences in input file");\r
-\r
- ALPHA Alpha = ALPHA_Undefined;\r
- switch (g_SeqType)\r
- {\r
- case SEQTYPE_Auto:\r
- Alpha = v.GuessAlpha();\r
- break;\r
-\r
- case SEQTYPE_Protein:\r
- Alpha = ALPHA_Amino;\r
- break;\r
-\r
- case SEQTYPE_RNA:\r
- Alpha = ALPHA_RNA;\r
- break;\r
-\r
- case SEQTYPE_DNA:\r
- Alpha = ALPHA_DNA;\r
- break;\r
-\r
- default:\r
- Quit("Invalid seq type");\r
- }\r
- SetAlpha(Alpha);\r
- v.FixAlpha();\r
-\r
- if (ALPHA_DNA == Alpha || ALPHA_RNA == Alpha)\r
- {\r
- SetPPScore(PPSCORE_SPN);\r
- g_Distance1 = DISTANCE_Kmer4_6;\r
- }\r
-\r
- unsigned uMaxL = 0;\r
- unsigned uTotL = 0;\r
- for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)\r
- {\r
- unsigned L = v.GetSeq(uSeqIndex).Length();\r
- uTotL += L;\r
- if (L > uMaxL)\r
- uMaxL = L;\r
- }\r
-\r
- SetIter(1);\r
- g_bDiags = g_bDiags1;\r
- SetSeqStats(uSeqCount, uMaxL, uTotL/uSeqCount);\r
-\r
- MSA::SetIdCount(uSeqCount);\r
-\r
-//// Initialize sequence ids.\r
-//// From this point on, ids must somehow propogate from here.\r
-// for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)\r
-// v.SetSeqId(uSeqIndex, uSeqIndex);\r
-\r
- if (uSeqCount > 1)\r
- MHackStart(v);\r
-\r
- if (0 == uSeqCount)\r
- {\r
- msaOut.Clear();\r
- return;\r
- }\r
-\r
- if (1 == uSeqCount && ALPHA_Amino == Alpha)\r
- {\r
- const Seq &s = v.GetSeq(0);\r
- msaOut.FromSeq(s);\r
- return;\r
- }\r
-\r
-// First iteration\r
- Tree GuideTree;\r
- TreeFromSeqVect(v, GuideTree, g_Cluster1, g_Distance1, g_Root1);\r
-\r
- SetMuscleTree(GuideTree);\r
-\r
- ProgNode *ProgNodes = 0;\r
- if (g_bLow)\r
- ProgNodes = ProgressiveAlignE(v, GuideTree, msaOut);\r
- else\r
- ProgressiveAlign(v, GuideTree, msaOut);\r
- SetCurrentAlignment(msaOut);\r
-\r
- if (1 == g_uMaxIters || 2 == uSeqCount)\r
- {\r
- MHackEnd(msaOut);\r
- return;\r
- }\r
-\r
- g_bDiags = g_bDiags2;\r
- SetIter(2);\r
-\r
- if (g_bLow)\r
- {\r
- if (0 != g_uMaxTreeRefineIters)\r
- RefineTreeE(msaOut, v, GuideTree, ProgNodes);\r
- }\r
- else\r
- RefineTree(msaOut, GuideTree);\r
-\r
- extern void DeleteProgNode(ProgNode &Node);\r
- const unsigned uNodeCount = GuideTree.GetNodeCount();\r
- for (unsigned uNodeIndex = 0; uNodeIndex < uNodeCount; ++uNodeIndex)\r
- DeleteProgNode(ProgNodes[uNodeIndex]);\r
-\r
- delete[] ProgNodes;\r
- ProgNodes = 0;\r
-\r
- SetSeqWeightMethod(g_SeqWeight2);\r
- SetMuscleTree(GuideTree);\r
-\r
- if (g_bAnchors)\r
- RefineVert(msaOut, GuideTree, g_uMaxIters - 2);\r
- else\r
- RefineHoriz(msaOut, GuideTree, g_uMaxIters - 2, false, false);\r
-\r
- MHackEnd(msaOut);\r
- }\r