6 void Make3Way(const SeqData &QSD, const SeqData &ASD, const SeqData &BSD,
\r
7 const string &PathQA, const string &PathQB,
\r
8 string &Q3, string &A3, string &B3)
\r
18 for (unsigned i = 0; i < SIZE(PathQA); ++i)
\r
21 if (c == 'M' || c == 'D')
\r
23 if (c == 'M' || c == 'I')
\r
26 asserta(QLen == QSD.L);
\r
27 asserta(ALen == ASD.L);
\r
32 for (unsigned i = 0; i < SIZE(PathQB); ++i)
\r
35 if (c == 'M' || c == 'D')
\r
37 if (c == 'M' || c == 'I')
\r
40 asserta(QLen == QSD.L);
\r
41 asserta(BLen == BSD.L);
\r
45 const byte *Q = QSD.Seq;
\r
46 const byte *A = ASD.Seq;
\r
47 const byte *B = BSD.Seq;
\r
49 unsigned LQ = QSD.L;
\r
50 unsigned LA = ASD.L;
\r
51 unsigned LB = BSD.L;
\r
53 vector<unsigned> InsertCountsA(LQ+1, 0);
\r
55 for (unsigned i = 0; i < SIZE(PathQA); ++i)
\r
58 if (c == 'M' || c == 'D')
\r
63 asserta(QPos <= LQ);
\r
64 ++(InsertCountsA[QPos]);
\r
68 vector<unsigned> InsertCountsB(LQ+1, 0);
\r
70 for (unsigned i = 0; i < SIZE(PathQB); ++i)
\r
73 if (c == 'M' || c == 'D')
\r
78 asserta(QPos <= LQ);
\r
79 ++(InsertCountsB[QPos]);
\r
83 vector<unsigned> InsertCounts;
\r
84 for (unsigned i = 0; i <= LQ; ++i)
\r
86 unsigned is = max(InsertCountsA[i], InsertCountsB[i]);
\r
87 InsertCounts.push_back(is);
\r
90 for (unsigned i = 0; i < LQ; ++i)
\r
92 for (unsigned k = 0; k < InsertCounts[i]; ++k)
\r
95 Q3.push_back(toupper(Q[i]));
\r
97 for (unsigned k = 0; k < InsertCounts[LQ]; ++k)
\r
104 for (unsigned i = 0; i < SIZE(PathQA); ++i)
\r
106 char c = PathQA[i];
\r
107 if (c == 'M' || c == 'D')
\r
109 unsigned isq = InsertCounts[QPos];
\r
110 asserta(is <= isq);
\r
111 for (unsigned i = 0; i < InsertCounts[QPos]-is; ++i)
\r
118 asserta(APos < LA);
\r
119 A3.push_back(toupper(A[APos++]));
\r
126 asserta(APos < LA);
\r
127 A3.push_back(toupper(A[APos++]));
\r
130 asserta(is <= InsertCounts[LQ]);
\r
131 for (unsigned k = 0; k < InsertCounts[LQ]-is; ++k)
\r
133 asserta(QPos == LQ);
\r
134 asserta(APos == LA);
\r
140 for (unsigned i = 0; i < SIZE(PathQB); ++i)
\r
142 char c = PathQB[i];
\r
143 if (c == 'M' || c == 'D')
\r
145 asserta(is <= InsertCounts[QPos]);
\r
146 for (unsigned i = 0; i < InsertCounts[QPos]-is; ++i)
\r
153 asserta(BPos < LB);
\r
154 B3.push_back(toupper(B[BPos++]));
\r
161 asserta(BPos < LB);
\r
162 B3.push_back(toupper(B[BPos++]));
\r
165 asserta(is <= InsertCounts[LQ]);
\r
166 for (unsigned k = 0; k < InsertCounts[LQ]-is; ++k)
\r
168 asserta(APos == LA);
\r
169 asserta(BPos == LB);
\r
171 asserta(SIZE(Q3) == SIZE(A3));
\r
172 asserta(SIZE(Q3) == SIZE(B3));
\r