From 13dd59af27e7d142a5f3785d2fef398f8f47671e Mon Sep 17 00:00:00 2001 From: Aaron <aaronquinlan@gmail.com> Date: Sun, 20 May 2012 20:32:58 -0400 Subject: [PATCH] fix off-by-one error in calc. -d for closest --- src/closestBed/closestBed.cpp | 4 +-- test/closest/a.bed | 1 + test/closest/b-one-bp-closer.bed | 1 + test/closest/b.bed | 1 + test/closest/test-closest.sh | 61 ++++++++++++++++++++++++++++++++ test/test.sh | 3 ++ 6 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 test/closest/a.bed create mode 100644 test/closest/b-one-bp-closer.bed create mode 100644 test/closest/b.bed create mode 100644 test/closest/test-closest.sh diff --git a/src/closestBed/closestBed.cpp b/src/closestBed/closestBed.cpp index c2316b23..386cb339 100644 --- a/src/closestBed/closestBed.cpp +++ b/src/closestBed/closestBed.cpp @@ -110,7 +110,7 @@ void BedClosest::FindWindowOverlaps(BED &a, vector<BED> &hits) { } // the hit is to the "left" of A else if (h->end <= a.start) { - curDistance = a.start - h->end; + curDistance = (a.start - h->end) + 1; if (_signDistance) { if ((_strandedDistMode == "ref") || (_strandedDistMode == "a" && a.strand != "-") @@ -146,7 +146,7 @@ void BedClosest::FindWindowOverlaps(BED &a, vector<BED> &hits) { } // the hit is to the "right" of A else if (h->start >= a.end) { - curDistance = h->start - a.end; + curDistance = (h->start - a.end) + 1; if (_signDistance) { if ((_strandedDistMode == "a" && a.strand == "-") || (_strandedDistMode == "b" && h->strand != "-")) { diff --git a/test/closest/a.bed b/test/closest/a.bed new file mode 100644 index 00000000..d6c80bc6 --- /dev/null +++ b/test/closest/a.bed @@ -0,0 +1 @@ +chr1 10 20 diff --git a/test/closest/b-one-bp-closer.bed b/test/closest/b-one-bp-closer.bed new file mode 100644 index 00000000..e14af6d6 --- /dev/null +++ b/test/closest/b-one-bp-closer.bed @@ -0,0 +1 @@ +chr1 19 21 diff --git a/test/closest/b.bed b/test/closest/b.bed new file mode 100644 index 00000000..9853a264 --- /dev/null +++ b/test/closest/b.bed @@ -0,0 +1 @@ +chr1 20 21 diff --git a/test/closest/test-closest.sh b/test/closest/test-closest.sh new file mode 100644 index 00000000..a621e097 --- /dev/null +++ b/test/closest/test-closest.sh @@ -0,0 +1,61 @@ +BT=../../bin/bedtools + +check() +{ + if diff $1 $2; then + echo ok + return 1 + else + echo fail + return 0 + fi +} + +# cat a.bed +# chr1 20 21 + +# cat b.bed +# chr1 20 21 + +# cat b-one-bp-closer.bed +# chr1 19 21 + +########################################################### +# test 1bp apart; checking for off-by-one errors +########################################################### +echo " closest.t1...\c" +echo \ +"chr1 10 20 chr1 20 21 1" > exp +$BT closest -a a.bed -b b.bed -d > obs +check obs exp +rm obs exp + +########################################################### +# test reciprocal of t1 +########################################################### +echo " closest.t2...\c" +echo \ +"chr1 20 21 chr1 10 20 1" > exp +$BT closest -a b.bed -b a.bed -d > obs +check obs exp +rm obs exp + +########################################################### +# test 0bp apart; checking for off-by-one errors +########################################################### +echo " closest.t3...\c" +echo \ +"chr1 10 20 chr1 19 21 0" > exp +$BT closest -a a.bed -b b-one-bp-closer.bed -d > obs +check obs exp +rm obs exp + +########################################################### +# test reciprocal of t3 +########################################################### +echo " closest.t4...\c" +echo \ +"chr1 19 21 chr1 10 20 0" > exp +$BT closest -a b-one-bp-closer.bed -b a.bed -d > obs +check obs exp +rm obs exp diff --git a/test/test.sh b/test/test.sh index 042896f5..5c8df454 100644 --- a/test/test.sh +++ b/test/test.sh @@ -7,6 +7,9 @@ cd bed12tobed6; sh test-bed12tobed6.sh; cd .. echo " Testing bedtools bamtobed:" cd bamtobed; sh test-bamtobed.sh; cd .. +echo " Testing bedtools closest:" +cd closest; sh test-closest.sh; cd .. + echo " Testing bedtools cluster:" cd cluster; sh test-cluster.sh; cd .. -- GitLab