From 5c3d96dba87db46c9a9e6a0de14a3d5e77b3424f Mon Sep 17 00:00:00 2001 From: Aaron <aaronquinlan@gmail.com> Date: Thu, 8 Dec 2011 15:36:27 -0500 Subject: [PATCH] Further nullBed tweaking. --- src/intersectBed/intersectBed.cpp | 3 +-- src/utils/bedFile/bedFile.h | 13 ++++++++----- src/utils/chromsweep/chromsweep.cpp | 28 +++++++++++++--------------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/intersectBed/intersectBed.cpp b/src/intersectBed/intersectBed.cpp index 735fd8d7..3581bf2e 100644 --- a/src/intersectBed/intersectBed.cpp +++ b/src/intersectBed/intersectBed.cpp @@ -198,7 +198,7 @@ void BedIntersect::IntersectBed() { vector<BED> hits; hits.reserve(100); - BED a, nullBed; + BED a; // open the "A" file, process each BED entry and searh for overlaps. _bedA->Open(); @@ -226,7 +226,6 @@ void BedIntersect::IntersectBed() { } } } - a = nullBed; } _bedA->Close(); } diff --git a/src/utils/bedFile/bedFile.h b/src/utils/bedFile/bedFile.h index 25475a32..c12066c3 100644 --- a/src/utils/bedFile/bedFile.h +++ b/src/utils/bedFile/bedFile.h @@ -481,6 +481,7 @@ private: istream *_bedStream; string _bedLine; + BED _nullBed; string _header; bool _firstLine; vector<string> _bedFields; @@ -509,14 +510,19 @@ private: */ template <typename T> inline BedLineStatus parseLine (T &bed, const vector<string> &lineVector) { - + + // clear out the data from the last line. + bed = _nullBed; unsigned int numFields = lineVector.size(); // bail out if we have a blank line if (numFields == 0) { return BED_BLANK; } - + // bail out if we have a comment line + if (lineVector[0].find("#") == 0) { + return BED_HEADER; + } if (numFields >= 3) { // line parsing for all lines after the first non-header line @@ -623,7 +629,6 @@ private: bed.name = lineVector[3]; bed.score = lineVector[4]; bed.strand = lineVector[5]; - bed.otherFields.clear(); for (unsigned int i = 6; i < lineVector.size(); ++i) { bed.otherFields.push_back(lineVector[i]); } @@ -677,7 +682,6 @@ private: } if (this->bedType > 2) { - bed.otherFields.clear(); for (unsigned int i = 2; i < numFields; ++i) bed.otherFields.push_back(lineVector[i]); } @@ -717,7 +721,6 @@ private: template <typename T> inline bool parseGffLine (T &bed, const vector<string> &lineVector, int lineNum, unsigned int numFields) { if (numFields == this->bedType) { - bed.otherFields.clear(); if (this->bedType >= 8 && _isGff) { bed.chrom = lineVector[0]; if (isInteger(lineVector[3])) diff --git a/src/utils/chromsweep/chromsweep.cpp b/src/utils/chromsweep/chromsweep.cpp index 70eac679..5027362e 100644 --- a/src/utils/chromsweep/chromsweep.cpp +++ b/src/utils/chromsweep/chromsweep.cpp @@ -62,19 +62,17 @@ ChromSweep::~ChromSweep(void) { void ChromSweep::ScanCache() { - if (_query->_status != BED_INVALID) { - vector<BED>::iterator c = _cache.begin(); - while (c != _cache.end()) - { - if ((_curr_qy.chrom == c->chrom) && !(after(_curr_qy, *c))) { - if (IsValidHit(_curr_qy, *c)) { - _hits.push_back(*c); - } - ++c; - } - else { - c = _cache.erase(c); + vector<BED>::iterator c = _cache.begin(); + while (c != _cache.end()) + { + if ((_curr_qy.chrom == c->chrom) && !(after(_curr_qy, *c))) { + if (IsValidHit(_curr_qy, *c)) { + _hits.push_back(*c); } + ++c; + } + else { + c = _cache.erase(c); } } } @@ -156,7 +154,6 @@ bool ChromSweep::Next(pair<BED, vector<BED> > &next) { _results.push(make_pair(_curr_qy, _hits)); // reset for the next query _hits.clear(); - _curr_qy = _nullBed; _query->GetNextBed(_curr_qy, true); _curr_chrom = _curr_qy.chrom; } @@ -167,7 +164,8 @@ bool ChromSweep::Next(pair<BED, vector<BED> > &next) { _results.pop(); return true; } - // otherwise, the party is over. - else {return false;} + else { + return false; + } } -- GitLab