1 //uchime by Robert C. Edgar http://drive5.com/uchime This code is donated to the public domain.
\r
8 void AddTargets(Ultra &U, const SeqData &Query, set<unsigned> &TargetIndexes);
\r
10 void GetChunkInfo(unsigned L, unsigned &Length, vector<unsigned> &Los)
\r
14 if (L <= opt_minchunk)
\r
21 Length = (L - 1)/opt_chunks + 1;
\r
22 if (Length < opt_minchunk)
\r
23 Length = opt_minchunk;
\r
28 if (Lo + Length >= L)
\r
30 Lo = L - Length - 1;
\r
39 void GetCandidateParents(Ultra &U, const SeqData &QSD, float AbQ,
\r
40 vector<unsigned> &Parents)
\r
44 set<unsigned> TargetIndexes;
\r
46 unsigned QL = QSD.L;
\r
48 SeqData QuerySD = QSD;
\r
50 unsigned ChunkLength;
\r
51 vector<unsigned> ChunkLos;
\r
52 GetChunkInfo(QL, ChunkLength, ChunkLos);
\r
53 unsigned ChunkCount = SIZE(ChunkLos);
\r
54 for (unsigned ChunkIndex = 0; ChunkIndex < ChunkCount; ++ChunkIndex)
\r
56 unsigned Lo = ChunkLos[ChunkIndex];
\r
57 asserta(Lo + ChunkLength <= QL);
\r
59 const byte *Chunk = QSD.Seq + Lo;
\r
61 // THIS MESSES UP --self!!
\r
63 //sprintf(Prefix, "%u|", Lo);
\r
64 //string ChunkLabel = string(Prefix) + string(QSD.Label);
\r
66 //QuerySD.Label = ChunkLabel.c_str();
\r
67 QuerySD.Seq = Chunk;
\r
68 QuerySD.L = ChunkLength;
\r
70 AddTargets(U, QuerySD, TargetIndexes);
\r
75 for (set<unsigned>::const_iterator p = TargetIndexes.begin();
\r
76 p != TargetIndexes.end(); ++p)
\r
78 unsigned TargetIndex = *p;
\r
82 const char *TargetLabel = U.GetSeedLabel(TargetIndex);
\r
83 float AbT = GetAbFromLabel(string(TargetLabel));
\r
84 if (AbT > 0.0f && AbT < opt_abskew*AbQ)
\r
89 Parents.push_back(TargetIndex);
\r