This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Remove clipped reads

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.

Thanks for any advice.

fin swimmer

bam

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

fin swimmer

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

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

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 answer

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;'

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.

replace : C.getOperator().isClipping()

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

Thanks for the advice

Log in to answer this question.