1 //uchime by Robert C. Edgar http://drive5.com/uchime This code is donated to the public domain.
\r
15 unsigned GetLength() const
\r
18 Die("HSP::GetLength(): Leni %u, Lenj %u, Loi %u, Loj %u, Score %.1f",
\r
19 Leni, Lenj, Loi, Loj, Score);
\r
24 unsigned GetHii() const
\r
27 return Loi + Leni - 1;
\r
30 unsigned GetHij() const
\r
33 return Loj + Lenj - 1;
\r
46 bool RightA(unsigned LA) const
\r
48 return Loi + Leni == LA;
\r
51 bool RightB(unsigned LB) const
\r
53 return Loj + Lenj == LB;
\r
56 unsigned GetIdCount(const byte *A, const byte *B) const
\r
59 unsigned K = GetLength();
\r
60 for (unsigned k = 0; k < K; ++k)
\r
64 if (toupper(a) == toupper(b))
\r
70 double OverlapFract(const HSPData &HSP) const
\r
72 if (Leni == 0 || Lenj == 0)
\r
75 unsigned MaxLoi = max(Loi, HSP.Loi);
\r
76 unsigned MaxLoj = max(Loj, HSP.Loj);
\r
77 unsigned MinHii = min(GetHii(), HSP.GetHii());
\r
78 unsigned MinHij = min(GetHij(), HSP.GetHij());
\r
80 unsigned Ovi = (MinHii < MaxLoi) ? 0 : MinHii - MaxLoi;
\r
81 unsigned Ovj = (MinHij < MaxLoj) ? 0 : MinHij - MaxLoj;
\r
83 asserta(Ovi <= Leni && Ovj <= Lenj);
\r
84 return double(Ovi*Ovj)/double(Leni*Lenj);
\r
87 bool operator<(const HSPData &rhs) const
\r
89 return Loi < rhs.Loi;
\r
94 Log("Loi=%u Loj=%u Li=%u Lj=%u Score=%.1f\n", Loi, Loj, Leni, Lenj, Score);
\r
99 Log("(%u-%u,%u-%u/%.1f)", Loi, GetHii(), Loj, GetHij(), Score);
\r
112 Log("BP%s Pos %u Ix %u", (IsLo ? "lo" : "hi"), Pos, Index);
\r