annotate xcorrhelper.r @ 1:243f75d0ed6e draft default tip

Uploaded. Includes new release 1.0.7 with fixed optional controls.
author messersc
date Thu, 19 Feb 2015 05:39:45 -0500
parents d42f4d78c85e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
1 ########################################################################
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
2 # JAMMv1.0.7rev1 is a peak finder for joint analysis of NGS replicates.
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
3 # Copyright (C) 2014-2015 Mahmoud Ibrahim
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
4 #
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
5 # This program is free software: you can redistribute it and/or modify
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
6 # it under the terms of the GNU General Public License as published by
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
7 # the Free Software Foundation, either version 3 of the License, or
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
8 # (at your option) any later version.
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
9 #
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
10 # This program is distributed in the hope that it will be useful,
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
13 # GNU General Public License for more details.
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
14 #
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
15 # You should have received a copy of the GNU General Public License
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
17 #
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
18 # Contact: mahmoud.ibrahim@mdc-berlin.de
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
19 ########################################################################
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
20
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
21
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
22 # ==============================================
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
23 # Parsing Arguments (source: phantom SPP script)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
24 # ==============================================
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
25 args = commandArgs(trailingOnly = TRUE) # Read Arguments from command line
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
26 #nargs = length(args) # number of arguments
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
27
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
28 #Set arguments to default values
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
29 infile = NA # input file
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
30 out = NA # output directory
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
31
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
32 #Parsing arguments and storing values
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
33 for (each.arg in args) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
34 #input bed file
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
35 if (grepl('^-infile=',each.arg)) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
36 arg.split <- strsplit(each.arg,'=',fixed=TRUE)[[1]] # split on =
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
37 if (! is.na(arg.split[2]) ) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
38 infile <- arg.split[2]
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
39 } else {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
40 stop('No input file')
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
41 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
42 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
43 if (grepl('^-out=',each.arg)) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
44 arg.split <- strsplit(each.arg,'=',fixed=TRUE)[[1]] # split on =
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
45 if (! is.na(arg.split[2]) ) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
46 out <- arg.split[2]
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
47 } else {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
48 stop('No output directory')
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
49 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
50 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
51 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
52
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
53 #=======================> DONE!
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
54
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
55
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
56 # ===================
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
57 # Do the processing
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
58 # ===================
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
59
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
60 #Read in variables
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
61 if (file.exists(infile)) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
62
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
63 message("@", infile)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
64 xcorrs = read.table(infile, header=FALSE)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
65 shifts = as.numeric(xcorrs$V2)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
66
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
67
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
68 #how many chromosomes
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
69 num = length(xcorrs$V1)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
70
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
71 if (length(xcorrs$V2) > 0) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
72 if (length(xcorrs$V2) > 1) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
73 #shift stats
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
74 avg = mean(shifts)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
75 std = sd(shifts)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
76 mod = as.numeric(names(sort(-table(shifts)))[1])
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
77
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
78 #find out fragment length
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
79 fraglength = 100 #default
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
80 default = 1 #was default shift assumed
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
81 if (length(shifts) != 0) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
82 fraglength = ceiling(mean(shifts))
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
83 default = 0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
84 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
85 } else {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
86 avg = xcorrs$V2
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
87 std = xcorrs$V2
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
88 mod = xcorrs$V2
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
89 fraglength = xcorrs$V2
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
90 default = 0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
91 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
92 } else {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
93 fraglength = 100 #default
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
94 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
95 } else {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
96 fraglength = 100
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
97 default = 1
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
98 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
99 #=======================> DONE!
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
100
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
101
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
102
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
103
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
104
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
105 # =====================
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
106 # Write result to File
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
107 # =====================
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
108 if (default == 0) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
109 writethis = paste0("Number of chromosomes used:", num, "\nAverage strand shift:", avg, "\nStandard Deviation:", std, "\nMode:", mod, "\nFragment Length:", fraglength)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
110 write(writethis, file = paste0(out, "/xcorrsummary.txt"))
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
111
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
112 if (length(xcorrs$V2) > 1) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
113 i = pdf(file=paste0(out, "/xcorrsummary.pdf"))
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
114 i = plot(density(shifts), main="Strand Shifts Distribution over Chromosomes")
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
115 i = dev.off()
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
116 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
117 message("Fragment Length:", fraglength, "\n")
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
118 } else if (default == 1) {
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
119
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
120 writethis = paste0("Number of chromosomes used:", "0", "\nAverage strand shift:", "NA", "\nStandard Deviation:", "NA", "\nMode:", "NA", "\nFragment Length:", fraglength)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
121 write(writethis, file = paste0(out, "/xcorrsummary.txt"))
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
122
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
123 message("Fragment length estimation failed, default fragment length assumed:", fraglength, "\n")
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
124 }
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
125 #=======================> DONE!