diff --git a/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReport.scala b/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReport.scala index b12fafa838ef4223e9b44454f43a4f03bc02125e..4ebf2ed8341c054022cbd0123e754187bb57b22e 100644 --- a/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReport.scala +++ b/public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReport.scala @@ -20,7 +20,7 @@ import java.io.{ File, PrintWriter } import nl.lumc.sasc.biopet.utils.config.Configurable import nl.lumc.sasc.biopet.core.report.{ ReportBuilderExtension, ReportBuilder, ReportPage, ReportSection } import nl.lumc.sasc.biopet.core.summary.{ Summary, SummaryValue } -import nl.lumc.sasc.biopet.extensions.rscript.{ StackedBarPlot, LinePlot } +import nl.lumc.sasc.biopet.utils.rscript.{ StackedBarPlot, LinePlot } class BammetricsReport(val root: Configurable) extends ReportBuilderExtension { val builder = BammetricsReport diff --git a/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/plotScatter.R b/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/plotScatter.R similarity index 100% rename from public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/plotScatter.R rename to public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/plotScatter.R diff --git a/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/plotXY.R b/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/plotXY.R similarity index 100% rename from public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/plotXY.R rename to public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/plotXY.R diff --git a/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/stackedBar.R b/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/stackedBar.R similarity index 100% rename from public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/stackedBar.R rename to public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/stackedBar.R diff --git a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/extensions/PythonCommandLineFunction.scala b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/extensions/PythonCommandLineFunction.scala index 000c77a9acd18080b77b4d34029bf95d6064ab71..044b43676cd66cc68bcaeb00ade521def63c62de 100644 --- a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/extensions/PythonCommandLineFunction.scala +++ b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/extensions/PythonCommandLineFunction.scala @@ -15,7 +15,7 @@ */ package nl.lumc.sasc.biopet.core.extensions -import java.io.{File, FileOutputStream} +import java.io.{ File, FileOutputStream } import nl.lumc.sasc.biopet.core.BiopetCommandLineFunction import org.broadinstitute.gatk.utils.commandline.Input diff --git a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/extensions/RscriptCommandLineFunction.scala b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/extensions/RscriptCommandLineFunction.scala index cce714ef1eb96a002748f0ea3aa0d2148a588426..c773de6155b5a771f242dbbe83a4a21f98089eaa 100644 --- a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/extensions/RscriptCommandLineFunction.scala +++ b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/extensions/RscriptCommandLineFunction.scala @@ -15,9 +15,10 @@ */ package nl.lumc.sasc.biopet.core.extensions -import java.io.{File, FileOutputStream} +import java.io.{ File, FileOutputStream } import nl.lumc.sasc.biopet.core.BiopetCommandLineFunction +import nl.lumc.sasc.biopet.utils.rscript.Rscript import scala.sys.process._ @@ -26,67 +27,13 @@ import scala.sys.process._ * * Created by wyleung on 17-2-15. */ -trait RscriptCommandLineFunction extends BiopetCommandLineFunction { +trait RscriptCommandLineFunction extends BiopetCommandLineFunction with Rscript { - protected var script: File - - executable = config("exe", default = "Rscript", submodule = "Rscript") + executable = rscriptExecutable override def beforeGraph(): Unit = { - checkScript() - } - - /** - * If script not exist in file system it try to copy it from the jar - * @param local if true it use File.createTempFile instead of ".queue/tmp/" - */ - protected def checkScript(local: Boolean = false): Unit = { - if (script.exists()) { - script = script.getAbsoluteFile - } else { - val rScript: File = { - if (local) File.createTempFile(script.getName, ".R") - else new File(".queue/tmp/" + script) - } - if (!rScript.getParentFile.exists) rScript.getParentFile.mkdirs - - val is = getClass.getResourceAsStream(script.getPath) - val os = new FileOutputStream(rScript) - - org.apache.commons.io.IOUtils.copy(is, os) - os.close() - - script = rScript - } + checkScript(Some(jobTempDir)) } - /** - * Execute rscript on local system - * @param logger How to handle stdout and stderr - */ - def runLocal(logger: ProcessLogger): Unit = { - checkScript(local = true) - - this.logger.info(cmdLine) - - val cmd = cmdLine.stripPrefix(" '").stripSuffix("' ").split("' *'") - - this.logger.info(cmd.mkString(" ")) - - val process = Process(cmd.toSeq).run(logger) - this.logger.info(process.exitValue()) - } - - /** - * Execute rscript on local system - * Stdout and stderr will go to biopet logger - */ - def runLocal(): Unit = { - runLocal(ProcessLogger(logger.info(_))) - } - - def cmdLine: String = { - required(executable) + - required(script) - } + def cmdLine: String = repeat(cmd) } diff --git a/public/biopet-framework/src/main/resources/nl/lumc/sasc/biopet/tools/plotHeatmap.R b/public/biopet-tools/src/main/resources/nl/lumc/sasc/biopet/tools/plotHeatmap.R similarity index 100% rename from public/biopet-framework/src/main/resources/nl/lumc/sasc/biopet/tools/plotHeatmap.R rename to public/biopet-tools/src/main/resources/nl/lumc/sasc/biopet/tools/plotHeatmap.R diff --git a/public/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala b/public/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala index 6f1c72a552b9b33cfb924716c84c674eeb571572..66d7f32506c774d91507c1c7c54bdf9c28fc7072 100644 --- a/public/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala +++ b/public/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala @@ -19,7 +19,7 @@ import java.io.{ PrintWriter, InputStream, File } import java.util import htsjdk.variant.vcf.VCFFileReader -import nl.lumc.sasc.biopet.extensions.rscript.ScatterPlot +import nl.lumc.sasc.biopet.utils.rscript.ScatterPlot import nl.lumc.sasc.biopet.utils.intervals.{ BedRecord, BedRecordList } import scala.collection.JavaConversions._ diff --git a/public/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/SummaryToTsvTest.scala b/public/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/SummaryToTsvTest.scala index 916fd48cc35991c0a6a47be4f646b179d8f66831..6071fceaaed85a943a4f973ac713d24e8b708952 100644 --- a/public/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/SummaryToTsvTest.scala +++ b/public/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/SummaryToTsvTest.scala @@ -9,7 +9,7 @@ import org.scalatest.mock.MockitoSugar import org.scalatest.testng.TestNGSuite import org.testng.annotations.Test -import nl.lumc.sasc.biopet.core.summary.Summary +import nl.lumc.sasc.biopet.utils.summary.Summary /** * Created by ahbbollen on 31-8-15. diff --git a/public/biopet-framework/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/plotScatter.R b/public/biopet-utils/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/plotScatter.R similarity index 100% rename from public/biopet-framework/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/plotScatter.R rename to public/biopet-utils/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/plotScatter.R diff --git a/public/biopet-framework/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/plotXY.R b/public/biopet-utils/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/plotXY.R similarity index 100% rename from public/biopet-framework/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/plotXY.R rename to public/biopet-utils/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/plotXY.R diff --git a/public/biopet-framework/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/stackedBar.R b/public/biopet-utils/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/stackedBar.R similarity index 100% rename from public/biopet-framework/src/main/resources/nl/lumc/sasc/biopet/extensions/rscript/stackedBar.R rename to public/biopet-utils/src/main/resources/nl/lumc/sasc/biopet/utils/rscript/stackedBar.R diff --git a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/extensions/rscript/LinePlot.scala b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/LinePlot.scala similarity index 67% rename from public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/extensions/rscript/LinePlot.scala rename to public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/LinePlot.scala index 4ff413b1f8b0c9a32929c36902327eb3a891565b..fb0e2f0a0706a56c6063c2a2fa2dc199bfee573c 100644 --- a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/extensions/rscript/LinePlot.scala +++ b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/LinePlot.scala @@ -13,26 +13,22 @@ * license; For commercial users or users who do not want to follow the AGPL * license, please contact us to obtain a separate license. */ -package nl.lumc.sasc.biopet.extensions.rscript +package nl.lumc.sasc.biopet.utils.rscript import java.io.File -import nl.lumc.sasc.biopet.core.extensions.RscriptCommandLineFunction import nl.lumc.sasc.biopet.utils.config.Configurable -import org.broadinstitute.gatk.utils.commandline.{ Input, Output } /** * Extension for en general line plot with R * * Created by pjvan_thof on 4/29/15. */ -class LinePlot(val root: Configurable) extends RscriptCommandLineFunction { +class LinePlot(val root: Configurable) extends Rscript { protected var script: File = config("script", default = "plotXY.R") - @Input var input: File = _ - @Output var output: File = _ var width: Option[Int] = config("width") @@ -43,14 +39,14 @@ class LinePlot(val root: Configurable) extends RscriptCommandLineFunction { var title: Option[String] = config("title") var removeZero: Boolean = config("removeZero", default = false) - override def cmdLine: String = super.cmdLine + - required("--input", input) + - required("--output", output) + - optional("--width", width) + - optional("--height", height) + - optional("--xlabel", xlabel) + - required("--ylabel", ylabel) + - optional("--llabel", llabel) + - optional("--title", title) + - optional("--removeZero", removeZero) + override def cmd = super.cmd ++ + Seq("--input", input.getAbsolutePath) ++ + Seq("--output", output.getAbsolutePath) ++ + width.map(x => Seq("--width", x.toString)).getOrElse(Seq()) ++ + height.map(x => Seq("--height", x.toString)).getOrElse(Seq()) ++ + xlabel.map(Seq("--xlabel", _)).getOrElse(Seq()) ++ + ylabel.map(Seq("--ylabel", _)).getOrElse(Seq()) ++ + llabel.map(Seq("--llabel", _)).getOrElse(Seq()) ++ + title.map(Seq("--title", _)).getOrElse(Seq()) ++ + (if (removeZero) Seq("--removeZero") else Seq()) } diff --git a/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/Rscript.scala b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/Rscript.scala new file mode 100644 index 0000000000000000000000000000000000000000..685108d0cb7f31cebfcc4b998017ae0a4c91726f --- /dev/null +++ b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/Rscript.scala @@ -0,0 +1,65 @@ +package nl.lumc.sasc.biopet.utils.rscript + +import java.io.{ File, FileOutputStream } + +import nl.lumc.sasc.biopet.utils.Logging +import nl.lumc.sasc.biopet.utils.config.Configurable + +import scala.sys.process.{ Process, ProcessLogger } + +/** + * Created by pjvanthof on 13/09/15. + */ +trait Rscript extends Configurable { + protected var script: File + + def rscriptExecutable: String = config("exe", default = "Rscript", submodule = "Rscript") + + /** This is the defaul implementation, to add arguments override this */ + def cmd: Seq[String] = Seq(rscriptExecutable, script.getAbsolutePath) + + /** + * If script not exist in file system it try to copy it from the jar + * @param dir Directory to store temp script, if None or not given File.createTempFile is called + */ + protected def checkScript(dir: Option[File] = None): Unit = { + if (script.exists()) { + script = script.getAbsoluteFile + } else { + val rScript: File = dir match { + case Some(dir) => new File(dir, script.getName) + case _ => File.createTempFile(script.getName, ".R") + } + if (!rScript.getParentFile.exists) rScript.getParentFile.mkdirs + + val is = getClass.getResourceAsStream(script.getPath) + val os = new FileOutputStream(rScript) + + org.apache.commons.io.IOUtils.copy(is, os) + os.close() + + script = rScript + } + } + + /** + * Execute rscript on local system + * @param logger How to handle stdout and stderr + */ + def runLocal(logger: ProcessLogger): Unit = { + checkScript() + + Logging.logger.info("Running: " + cmd.mkString(" ")) + + val process = Process(cmd).run(logger) + Logging.logger.info(process.exitValue()) + } + + /** + * Execute rscript on local system + * Stdout and stderr will go to biopet logger + */ + def runLocal(): Unit = { + runLocal(ProcessLogger(Logging.logger.info(_))) + } +} diff --git a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/extensions/rscript/ScatterPlot.scala b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/ScatterPlot.scala similarity index 67% rename from public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/extensions/rscript/ScatterPlot.scala rename to public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/ScatterPlot.scala index ad3533ced93e6e43da95d2cab717c8c48c39d426..9bcbaffcc7d159cc7e82e012c218d0a2f26fc745 100644 --- a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/extensions/rscript/ScatterPlot.scala +++ b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/ScatterPlot.scala @@ -13,26 +13,22 @@ * license; For commercial users or users who do not want to follow the AGPL * license, please contact us to obtain a separate license. */ -package nl.lumc.sasc.biopet.extensions.rscript +package nl.lumc.sasc.biopet.utils.rscript import java.io.File -import nl.lumc.sasc.biopet.core.extensions.RscriptCommandLineFunction import nl.lumc.sasc.biopet.utils.config.Configurable -import org.broadinstitute.gatk.utils.commandline.{ Input, Output } /** * Extension for en general line plot with R * * Created by pjvan_thof on 4/29/15. */ -class ScatterPlot(val root: Configurable) extends RscriptCommandLineFunction { +class ScatterPlot(val root: Configurable) extends Rscript { protected var script: File = config("script", default = "plotScatter.R") - @Input var input: File = _ - @Output var output: File = _ var width: Option[Int] = config("width") @@ -43,14 +39,14 @@ class ScatterPlot(val root: Configurable) extends RscriptCommandLineFunction { var title: Option[String] = config("title") var removeZero: Boolean = config("removeZero", default = false) - override def cmdLine: String = super.cmdLine + - required("--input", input) + - required("--output", output) + - optional("--width", width) + - optional("--height", height) + - optional("--xlabel", xlabel) + - required("--ylabel", ylabel) + - optional("--llabel", llabel) + - optional("--title", title) + - optional("--removeZero", removeZero) + override def cmd = super.cmd ++ + Seq("--input", input.getAbsolutePath) ++ + Seq("--output", output.getAbsolutePath) ++ + width.map(x => Seq("--width", x.toString)).getOrElse(Seq()) ++ + height.map(x => Seq("--height", x.toString)).getOrElse(Seq()) ++ + xlabel.map(Seq("--xlabel", _)).getOrElse(Seq()) ++ + ylabel.map(Seq("--ylabel", _)).getOrElse(Seq()) ++ + llabel.map(Seq("--llabel", _)).getOrElse(Seq()) ++ + title.map(Seq("--title", _)).getOrElse(Seq()) ++ + (if (removeZero) Seq("--removeZero") else Seq()) } diff --git a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/extensions/rscript/StackedBarPlot.scala b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/StackedBarPlot.scala similarity index 68% rename from public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/extensions/rscript/StackedBarPlot.scala rename to public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/StackedBarPlot.scala index 2bf533f81feed33a5c840a341376b9776c502c47..1965e0a54c810a758db3147de2d24ba8162051fe 100644 --- a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/extensions/rscript/StackedBarPlot.scala +++ b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/rscript/StackedBarPlot.scala @@ -13,26 +13,22 @@ * license; For commercial users or users who do not want to follow the AGPL * license, please contact us to obtain a separate license. */ -package nl.lumc.sasc.biopet.extensions.rscript +package nl.lumc.sasc.biopet.utils.rscript import java.io.File -import nl.lumc.sasc.biopet.core.extensions.RscriptCommandLineFunction import nl.lumc.sasc.biopet.utils.config.Configurable -import org.broadinstitute.gatk.utils.commandline.{ Input, Output } /** * Extension for en general stackedbar plot with R * * Created by pjvan_thof on 4/29/15. */ -class StackedBarPlot(val root: Configurable) extends RscriptCommandLineFunction { +class StackedBarPlot(val root: Configurable) extends Rscript { protected var script: File = config("script", default = "stackedBar.R") - @Input var input: File = _ - @Output var output: File = _ var width: Option[Int] = config("width") @@ -42,13 +38,13 @@ class StackedBarPlot(val root: Configurable) extends RscriptCommandLineFunction var llabel: Option[String] = config("llabel") var title: Option[String] = config("title") - override def cmdLine: String = super.cmdLine + - required("--input", input) + - required("--output", output) + - optional("--width", width) + - optional("--height", height) + - optional("--xlabel", xlabel) + - required("--ylabel", ylabel) + - optional("--llabel", llabel) + - optional("--title", title) + override def cmd = super.cmd ++ + Seq("--input", input.getAbsolutePath) ++ + Seq("--output", output.getAbsolutePath) ++ + width.map(x => Seq("--width", x.toString)).getOrElse(Seq()) ++ + height.map(x => Seq("--height", x.toString)).getOrElse(Seq()) ++ + xlabel.map(Seq("--xlabel", _)).getOrElse(Seq()) ++ + ylabel.map(Seq("--ylabel", _)).getOrElse(Seq()) ++ + llabel.map(Seq("--llabel", _)).getOrElse(Seq()) ++ + title.map(Seq("--title", _)).getOrElse(Seq()) } diff --git a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala index e8a0653d95112208d782d4e736c7a7a7cba840ee..c435504ca6d448fb854bd10b9558a659cd7c2b50 100644 --- a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala +++ b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala @@ -20,7 +20,7 @@ import java.io.{ File, PrintWriter } import nl.lumc.sasc.biopet.utils.config.Configurable import nl.lumc.sasc.biopet.core.report.{ ReportBuilderExtension, ReportBuilder, ReportPage, ReportSection } import nl.lumc.sasc.biopet.core.summary.{ Summary, SummaryValue } -import nl.lumc.sasc.biopet.extensions.rscript.StackedBarPlot +import nl.lumc.sasc.biopet.utils.rscript.StackedBarPlot class FlexiprepReport(val root: Configurable) extends ReportBuilderExtension { val builder = FlexiprepReport diff --git a/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaReport.scala b/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaReport.scala index 4f47abcca4e8870b05c8f6e4696feba1ccd73968..3f121092ddf6d494b56f2e22b3f6cf970892d66f 100644 --- a/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaReport.scala +++ b/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaReport.scala @@ -20,7 +20,7 @@ import java.io.{ File, PrintWriter } import nl.lumc.sasc.biopet.utils.config.Configurable import nl.lumc.sasc.biopet.core.report._ import nl.lumc.sasc.biopet.core.summary.{ Summary, SummaryValue } -import nl.lumc.sasc.biopet.extensions.rscript.StackedBarPlot +import nl.lumc.sasc.biopet.utils.rscript.StackedBarPlot import nl.lumc.sasc.biopet.pipelines.bammetrics.BammetricsReport import nl.lumc.sasc.biopet.pipelines.flexiprep.FlexiprepReport