]> git.donarmstrong.com Git - mothur.git/blobdiff - uchime_src/hsp.h
added uchime_src folder. added biom parameter to make.shared. added biom as a current...
[mothur.git] / uchime_src / hsp.h
diff --git a/uchime_src/hsp.h b/uchime_src/hsp.h
new file mode 100644 (file)
index 0000000..339256f
--- /dev/null
@@ -0,0 +1,114 @@
+#ifndef hsp_h\r
+#define hsp_h  1\r
+\r
+struct HSPData\r
+       {\r
+       unsigned Loi;\r
+       unsigned Loj;\r
+       unsigned Leni;\r
+       unsigned Lenj;\r
+       float Score;\r
+       unsigned User;\r
+\r
+       unsigned GetLength() const\r
+               {\r
+               if (Leni != Lenj)\r
+                       Die("HSP::GetLength(): Leni %u, Lenj %u, Loi %u, Loj %u, Score %.1f",\r
+                         Leni, Lenj, Loi, Loj, Score);\r
+\r
+               return Leni;\r
+               }\r
+\r
+       unsigned GetHii() const\r
+               {\r
+               assert(Leni > 0);\r
+               return Loi + Leni - 1;\r
+               }\r
+\r
+       unsigned GetHij() const\r
+               {\r
+               assert(Lenj > 0);\r
+               return Loj + Lenj - 1;\r
+               }\r
+\r
+       bool LeftA() const\r
+               {\r
+               return Loi == 0;\r
+               }\r
+\r
+       bool LeftB() const\r
+               {\r
+               return Loj == 0;\r
+               }\r
+\r
+       bool RightA(unsigned LA) const\r
+               {\r
+               return Loi + Leni == LA;\r
+               }\r
+\r
+       bool RightB(unsigned LB) const\r
+               {\r
+               return Loj + Lenj == LB;\r
+               }\r
+\r
+       unsigned GetIdCount(const byte *A, const byte *B) const\r
+               {\r
+               unsigned Count = 0;\r
+               unsigned K = GetLength();\r
+               for (unsigned k = 0; k < K; ++k)\r
+                       {\r
+                       byte a = A[Loi+k];\r
+                       byte b = B[Loj+k];\r
+                       if (toupper(a) == toupper(b))\r
+                               Count++;\r
+                       }\r
+               return Count;\r
+               }\r
+\r
+       double OverlapFract(const HSPData &HSP) const\r
+               {\r
+               if (Leni == 0 || Lenj == 0)\r
+                       return 0.0;\r
+\r
+               unsigned MaxLoi = max(Loi, HSP.Loi);\r
+               unsigned MaxLoj = max(Loj, HSP.Loj);\r
+               unsigned MinHii = min(GetHii(), HSP.GetHii());\r
+               unsigned MinHij = min(GetHij(), HSP.GetHij());\r
+\r
+               unsigned Ovi = (MinHii < MaxLoi) ? 0 : MinHii - MaxLoi;\r
+               unsigned Ovj = (MinHij < MaxLoj) ? 0 : MinHij - MaxLoj;\r
+\r
+               asserta(Ovi <= Leni && Ovj <= Lenj);\r
+               return double(Ovi*Ovj)/double(Leni*Lenj);\r
+               }\r
+\r
+       bool operator<(const HSPData &rhs) const\r
+               {\r
+               return Loi < rhs.Loi;\r
+               }\r
+\r
+       void LogMe() const\r
+               {\r
+               Log("Loi=%u Loj=%u Li=%u Lj=%u Score=%.1f\n", Loi, Loj, Leni, Lenj, Score);\r
+               }\r
+\r
+       void LogMe2() const\r
+               {\r
+               Log("(%u-%u,%u-%u/%.1f)", Loi, GetHii(), Loj, GetHij(), Score);\r
+               }\r
+       };\r
+\r
+// Bendpoint\r
+struct BPData\r
+       {\r
+       unsigned Pos;\r
+       bool IsLo;\r
+       unsigned Index;\r
+\r
+       void LogMe() const\r
+               {\r
+               Log("BP%s Pos %u Ix %u", (IsLo ? "lo" : "hi"), Pos, Index);\r
+               }\r
+       };\r
+\r
+#endif // hsp_h\r