]> git.donarmstrong.com Git - mothur.git/blob - uchime_src/chainer.h
changes while testing
[mothur.git] / uchime_src / chainer.h
1 #ifndef chainer_h\r
2 #define chainer_h\r
3 \r
4 #include "hsp.h"\r
5 #include "seq.h"\r
6 #include <list>\r
7 \r
8 const float BAD_SCORE = -9e9f;\r
9 \r
10 struct TargetHit\r
11         {\r
12         unsigned TargetIndex;\r
13         unsigned TargetLo;\r
14         unsigned TargetHi;\r
15         int QueryFrame;\r
16         float RawScore; // SOMETIMES USED FOR BIT SCORE!!!\r
17 //      unsigned TargetLength;\r
18 \r
19         void LogMe() const\r
20                 {\r
21                 Log("lo %u, hi %u, frame %d, score %.1f\n",\r
22                   TargetLo, TargetHi, QueryFrame, RawScore);\r
23                 }\r
24         };\r
25 \r
26 struct ChainData\r
27         {\r
28         unsigned LastHSPIndex;\r
29         unsigned Ahi;\r
30         unsigned Bhi;\r
31         float Score;\r
32         };\r
33 \r
34 class Chainer\r
35         {\r
36 public:\r
37         HSPData **m_HSPs; // memory owned elsewhere\r
38         unsigned m_HSPCount;\r
39         unsigned m_MaxHSPCount;\r
40 \r
41         BPData *m_BPs;\r
42 \r
43         unsigned *m_PrevHSPIndexes;             // Predecessor in chain\r
44         float *m_HSPIndexToChainScore;\r
45 \r
46         list<unsigned> m_Chains;                // Live HSP indexes\r
47 \r
48 public:\r
49         Chainer();\r
50         ~Chainer();\r
51         void Reset();\r
52         void Clear(bool ctor = false);\r
53         float Chain(HSPData **HSPs, unsigned HSPCount, HSPData **OptChain,\r
54           unsigned &OptChainLength);\r
55         bool ResolveOverlaps(const SeqData &SA, const SeqData &SB, double MinScore,\r
56           const float * const *SubstMx, HSPData **InHSPs, unsigned InHSPCount,\r
57           HSPData **OutHSPs, unsigned &OutHSPCount);\r
58         void ResolveOverlap(HSPData &HSP1, HSPData &HSP2);\r
59 \r
60         float ChainBrute(HSPData **HSPs, unsigned HSPCount, HSPData **OptChain,\r
61           unsigned &OptChainLength);\r
62         void LogMe() const;\r
63         void LogHSPs(HSPData **HSPs, unsigned HSPCount) const;\r
64         void LogBPs() const;\r
65 \r
66         static bool IsValidChain(HSPData **HSPs, unsigned HSPCount);\r
67         static void AssertValidChain(HSPData **HSPs, unsigned HSPCount);\r
68         static void LogChain(HSPData **HSPs, unsigned HSPCount);\r
69         static void LogChain2(HSPData **HSPs, unsigned HSPCount);\r
70         static float GetChainScore(HSPData **HSPs, unsigned HSPCount);\r
71 \r
72 private:\r
73         void AllocHSPCount(unsigned MaxHSPCount);\r
74         void SetBPs();\r
75         void SortBPs();\r
76         unsigned FindBestChainLT(unsigned Ahi, unsigned Bhi);\r
77         };\r
78 \r
79 #endif // chainer_h\r