From 3b468dd32c97ccc4e9f3831678fd0c5b3afbe65d Mon Sep 17 00:00:00 2001
From: Brent Pedersen <bpederse@gmail.com>
Date: Tue, 12 Feb 2013 17:32:24 -0700
Subject: [PATCH] add n_intersections to jaccard output

---
 src/jaccard/jaccard.cpp      | 12 ++++++++----
 src/jaccard/jaccard.h        |  2 +-
 test/jaccard/test-jaccard.sh | 20 ++++++++++----------
 3 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/src/jaccard/jaccard.cpp b/src/jaccard/jaccard.cpp
index dd0979e9..8df39987 100644
--- a/src/jaccard/jaccard.cpp
+++ b/src/jaccard/jaccard.cpp
@@ -53,7 +53,7 @@ Jaccard::~Jaccard(void) {
 }
 
 
-unsigned long Jaccard::GetIntersection() {
+unsigned long Jaccard::GetIntersection(size_t &n_intersections) {
     
     _bedA = new BedFile(_bedAFile);
     _bedB = new BedFile(_bedBFile);
@@ -70,13 +70,15 @@ unsigned long Jaccard::GetIntersection() {
     hit_set.second.reserve(10000);
     while (sweep.Next(hit_set)) {
         I += GetTotalIntersection(hit_set.first, hit_set.second);
+        n_intersections += hit_set.second.size();
     }
     return I;
 }
 
 void Jaccard::CalculateJaccard() {
 
-    unsigned long I = GetIntersection();
+    size_t n_intersections = 0;
+    unsigned long I = GetIntersection(n_intersections);
     
     unsigned long U = _bedA->getTotalFlattenedLength() + \
                       _bedB->getTotalFlattenedLength();
@@ -84,13 +86,15 @@ void Jaccard::CalculateJaccard() {
     // header
     cout << "intersection\t"
          << "union\t"
-         << "jaccard"
+         << "jaccard\t"
+         << "n_intersections"
          << endl;
     
     // result
     cout << I << "\t" 
          << U - I << "\t"
-         << (float) I / ((float) U - (float) I)
+         << (float) I / ((float) U - (float) I) << "\t"
+         << n_intersections
          << endl;
 }
 
diff --git a/src/jaccard/jaccard.h b/src/jaccard/jaccard.h
index f0e3fd77..efdd8628 100644
--- a/src/jaccard/jaccard.h
+++ b/src/jaccard/jaccard.h
@@ -57,7 +57,7 @@ private:
     //------------------------------------------------
     // private methods
     //------------------------------------------------
-    unsigned long GetIntersection();
+    unsigned long GetIntersection(size_t &n_intersections);
     unsigned long GetUnion();
     void CalculateJaccard();
 
diff --git a/test/jaccard/test-jaccard.sh b/test/jaccard/test-jaccard.sh
index d2de0e4a..81e316c5 100644
--- a/test/jaccard/test-jaccard.sh
+++ b/test/jaccard/test-jaccard.sh
@@ -14,8 +14,8 @@ check()
 ###########################################################
 echo "    jaccard.t01...\c"
 echo \
-"intersection	union	jaccard
-110	110	1" > exp
+"intersection	union	jaccard	n_intersections
+110	110	1	2" > exp
 $BT jaccard -a a.bed -b a.bed > obs
 check obs exp
 rm obs exp
@@ -23,16 +23,16 @@ rm obs exp
 
 echo "    jaccard.t02...\c"
 echo \
-"intersection	union	jaccard
-10	140	0.0714286" > exp
+"intersection	union	jaccard	n_intersections
+10	140	0.0714286	1" > exp
 $BT jaccard -a a.bed -b b.bed > obs
 check obs exp
 rm obs exp
 
 echo "    jaccard.t03...\c"
 echo \
-"intersection	union	jaccard
-10	200	0.05" > exp
+"intersection	union	jaccard	n_intersections
+10	200	0.05	1" > exp
 $BT jaccard -a a.bed -b c.bed > obs
 check obs exp
 rm obs exp
@@ -40,8 +40,8 @@ rm obs exp
 
 echo "    jaccard.t04...\c"
 echo \
-"intersection	union	jaccard
-0	210	0" > exp
+"intersection	union	jaccard	n_intersections
+0	210	0	0" > exp
 $BT jaccard -a a.bed -b d.bed > obs
 check obs exp
 rm obs exp
@@ -51,8 +51,8 @@ rm obs exp
 ###########################################################
 echo "    jaccard.t05...\c"
 echo \
-"intersection	union	jaccard
-10	140	0.0714286" > exp
+"intersection	union	jaccard	n_intersections
+10	140	0.0714286	1" > exp
 cat a.bed | $BT jaccard -a - -b b.bed > obs
 check obs exp
 rm obs exp
-- 
GitLab