]> git.donarmstrong.com Git - mothur.git/blobdiff - uchime_src/chainer.h
added uchime_src folder. added biom parameter to make.shared. added biom as a current...
[mothur.git] / uchime_src / chainer.h
diff --git a/uchime_src/chainer.h b/uchime_src/chainer.h
new file mode 100644 (file)
index 0000000..a954dc0
--- /dev/null
@@ -0,0 +1,79 @@
+#ifndef chainer_h\r
+#define chainer_h\r
+\r
+#include "hsp.h"\r
+#include "seq.h"\r
+#include <list>\r
+\r
+const float BAD_SCORE = -9e9f;\r
+\r
+struct TargetHit\r
+       {\r
+       unsigned TargetIndex;\r
+       unsigned TargetLo;\r
+       unsigned TargetHi;\r
+       int QueryFrame;\r
+       float RawScore; // SOMETIMES USED FOR BIT SCORE!!!\r
+//     unsigned TargetLength;\r
+\r
+       void LogMe() const\r
+               {\r
+               Log("lo %u, hi %u, frame %d, score %.1f\n",\r
+                 TargetLo, TargetHi, QueryFrame, RawScore);\r
+               }\r
+       };\r
+\r
+struct ChainData\r
+       {\r
+       unsigned LastHSPIndex;\r
+       unsigned Ahi;\r
+       unsigned Bhi;\r
+       float Score;\r
+       };\r
+\r
+class Chainer\r
+       {\r
+public:\r
+       HSPData **m_HSPs; // memory owned elsewhere\r
+       unsigned m_HSPCount;\r
+       unsigned m_MaxHSPCount;\r
+\r
+       BPData *m_BPs;\r
+\r
+       unsigned *m_PrevHSPIndexes;             // Predecessor in chain\r
+       float *m_HSPIndexToChainScore;\r
+\r
+       list<unsigned> m_Chains;                // Live HSP indexes\r
+\r
+public:\r
+       Chainer();\r
+       ~Chainer();\r
+       void Reset();\r
+       void Clear(bool ctor = false);\r
+       float Chain(HSPData **HSPs, unsigned HSPCount, HSPData **OptChain,\r
+         unsigned &OptChainLength);\r
+       bool ResolveOverlaps(const SeqData &SA, const SeqData &SB, double MinScore,\r
+         const float * const *SubstMx, HSPData **InHSPs, unsigned InHSPCount,\r
+         HSPData **OutHSPs, unsigned &OutHSPCount);\r
+       void ResolveOverlap(HSPData &HSP1, HSPData &HSP2);\r
+\r
+       float ChainBrute(HSPData **HSPs, unsigned HSPCount, HSPData **OptChain,\r
+         unsigned &OptChainLength);\r
+       void LogMe() const;\r
+       void LogHSPs(HSPData **HSPs, unsigned HSPCount) const;\r
+       void LogBPs() const;\r
+\r
+       static bool IsValidChain(HSPData **HSPs, unsigned HSPCount);\r
+       static void AssertValidChain(HSPData **HSPs, unsigned HSPCount);\r
+       static void LogChain(HSPData **HSPs, unsigned HSPCount);\r
+       static void LogChain2(HSPData **HSPs, unsigned HSPCount);\r
+       static float GetChainScore(HSPData **HSPs, unsigned HSPCount);\r
+\r
+private:\r
+       void AllocHSPCount(unsigned MaxHSPCount);\r
+       void SetBPs();\r
+       void SortBPs();\r
+       unsigned FindBestChainLT(unsigned Ahi, unsigned Bhi);\r
+       };\r
+\r
+#endif // chainer_h\r