1
0
Entering edit mode
4.3 years ago

Hello,

is there a tool or script which can remove reads from my bam files which contain soft clipped bases? It would be nice if I could also define to just remove reads that have at least n soft clipped bases, or the fraction of soft clipped bases is more than x.

fin swimmer

bam • 3.2k views
1
Entering edit mode
0
Entering edit mode

This seems to remove only the soft clipped bases. But I'd like to get rid of the whole reads.

fin swimmer

0
Entering edit mode

There are two links in the post. Did you look at the second?

0
Entering edit mode

Oh, sorry haven't seen your edit.

But in your first link I also found a link to bamutils. A combination of removeclipping and filter seems to fit my needs. It's only a pity that bamutils seems not to support streaming.

Thanks for showing me the right direction.

fin swimmer

0
Entering edit mode

It's probably a bit late as you already have a BAM but if you really don't want any read clipped, your probably best off forcing your aligner to align entire reads (e.g. bowtie2 end-to-end).

1
Entering edit mode
4.3 years ago

up-to-date answer using samjdk: http://lindenb.github.io/jvarkit/SamJdk.html , removing clipped reads where more than 33% of the read is clipped.

java -jar dist/samjdk.jar -e 'return record.getReadUnmappedFlag() || record.getCigar()==null || record.getCigar().getCigarElements().stream().filter(C->C.getOperator().isClipping()).mapToInt(C->C.getLength()).sum() / (double)record.getCigar().getReadLength() < 0.33;'

0
Entering edit mode

Is it possible to distinguish between soft-clipped and hard-clipped bases when removing the reads with this tool? I am only interested in removing reads with a specific % of soft-clipped bases.

0
Entering edit mode

replace : C.getOperator().isClipping()

with : C.getOperator().name().equals("H")

0
Entering edit mode