diff --git a/src/intersectBed/intersectBed.cpp b/src/intersectBed/intersectBed.cpp index 735fd8d7dce3bfd574ac3b446a042ad604c9fa8f..3581bf2eae295fea5ef790ed75082564bcf3e5a3 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 25475a3259b7a6e95c87d9d60f8a0e28bfb3afd7..c12066c334460538402c43094a1f301d64487f28 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 70eac67948001a85142e79763b9f28bebf0643e3..5027362eda63595f2d273cbf12eb30db1c2be8b6 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; + } }