]> git.donarmstrong.com Git - mothur.git/blobdiff - uchime_src/getparents.cpp
added uchime_src folder. added biom parameter to make.shared. added biom as a current...
[mothur.git] / uchime_src / getparents.cpp
diff --git a/uchime_src/getparents.cpp b/uchime_src/getparents.cpp
new file mode 100644 (file)
index 0000000..d82f902
--- /dev/null
@@ -0,0 +1,89 @@
+#include "myutils.h"\r
+#include "chime.h"\r
+#include "ultra.h"\r
+#include <set>\r
+\r
+void AddTargets(Ultra &U, const SeqData &Query, set<unsigned> &TargetIndexes);\r
+\r
+void GetChunkInfo(unsigned L, unsigned &Length, vector<unsigned> &Los)\r
+       {\r
+       Los.clear();\r
+\r
+       if (L <= opt_minchunk)\r
+               {\r
+               Length = L;\r
+               Los.push_back(0);\r
+               return;\r
+               }\r
+\r
+       Length = (L - 1)/opt_chunks + 1;\r
+       if (Length < opt_minchunk)\r
+               Length = opt_minchunk;\r
+\r
+       unsigned Lo = 0;\r
+       for (;;)\r
+               {\r
+               if (Lo + Length >= L)\r
+                       {\r
+                       Lo = L - Length - 1;\r
+                       Los.push_back(Lo);\r
+                       return;\r
+                       }\r
+               Los.push_back(Lo);\r
+               Lo += Length;\r
+               }\r
+       }\r
+\r
+void GetCandidateParents(Ultra &U, const SeqData &QSD, float AbQ,\r
+  vector<unsigned> &Parents)\r
+       {\r
+       Parents.clear();\r
+\r
+       set<unsigned> TargetIndexes;\r
+\r
+       unsigned QL = QSD.L;\r
+\r
+       SeqData QuerySD = QSD;\r
+\r
+       unsigned ChunkLength;\r
+       vector<unsigned> ChunkLos;\r
+       GetChunkInfo(QL, ChunkLength, ChunkLos);\r
+       unsigned ChunkCount = SIZE(ChunkLos);\r
+       for (unsigned ChunkIndex = 0; ChunkIndex < ChunkCount; ++ChunkIndex)\r
+               {\r
+               unsigned Lo = ChunkLos[ChunkIndex];\r
+               asserta(Lo + ChunkLength <= QL);\r
+\r
+               const byte *Chunk = QSD.Seq + Lo;\r
+\r
+       // THIS MESSES UP --self!!\r
+               //char Prefix[32];\r
+               //sprintf(Prefix, "%u|", Lo);\r
+               //string ChunkLabel = string(Prefix) + string(QSD.Label);\r
+\r
+               //QuerySD.Label = ChunkLabel.c_str();\r
+               QuerySD.Seq = Chunk;\r
+               QuerySD.L = ChunkLength;\r
+\r
+               AddTargets(U, QuerySD, TargetIndexes);\r
+\r
+               Lo += ChunkLength;\r
+               }\r
+\r
+       for (set<unsigned>::const_iterator p = TargetIndexes.begin();\r
+         p != TargetIndexes.end(); ++p)\r
+               {\r
+               unsigned TargetIndex = *p;\r
+               bool Accept = true;\r
+               if (AbQ > 0.0f)\r
+                       {\r
+                       const char *TargetLabel = U.GetSeedLabel(TargetIndex);\r
+                       float AbT = GetAbFromLabel(string(TargetLabel));\r
+                       if (AbT > 0.0f && AbT < opt_abskew*AbQ)\r
+                               Accept = false;\r
+                       }\r
+\r
+               if (Accept)\r
+                       Parents.push_back(TargetIndex);\r
+               }\r
+       }\r