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 85b2e236f77aab5e3f40d8de3c367caab989d98e..e948c05e6bcc37796a856c42d8f1c4d0991c0306 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 @@ -51,6 +51,7 @@ class VcfFilter(val root: Configurable) extends BiopetJavaCommandLineFunction { object VcfFilter extends ToolCommand { case class Args(inputVcf: File = null, outputVcf: File = null, + minQualscore: Option[Double] = None, minSampleDepth: Int = -1, minTotalDepth: Int = -1, minAlternateDepth: Int = -1, @@ -105,6 +106,9 @@ object VcfFilter extends ToolCommand { opt[Unit]("filterNoCalls") unbounded () action { (x, c) => c.copy(filterNoCalls = true) } text ("Filter when there are only no calls") + opt[Double]("minQualscore") unbounded () action { (x, c) => + c.copy(minQualscore = Some(x)) + } text ("Min qual score") } var commandArgs: Args = _ @@ -122,7 +126,8 @@ object VcfFilter extends ToolCommand { writer.writeHeader(header) for (record <- reader) { - if (filterRefCalls(record) && + if (minQualscore(record) && + filterRefCalls(record) && filterNoCalls(record) && minTotalDepth(record) && minSampleDepth(record) && @@ -139,6 +144,11 @@ object VcfFilter extends ToolCommand { writer.close } + def minQualscore(record: VariantContext): Boolean = { + if (commandArgs.minQualscore.isEmpty) return true + record.getPhredScaledQual >= commandArgs.minQualscore.get + } + def filterRefCalls(record: VariantContext): Boolean = { if (commandArgs.filterNoCalls) record.getGenotypes.exists(g => !g.isHomRef) else true