Mercurial > repos > holtgrewe > ngs_roi
diff roi_metrics.Rscript @ 0:61d9bdb6d519 draft
Uploaded
| author | holtgrewe |
|---|---|
| date | Thu, 18 Apr 2013 08:03:38 -0400 |
| parents | |
| children | 0ac4f6f3d984 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/roi_metrics.Rscript Thu Apr 18 08:03:38 2013 -0400 @@ -0,0 +1,103 @@ +#!/usr/bin/env Rscript + +# Compute metrics (all except PCA) for ROI files. +# +# USAGE: roi_metrics.Rscript -i IN.roi -o OUT.roi + +# TODO(holtgrew): Bernd, can you give the English names of the metrics below in the comments? + +# Author: Bernd Jagla <bernd.jagla@pasteur.fr> +# Author: Manuel Holtgrewe <manuel.holtgrewe@fu-berlin.de> + +library('getopt') # parsing args +library('ngsroi') # ROI I/O +library('boot') # k3.linear() + +# ---------------------------------------------------------------------------- +# Command Line Parsing +# ---------------------------------------------------------------------------- + +# Parse command line options. +spec = matrix(c( + "help", "h", 0, "logical", + "infile", "i", 1, "character", + "outfile", "o", 1, "character" +), byrow=TRUE, ncol=4); +opt = getopt(spec); + +# If help was asked for print a friendly message and exit with a non-zero +# error code. +if (!is.null(opt$help) ) +{ + cat(getopt(spec, usage=TRUE)); + q(status=1); +} + +# Check arguments. +if (is.null(opt$infile)) +{ + write("-i/--infile missing.", stderr()); + q(status=1) +} +if (is.null(opt$out)) +{ + write("-o/--outfile missing.", stderr()); + q(status=1) +} + +# ---------------------------------------------------------------------------- +# Compute metrics. +# ---------------------------------------------------------------------------- + +# Read input files.x +roi = readROI(opt$infile) + +# Compute some basic statistics. +roi$min = as.numeric(lapply(roi$counts, min)) +roi$median = as.numeric(lapply(roi$counts, median)) +roi$mean = as.numeric(lapply(roi$counts, mean)) +roi$quantile75 = as.numeric(lapply(roi$counts, quantile, probs=0.75)) +roi$quantile95 = as.numeric(lapply(roi$counts, quantile, probs=0.95)) + +# Compute area under curve metric. +aoc <- function(v){ + m = max(v) + return (sum(v/m)/length(v)) +} +roi$aoc = as.numeric(lapply(roi$counts, aoc)) + +# Compute xreaXX metric. +xreaXX <- function(v){ + vo=order(v) + mx = max(v) + mi = min(v) + if((mx-mi)==0) return(0) + vn=(v-mi)/(mx-mi) + x=c(1:length(v))/length(v) + vno=vn[vo] + return(sum(x-vno)/length(v)) +} +roi$xreaXX = as.numeric(lapply(roi$counts, xreaXX)) + +# Compute r3linear metric. +roi$r3linear = as.numeric(lapply(roi$counts, k3.linear)) + +# Compute distMax3p metric. +distMax3p <- function(v) +{ + return(length(v)-which.max(rev(v))+1) +} +roi$distMax3p = as.numeric(lapply(roi$count, distMax3p)) + +# Compute distMax5p metric. +distMax5p <- function(v) +{ + return (which.max(v)) +} +roi$distMax5p = as.numeric(lapply(roi$count, distMax5p)) + +# Write output. +writeROI(roi, opt$outfile) + +# Quit with success code. +q(status=0) \ No newline at end of file
