5 SCORE FastScorePath2(const ProfPos *PA, unsigned uLengthA,
\r
6 const ProfPos *PB, unsigned uLengthB, const PWPath &Path)
\r
8 const unsigned uEdgeCount = Path.GetEdgeCount();
\r
9 Log("Edge SS PLA PLB Match Gap Total\n");
\r
10 Log("---- -- --- --- ----- --- -----\n");
\r
12 SCORE scoreTotal = 0;
\r
13 for (unsigned uEdgeIndex = 0; uEdgeIndex < uEdgeCount; ++uEdgeIndex)
\r
15 const PWEdge &Edge = Path.GetEdge(uEdgeIndex);
\r
16 const char cPrevType = cType;
\r
18 const unsigned uPrefixLengthA = Edge.uPrefixLengthA;
\r
19 const unsigned uPrefixLengthB = Edge.uPrefixLengthB;
\r
21 bool bMatch = false;
\r
23 SCORE scoreMatch = 0;
\r
29 if (0 == uPrefixLengthA || 0 == uPrefixLengthB)
\r
30 Quit("FastScorePath2, M zero length");
\r
32 const ProfPos &PPA = PA[uPrefixLengthA - 1];
\r
33 const ProfPos &PPB = PB[uPrefixLengthB - 1];
\r
36 scoreMatch = ScoreProfPos2(PPA, PPB);
\r
38 if ('D' == cPrevType)
\r
41 assert(uPrefixLengthA > 1);
\r
42 scoreGap = PA[uPrefixLengthA-2].m_scoreGapClose;
\r
44 else if ('I' == cPrevType)
\r
47 assert(uPrefixLengthB > 1);
\r
48 scoreGap = PB[uPrefixLengthB-2].m_scoreGapClose;
\r
55 if (0 == uPrefixLengthA)
\r
56 Quit("FastScorePath2, D zero length");
\r
58 const ProfPos &PPA = PA[uPrefixLengthA - 1];
\r
63 scoreGap = PPA.m_scoreGapOpen;
\r
66 scoreGap = PPA.m_scoreGapOpen;
\r
69 // scoreGap = g_scoreGapExtend;
\r
73 Quit("FastScorePath2 DI");
\r
80 if (0 == uPrefixLengthB)
\r
81 Quit("FastScorePath2, I zero length");
\r
83 const ProfPos &PPB = PB[uPrefixLengthB - 1];
\r
88 scoreGap = PPB.m_scoreGapOpen;
\r
91 scoreGap = PPB.m_scoreGapOpen;
\r
95 // scoreGap = g_scoreGapExtend;
\r
98 Quit("FastScorePath2 DI");
\r
105 Quit("FastScorePath2 U");
\r
109 Quit("FastScorePath2: invalid type %c", cType);
\r
112 Log("%4u %c%c %4u %4u ", uEdgeIndex, cPrevType, cType,
\r
113 uPrefixLengthA, uPrefixLengthB);
\r
115 Log("%7.1f ", scoreMatch);
\r
119 Log("%7.1f ", scoreGap);
\r
122 SCORE scoreEdge = scoreMatch + scoreGap;
\r
123 scoreTotal += scoreEdge;
\r
124 Log("%7.1f %7.1f", scoreEdge, scoreTotal);
\r
128 SCORE scoreGap = 0;
\r
129 // if (!g_bTermGapsHalf)
\r
138 const ProfPos &LastPPA = PA[uLengthA - 1];
\r
139 scoreGap = LastPPA.m_scoreGapClose;
\r
145 const ProfPos &LastPPB = PB[uLengthB - 1];
\r
146 scoreGap = LastPPB.m_scoreGapClose;
\r
151 Quit("Unaligned regions not supported");
\r
157 Quit("Invalid type %c", cType);
\r
160 Log(" %cE %4u %4u %7.1f\n", cType, uLengthA, uLengthB, scoreGap);
\r
161 scoreTotal += scoreGap;
\r
163 Log("Total = %g\n", scoreTotal);
\r