6 void AddTargets(Ultra &U, const SeqData &Query, set<unsigned> &TargetIndexes);
\r
8 void GetChunkInfo(unsigned L, unsigned &Length, vector<unsigned> &Los)
\r
12 if (L <= opt_minchunk)
\r
19 Length = (L - 1)/opt_chunks + 1;
\r
20 if (Length < opt_minchunk)
\r
21 Length = opt_minchunk;
\r
26 if (Lo + Length >= L)
\r
28 Lo = L - Length - 1;
\r
37 void GetCandidateParents(Ultra &U, const SeqData &QSD, float AbQ,
\r
38 vector<unsigned> &Parents)
\r
42 set<unsigned> TargetIndexes;
\r
44 unsigned QL = QSD.L;
\r
46 SeqData QuerySD = QSD;
\r
48 unsigned ChunkLength;
\r
49 vector<unsigned> ChunkLos;
\r
50 GetChunkInfo(QL, ChunkLength, ChunkLos);
\r
51 unsigned ChunkCount = SIZE(ChunkLos);
\r
52 for (unsigned ChunkIndex = 0; ChunkIndex < ChunkCount; ++ChunkIndex)
\r
54 unsigned Lo = ChunkLos[ChunkIndex];
\r
55 asserta(Lo + ChunkLength <= QL);
\r
57 const byte *Chunk = QSD.Seq + Lo;
\r
59 // THIS MESSES UP --self!!
\r
61 //sprintf(Prefix, "%u|", Lo);
\r
62 //string ChunkLabel = string(Prefix) + string(QSD.Label);
\r
64 //QuerySD.Label = ChunkLabel.c_str();
\r
65 QuerySD.Seq = Chunk;
\r
66 QuerySD.L = ChunkLength;
\r
68 AddTargets(U, QuerySD, TargetIndexes);
\r
73 for (set<unsigned>::const_iterator p = TargetIndexes.begin();
\r
74 p != TargetIndexes.end(); ++p)
\r
76 unsigned TargetIndex = *p;
\r
80 const char *TargetLabel = U.GetSeedLabel(TargetIndex);
\r
81 float AbT = GetAbFromLabel(string(TargetLabel));
\r
82 if (AbT > 0.0f && AbT < opt_abskew*AbQ)
\r
87 Parents.push_back(TargetIndex);
\r