1 //uchime by Robert C. Edgar http://drive5.com/uchime This code is donated to the public domain.
\r
10 const float BAD_SCORE = -9e9f;
\r
14 unsigned TargetIndex;
\r
18 float RawScore; // SOMETIMES USED FOR BIT SCORE!!!
\r
19 // unsigned TargetLength;
\r
23 Log("lo %u, hi %u, frame %d, score %.1f\n",
\r
24 TargetLo, TargetHi, QueryFrame, RawScore);
\r
30 unsigned LastHSPIndex;
\r
39 HSPData **m_HSPs; // memory owned elsewhere
\r
40 unsigned m_HSPCount;
\r
41 unsigned m_MaxHSPCount;
\r
45 unsigned *m_PrevHSPIndexes; // Predecessor in chain
\r
46 float *m_HSPIndexToChainScore;
\r
48 list<unsigned> m_Chains; // Live HSP indexes
\r
54 void Clear(bool ctor = false);
\r
55 float Chain(HSPData **HSPs, unsigned HSPCount, HSPData **OptChain,
\r
56 unsigned &OptChainLength);
\r
57 bool ResolveOverlaps(const SeqData &SA, const SeqData &SB, double MinScore,
\r
58 const float * const *SubstMx, HSPData **InHSPs, unsigned InHSPCount,
\r
59 HSPData **OutHSPs, unsigned &OutHSPCount);
\r
60 void ResolveOverlap(HSPData &HSP1, HSPData &HSP2);
\r
62 float ChainBrute(HSPData **HSPs, unsigned HSPCount, HSPData **OptChain,
\r
63 unsigned &OptChainLength);
\r
65 void LogHSPs(HSPData **HSPs, unsigned HSPCount) const;
\r
66 void LogBPs() const;
\r
68 static bool IsValidChain(HSPData **HSPs, unsigned HSPCount);
\r
69 static void AssertValidChain(HSPData **HSPs, unsigned HSPCount);
\r
70 static void LogChain(HSPData **HSPs, unsigned HSPCount);
\r
71 static void LogChain2(HSPData **HSPs, unsigned HSPCount);
\r
72 static float GetChainScore(HSPData **HSPs, unsigned HSPCount);
\r
75 void AllocHSPCount(unsigned MaxHSPCount);
\r
78 unsigned FindBestChainLT(unsigned Ahi, unsigned Bhi);
\r