From 7a2a176bd8b22d69b680c65d83c3c783c13c682e Mon Sep 17 00:00:00 2001
From: nkindlon <nek3d@virginia.edu>
Date: Wed, 6 Nov 2013 16:09:29 -0500
Subject: [PATCH] Fixed a bug in BamRecord::printUnmapped, added a unit test
 with with data file for unmapped Bam reads.

---
 .../FileRecordTools/Records/BamRecord.cpp     |   6 +-
 test/intersect/a_with_bothUnmapped.bam        | Bin 0 -> 2911 bytes
 test/intersect/mapped_and_unmapped.sam        |   4 -
 test/intersect/new_test-intersect.sh          | 210 +++++++++++++++++-
 4 files changed, 212 insertions(+), 8 deletions(-)
 create mode 100644 test/intersect/a_with_bothUnmapped.bam
 delete mode 100644 test/intersect/mapped_and_unmapped.sam

diff --git a/src/utils/FileRecordTools/Records/BamRecord.cpp b/src/utils/FileRecordTools/Records/BamRecord.cpp
index fda5a28b..cde07329 100644
--- a/src/utils/FileRecordTools/Records/BamRecord.cpp
+++ b/src/utils/FileRecordTools/Records/BamRecord.cpp
@@ -148,10 +148,10 @@ void BamRecord::printRemainingBamFields(QuickString &outBuf, RecordKeyList *keyL
 }
 
 void BamRecord::printUnmapped(QuickString &outBuf) const {
-	outBuf.append(_chrName);
+	outBuf.append(_chrName.empty() ? "." : _chrName);
 	outBuf.append("\t-1\t-1\t");
-	outBuf.append(_name);
+	outBuf.append(_name.empty() ? "." : _name);
 	outBuf.append('\t');
-	outBuf.append(_score);
+	outBuf.append(_score.empty() ? "." : _score);
 	outBuf.append("\t.\t-1\t-1\t-1\t0,0,0\t0\t.\t."); // dot for strand, -1 for blockStarts and blockEnd
 }
diff --git a/test/intersect/a_with_bothUnmapped.bam b/test/intersect/a_with_bothUnmapped.bam
new file mode 100644
index 0000000000000000000000000000000000000000..c8959e5be8ce17babfed2100134abd8e575fbf1f
GIT binary patch
literal 2911
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
J00000006s2nvnni

literal 0
HcmV?d00001

diff --git a/test/intersect/mapped_and_unmapped.sam b/test/intersect/mapped_and_unmapped.sam
deleted file mode 100644
index 111b41d1..00000000
--- a/test/intersect/mapped_and_unmapped.sam
+++ /dev/null
@@ -1,4 +0,0 @@
-@HD	VN:1.0	GO:none	SO:coordinate
-@SQ	SN:chr1	LN:249250621
-mapped	16	chr1	1	40	30M	*	0	0	GAAGGCCACCGCCGCGGTTATTTTCCTTCA	CCCDDB?=FJIIJIGFJIJHIJJJJJJJJI	MD:Z:50
-umapped	4	*	1	40	30M	*	0	0	GAAGGCCACCGCCGCGGTTATTTTCCTTCA	CCCDDB?=FJIIJIGFJIJHIJJJJJJJJI	MD:Z:50
diff --git a/test/intersect/new_test-intersect.sh b/test/intersect/new_test-intersect.sh
index 6f21ef16..e23ff4bf 100755
--- a/test/intersect/new_test-intersect.sh
+++ b/test/intersect/new_test-intersect.sh
@@ -12,10 +12,218 @@ check()
 ###########################################################
 #  Test intersection of a as bed from file vs b as bed from file
 ############################################################
-echo "    intersect.t01...\c"
+echo "    intersect.new.t01...\c"
 echo \
 "chr1	100	101	a2	2	-
 chr1	100	110	a2	2	-" > exp
 $BT intersect -a a.bed -b b.bed > obs
 check obs exp
 rm obs exp
+
+
+###########################################################
+#  Test intersection of a as bed from redirect vs b as bed from file
+############################################################
+echo "    intersect.new.t02...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+$BT intersect -a - -b b.bed < a.bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as bed from pipe vs b as bed from file
+############################################################
+echo "    intersect.new.t03...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+cat a.bed | $BT intersect -a - -b b.bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as bed from fifo vs b as bed from file
+############################################################
+echo "    intersect.new.t04...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+$BT intersect -a <(cat a.bed) -b b.bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as gzipped from file vs b as bed from file
+############################################################
+echo "    intersect.new.t05...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+$BT intersect -a a_gzipped.bed.gz -b b.bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as gzipped from redirect vs b as bed from file
+############################################################
+echo "    intersect.new.t06...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+$BT intersect -a - -b b.bed < a_gzipped.bed.gz > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as gzipped from pipe vs b as bed from file
+############################################################
+echo "    intersect.new.t07...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+cat a_gzipped.bed.gz | $BT intersect -a - -b b.bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as gzipped from fifo vs b as bed from file
+############################################################
+echo "    intersect.new.t08...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+$BT intersect -a <(cat a_gzipped.bed.gz) -b b.bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as bgzipped from file vs b as bed from file
+############################################################
+echo "    intersect.new.t09...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+$BT intersect -a a_bgzipped.bed.gz -b b.bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as bgzipped from redirect vs b as bed from file
+############################################################
+echo "    intersect.new.t10...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+$BT intersect -a - -b b.bed < a_bgzipped.bed.gz > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as bgzipped from pipe vs b as bed from file
+############################################################
+echo "    intersect.new.t11...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+cat a_bgzipped.bed.gz | $BT intersect -a - -b b.bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as bgzipped from fifo vs b as bed from file
+############################################################
+echo "    intersect.new.t12...\c"
+echo \
+"chr1	100	101	a2	2	-
+chr1	100	110	a2	2	-" > exp
+$BT intersect -a <(cat a_bgzipped.bed.gz) -b b.bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of a as bam from file vs b as bed from file
+############################################################
+echo "    intersect.new.t13...\c"
+$BT intersect -a a.bam -b b.bed> obs
+check obs aVSb.bam
+rm obs
+
+
+###########################################################
+#  Test intersection of a as bam from redirect vs b as bed from file
+############################################################
+echo "    intersect.new.t14...\c"
+$BT intersect -a - -b b.bed < a.bam> obs
+check obs aVSb.bam
+rm obs
+
+
+###########################################################
+#  Test intersection of a as bam from pipe vs b as bed from file
+############################################################
+echo "    intersect.new.t15...\c"
+cat a.bam | $BT intersect -a - -b b.bed> obs
+check obs aVSb.bam
+rm obs
+
+
+###########################################################
+#  Test intersection of a as bam from fifo vs b as bed from file
+############################################################
+echo "    intersect.new.t16...\c"
+$BT intersect -a <(cat a.bam) -b b.bed > obs
+check obs aVSb.bam
+rm obs
+
+
+###########################################################
+#  Test intersection of bam file containing both good reads
+#  and those where both read and mate are unmapped vs b file
+#  as bed.
+############################################################
+echo "    intersect.new.t17...\c"
+echo \
+"chr1	100	101	a2	255	-	100	200	0,0,0	1	100,	0,
+chr1	100	110	a2	255	-	100	200	0,0,0	1	100,	0," > exp
+$BT intersect -a a_with_bothUnmapped.bam -b b.bed -bed > obs
+check obs exp
+rm obs exp
+
+
+###########################################################
+#  Test intersection of bam file containing both good reads
+#  and those where both read and mate are unmapped vs b file
+#  as bed, with noHit (-v) option. 
+############################################################
+echo "    intersect.new.t18...\c"
+echo \
+"chr1	10	20	a1	255	+	10	20	0,0,0	1	10,	0,
+.	-1	-1	FCC1MK2ACXX:1:1101:5780:51632#/1	0	.	-1	-1	-1	0,0,0	0	.	.
+.	-1	-1	FCC1MK2ACXX:1:1101:5780:51632#/2	0	.	-1	-1	-1	0,0,0	0	.	.
+.	-1	-1	FCC1MK2ACXX:1:1101:8137:99409#/1	0	.	-1	-1	-1	0,0,0	0	.	.
+.	-1	-1	FCC1MK2ACXX:1:1101:8137:99409#/2	0	.	-1	-1	-1	0,0,0	0	.	.
+.	-1	-1	FCC1MK2ACXX:1:1102:6799:2633#/1	0	.	-1	-1	-1	0,0,0	0	.	.
+.	-1	-1	FCC1MK2ACXX:1:1102:6799:2633#/2	0	.	-1	-1	-1	0,0,0	0	.	." > exp
+$BT intersect -a a_with_bothUnmapped.bam -b b.bed -bed -v > obs
+check obs exp
+#rm obs exp
+
+
+
+
+
+
+
-- 
GitLab