From 4d20276b52557008244dbf5d2dcda8f92d702223 Mon Sep 17 00:00:00 2001
From: Peter van 't Hof <p.j.van_t_hof@lumc.nl>
Date: Fri, 6 Feb 2015 15:45:17 +0100
Subject: [PATCH] Added inverted output file

---
 .../scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala  | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala
index 1a996b144..85d580890 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/VcfFilter.scala
@@ -59,6 +59,7 @@ class VcfFilter(val root: Configurable) extends BiopetJavaCommandLineFunction {
 object VcfFilter extends ToolCommand {
   case class Args(inputVcf: File = null,
                   outputVcf: File = null,
+                  invertedOutputVcf: Option[File] = None,
                   minQualscore: Option[Double] = None,
                   minSampleDepth: Int = -1,
                   minTotalDepth: Int = -1,
@@ -80,6 +81,9 @@ object VcfFilter extends ToolCommand {
     opt[File]('o', "outputVcf") required () maxOccurs (1) valueName ("<file>") action { (x, c) =>
       c.copy(outputVcf = x)
     } text ("Output vcf file")
+    opt[File]("invertedOutputVcf") maxOccurs (1) valueName ("<file>") action { (x, c) =>
+      c.copy(invertedOutputVcf = Some(x))
+    } text ("inverted output vcf file")
     opt[Int]("minSampleDepth") unbounded () valueName ("<int>") action { (x, c) =>
       c.copy(minSampleDepth = x)
     } text ("Min value for DP in genotype fields")
@@ -141,6 +145,11 @@ object VcfFilter extends ToolCommand {
     val writer = new AsyncVariantContextWriter(new VariantContextWriterBuilder().setOutputFile(commandArgs.outputVcf).build)
     writer.writeHeader(header)
 
+    val invertedWriter = if (commandArgs.invertedOutputVcf.isDefined)
+      Some(new AsyncVariantContextWriter(new VariantContextWriterBuilder().setOutputFile(commandArgs.invertedOutputVcf.get).build))
+    else None
+    if (invertedWriter.isDefined) invertedWriter.get.writeHeader(header)
+
     var counterTotal = 0
     var counterLeft = 0
     for (record <- reader) {
@@ -158,6 +167,8 @@ object VcfFilter extends ToolCommand {
         inIdSet(record)) {
         writer.add(record)
         counterLeft += 1
+      } else {
+        if (invertedWriter.isDefined) invertedWriter.get.add(record)
       }
       counterTotal += 1
       if (counterTotal % 100000 == 0) logger.info(counterTotal + " variants processed, " + counterLeft + " left")
@@ -165,6 +176,7 @@ object VcfFilter extends ToolCommand {
     logger.info(counterTotal + " variants processed, " + counterLeft + " left")
     reader.close
     writer.close
+    if (invertedWriter.isDefined) invertedWriter.get.close()
     logger.info("Done")
   }
 
-- 
GitLab