Skip to content
Snippets Groups Projects
Commit 4dbc38cd authored by Aaron's avatar Aaron
Browse files

MergeBed now correctly handles a max distance "-d" parameter.

I mistakenly omitted this logic from the new algorithm.
parent b54a8dc0
No related branches found
No related tags found
No related merge requests found
...@@ -37,7 +37,7 @@ BedMerge::BedMerge(string &bedFile, bool &numEntries, int &maxDistance, bool &fo ...@@ -37,7 +37,7 @@ BedMerge::BedMerge(string &bedFile, bool &numEntries, int &maxDistance, bool &fo
_bedFile = bedFile; _bedFile = bedFile;
_numEntries = numEntries; _numEntries = numEntries;
_maxDistance = -1 * maxDistance; _maxDistance = maxDistance;
_forceStrand = forceStrand; _forceStrand = forceStrand;
_reportNames = reportNames; _reportNames = reportNames;
...@@ -123,7 +123,8 @@ void BedMerge::MergeBed() { ...@@ -123,7 +123,8 @@ void BedMerge::MergeBed() {
vector<BED>::const_iterator bedItr = bedList.begin(); vector<BED>::const_iterator bedItr = bedList.begin();
vector<BED>::const_iterator bedEnd = bedList.end(); vector<BED>::const_iterator bedEnd = bedList.end();
for (; bedItr != bedEnd; ++bedItr) { for (; bedItr != bedEnd; ++bedItr) {
if ((int) bedItr->start > end) { // new block, no overlap
if ( (((int) bedItr->start - end) > _maxDistance) || (end < 0)) {
if (start >= 0) { if (start >= 0) {
Report(chrom, start, end, names, mergeCount); Report(chrom, start, end, names, mergeCount);
// reset // reset
...@@ -134,8 +135,9 @@ void BedMerge::MergeBed() { ...@@ -134,8 +135,9 @@ void BedMerge::MergeBed() {
end = bedItr->end; end = bedItr->end;
names[bedItr->name] = true; names[bedItr->name] = true;
} }
// same block, overlaps
else { else {
end = bedItr->end; if ((int) bedItr-> end > end) end = bedItr->end;
mergeCount++; mergeCount++;
names[bedItr->name] = true; names[bedItr->name] = true;
} }
...@@ -189,7 +191,7 @@ void BedMerge::MergeBedStranded() { ...@@ -189,7 +191,7 @@ void BedMerge::MergeBedStranded() {
if (bedItr->strand != strands[s]) { continue; } if (bedItr->strand != strands[s]) { continue; }
else { numOnStrand++; } else { numOnStrand++; }
if ((int) bedItr->start > end) { if ( (((int) bedItr->start - end) > _maxDistance) || (end < 0)) {
if (start >= 0) { if (start >= 0) {
ReportStranded(chrom, start, end, names, mergeCount, strands[s]); ReportStranded(chrom, start, end, names, mergeCount, strands[s]);
// reset // reset
...@@ -201,7 +203,7 @@ void BedMerge::MergeBedStranded() { ...@@ -201,7 +203,7 @@ void BedMerge::MergeBedStranded() {
names[bedItr->name] = true; names[bedItr->name] = true;
} }
else { else {
end = bedItr->end; if ((int) bedItr-> end > end) end = bedItr->end;
mergeCount++; mergeCount++;
names[bedItr->name] = true; names[bedItr->name] = true;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment