text: user6814: I have a BAM file (DNA, shallow whole genome sequencing at ~1X) where I want to filter reads (using sambamba) to keep only those which have a template length > 20 and mapping quality > 20, discarding unmapped reads.
  The filter I have used is this:
  sambamba view -h \
     -t 5 \
     -F "paired and template_length > 0 and mapping_quality > 20 and not (unmapped or mate_is_unmapped)" \
     -f bam 142-ready.bam \
     -o 142-filter.bam
  
  However, inspection of the reads in IGV led me to think that perhaps reads on the minus strand are being somehow filtered out.
  Pre filter:
  
  Post filter:
  
  The only way I don't get such an aggressive filtering is by setting only not (unmapped or mate_is_unmapped). But that, obviously, defeats the purpose as it doesn't include what I need.
  I can't, however, see what exactly is wrong with the filter. What is the correct way to filter for template length while not accidentally discarding reads on the minus strand?
  
  user6814: The reason is that sambamba does not use the absolute value of the template length, so, if the read maps so the minus strand, the template length is actually negative. Setting a template length > 0 means that all reads mapping to the minus strand are removed.
  In fact, you can't still filter for negative template lengths. See this GitHub PR.
  
original_text: 6814: <p>I have a BAM file (DNA, shallow whole genome sequencing at ~1X) where I want to filter reads (using sambamba) to keep only those which have a template length &gt; 20 and mapping quality &gt; 20, discarding unmapped reads.</p>
  <p>The filter I have used is this:</p>
  <pre><code>sambamba view -h \
     -t 5 \
     -F &quot;paired and template_length &gt; 0 and mapping_quality &gt; 20 and not (unmapped or mate_is_unmapped)&quot; \
     -f bam 142-ready.bam \
     -o 142-filter.bam
  </code></pre>
  <p>However, inspection of the reads in IGV led me to think that perhaps reads on the minus strand are being somehow filtered out.</p>
  <p>Pre filter:</p>
  <p><a href="https://i.stack.imgur.com/N2Ynp.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/N2Ynp.png" alt="Unfiltered view in IGV with mate pairs highlighted" /></a></p>
  <p>Post filter:</p>
  <p><a href="https://i.stack.imgur.com/peGxL.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/peGxL.png" alt="Filtered view in IGV, showing only one mate pair" /></a></p>
  <p>The only way I don't get such an aggressive filtering is by setting only <code>not (unmapped or mate_is_unmapped)</code>. But that, obviously, defeats the purpose as it doesn't include what I need.</p>
  <p>I can't, however, see what exactly is wrong with the filter. What is the correct way to filter for template length while not accidentally discarding reads on the minus strand?</p>
   6814: <p>The reason is that <code>sambamba</code> does not use the absolute value of the template length, so, if the read maps so the minus strand, the template length is actually negative. Setting a template length &gt; 0 means that all reads mapping to the minus strand are removed.</p>
  <p>In fact, you can't still filter for negative template lengths. See <a href="https://github.com/biod/sambamba/pull/479" rel="nofollow noreferrer">this GitHub PR</a>.</p>
  