Blob Blame History Raw
From 107f803ec758427839c674be2af13742f0e2404f Mon Sep 17 00:00:00 2001
From: Neil Kindlon <nek3d@d-128-109-67.bootp.Virginia.EDU>
Date: Thu, 4 Jun 2015 16:53:35 -0400
Subject: [PATCH] Added -mean to coverage w/ unit test

---
 src/coverageFile/coverageFile.cpp      |  19 +-
 src/coverageFile/coverageFile.h        |   1 +
 src/coverageFile/coverageHelp.cpp      |   2 +
 src/utils/Contexts/ContextCoverage.cpp |  21 +-
 src/utils/Contexts/ContextCoverage.h   |   6 +-
 test/coverage/test-coverage.sh         | 587 ++++++++++++++++++---------------
 6 files changed, 358 insertions(+), 278 deletions(-)

diff --git a/src/coverageFile/coverageFile.cpp b/src/coverageFile/coverageFile.cpp
index 57a6a24..859cfdc 100644
--- a/src/coverageFile/coverageFile.cpp
+++ b/src/coverageFile/coverageFile.cpp
@@ -47,6 +47,10 @@ void CoverageFile::processHits(RecordOutputMgr *outputMgr, RecordKeyVector &hits
 		   doPerBase(outputMgr, hits);
 		   break;
 
+	   case ContextCoverage::MEAN:
+		   doMean(outputMgr, hits);
+		   break;
+
 	   case ContextCoverage::HIST:
 		   doHist(outputMgr, hits);
 		   break;
@@ -55,6 +59,7 @@ void CoverageFile::processHits(RecordOutputMgr *outputMgr, RecordKeyVector &hits
 	   default:
 		   doDefault(outputMgr, hits);
 		   break;
+
 	   }
 
 }
@@ -139,7 +144,7 @@ void CoverageFile::doCounts(RecordOutputMgr *outputMgr, RecordKeyVector &hits)
 
 void CoverageFile::doPerBase(RecordOutputMgr *outputMgr, RecordKeyVector &hits)
 {
-	//loop through all bases in query, printing full record and metrcis for each
+	//loop through all bases in query, printing full record and metrics for each
 	const Record * queryRec = hits.getKey();
 	for (size_t i= 0; i < _queryLen; i++) {
 		_finalOutput = i +1;
@@ -150,6 +155,17 @@ void CoverageFile::doPerBase(RecordOutputMgr *outputMgr, RecordKeyVector &hits)
 	}
 }
 
+void CoverageFile::doMean(RecordOutputMgr *outputMgr, RecordKeyVector &hits)
+{
+	size_t sum =0;
+	for (size_t i= 0; i < _queryLen; i++) {
+		sum += _depthArray[i];
+	}
+	format((float)sum / (float)_queryLen);
+	outputMgr->printRecord(hits.getKey(), _finalOutput);
+}
+
+
 void CoverageFile::doHist(RecordOutputMgr *outputMgr, RecordKeyVector &hits)
 {
 	//make a map of depths to num bases with that depth
@@ -200,4 +216,3 @@ void CoverageFile::format(float val)
 	sprintf(_floatValBuf, "%0.7f", val);
    _finalOutput.append(_floatValBuf);
 }
-
diff --git a/src/coverageFile/coverageFile.h b/src/coverageFile/coverageFile.h
index 414f636..e5b3ce9 100644
--- a/src/coverageFile/coverageFile.h
+++ b/src/coverageFile/coverageFile.h
@@ -43,6 +43,7 @@ class CoverageFile : public IntersectFile {
 
 	void doCounts(RecordOutputMgr *outputMgr, RecordKeyVector &hits);
 	void doPerBase(RecordOutputMgr *outputMgr, RecordKeyVector &hits);
+	void doMean(RecordOutputMgr *outputMgr, RecordKeyVector &hits);
 	void doHist(RecordOutputMgr *outputMgr, RecordKeyVector &hits);
 	void doDefault(RecordOutputMgr *outputMgr, RecordKeyVector &hits);
 
diff --git a/src/coverageFile/coverageHelp.cpp b/src/coverageFile/coverageHelp.cpp
index b7686e9..8425f0d 100644
--- a/src/coverageFile/coverageHelp.cpp
+++ b/src/coverageFile/coverageHelp.cpp
@@ -34,6 +34,8 @@ void coverage_help(void) {
     
     cerr << "\t-counts\t"       << "Only report the count of overlaps, don't compute fraction, etc." << endl << endl;
 
+    cerr << "\t-mean\t"       	<< "Report the mean depth of all positions in each A feature." << endl << endl;
+
 
     IntersectCommonHelp();
     sortedHelp();
diff --git a/src/utils/Contexts/ContextCoverage.cpp b/src/utils/Contexts/ContextCoverage.cpp
index b2b2b60..1dce8f2 100644
--- a/src/utils/Contexts/ContextCoverage.cpp
+++ b/src/utils/Contexts/ContextCoverage.cpp
@@ -11,9 +11,12 @@ ContextCoverage::ContextCoverage()
 : _count(false),
   _perBase(false),
   _showHist(false),
-  _coverageType(DEFAULT)
+  _coverageType(DEFAULT),
+  _usingColOps(false)
 {
 	setExplicitBedOutput(true); //do not allow BAM output
+	setColumnOpsMethods(true);
+
 
 }
 
@@ -36,6 +39,10 @@ bool ContextCoverage::parseCmdArgs(int argc, char **argv, int skipFirstArgs) {
 		if (strcmp(_argv[_i], "-hist") == 0) {
 			if (!handle_hist()) return false;
 		}
+		if (strcmp(_argv[_i], "-mean") == 0) {
+			if (!handle_mean()) return false;
+		}
+
 	}
 	return ContextIntersect::parseCmdArgs(argc, argv, _skipFirstArgs);
 }
@@ -46,8 +53,8 @@ bool ContextCoverage::isValidState()
 		return false;
 	}
 	//Can only use one output option. Were two or more set?
-	if (((int)_count + (int)_perBase + (int)_showHist) > 1) {
-		_errorMsg = "\n***** ERROR: -counts, -d, and -hist are mutually exclusive options. *****";
+	if (((int)_count + (int)_perBase + (int)_showHist) + (int)_mean > 1) {
+		_errorMsg = "\n***** ERROR: -counts, -d, -mean, and -hist are all mutually exclusive options. *****";
 		return false;
 	}
 
@@ -76,3 +83,11 @@ bool ContextCoverage::handle_hist()
 	markUsed(_i - _skipFirstArgs);
 	return true;
 }
+
+bool ContextCoverage::handle_mean()
+{
+	_mean = true;
+	_coverageType = MEAN;
+	markUsed(_i - _skipFirstArgs);
+	return true;
+}
diff --git a/src/utils/Contexts/ContextCoverage.h b/src/utils/Contexts/ContextCoverage.h
index 5a7b6b0..0c17beb 100644
--- a/src/utils/Contexts/ContextCoverage.h
+++ b/src/utils/Contexts/ContextCoverage.h
@@ -19,18 +19,22 @@ class ContextCoverage : public ContextIntersect {
     virtual bool hasIntersectMethods() const { return true; }
     virtual bool isValidState();
 
-    typedef enum { DEFAULT, COUNT, PER_BASE, HIST } coverageType;
+    typedef enum { DEFAULT, COUNT, PER_BASE, HIST, MEAN } coverageType;
     coverageType getCoverageType() const { return _coverageType; }
+    virtual bool usingColOps() const { return _usingColOps; }
 
 private:
     bool _count;
     bool _perBase;
     bool _showHist;
+    bool _mean;
     coverageType _coverageType;
+    bool _usingColOps;
 
 	bool handle_c();
 	bool handle_d();
 	bool handle_hist();
+	bool handle_mean();
 
 
 };
diff --git a/test/coverage/test-coverage.sh b/test/coverage/test-coverage.sh
index 8ea4f41..71a124d 100644
--- a/test/coverage/test-coverage.sh
+++ b/test/coverage/test-coverage.sh
@@ -41,12 +41,12 @@ rm *.bam
 echo "    coverage.t2...\c"
 echo \
 "chr1	20	70	6	25	+	2	50	50	1.0000000
-chr1	50	100	1	25	-	2	50	50	1.0000000
-chr1	200	250	3	25	+	1	50	50	1.0000000
-chr2	80	130	5	25	-	1	50	50	1.0000000
-chr2	150	200	4	25	+	2	50	50	1.0000000
-chr2	180	230	2	25	-	2	50	50	1.0000000" > exp
-$BT coverage -a a.bed -b a.bed > obs
+chr1	50	100	1	25	-	5	50	50	1.0000000
+chr1	200	250	3	25	+	4	38	50	0.7600000
+chr2	80	130	5	25	-	6	50	50	1.0000000
+chr2	150	200	4	25	+	7	50	50	1.0000000
+chr2	180	230	2	25	-	6	50	50	1.0000000" > exp
+$BT coverage -a a.bed -b b.bed > obs
 check exp obs
 rm exp obs
 
@@ -57,12 +57,12 @@ rm exp obs
 echo "    coverage.t3...\c"
 echo \
 "chr1	20	70	6	25	+	2
-chr1	50	100	1	25	-	2
-chr1	200	250	3	25	+	1
-chr2	80	130	5	25	-	1
-chr2	150	200	4	25	+	2
-chr2	180	230	2	25	-	2" > exp
-$BT coverage -a a.bed -b a.bed -counts > obs
+chr1	50	100	1	25	-	5
+chr1	200	250	3	25	+	4
+chr2	80	130	5	25	-	6
+chr2	150	200	4	25	+	7
+chr2	180	230	2	25	-	6" > exp
+$BT coverage -a a.bed -b b.bed -counts > obs
 check exp obs
 rm exp obs
 
@@ -73,19 +73,32 @@ rm exp obs
 ##################################################################
 echo "    coverage.t4...\c"
 echo \
-"chr1	20	70	6	25	+	1	30	50	0.6000000
-chr1	20	70	6	25	+	2	20	50	0.4000000
-chr1	50	100	1	25	-	1	30	50	0.6000000
-chr1	50	100	1	25	-	2	20	50	0.4000000
-chr1	200	250	3	25	+	1	50	50	1.0000000
-chr2	80	130	5	25	-	1	50	50	1.0000000
-chr2	150	200	4	25	+	1	30	50	0.6000000
-chr2	150	200	4	25	+	2	20	50	0.4000000
-chr2	180	230	2	25	-	1	30	50	0.6000000
-chr2	180	230	2	25	-	2	20	50	0.4000000
-all	1	220	300	0.7333333
-all	2	80	300	0.2666667" > exp
-$BT coverage -a a.bed -b a.bed -hist > obs
+"chr1	20	70	6	25	+	2	50	50	1.0000000
+chr1	50	100	1	25	-	2	40	50	0.8000000
+chr1	50	100	1	25	-	3	10	50	0.2000000
+chr1	200	250	3	25	+	0	12	50	0.2400000
+chr1	200	250	3	25	+	1	20	50	0.4000000
+chr1	200	250	3	25	+	2	11	50	0.2200000
+chr1	200	250	3	25	+	3	4	50	0.0800000
+chr1	200	250	3	25	+	4	3	50	0.0600000
+chr2	80	130	5	25	-	3	46	50	0.9200000
+chr2	80	130	5	25	-	4	4	50	0.0800000
+chr2	150	200	4	25	+	5	22	50	0.4400000
+chr2	150	200	4	25	+	6	28	50	0.5600000
+chr2	180	230	2	25	-	1	16	50	0.3200000
+chr2	180	230	2	25	-	2	2	50	0.0400000
+chr2	180	230	2	25	-	3	6	50	0.1200000
+chr2	180	230	2	25	-	4	4	50	0.0800000
+chr2	180	230	2	25	-	5	13	50	0.2600000
+chr2	180	230	2	25	-	6	9	50	0.1800000
+all	0	12	300	0.0400000
+all	1	36	300	0.1200000
+all	2	103	300	0.3433333
+all	3	66	300	0.2200000
+all	4	11	300	0.0366667
+all	5	35	300	0.1166667
+all	6	37	300	0.1233333" > exp
+$BT coverage -a a.bed -b b.bed -hist > obs
 check exp obs
 rm exp obs
 
@@ -94,36 +107,36 @@ rm exp obs
 ##################################################################
 echo "    coverage.t5...\c"
 echo \
-"chr1	20	70	6	25	+	1	1
-chr1	20	70	6	25	+	2	1
-chr1	20	70	6	25	+	3	1
-chr1	20	70	6	25	+	4	1
-chr1	20	70	6	25	+	5	1
-chr1	20	70	6	25	+	6	1
-chr1	20	70	6	25	+	7	1
-chr1	20	70	6	25	+	8	1
-chr1	20	70	6	25	+	9	1
-chr1	20	70	6	25	+	10	1
-chr1	20	70	6	25	+	11	1
-chr1	20	70	6	25	+	12	1
-chr1	20	70	6	25	+	13	1
-chr1	20	70	6	25	+	14	1
-chr1	20	70	6	25	+	15	1
-chr1	20	70	6	25	+	16	1
-chr1	20	70	6	25	+	17	1
-chr1	20	70	6	25	+	18	1
-chr1	20	70	6	25	+	19	1
-chr1	20	70	6	25	+	20	1
-chr1	20	70	6	25	+	21	1
-chr1	20	70	6	25	+	22	1
-chr1	20	70	6	25	+	23	1
-chr1	20	70	6	25	+	24	1
-chr1	20	70	6	25	+	25	1
-chr1	20	70	6	25	+	26	1
-chr1	20	70	6	25	+	27	1
-chr1	20	70	6	25	+	28	1
-chr1	20	70	6	25	+	29	1
-chr1	20	70	6	25	+	30	1
+"chr1	20	70	6	25	+	1	2
+chr1	20	70	6	25	+	2	2
+chr1	20	70	6	25	+	3	2
+chr1	20	70	6	25	+	4	2
+chr1	20	70	6	25	+	5	2
+chr1	20	70	6	25	+	6	2
+chr1	20	70	6	25	+	7	2
+chr1	20	70	6	25	+	8	2
+chr1	20	70	6	25	+	9	2
+chr1	20	70	6	25	+	10	2
+chr1	20	70	6	25	+	11	2
+chr1	20	70	6	25	+	12	2
+chr1	20	70	6	25	+	13	2
+chr1	20	70	6	25	+	14	2
+chr1	20	70	6	25	+	15	2
+chr1	20	70	6	25	+	16	2
+chr1	20	70	6	25	+	17	2
+chr1	20	70	6	25	+	18	2
+chr1	20	70	6	25	+	19	2
+chr1	20	70	6	25	+	20	2
+chr1	20	70	6	25	+	21	2
+chr1	20	70	6	25	+	22	2
+chr1	20	70	6	25	+	23	2
+chr1	20	70	6	25	+	24	2
+chr1	20	70	6	25	+	25	2
+chr1	20	70	6	25	+	26	2
+chr1	20	70	6	25	+	27	2
+chr1	20	70	6	25	+	28	2
+chr1	20	70	6	25	+	29	2
+chr1	20	70	6	25	+	30	2
 chr1	20	70	6	25	+	31	2
 chr1	20	70	6	25	+	32	2
 chr1	20	70	6	25	+	33	2
@@ -164,54 +177,54 @@ chr1	50	100	1	25	-	17	2
 chr1	50	100	1	25	-	18	2
 chr1	50	100	1	25	-	19	2
 chr1	50	100	1	25	-	20	2
-chr1	50	100	1	25	-	21	1
-chr1	50	100	1	25	-	22	1
-chr1	50	100	1	25	-	23	1
-chr1	50	100	1	25	-	24	1
-chr1	50	100	1	25	-	25	1
-chr1	50	100	1	25	-	26	1
-chr1	50	100	1	25	-	27	1
-chr1	50	100	1	25	-	28	1
-chr1	50	100	1	25	-	29	1
-chr1	50	100	1	25	-	30	1
-chr1	50	100	1	25	-	31	1
-chr1	50	100	1	25	-	32	1
-chr1	50	100	1	25	-	33	1
-chr1	50	100	1	25	-	34	1
-chr1	50	100	1	25	-	35	1
-chr1	50	100	1	25	-	36	1
-chr1	50	100	1	25	-	37	1
-chr1	50	100	1	25	-	38	1
-chr1	50	100	1	25	-	39	1
-chr1	50	100	1	25	-	40	1
-chr1	50	100	1	25	-	41	1
-chr1	50	100	1	25	-	42	1
-chr1	50	100	1	25	-	43	1
-chr1	50	100	1	25	-	44	1
-chr1	50	100	1	25	-	45	1
-chr1	50	100	1	25	-	46	1
-chr1	50	100	1	25	-	47	1
-chr1	50	100	1	25	-	48	1
-chr1	50	100	1	25	-	49	1
-chr1	50	100	1	25	-	50	1
-chr1	200	250	3	25	+	1	1
-chr1	200	250	3	25	+	2	1
-chr1	200	250	3	25	+	3	1
-chr1	200	250	3	25	+	4	1
-chr1	200	250	3	25	+	5	1
-chr1	200	250	3	25	+	6	1
-chr1	200	250	3	25	+	7	1
-chr1	200	250	3	25	+	8	1
-chr1	200	250	3	25	+	9	1
-chr1	200	250	3	25	+	10	1
-chr1	200	250	3	25	+	11	1
-chr1	200	250	3	25	+	12	1
-chr1	200	250	3	25	+	13	1
-chr1	200	250	3	25	+	14	1
-chr1	200	250	3	25	+	15	1
-chr1	200	250	3	25	+	16	1
-chr1	200	250	3	25	+	17	1
-chr1	200	250	3	25	+	18	1
+chr1	50	100	1	25	-	21	2
+chr1	50	100	1	25	-	22	2
+chr1	50	100	1	25	-	23	2
+chr1	50	100	1	25	-	24	2
+chr1	50	100	1	25	-	25	3
+chr1	50	100	1	25	-	26	2
+chr1	50	100	1	25	-	27	2
+chr1	50	100	1	25	-	28	3
+chr1	50	100	1	25	-	29	2
+chr1	50	100	1	25	-	30	2
+chr1	50	100	1	25	-	31	2
+chr1	50	100	1	25	-	32	2
+chr1	50	100	1	25	-	33	2
+chr1	50	100	1	25	-	34	2
+chr1	50	100	1	25	-	35	2
+chr1	50	100	1	25	-	36	2
+chr1	50	100	1	25	-	37	2
+chr1	50	100	1	25	-	38	2
+chr1	50	100	1	25	-	39	2
+chr1	50	100	1	25	-	40	2
+chr1	50	100	1	25	-	41	2
+chr1	50	100	1	25	-	42	2
+chr1	50	100	1	25	-	43	3
+chr1	50	100	1	25	-	44	3
+chr1	50	100	1	25	-	45	3
+chr1	50	100	1	25	-	46	3
+chr1	50	100	1	25	-	47	3
+chr1	50	100	1	25	-	48	3
+chr1	50	100	1	25	-	49	3
+chr1	50	100	1	25	-	50	3
+chr1	200	250	3	25	+	1	4
+chr1	200	250	3	25	+	2	4
+chr1	200	250	3	25	+	3	4
+chr1	200	250	3	25	+	4	3
+chr1	200	250	3	25	+	5	3
+chr1	200	250	3	25	+	6	3
+chr1	200	250	3	25	+	7	3
+chr1	200	250	3	25	+	8	2
+chr1	200	250	3	25	+	9	2
+chr1	200	250	3	25	+	10	2
+chr1	200	250	3	25	+	11	2
+chr1	200	250	3	25	+	12	2
+chr1	200	250	3	25	+	13	2
+chr1	200	250	3	25	+	14	2
+chr1	200	250	3	25	+	15	2
+chr1	200	250	3	25	+	16	2
+chr1	200	250	3	25	+	17	2
+chr1	200	250	3	25	+	18	2
 chr1	200	250	3	25	+	19	1
 chr1	200	250	3	25	+	20	1
 chr1	200	250	3	25	+	21	1
@@ -232,152 +245,152 @@ chr1	200	250	3	25	+	35	1
 chr1	200	250	3	25	+	36	1
 chr1	200	250	3	25	+	37	1
 chr1	200	250	3	25	+	38	1
-chr1	200	250	3	25	+	39	1
-chr1	200	250	3	25	+	40	1
-chr1	200	250	3	25	+	41	1
-chr1	200	250	3	25	+	42	1
-chr1	200	250	3	25	+	43	1
-chr1	200	250	3	25	+	44	1
-chr1	200	250	3	25	+	45	1
-chr1	200	250	3	25	+	46	1
-chr1	200	250	3	25	+	47	1
-chr1	200	250	3	25	+	48	1
-chr1	200	250	3	25	+	49	1
-chr1	200	250	3	25	+	50	1
-chr2	80	130	5	25	-	1	1
-chr2	80	130	5	25	-	2	1
-chr2	80	130	5	25	-	3	1
-chr2	80	130	5	25	-	4	1
-chr2	80	130	5	25	-	5	1
-chr2	80	130	5	25	-	6	1
-chr2	80	130	5	25	-	7	1
-chr2	80	130	5	25	-	8	1
-chr2	80	130	5	25	-	9	1
-chr2	80	130	5	25	-	10	1
-chr2	80	130	5	25	-	11	1
-chr2	80	130	5	25	-	12	1
-chr2	80	130	5	25	-	13	1
-chr2	80	130	5	25	-	14	1
-chr2	80	130	5	25	-	15	1
-chr2	80	130	5	25	-	16	1
-chr2	80	130	5	25	-	17	1
-chr2	80	130	5	25	-	18	1
-chr2	80	130	5	25	-	19	1
-chr2	80	130	5	25	-	20	1
-chr2	80	130	5	25	-	21	1
-chr2	80	130	5	25	-	22	1
-chr2	80	130	5	25	-	23	1
-chr2	80	130	5	25	-	24	1
-chr2	80	130	5	25	-	25	1
-chr2	80	130	5	25	-	26	1
-chr2	80	130	5	25	-	27	1
-chr2	80	130	5	25	-	28	1
-chr2	80	130	5	25	-	29	1
-chr2	80	130	5	25	-	30	1
-chr2	80	130	5	25	-	31	1
-chr2	80	130	5	25	-	32	1
-chr2	80	130	5	25	-	33	1
-chr2	80	130	5	25	-	34	1
-chr2	80	130	5	25	-	35	1
-chr2	80	130	5	25	-	36	1
-chr2	80	130	5	25	-	37	1
-chr2	80	130	5	25	-	38	1
-chr2	80	130	5	25	-	39	1
-chr2	80	130	5	25	-	40	1
-chr2	80	130	5	25	-	41	1
-chr2	80	130	5	25	-	42	1
-chr2	80	130	5	25	-	43	1
-chr2	80	130	5	25	-	44	1
-chr2	80	130	5	25	-	45	1
-chr2	80	130	5	25	-	46	1
-chr2	80	130	5	25	-	47	1
-chr2	80	130	5	25	-	48	1
-chr2	80	130	5	25	-	49	1
-chr2	80	130	5	25	-	50	1
-chr2	150	200	4	25	+	1	1
-chr2	150	200	4	25	+	2	1
-chr2	150	200	4	25	+	3	1
-chr2	150	200	4	25	+	4	1
-chr2	150	200	4	25	+	5	1
-chr2	150	200	4	25	+	6	1
-chr2	150	200	4	25	+	7	1
-chr2	150	200	4	25	+	8	1
-chr2	150	200	4	25	+	9	1
-chr2	150	200	4	25	+	10	1
-chr2	150	200	4	25	+	11	1
-chr2	150	200	4	25	+	12	1
-chr2	150	200	4	25	+	13	1
-chr2	150	200	4	25	+	14	1
-chr2	150	200	4	25	+	15	1
-chr2	150	200	4	25	+	16	1
-chr2	150	200	4	25	+	17	1
-chr2	150	200	4	25	+	18	1
-chr2	150	200	4	25	+	19	1
-chr2	150	200	4	25	+	20	1
-chr2	150	200	4	25	+	21	1
-chr2	150	200	4	25	+	22	1
-chr2	150	200	4	25	+	23	1
-chr2	150	200	4	25	+	24	1
-chr2	150	200	4	25	+	25	1
-chr2	150	200	4	25	+	26	1
-chr2	150	200	4	25	+	27	1
-chr2	150	200	4	25	+	28	1
-chr2	150	200	4	25	+	29	1
-chr2	150	200	4	25	+	30	1
-chr2	150	200	4	25	+	31	2
-chr2	150	200	4	25	+	32	2
-chr2	150	200	4	25	+	33	2
-chr2	150	200	4	25	+	34	2
-chr2	150	200	4	25	+	35	2
-chr2	150	200	4	25	+	36	2
-chr2	150	200	4	25	+	37	2
-chr2	150	200	4	25	+	38	2
-chr2	150	200	4	25	+	39	2
-chr2	150	200	4	25	+	40	2
-chr2	150	200	4	25	+	41	2
-chr2	150	200	4	25	+	42	2
-chr2	150	200	4	25	+	43	2
-chr2	150	200	4	25	+	44	2
-chr2	150	200	4	25	+	45	2
-chr2	150	200	4	25	+	46	2
-chr2	150	200	4	25	+	47	2
-chr2	150	200	4	25	+	48	2
-chr2	150	200	4	25	+	49	2
-chr2	150	200	4	25	+	50	2
-chr2	180	230	2	25	-	1	2
-chr2	180	230	2	25	-	2	2
-chr2	180	230	2	25	-	3	2
-chr2	180	230	2	25	-	4	2
-chr2	180	230	2	25	-	5	2
-chr2	180	230	2	25	-	6	2
-chr2	180	230	2	25	-	7	2
-chr2	180	230	2	25	-	8	2
-chr2	180	230	2	25	-	9	2
-chr2	180	230	2	25	-	10	2
-chr2	180	230	2	25	-	11	2
-chr2	180	230	2	25	-	12	2
-chr2	180	230	2	25	-	13	2
-chr2	180	230	2	25	-	14	2
-chr2	180	230	2	25	-	15	2
-chr2	180	230	2	25	-	16	2
-chr2	180	230	2	25	-	17	2
-chr2	180	230	2	25	-	18	2
-chr2	180	230	2	25	-	19	2
-chr2	180	230	2	25	-	20	2
-chr2	180	230	2	25	-	21	1
-chr2	180	230	2	25	-	22	1
-chr2	180	230	2	25	-	23	1
-chr2	180	230	2	25	-	24	1
-chr2	180	230	2	25	-	25	1
-chr2	180	230	2	25	-	26	1
-chr2	180	230	2	25	-	27	1
-chr2	180	230	2	25	-	28	1
-chr2	180	230	2	25	-	29	1
-chr2	180	230	2	25	-	30	1
-chr2	180	230	2	25	-	31	1
-chr2	180	230	2	25	-	32	1
-chr2	180	230	2	25	-	33	1
-chr2	180	230	2	25	-	34	1
+chr1	200	250	3	25	+	39	0
+chr1	200	250	3	25	+	40	0
+chr1	200	250	3	25	+	41	0
+chr1	200	250	3	25	+	42	0
+chr1	200	250	3	25	+	43	0
+chr1	200	250	3	25	+	44	0
+chr1	200	250	3	25	+	45	0
+chr1	200	250	3	25	+	46	0
+chr1	200	250	3	25	+	47	0
+chr1	200	250	3	25	+	48	0
+chr1	200	250	3	25	+	49	0
+chr1	200	250	3	25	+	50	0
+chr2	80	130	5	25	-	1	4
+chr2	80	130	5	25	-	2	3
+chr2	80	130	5	25	-	3	3
+chr2	80	130	5	25	-	4	3
+chr2	80	130	5	25	-	5	3
+chr2	80	130	5	25	-	6	3
+chr2	80	130	5	25	-	7	3
+chr2	80	130	5	25	-	8	3
+chr2	80	130	5	25	-	9	3
+chr2	80	130	5	25	-	10	3
+chr2	80	130	5	25	-	11	3
+chr2	80	130	5	25	-	12	3
+chr2	80	130	5	25	-	13	3
+chr2	80	130	5	25	-	14	3
+chr2	80	130	5	25	-	15	3
+chr2	80	130	5	25	-	16	3
+chr2	80	130	5	25	-	17	3
+chr2	80	130	5	25	-	18	3
+chr2	80	130	5	25	-	19	3
+chr2	80	130	5	25	-	20	3
+chr2	80	130	5	25	-	21	3
+chr2	80	130	5	25	-	22	3
+chr2	80	130	5	25	-	23	3
+chr2	80	130	5	25	-	24	3
+chr2	80	130	5	25	-	25	3
+chr2	80	130	5	25	-	26	3
+chr2	80	130	5	25	-	27	3
+chr2	80	130	5	25	-	28	3
+chr2	80	130	5	25	-	29	3
+chr2	80	130	5	25	-	30	3
+chr2	80	130	5	25	-	31	3
+chr2	80	130	5	25	-	32	3
+chr2	80	130	5	25	-	33	3
+chr2	80	130	5	25	-	34	3
+chr2	80	130	5	25	-	35	3
+chr2	80	130	5	25	-	36	3
+chr2	80	130	5	25	-	37	3
+chr2	80	130	5	25	-	38	3
+chr2	80	130	5	25	-	39	3
+chr2	80	130	5	25	-	40	3
+chr2	80	130	5	25	-	41	3
+chr2	80	130	5	25	-	42	3
+chr2	80	130	5	25	-	43	3
+chr2	80	130	5	25	-	44	3
+chr2	80	130	5	25	-	45	3
+chr2	80	130	5	25	-	46	3
+chr2	80	130	5	25	-	47	3
+chr2	80	130	5	25	-	48	4
+chr2	80	130	5	25	-	49	4
+chr2	80	130	5	25	-	50	4
+chr2	150	200	4	25	+	1	6
+chr2	150	200	4	25	+	2	6
+chr2	150	200	4	25	+	3	5
+chr2	150	200	4	25	+	4	5
+chr2	150	200	4	25	+	5	5
+chr2	150	200	4	25	+	6	5
+chr2	150	200	4	25	+	7	5
+chr2	150	200	4	25	+	8	5
+chr2	150	200	4	25	+	9	5
+chr2	150	200	4	25	+	10	5
+chr2	150	200	4	25	+	11	5
+chr2	150	200	4	25	+	12	5
+chr2	150	200	4	25	+	13	5
+chr2	150	200	4	25	+	14	6
+chr2	150	200	4	25	+	15	6
+chr2	150	200	4	25	+	16	6
+chr2	150	200	4	25	+	17	6
+chr2	150	200	4	25	+	18	6
+chr2	150	200	4	25	+	19	6
+chr2	150	200	4	25	+	20	6
+chr2	150	200	4	25	+	21	6
+chr2	150	200	4	25	+	22	6
+chr2	150	200	4	25	+	23	6
+chr2	150	200	4	25	+	24	6
+chr2	150	200	4	25	+	25	6
+chr2	150	200	4	25	+	26	6
+chr2	150	200	4	25	+	27	6
+chr2	150	200	4	25	+	28	6
+chr2	150	200	4	25	+	29	6
+chr2	150	200	4	25	+	30	6
+chr2	150	200	4	25	+	31	6
+chr2	150	200	4	25	+	32	6
+chr2	150	200	4	25	+	33	6
+chr2	150	200	4	25	+	34	6
+chr2	150	200	4	25	+	35	6
+chr2	150	200	4	25	+	36	6
+chr2	150	200	4	25	+	37	6
+chr2	150	200	4	25	+	38	6
+chr2	150	200	4	25	+	39	6
+chr2	150	200	4	25	+	40	5
+chr2	150	200	4	25	+	41	5
+chr2	150	200	4	25	+	42	5
+chr2	150	200	4	25	+	43	5
+chr2	150	200	4	25	+	44	5
+chr2	150	200	4	25	+	45	5
+chr2	150	200	4	25	+	46	5
+chr2	150	200	4	25	+	47	5
+chr2	150	200	4	25	+	48	5
+chr2	150	200	4	25	+	49	5
+chr2	150	200	4	25	+	50	5
+chr2	180	230	2	25	-	1	6
+chr2	180	230	2	25	-	2	6
+chr2	180	230	2	25	-	3	6
+chr2	180	230	2	25	-	4	6
+chr2	180	230	2	25	-	5	6
+chr2	180	230	2	25	-	6	6
+chr2	180	230	2	25	-	7	6
+chr2	180	230	2	25	-	8	6
+chr2	180	230	2	25	-	9	6
+chr2	180	230	2	25	-	10	5
+chr2	180	230	2	25	-	11	5
+chr2	180	230	2	25	-	12	5
+chr2	180	230	2	25	-	13	5
+chr2	180	230	2	25	-	14	5
+chr2	180	230	2	25	-	15	5
+chr2	180	230	2	25	-	16	5
+chr2	180	230	2	25	-	17	5
+chr2	180	230	2	25	-	18	5
+chr2	180	230	2	25	-	19	5
+chr2	180	230	2	25	-	20	5
+chr2	180	230	2	25	-	21	5
+chr2	180	230	2	25	-	22	5
+chr2	180	230	2	25	-	23	4
+chr2	180	230	2	25	-	24	4
+chr2	180	230	2	25	-	25	4
+chr2	180	230	2	25	-	26	4
+chr2	180	230	2	25	-	27	3
+chr2	180	230	2	25	-	28	3
+chr2	180	230	2	25	-	29	3
+chr2	180	230	2	25	-	30	3
+chr2	180	230	2	25	-	31	3
+chr2	180	230	2	25	-	32	3
+chr2	180	230	2	25	-	33	2
+chr2	180	230	2	25	-	34	2
 chr2	180	230	2	25	-	35	1
 chr2	180	230	2	25	-	36	1
 chr2	180	230	2	25	-	37	1
@@ -394,50 +407,65 @@ chr2	180	230	2	25	-	47	1
 chr2	180	230	2	25	-	48	1
 chr2	180	230	2	25	-	49	1
 chr2	180	230	2	25	-	50	1" > exp
-$BT coverage -a a.bed -b a.bed -d > obs
+$BT coverage -a a.bed -b b.bed -d > obs
 check exp obs
 rm exp obs
 
 
-
 ##################################################################
-#  Test -s
+#  Test mean
 ##################################################################
 echo "    coverage.t6...\c"
 echo \
-"chr1	20	70	6	25	+	1	50	50	1.0000000
-chr1	50	100	1	25	-	1	50	50	1.0000000
-chr1	200	250	3	25	+	1	50	50	1.0000000
-chr2	80	130	5	25	-	1	50	50	1.0000000
-chr2	150	200	4	25	+	1	50	50	1.0000000
-chr2	180	230	2	25	-	1	50	50	1.0000000" > exp
-$BT coverage -a a.bed -b a.bed -s > obs
+"chr1	20	70	6	25	+	2.0000000
+chr1	50	100	1	25	-	2.2000000
+chr1	200	250	3	25	+	1.3200001
+chr2	80	130	5	25	-	3.0799999
+chr2	150	200	4	25	+	5.5599999
+chr2	180	230	2	25	-	3.4600000" > exp
+$BT coverage -a a.bed -b b.bed -mean > obs
 check exp obs
 rm exp obs
 
 
 ##################################################################
-#  Test -S
+#  Test -s
 ##################################################################
 echo "    coverage.t7...\c"
 echo \
-"chr1	20	70	6	25	+	1	20	50	0.4000000
-chr1	50	100	1	25	-	1	20	50	0.4000000
+"chr1	20	70	6	25	+	2	50	50	1.0000000
+chr1	50	100	1	25	-	1	23	50	0.4600000
 chr1	200	250	3	25	+	0	0	50	0.0000000
-chr2	80	130	5	25	-	0	0	50	0.0000000
-chr2	150	200	4	25	+	1	20	50	0.4000000
-chr2	180	230	2	25	-	1	20	50	0.4000000" > exp
-$BT coverage -a a.bed -b a.bed -S > obs
+chr2	80	130	5	25	-	4	50	50	1.0000000
+chr2	150	200	4	25	+	3	50	50	1.0000000
+chr2	180	230	2	25	-	4	34	50	0.6800000" > exp
+$BT coverage -a a.bed -b b.bed -s > obs
 check exp obs
 rm exp obs
 
 
 ##################################################################
-#  Test that -counts, -hist are mutually exclusive options
+#  Test -S
 ##################################################################
 echo "    coverage.t8...\c"
 echo \
-"***** ERROR: -counts, -d, and -hist are mutually exclusive options. *****" > exp
+"chr1	20	70	6	25	+	0	0	50	0.0000000
+chr1	50	100	1	25	-	4	50	50	1.0000000
+chr1	200	250	3	25	+	4	38	50	0.7600000
+chr2	80	130	5	25	-	2	50	50	1.0000000
+chr2	150	200	4	25	+	4	50	50	1.0000000
+chr2	180	230	2	25	-	2	50	50	1.0000000" > exp
+$BT coverage -a a.bed -b b.bed -S > obs
+check exp obs
+rm exp obs
+
+
+##################################################################
+#  Test that -counts, -hist are mutually exclusive options
+##################################################################
+echo "    coverage.t9...\c"
+echo \
+"***** ERROR: -counts, -d, -mean, and -hist are all mutually exclusive options. *****" > exp
 $BT coverage -a a.bed -b b.bed -counts -hist 2>&1 > /dev/null | head -2 | tail -1 | cat - > obs
 check exp obs
 rm exp obs
@@ -445,9 +473,9 @@ rm exp obs
 ##################################################################
 #  Test that -counts, -d are mutually exclusive options
 ##################################################################
-echo "    coverage.t9...\c"
+echo "    coverage.t10...\c"
 echo \
-"***** ERROR: -counts, -d, and -hist are mutually exclusive options. *****" > exp
+"***** ERROR: -counts, -d, -mean, and -hist are all mutually exclusive options. *****" > exp
 $BT coverage -a a.bed -b b.bed -counts -d 2>&1 > /dev/null | head -2 | tail -1 | cat - > obs
 check exp obs
 rm exp obs
@@ -455,9 +483,24 @@ rm exp obs
 ##################################################################
 #  Test that -hist, -d are mutually exclusive options
 ##################################################################
-echo "    coverage.t10...\c"
+echo "    coverage.t11...\c"
 echo \
-"***** ERROR: -counts, -d, and -hist are mutually exclusive options. *****" > exp
+"***** ERROR: -counts, -d, -mean, and -hist are all mutually exclusive options. *****" > exp
 $BT coverage -a a.bed -b b.bed -hist -d 2>&1 > /dev/null | head -2 | tail -1 | cat - > obs
 check exp obs
 rm exp obs
+
+
+##################################################################
+#  Test that -mean, -d are mutually exclusive options
+##################################################################
+echo "    coverage.t12...\c"
+echo \
+"***** ERROR: -counts, -d, -mean, and -hist are all mutually exclusive options. *****" > exp
+$BT coverage -a a.bed -b b.bed -mean -d 2>&1 > /dev/null | head -2 | tail -1 | cat - > obs
+check exp obs
+rm exp obs
+
+
+
+