]> git.donarmstrong.com Git - samtools.git/blobdiff - bam_mate.c
subsampling read pairs
[samtools.git] / bam_mate.c
index bb5360521adaa1cc8b785b3d7d0f1bbd58bae8fd..61f808a26402e9bd1d332f40074b4b3ca1f89dd3 100644 (file)
@@ -29,9 +29,9 @@ void bam_mating_core(bamFile in, bamFile out)
                                        pre5 = (pre->core.flag&BAM_FREVERSE)? bam_calend(&pre->core, bam1_cigar(pre)) : pre->core.pos;
                                        cur->core.isize = pre5 - cur5; pre->core.isize = cur5 - pre5;
                                } else cur->core.isize = pre->core.isize = 0;
-                               if (pre->core.flag&BAM_FREVERSE) cur->core.flag |= BAM_FREVERSE;
+                               if (pre->core.flag&BAM_FREVERSE) cur->core.flag |= BAM_FMREVERSE;
                                else cur->core.flag &= ~BAM_FMREVERSE;
-                               if (cur->core.flag&BAM_FREVERSE) pre->core.flag |= BAM_FREVERSE;
+                               if (cur->core.flag&BAM_FREVERSE) pre->core.flag |= BAM_FMREVERSE;
                                else pre->core.flag &= ~BAM_FMREVERSE;
                                if (cur->core.flag & BAM_FUNMAP) { pre->core.flag |= BAM_FMUNMAP; pre->core.flag &= ~BAM_FPROPER_PAIR; }
                                if (pre->core.flag & BAM_FUNMAP) { cur->core.flag |= BAM_FMUNMAP; cur->core.flag &= ~BAM_FPROPER_PAIR; }
@@ -40,8 +40,10 @@ void bam_mating_core(bamFile in, bamFile out)
                                has_prev = 0;
                        } else { // unpaired or singleton
                                pre->core.mtid = -1; pre->core.mpos = -1; pre->core.isize = 0;
-                               pre->core.flag |= BAM_FMUNMAP;
-                               pre->core.flag &= ~BAM_FMREVERSE & ~BAM_FPROPER_PAIR;
+                               if (pre->core.flag & BAM_FPAIRED) {
+                                       pre->core.flag |= BAM_FMUNMAP;
+                                       pre->core.flag &= ~BAM_FMREVERSE & ~BAM_FPROPER_PAIR;
+                               }
                                bam_write1(out, pre);
                        }
                } else has_prev = 1;