8 void MUSCLE(SeqVect &v, MSA &msaOut)
\r
10 const unsigned uSeqCount = v.Length();
\r
13 Quit("No sequences in input file");
\r
15 ALPHA Alpha = ALPHA_Undefined;
\r
19 Alpha = v.GuessAlpha();
\r
22 case SEQTYPE_Protein:
\r
23 Alpha = ALPHA_Amino;
\r
35 Quit("Invalid seq type");
\r
40 if (ALPHA_DNA == Alpha || ALPHA_RNA == Alpha)
\r
42 SetPPScore(PPSCORE_SPN);
\r
43 g_Distance1 = DISTANCE_Kmer4_6;
\r
48 for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)
\r
50 unsigned L = v.GetSeq(uSeqIndex).Length();
\r
57 g_bDiags = g_bDiags1;
\r
58 SetSeqStats(uSeqCount, uMaxL, uTotL/uSeqCount);
\r
60 MSA::SetIdCount(uSeqCount);
\r
62 //// Initialize sequence ids.
\r
63 //// From this point on, ids must somehow propogate from here.
\r
64 // for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)
\r
65 // v.SetSeqId(uSeqIndex, uSeqIndex);
\r
76 if (1 == uSeqCount && ALPHA_Amino == Alpha)
\r
78 const Seq &s = v.GetSeq(0);
\r
85 TreeFromSeqVect(v, GuideTree, g_Cluster1, g_Distance1, g_Root1);
\r
87 SetMuscleTree(GuideTree);
\r
89 ProgNode *ProgNodes = 0;
\r
91 ProgNodes = ProgressiveAlignE(v, GuideTree, msaOut);
\r
93 ProgressiveAlign(v, GuideTree, msaOut);
\r
94 SetCurrentAlignment(msaOut);
\r
96 if (1 == g_uMaxIters || 2 == uSeqCount)
\r
102 g_bDiags = g_bDiags2;
\r
107 if (0 != g_uMaxTreeRefineIters)
\r
108 RefineTreeE(msaOut, v, GuideTree, ProgNodes);
\r
111 RefineTree(msaOut, GuideTree);
\r
113 extern void DeleteProgNode(ProgNode &Node);
\r
114 const unsigned uNodeCount = GuideTree.GetNodeCount();
\r
115 for (unsigned uNodeIndex = 0; uNodeIndex < uNodeCount; ++uNodeIndex)
\r
116 DeleteProgNode(ProgNodes[uNodeIndex]);
\r
118 delete[] ProgNodes;
\r
121 SetSeqWeightMethod(g_SeqWeight2);
\r
122 SetMuscleTree(GuideTree);
\r
125 RefineVert(msaOut, GuideTree, g_uMaxIters - 2);
\r
127 RefineHoriz(msaOut, GuideTree, g_uMaxIters - 2, false, false);
\r