-
Notifications
You must be signed in to change notification settings - Fork 3
/
runBATMAN.R
128 lines (116 loc) · 4.26 KB
/
runBATMAN.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/Rscript
## import optparse library
suppressPackageStartupMessages(library("optparse"))
## specify our desired options in a list
## by default OptionParser will add an help option equivalent to
## make_option(c("-h", "--help"), action="store_true", default=FALSE,
## help="Show this help message and exit")
option_list <- list(
make_option(c("-i", "--inputData"),
help="Full path to the input NMR spectra data, required."),
make_option(c("-o", "--output"),
help="[Export BATMAN results to your specified folder, defaults to current working directory.]",
default = getwd()),
make_option(c("-p", "--batOptions"),
help="[BATMAN options, default available internally]"),
make_option(c("-u", "--multiData"),
help="[User's metabolites template, defaults to an internal template.]"),
make_option(c("-l", "--metaList"),
help="[List of wanted metabolites, defaults to an internal metabolites list.]")
)
# get command line options, if help option encountered print help and exit,
# otherwise if options not found on command line then set defaults,
parser <- OptionParser(option_list=option_list)
opt <- parse_args(parser)
if(!("inputData" %in% names(opt))) {
print("no input argument given!")
print_help(parser)
q(status = 1,save = "no")
}
## function of replacing "\" to "/" because "\" is interpreted as "\\"
## parsing the arguments
replaceBSlash<-function(paths)
{
# Path '\' in arguments will be read as '\\', needs to be replaced by '/'
backslash <- grepl('\\\\',paths)
sep <- if(backslash) '\\\\' else '/'
tempPath <-as.list(strsplit(paths,sep)[[1]])
if (backslash) {
i<-1
path<-paste(tempPath[1],"/",sep="")
i<-2
while (i<length(tempPath)) {
path1temp<-paste(tempPath[i],"/", sep="")
path<-paste(path,path1temp,sep="")
i<-i+1
}
path1temp<-paste(tempPath[i], sep="")
path<-paste(path,path1temp,sep="")
newPath<-path
} else {
newPath<-paths
}
}
if (is.null(opt$inputData)) {
print("using default trial data set.")
} else {
opt$inputData<-replaceBSlash(opt$inputData)
}
if (is.null(opt$output)) {
print("using default output directory.")
} else {
opt$output<-replaceBSlash(opt$output)
}
## copy the options, metabolites template and list to the BATMAN
## input folder is the files are provided
if ("batOptions" %in% names(opt)) {
opt$batOptions<-replaceBSlash(opt$batOptions)
} else {
print("using default BATMAN options")
}
if ("multiData" %in% names(opt)) {
opt$multiData<-replaceBSlash(opt$multiData)
} else {
print("using default BATMAN metabolites template")
}
if ("metaList" %in% names(opt)) {
opt$metaList<-replaceBSlash(opt$metaList)
} else {
print("using default BATMAN metabolites list")
}
#batmanInputDir<-paste(opt$output, "/runBATMAN/BatmanInput", sep="")
#dir.create(batmanInputDir,recursive = TRUE)
#if (dir.exists(batmanInputDir)) {
# BATMAN expects file names with a defined name, but this is not
# something that we can guarantee if the user is providing the files.
# So we make sure that files get the names that they need. This is inherited
# bad design from BATMAN itself, this should be fixed down the line to
# accept arguments instead of assuming names.
# if (!is.null(opt$batOptions)) {
# file.copy(opt$batOptions, batmanInputDir, overwrite = TRUE)
# }
# if (!is.null(opt$multiData)) {
# file.copy(opt$multiData, batmanInputDir, overwrite = TRUE)
# }
# if (!is.null(opt$metaList)) {
# file.copy(opt$metaList, batmanInputDir, overwrite = TRUE)
# }
#}
## Run BATMAN
library(batman)
bm<-batman(txtFile=opt$inputData, batmanOptions=opt$batOptions, multiDataUser=opt$multiData, metaList=opt$metaList, runBATMANDir=opt$output)
## Create link to simplify results obtention for tools like
## Galaxy.
resultsDir<-paste(opt$output,"results",sep="/")
file.remove(resultsDir)
file.symlink(bm$output,resultsDir)
#if (is.null(opt$inputData) & is.null(opt$output) ) {
# bm <-batman()
#} else {
# bm<-batman(txtFile=opt$inputData, runBATMANDir=opt$output)
## Create link to simplify results obtention for tools like
## Galaxy.
# resultsDir<-paste(opt$output,"results",sep="/")
# file.remove(resultsDir)
# file.symlink(bm$output,resultsDir)
#}