8 static void DoSeq(Seq &s, unsigned uSeqIndex, const ProfPos *RootProf,
\r
9 unsigned uRootProfLength, MSA &msaOut)
\r
13 const unsigned uSeqLength = s.Length();
\r
16 msaDummy.SetSize(1, uRootProfLength);
\r
17 msaDummy.SetSeqId(0, 0);
\r
18 msaDummy.SetSeqName(0, "Dummy0");
\r
19 for (unsigned uColIndex = 0; uColIndex < uRootProfLength; ++uColIndex)
\r
20 msaDummy.SetChar(0, uColIndex, '?');
\r
22 ProfPos *SeqProf = ProfileFromMSA(msaSeq);
\r
23 for (unsigned uColIndex = 0; uColIndex < uSeqLength; ++uColIndex)
\r
25 ProfPos &PP = SeqProf[uColIndex];
\r
26 PP.m_scoreGapOpen = MINUS_INFINITY;
\r
27 PP.m_scoreGapClose = MINUS_INFINITY;
\r
31 unsigned uLengthOut;
\r
33 AlignTwoProfs(SeqProf, uSeqLength, 1.0, RootProf, uRootProfLength, 1.0,
\r
34 Path, &ProfOut, &uLengthOut);
\r
35 assert(uLengthOut = uRootProfLength);
\r
39 AlignTwoMSAsGivenPath(Path, msaSeq, msaDummy, msaCombined);
\r
41 msaCombined.LogMe();
\r
42 msaOut.SetSeqName(uSeqIndex, s.GetName());
\r
43 msaOut.SetSeqId(uSeqIndex, s.GetId());
\r
44 for (unsigned uColIndex = 0; uColIndex < uRootProfLength; ++uColIndex)
\r
45 msaOut.SetChar(uSeqIndex, uColIndex, msaCombined.GetChar(0, uColIndex));
\r
48 // Steven Brenner's O(NL^2) proposal for creating a root alignment
\r
49 // Align each sequence to the profile at the root.
\r
50 // Compare the e-string solution, which is O(NL log N).
\r
51 void MakeRootMSABrenner(SeqVect &v, const Tree &GuideTree, ProgNode Nodes[],
\r
54 const unsigned uSeqCount = v.Length();
\r
55 const unsigned uRootNodeIndex = GuideTree.GetRootNodeIndex();
\r
56 const ProfPos *RootProfile = Nodes[uRootNodeIndex].m_Prof;
\r
57 const unsigned uRootColCount = Nodes[uRootNodeIndex].m_uLength;
\r
58 a.SetSize(uSeqCount, uRootColCount);
\r
60 for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)
\r
61 DoSeq(*v[uSeqIndex], uSeqIndex, RootProfile, uRootColCount, a);
\r