broadinstitute / pilon

Pilon is an automated genome assembly improvement and variant detection tool
GNU General Public License v2.0
338 stars 60 forks source link

Error Exception in thread "main" java.lang.IllegalStateException: Inappropriate call if not paired read #95

Open drs357 opened 5 years ago

drs357 commented 5 years ago

Hello, I am getting this error when running pilon

# Attempting to fix local continuity breaks
Exception in thread "main" java.lang.IllegalStateException: Inappropriate call if not paired read
        at htsjdk.samtools.SAMRecord.requireReadPaired(SAMRecord.java:890)
        at htsjdk.samtools.SAMRecord.getFirstOfPairFlag(SAMRecord.java:948)
        at org.broadinstitute.pilon.BamFile$MateMap.addRead(BamFile.scala:235)
        at org.broadinstitute.pilon.BamFile$MateMap.$anonfun$addReads$1(BamFile.scala:231)
        at org.broadinstitute.pilon.BamFile$MateMap.$anonfun$addReads$1$adapted(BamFile.scala:231)
        at scala.collection.immutable.List.foreach(List.scala:388)
        at org.broadinstitute.pilon.BamFile$MateMap.addReads(BamFile.scala:231)
        at org.broadinstitute.pilon.BamFile$MateMap.<init>(BamFile.scala:229)
        at org.broadinstitute.pilon.BamFile.recruitFlankReads(BamFile.scala:350)
        at org.broadinstitute.pilon.GapFiller.$anonfun$recruitReadsFromBams$1(GapFiller.scala:369)
        at org.broadinstitute.pilon.GapFiller.$anonfun$recruitReadsFromBams$1$adapted(GapFiller.scala:368)
        at scala.collection.immutable.List.foreach(List.scala:388)
        at org.broadinstitute.pilon.GapFiller.recruitReadsFromBams(GapFiller.scala:368)
        at org.broadinstitute.pilon.GapFiller.recruitReadsOfType(GapFiller.scala:377)
        at org.broadinstitute.pilon.GapFiller.recruitFrags(GapFiller.scala:381)
        at org.broadinstitute.pilon.GapFiller.recruitLocalReads(GapFiller.scala:396)
        at org.broadinstitute.pilon.GapFiller.recruitReads(GapFiller.scala:403)
        at org.broadinstitute.pilon.GapFiller.assembleAcrossBreak(GapFiller.scala:54)
        at org.broadinstitute.pilon.GapFiller.fixBreak(GapFiller.scala:46)
        at org.broadinstitute.pilon.GenomeRegion.$anonfun$identifyAndFixIssues$6(GenomeRegion.scala:399)
        at org.broadinstitute.pilon.GenomeRegion.$anonfun$identifyAndFixIssues$6$adapted(GenomeRegion.scala:397)
        at scala.collection.immutable.List.foreach(List.scala:388)
        at org.broadinstitute.pilon.GenomeRegion.identifyAndFixIssues(GenomeRegion.scala:397)
        at org.broadinstitute.pilon.GenomeFile.$anonfun$processRegions$4(GenomeFile.scala:120)
        at org.broadinstitute.pilon.GenomeFile.$anonfun$processRegions$4$adapted(GenomeFile.scala:109)
        at scala.collection.Iterator.foreach(Iterator.scala:937)
        at scala.collection.Iterator.foreach$(Iterator.scala:937)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1425)
        at scala.collection.parallel.ParIterableLike$Foreach.leaf(ParIterableLike.scala:970)
        at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:49)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
        at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:63)
        at scala.collection.parallel.Task.tryLeaf(Tasks.scala:52)
        at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:46)
        at scala.collection.parallel.ParIterableLike$Foreach.tryLeaf(ParIterableLike.scala:967)
        at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:149)
        at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:145)
        at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:436)
        at java.base/java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
SergejN commented 4 years ago

Hi, I had that when I ran Pilon in parallel for multiple contigs. In order to avoid that Pilon reads in a huge BAM file, I first extracted the reads from the BAM file that mapped to the contig I wanted to correct and then ran Pilon. It turned out that if you extract the reads using samtools view -b <BAM> <region>, then reads whose mate was either unmapped or mapped to a different contig retained the SAM flag indicating that they are paired, although the mate itself was missing (I guess it may also happen when you run Bowtie2 with the --no-unal switch, but I am not sure). And that's what Pilon didn't like. I ended up writing a short script that fixed the SAM flags. I hope it helps