From 83c0d1eef9da65df18cbbe6f76200592568f9581 Mon Sep 17 00:00:00 2001 From: Peter van 't Hof <p.j.van_t_hof@lumc.nl> Date: Thu, 17 Dec 2015 17:31:08 +0100 Subject: [PATCH] Added merge of otu tables and maps --- .../sasc/biopet/pipelines/gears/Gears.scala | 70 +++++++++++++++++-- 1 file changed, 65 insertions(+), 5 deletions(-) diff --git a/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/Gears.scala b/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/Gears.scala index 95776672e..3f10af4cc 100644 --- a/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/Gears.scala +++ b/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/Gears.scala @@ -1,6 +1,10 @@ package nl.lumc.sasc.biopet.pipelines.gears +import java.io.File + import nl.lumc.sasc.biopet.core.{ PipelineCommand, MultiSampleQScript } +import nl.lumc.sasc.biopet.extensions.Ln +import nl.lumc.sasc.biopet.extensions.qiime.MergeOtuTables import nl.lumc.sasc.biopet.utils.Logging import nl.lumc.sasc.biopet.utils.config.Configurable import org.broadinstitute.gatk.queue.QScript @@ -35,6 +39,33 @@ class Gears(val root: Configurable) extends QScript with MultiSampleQScript { qs * Method where the multisample jobs should be added, this will be executed only when running the -sample argument is not given. */ def addMultiSampleJobs(): Unit = { + val closedOtuTables = samples.values.flatMap(_.closedOtuTable).toList + val closedOtuMaps = samples.values.flatMap(_.closedOtuMap).toList + require(closedOtuTables.size == closedOtuMaps.size) + if (closedOtuTables.nonEmpty) { + val closedDir = new File(outputDir, "qiime_closed_reference") + val closedOtuTable = new File(closedDir, "closed.biom") + val closedOtuMap = new File(closedDir, "closed.map.txt") + + if (closedOtuTables.size > 1) { + val mergeTables = new MergeOtuTables(qscript) + mergeTables.input = closedOtuTables + mergeTables.outputFile = closedOtuTable + add(mergeTables) + + val mergeMaps = new MergeOtuTables(qscript) + mergeMaps.input = closedOtuMaps + mergeMaps.outputFile = closedOtuMap + add(mergeMaps) + + } else { + add(Ln(qscript, closedOtuMaps.head, closedOtuMap)) + add(Ln(qscript, closedOtuTables.head, closedOtuTable)) + } + + //TODO: Plots + + } } /** @@ -45,11 +76,6 @@ class Gears(val root: Configurable) extends QScript with MultiSampleQScript { qs def makeSample(id: String): Sample = new Sample(id) class Sample(sampleId: String) extends AbstractSample(sampleId) { - /** Function to add sample jobs */ - protected def addJobs(): Unit = { - addPerLibJobs() - } - /** * Factory method for Library class * @param id SampleId @@ -83,6 +109,40 @@ class Gears(val root: Configurable) extends QScript with MultiSampleQScript { qs def summaryStats = Map() } + private var _closedOtuTable: Option[File] = _ + def closedOtuTable = _closedOtuTable + + private var _closedOtuMap: Option[File] = _ + def closedOtuMap = _closedOtuMap + + /** Function to add sample jobs */ + protected def addJobs(): Unit = { + addPerLibJobs() + val qiimeClosed = libraries.values.flatMap(_.gs.qiimeClosed).toList + if (qiimeClosed.nonEmpty) { + _closedOtuTable = Some(new File(sampleDir, "closed.biom")) + _closedOtuMap = Some(new File(sampleDir, "closed.map.txt")) + if (qiimeClosed.size > 1) { + val mergeTables = new MergeOtuTables(qscript) + mergeTables.input = qiimeClosed.map(_.otuTable).toList + mergeTables.outputFile = _closedOtuTable.get + add(mergeTables) + + val mergeMaps = new MergeOtuTables(qscript) + mergeMaps.input = qiimeClosed.map(_.otuMap).toList + mergeMaps.outputFile = _closedOtuMap.get + add(mergeMaps) + + } else { + add(Ln(qscript, qiimeClosed.head.otuMap, _closedOtuMap.get)) + add(Ln(qscript, qiimeClosed.head.otuTable, _closedOtuTable.get)) + } + } else { + _closedOtuTable = None + _closedOtuMap = None + } + } + /** Must return files to store into summary */ def summaryFiles: Map[String, File] = Map() -- GitLab