From 952088e84d0193712340169b8d5118e0467aa1e1 Mon Sep 17 00:00:00 2001
From: arq5x <arq5x@virginia.edu>
Date: Mon, 3 Feb 2014 16:18:14 -0500
Subject: [PATCH] add -valueOnly option to jaccard

---
 src/jaccard/jaccard.cpp     | 35 ++++++++++++++++++++++-------------
 src/jaccard/jaccard.h       |  4 +++-
 src/jaccard/jaccardMain.cpp |  7 ++++++-
 3 files changed, 31 insertions(+), 15 deletions(-)

diff --git a/src/jaccard/jaccard.cpp b/src/jaccard/jaccard.cpp
index 0c22fa8d..147ee4e0 100644
--- a/src/jaccard/jaccard.cpp
+++ b/src/jaccard/jaccard.cpp
@@ -34,12 +34,14 @@ size_t Jaccard::GetTotalIntersection(const BED &a, const vector<BED> &hits)
     Constructor
 */
 Jaccard::Jaccard(string bedAFile, string bedBFile, 
-                 float overlapFraction, bool reciprocal)
+                 float overlapFraction, bool reciprocal,
+                 bool valueOnly)
 {
     _bedAFile            = bedAFile;
     _bedBFile            = bedBFile;
     _overlapFraction     = overlapFraction;
     _reciprocal          = reciprocal;
+    _valueOnly           = valueOnly;
 
         
     CalculateJaccard();
@@ -83,19 +85,26 @@ void Jaccard::CalculateJaccard() {
     unsigned long U = _bedA->getTotalFlattenedLength() + \
                       _bedB->getTotalFlattenedLength();
     
-    // header
-    cout << "intersection\t"
-         << "union-intersection\t"
-         << "jaccard\t"
-         << "n_intersections"
-         << endl;
+    float jaccard_stat = (float) I / ((float) U - (float) I);
     
-    // result
-    cout << I << "\t" 
-         << U - I << "\t"
-         << (float) I / ((float) U - (float) I) << "\t"
-         << n_intersections
-         << endl;
+    if (!_valueOnly) {
+        // header
+        cout << "intersection\t"
+           << "union-intersection\t"
+           << "jaccard\t"
+           << "n_intersections"
+           << endl;
+
+        // result
+        cout << I << "\t" 
+           << U - I << "\t"
+           << jaccard_stat << "\t"
+           << n_intersections
+           << endl;
+    }
+    else {
+        cout << jaccard_stat << endl;
+    }
 }
 
 
diff --git a/src/jaccard/jaccard.h b/src/jaccard/jaccard.h
index efdd8628..2badb00c 100644
--- a/src/jaccard/jaccard.h
+++ b/src/jaccard/jaccard.h
@@ -35,7 +35,8 @@ public:
 
     // constructor
     Jaccard(string bedAFile, string bedBFile, 
-            float overlapFraction, bool reciprocal);
+            float overlapFraction, bool reciprocal,
+            bool valueOnly);
 
     // destructor
     ~Jaccard(void);
@@ -49,6 +50,7 @@ private:
     string _bedBFile;
 
     bool  _reciprocal;
+    bool  _valueOnly;
     float _overlapFraction;
 
     // instance of a bed file class.
diff --git a/src/jaccard/jaccardMain.cpp b/src/jaccard/jaccardMain.cpp
index cc175d17..683306d5 100644
--- a/src/jaccard/jaccardMain.cpp
+++ b/src/jaccard/jaccardMain.cpp
@@ -40,6 +40,7 @@ int jaccard_main(int argc, char* argv[]) {
     bool haveBedB           = false;
     bool haveFraction       = false;
     bool reciprocalFraction = false;
+    bool valueOnly = false;
 
     // check to see if we should print out some help
     if(argc <= 1) showHelp = true;
@@ -84,6 +85,9 @@ int jaccard_main(int argc, char* argv[]) {
         else if(PARAMETER_CHECK("-r", 2, parameterLength)) {
             reciprocalFraction = true;
         }
+        else if(PARAMETER_CHECK("-valueOnly", 10, parameterLength)) {
+            valueOnly = true;
+        }
         else {
             cerr << endl 
                  << "*****ERROR: Unrecognized parameter: " 
@@ -108,7 +112,8 @@ int jaccard_main(int argc, char* argv[]) {
     if (!showHelp) {
 
         Jaccard *j = new Jaccard(bedAFile, bedBFile,
-                                 overlapFraction, reciprocalFraction);
+                                 overlapFraction, reciprocalFraction,
+                                 valueOnly);
         delete j;
         return 0;
     }
-- 
GitLab