]> git.donarmstrong.com Git - mothur.git/blob - chainer.h
7f541311e721e6778fd3b5312266fd3578fa5d42
[mothur.git] / chainer.h
1 //uchime by Robert C. Edgar http://drive5.com/uchime This code is donated to the public domain.\r
2 \r
3 #ifndef chainer_h\r
4 #define chainer_h\r
5 \r
6 #include "hsp.h"\r
7 #include "seq.h"\r
8 #include <list>\r
9 \r
10 const float BAD_SCORE = -9e9f;\r
11 \r
12 struct TargetHit\r
13         {\r
14         unsigned TargetIndex;\r
15         unsigned TargetLo;\r
16         unsigned TargetHi;\r
17         int QueryFrame;\r
18         float RawScore; // SOMETIMES USED FOR BIT SCORE!!!\r
19 //      unsigned TargetLength;\r
20 \r
21         void LogMe() const\r
22                 {\r
23                 Log("lo %u, hi %u, frame %d, score %.1f\n",\r
24                   TargetLo, TargetHi, QueryFrame, RawScore);\r
25                 }\r
26         };\r
27 \r
28 struct ChainData\r
29         {\r
30         unsigned LastHSPIndex;\r
31         unsigned Ahi;\r
32         unsigned Bhi;\r
33         float Score;\r
34         };\r
35 \r
36 class Chainer\r
37         {\r
38 public:\r
39         HSPData **m_HSPs; // memory owned elsewhere\r
40         unsigned m_HSPCount;\r
41         unsigned m_MaxHSPCount;\r
42 \r
43         BPData *m_BPs;\r
44 \r
45         unsigned *m_PrevHSPIndexes;             // Predecessor in chain\r
46         float *m_HSPIndexToChainScore;\r
47 \r
48         list<unsigned> m_Chains;                // Live HSP indexes\r
49 \r
50 public:\r
51         Chainer();\r
52         ~Chainer();\r
53         void Reset();\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
61 \r
62         float ChainBrute(HSPData **HSPs, unsigned HSPCount, HSPData **OptChain,\r
63           unsigned &OptChainLength);\r
64         void LogMe() const;\r
65         void LogHSPs(HSPData **HSPs, unsigned HSPCount) const;\r
66         void LogBPs() const;\r
67 \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
73 \r
74 private:\r
75         void AllocHSPCount(unsigned MaxHSPCount);\r
76         void SetBPs();\r
77         void SortBPs();\r
78         unsigned FindBestChainLT(unsigned Ahi, unsigned Bhi);\r
79         };\r
80 \r
81 #endif // chainer_h\r