1 Star 0 Fork 0

Velcon-Zheng/bowtie

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
search_seeded_phase3.c 4.28 KB
一键复制 编辑 原始数据 按行查看 历史
langmead 提交于 2012-12-15 02:43 . Fixing warnings
/*
* This is a fragment, included from multiple places in ebwt_search.cpp.
* It implements the logic of the third phase of the seeded, quality-
* aware search routine. It is implemented as a code fragment so that
* it can be reused in both the half-index-in-memory and full-index-in-
* memory situations.
*/
{
if(!norc) {
params.setFw(false);
btr3.setReportExacts(true);
btr3.setQuery(patsrc->bufa());
// Get all partial alignments for this read's reverse
// complement
pals.clear();
if(pamRc != NULL && pamRc->size() > 0) {
// We can get away with an unsynchronized call because there
// are no writers for pamRc in this phase
pamRc->getPartialsUnsync(patid, pals);
pamRc->clear(patid);
assert_eq(0, pamRc->size());
}
bool done = false;
if(pals.size() > 0) {
// Partial alignments exist - extend them
// Set up seed bounds
if(qs < s) {
btr3.setOffs(0, 0, qs, qs, qs, qs);
} else {
btr3.setOffs(0, 0, s, s, s, s);
}
for(size_t i = 0; i < pals.size(); i++) {
seqan::clear(muts);
uint8_t oldQuals =
PartialAlignmentManager::toMutsString(
pals[i], patRc, qualRev, muts, !noMaqRound);
// Set the backtracking thresholds appropriately
// Now begin the backtracking, treating the first
// 24 bases as unrevisitable
ASSERT_ONLY(String<Dna5> tmp = patRc);
btr3.setMuts(&muts);
done = btr3.backtrack(oldQuals);
btr3.setMuts(NULL);
assert_eq(tmp, patRc); // assert mutations were undone
if(done) {
// The reverse complement hit, so we're done with this
// read
DONEMASK_SET(patid);
// Got a hit; stop processing partial
// alignments
break;
}
} // Loop over partial alignments
}
seqan::clear(muts);
// Case 4R yielded a hit continue to next pattern
if(done) continue;
// If we're in two-mismatch mode, then now is the time to
// try the final case that might apply to the reverse
// complement pattern: 1 mismatch in each of the 3' and 5'
// halves of the seed.
//bool gaveUp = false;
if(seedMms >= 2) {
btr23.setQuery(patsrc->bufa());
// Set up special seed bounds
if(qs < s) {
btr23.setOffs(qs5, qs,
0, // unrevOff
(seedMms <= 2)? qs5 : 0, // 1revOff
(seedMms < 3 )? qs : qs5, // 2revOff
qs); // 3revOff
} else {
btr23.setOffs(s5, s,
0, // unrevOff
(seedMms <= 2)? s5 : 0, // 1revOff
(seedMms < 3 )? s : s5, // 2revOff
s); // 3revOff
}
done = btr23.backtrack();
//if(btr23.numBacktracks() == btr23.maxBacktracks()) {
// gaveUp = true;
//}
if(done) {
DONEMASK_SET(patid);
btr23.resetNumBacktracks();
continue;
}
btr23.resetNumBacktracks();
}
}
if(nofw) { // no more 1-mm-in-seed hits are possible
//DONEMASK_SET(patid);
continue;
}
// If we reach here, then cases 1F, 2F, 3F, 1R, 2R, 3R and
// 4R have been eliminated leaving only 4F.
params.setFw(true); // looking at forward strand
btf3.setQuery(patsrc->bufa());
btf3.setQlen(seedLen); // just look at the seed
// Set up seed bounds
if(qs < s) {
btf3.setOffs(0, 0,
qs3,
(seedMms > 1)? qs3 : qs,
(seedMms > 2)? qs3 : qs,
(seedMms > 3)? qs3 : qs);
} else {
btf3.setOffs(0, 0,
s3,
(seedMms > 1)? s3 : s,
(seedMms > 2)? s3 : s,
(seedMms > 3)? s3 : s);
}
// Do a 12/24 seedling backtrack on the forward read
// using the normal index. This will find seedlings
// for case 4F
btf3.backtrack();
#ifndef NDEBUG
vector<PartialAlignment> partials;
pamFw->getPartials(patid, partials);
for(size_t i = 0; i < partials.size(); i++) {
uint32_t pos0 = partials[i].entry.pos0;
assert_lt(pos0, s5);
uint8_t oldChar = (uint8_t)patFw[pos0];
assert_neq(oldChar, partials[i].entry.char0);
if(partials[i].entry.pos1 != 0xffff) {
uint32_t pos1 = partials[i].entry.pos1;
assert_lt(pos1, s5);
oldChar = (uint8_t)patFw[pos1];
assert_neq(oldChar, partials[i].entry.char1);
if(partials[i].entry.pos2 != 0xffff) {
uint32_t pos2 = partials[i].entry.pos2;
assert_lt(pos2, s5);
oldChar = (uint8_t)patFw[pos2];
assert_neq(oldChar, partials[i].entry.char2);
}
}
}
#endif
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Velcon-Zheng/bowtie.git
git@gitee.com:Velcon-Zheng/bowtie.git
Velcon-Zheng
bowtie
bowtie
master

搜索帮助