annotate roi_metrics.Rscript @ 2:08cb79ffac4c draft

Uploaded
author holtgrewe
date Mon, 06 May 2013 12:46:46 -0400
parents 0ac4f6f3d984
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
1 #!/usr/bin/env Rscript
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
2
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
3 # Compute metrics (all except PCA) for ROI files.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
4 #
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
5 # USAGE: roi_metrics.Rscript -i IN.roi -o OUT.roi
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
6
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
7 # TODO(holtgrew): Bernd, can you give the English names of the metrics below in the comments?
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
8
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
9 # Author: Bernd Jagla <bernd.jagla@pasteur.fr>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
10 # Author: Manuel Holtgrewe <manuel.holtgrewe@fu-berlin.de>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
11
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
12 library('getopt') # parsing args
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
13 library('ngsroi') # ROI I/O
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
14 library('boot') # k3.linear()
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
15
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
16 # ----------------------------------------------------------------------------
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
17 # Command Line Parsing
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
18 # ----------------------------------------------------------------------------
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
19
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
20 # Parse command line options.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
21 spec = matrix(c(
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
22 "help", "h", 0, "logical",
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
23 "infile", "i", 1, "character",
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
24 "outfile", "o", 1, "character"
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
25 ), byrow=TRUE, ncol=4);
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
26 opt = getopt(spec);
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
27
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
28 # If help was asked for print a friendly message and exit with a non-zero
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
29 # error code.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
30 if (!is.null(opt$help) )
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
31 {
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
32 cat(getopt(spec, usage=TRUE));
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
33 q(status=1);
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
34 }
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
35
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
36 # Check arguments.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
37 if (is.null(opt$infile))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
38 {
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
39 write("-i/--infile missing.", stderr());
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
40 q(status=1)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
41 }
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
42 if (is.null(opt$out))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
43 {
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
44 write("-o/--outfile missing.", stderr());
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
45 q(status=1)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
46 }
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
47
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
48 # ----------------------------------------------------------------------------
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
49 # Compute metrics.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
50 # ----------------------------------------------------------------------------
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
51
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
52 # Read input files.
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
53 roi = readROI(opt$infile)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
54
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
55 # Compute some basic statistics.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
56 roi$min = as.numeric(lapply(roi$counts, min))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
57 roi$median = as.numeric(lapply(roi$counts, median))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
58 roi$mean = as.numeric(lapply(roi$counts, mean))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
59 roi$quantile75 = as.numeric(lapply(roi$counts, quantile, probs=0.75))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
60 roi$quantile95 = as.numeric(lapply(roi$counts, quantile, probs=0.95))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
61
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
62 # Compute area under curve metric.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
63 aoc <- function(v){
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
64 m = max(v)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
65 return (sum(v/m)/length(v))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
66 }
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
67 roi$aoc = as.numeric(lapply(roi$counts, aoc))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
68
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
69 # Compute xreaXX metric.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
70 xreaXX <- function(v){
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
71 vo=order(v)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
72 mx = max(v)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
73 mi = min(v)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
74 if((mx-mi)==0) return(0)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
75 vn=(v-mi)/(mx-mi)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
76 x=c(1:length(v))/length(v)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
77 vno=vn[vo]
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
78 return(sum(x-vno)/length(v))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
79 }
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
80 roi$xreaXX = as.numeric(lapply(roi$counts, xreaXX))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
81
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
82 # Compute r3linear metric.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
83 roi$r3linear = as.numeric(lapply(roi$counts, k3.linear))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
84
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
85 # Compute distMax3p metric.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
86 distMax3p <- function(v)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
87 {
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
88 return(length(v)-which.max(rev(v))+1)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
89 }
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
90 roi$distMax3p = as.numeric(lapply(roi$count, distMax3p))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
91
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
92 # Compute distMax5p metric.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
93 distMax5p <- function(v)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
94 {
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
95 return (which.max(v))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
96 }
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
97 roi$distMax5p = as.numeric(lapply(roi$count, distMax5p))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
98
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
99 # Write output.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
100 writeROI(roi, opt$outfile)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
101
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
102 # Quit with success code.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
103 q(status=0)