diff --git a/.gitignore b/.gitignore index d831ebb0a5aa8522d6d869482511aaf7f19d0c66..d62c880bdc7fb71e7c9499e9cbbfef8f78e2604a 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ docs/_build/ src/utils/version/version_git.h .project .cproject +nbproject diff --git a/src/bamToFastq/bamToFastq.cpp b/src/bamToFastq/bamToFastq.cpp index 8b80e7f729c1cedb719da3649da0a917aad2577b..245554c73aa8110cb19cdb566a4c5dba66cc50a1 100644 --- a/src/bamToFastq/bamToFastq.cpp +++ b/src/bamToFastq/bamToFastq.cpp @@ -79,20 +79,26 @@ void BamToFastq::PairedFastq() { reader.Open(_bamFile); // rip through the BAM file and convert each mapped entry to BEDPE BamAlignment bam1, bam2; - while (reader.GetNextAlignment(bam1)) { + bool shouldConsumeReads = true; + while (true) { - reader.GetNextAlignment(bam2); + if (shouldConsumeReads) { + if (!reader.GetNextAlignment(bam1) || !reader.GetNextAlignment(bam2)) break; + } else { + shouldConsumeReads = true; + } if (bam1.Name != bam2.Name) { while (bam1.Name != bam2.Name) { if (bam1.IsPaired()) { cerr << "*****WARNING: Query " << bam1.Name - << " is marked as paired, but it's mate does not occur" + << " is marked as paired, but its mate does not occur" << " next to it in your BAM file. Skipping. " << endl; } bam1 = bam2; - reader.GetNextAlignment(bam2); + if (!reader.GetNextAlignment(bam2)) break; + shouldConsumeReads = false; } } else if (bam1.IsPaired() && bam2.IsPaired()) { diff --git a/test/bamtofastq/golden.fq b/test/bamtofastq/golden.fq new file mode 100644 index 0000000000000000000000000000000000000000..78819d813d217b9ea7eeb96707fd494967211bb4 --- /dev/null +++ b/test/bamtofastq/golden.fq @@ -0,0 +1,8 @@ +@paired-1/1 +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++ +DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD +@paired-2/1 +TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ++ +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF diff --git a/test/bamtofastq/golden.fq2 b/test/bamtofastq/golden.fq2 new file mode 100644 index 0000000000000000000000000000000000000000..4d32c42e6fd11b6a91c6cb82c206ae192c363a25 --- /dev/null +++ b/test/bamtofastq/golden.fq2 @@ -0,0 +1,8 @@ +@paired-1/2 +GGGGGGGGGGGGGGGGGGGGGGGGGGGGGG ++ +EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE +@paired-2/2 +CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ++ +HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH diff --git a/test/bamtofastq/test-bamtofastq.sh b/test/bamtofastq/test-bamtofastq.sh new file mode 100755 index 0000000000000000000000000000000000000000..5cd672fc0d29a066d03d6b010cdc5562da184c24 --- /dev/null +++ b/test/bamtofastq/test-bamtofastq.sh @@ -0,0 +1,20 @@ +BT=${BT-../../bin/bedtools} + +check() +{ + if diff $1 $2; then + echo ok + else + echo fail + fi +} + +samtools view -Sb test.sam > test.bam 2> /dev/null + +$BT bamtofastq -i test.bam -fq test.fq -fq2 test.fq2 2> /dev/null + +check test.fq golden.fq +check test.fq2 golden.fq2 + +rm test.bam test.fq test.fq2 + diff --git a/test/bamtofastq/test.sam b/test/bamtofastq/test.sam new file mode 100644 index 0000000000000000000000000000000000000000..3d64014030c354d1155ab2d47f48ca89199444d2 --- /dev/null +++ b/test/bamtofastq/test.sam @@ -0,0 +1,7 @@ +@HD VN:1.0 GO:none SO:coordinate +@SQ SN:chr1 LN:249250621 +paired-1 1 chr1 1 40 30M * 0 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD MD:Z:50 +paired-1 1 chr1 1 100 30M * 0 0 GGGGGGGGGGGGGGGGGGGGGGGGGGGGGG EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE MD:Z:50 +unpaired 1 chr1 1 100 30M * 0 0 GAAGGCCACCGCCGCGGTTATTTTCCTTCA CCCDDB?=FJIIJIGFJIJHIJJJJJJJJI MD:Z:50 +paired-2 1 chr1 1 40 30M * 0 0 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MD:Z:50 +paired-2 1 chr1 1 100 30M * 0 0 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH MD:Z:50