Skip to content
Snippets Groups Projects
Commit 480e70fb authored by Peter van 't Hof's avatar Peter van 't Hof
Browse files

Working version of ParseSamples

parent a6ed777d
Branches
Tags
No related merge requests found
...@@ -3,72 +3,44 @@ package nl.lumc.sasc.biopet.tools ...@@ -3,72 +3,44 @@ package nl.lumc.sasc.biopet.tools
import java.io.File import java.io.File
import nl.lumc.sasc.biopet.core.ToolCommand import nl.lumc.sasc.biopet.core.ToolCommand
import scala.io.Source import scala.io.Source
import java.io.PrintWriter import nl.lumc.sasc.biopet.core.config.Config
import argonaut._, Argonaut._
object ParseSamples extends ToolCommand { object ParseSamples extends ToolCommand {
case class Args(librariesTsv: File = null) extends AbstractArgs case class Args(inputFiles: List[File] = Nil) extends AbstractArgs
class OptParser extends AbstractOptParser { class OptParser extends AbstractOptParser {
opt[File]('i', "librariesTsv") required () maxOccurs (1) valueName ("<file>") action { (x, c) => opt[File]('i', "inputFiles") required () unbounded () valueName ("<file>") action { (x, c) =>
c.copy(librariesTsv = x) c.copy(inputFiles = x :: c.inputFiles)
} text ("output file, default to stdout") } text ("Input must be a tsv file, first line is seen as header and must at least have a 'sample' column, 'library' column is optional, multiple files allowed")
} }
def main(args: Array[String]): Unit = { def main(args: Array[String]): Unit = {
val argsParser = new OptParser val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1) val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
// Libraries tsv val fileMaps = for (inputFile <- commandArgs.inputFiles) yield {
val reader = Source.fromFile(commandArgs.librariesTsv) val reader = Source.fromFile(inputFile)
val lines = reader.getLines.toList val lines = reader.getLines.toList
val header = lines.head.split("\t") val header = lines.head.split("\t")
val sampleColumn = header.indexOf("sample") val sampleColumn = header.indexOf("sample")
val libraryColumn = header.indexOf("library") val libraryColumn = header.indexOf("library")
if (sampleColumn == -1) throw new IllegalStateException("sample column does not exist in: " + commandArgs.librariesTsv) if (sampleColumn == -1) throw new IllegalStateException("sample column does not exist in: " + inputFile)
if (libraryColumn == -1) throw new IllegalStateException("library column does not exist in: " + commandArgs.librariesTsv)
val librariesValues: List[Map[String, Any]] = for (tsvLine <- lines.tail) yield {
val librariesValues = (for (tsvLine <- lines.tail) yield { val values = tsvLine.split("\t")
val values = tsvLine.split("\t") val sample = values(sampleColumn)
val sample = values(sampleColumn) val library = if (libraryColumn != -1) values(libraryColumn) else null
val library = values(libraryColumn) val valuesMap = (for (t <- 0 until values.size if t != sampleColumn if t != libraryColumn) yield (header(t) -> values(t))).toMap
val libraryValues = (for (t <- 0 until values.size if t != sampleColumn if t != libraryColumn) yield (header(t) -> values(t))).toMap val map: Map[String, Any] = if (library != null) {
((sample, library) -> libraryValues) Map("samples" -> Map(sample -> Map("libraries" -> Map(library -> valuesMap))))
}).toMap } else {
Map("samples" -> Map(sample -> valuesMap))
for (((sample, library), values) <- librariesValues) { }
println("sample=" + sample + ", library=" + library + " = " + values) map
// format: OFF }
val summary = librariesValues.foldLeft(Map[String, Any]())((acc, kv) => Config.mergeMaps(acc, kv))
("samples" := (sample :=
("libraries" := (library := (
jEmptyObject)) ->: jEmptyObject)->: jEmptyObject) ->: jEmptyObject) ->: jEmptyObject
// format: ON
val summeryText = summary.spaces2
println(summeryText)
//logger.debug("\n" + summeryText)
//val writer = new PrintWriter(out)
//writer.write(summeryText)
//writer.close()
//logger.debug("Stop")
}
def getSampleJson(sample: String): Json = {
val libraries = (for (((s, l), values) <- librariesValues if s == sample) yield getLibraryJson(sample, l)).toList
(sample := libraries) ->: jEmptyObject
}
def getLibraryJson(sample: String, library: String): Json = {
(library := "bla") ->: jEmptyObject
} }
val map = fileMaps.foldLeft(Map[String, Any]())((acc, kv) => Config.mergeMaps(acc, kv))
val samples = (for (((s, l), values) <- librariesValues) yield s).toSet val json = Config.mapToJson(map)
println(json.spaces2)
val samplesJson = (for (s <- samples) yield getSampleJson(s))
val summary = ("samples" := samplesJson) ->: jEmptyObject
println(summary.spaces2)
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment