I just tried to do this for a bam file that contained previously extracted reads (name sorted it first) but reformat failed for that:
Input is being processed as paired java.lang.AssertionError: E00461:128:GW170713312:6:1101:991:8622 0 -1 + 629 779 00001000000000000000000 10 0 NGCGGGCATAGGTAATAGTACCCTGATATGCGGCTTGTGAGCGTCTGGCGGTAGGACTCTGTAGATGTAGATGTCGGTGGTATCCGTATCAGTAAGATATGTTGGTAGTGGAGGTGGGGTTTTGTGTTATTCGGCGGAGTTGGGATGCTTG !A<<-A7-----<FJ-<--<-FAJ--77<<<-77---<----7F-7--7--7-----7--<7F--<<<FJ<---<7---7A--7-7AA-77---7-7-7--------7<77-)A))-<-))---7-------7--)-)))-7-7--))--7 . . . . E00461:128:GW170713312:6:1101:991:8622 133 Transcript_15180 630 0 * = 630 0 NGCGGGCATAGGTAATAGTACCCTGATATGCGGCTTGTGAGCGTCTGGCGGTAGGACTCTGTAGATGTAGATGTCGGTGGTATCCGTATCAGTAAGATATGTTGGTAGTGGAGGTGGGGTTTTGTGTTATTCGGCGGAGTTGGGATGCTTG !A<<-A7-----<FJ-<--<-FAJ--77<<<-77---<----7F-7--7--7-----7--<7F--<<<FJ<---<7---7A--7-7AA-77---7-7-7--------7<77-)A))-<-))---7-------7--)-)))-7-7--))--7 YT:Z:UP at stream.SamReadInputStream.toReadList(SamReadInputStream.java:126) at stream.SamReadInputStream.fillBuffer(SamReadInputStream.java:90) at stream.SamReadInputStream.hasMore(SamReadInputStream.java:54) at stream.ConcurrentGenericReadInputStream$ReadThread.readLists(ConcurrentGenericReadInputStream.java:668) at stream.ConcurrentGenericReadInputStream$ReadThread.run(ConcurrentGenericReadInputStream.java:657)
So I guessed 'your.bam' needs to be the complete bam file, and reformat needs to extract the unmapped reads itself. I name_sorted the unextracted bam file and tried again but to no avail. The error I received:
Set INTERLEAVED to true Could not find sambamba. Found samtools 1.10 Input is being processed as paired java.lang.AssertionError: There is something wrong with the read pairing. 0, 0, true, true, 0, 0 at stream.ConcurrentGenericReadInputStream.readLists(ConcurrentGenericReadInputStream.java:440) at stream.ConcurrentGenericReadInputStream.run0(ConcurrentGenericReadInputStream.java:207) at stream.ConcurrentGenericReadInputStream.run(ConcurrentGenericReadInputStream.java:183) at java.base/java.lang.Thread.run(Thread.java:834)
Is that a known problem?
I wrote my own code to solve the problem. For what it is worth, it is available on NPM: https://www.npmjs.com/package/samfilter. It was also fast enough for my purpose (10 min for ~30GB SAM files using 1 core). Not multithreaded or intended to become at any point, but you could just start multiple instances to work on several files at the same time.