25
|
1 <?xml version="1.0" encoding="UTF-8"?>
|
|
2 <tool id="edger_dge" name="edgeR: Differential Gene(Expression) Analysis">
|
|
3 <description>RNA-Seq gene expression analysis using edgeR (R package)</description>
|
|
4
|
|
5 <requirements>
|
33
|
6 <requirement type="package" version="3.0.3">R</requirement>
|
29
|
7 <requirement type="package" version="latest">package_biocLite_edgeR_limma</requirement>
|
25
|
8 </requirements>
|
|
9
|
|
10 <command>
|
|
11 <!--
|
|
12 The following script is written in the "Cheetah" language:
|
|
13 http://www.cheetahtemplate.org/docs/users_guide_html_multipage/contents.html
|
|
14 -->
|
|
15
|
|
16 R --vanilla --slave -f $R_script '--args
|
|
17 $expression_matrix
|
|
18 $design_matrix
|
|
19 $contrast
|
|
20
|
|
21 $fdr
|
|
22
|
|
23 $output_count_edgeR
|
|
24 $output_cpm
|
|
25
|
|
26 /dev/null <!-- Calculation of FPKM/RPKM should come here -->
|
|
27
|
|
28 #if $output_raw_counts:
|
|
29 $output_raw_counts
|
|
30 #else:
|
|
31 /dev/null
|
|
32 #end if
|
|
33
|
|
34 #if $output_MDSplot:
|
|
35 $output_MDSplot
|
|
36 #else:
|
|
37 /dev/null
|
|
38 #end if
|
|
39
|
|
40 #if $output_BCVplot:
|
|
41 $output_BCVplot
|
|
42 #else:
|
|
43 /dev/null
|
|
44 #end if
|
|
45
|
|
46 #if $output_MAplot:
|
|
47 $output_MAplot
|
|
48 #else:
|
|
49 /dev/null
|
|
50 #end if
|
|
51
|
|
52 #if $output_PValue_distribution_plot:
|
|
53 $output_PValue_distribution_plot
|
|
54 #else:
|
|
55 /dev/null
|
|
56 #end if
|
|
57
|
|
58 #if $output_hierarchical_clustering_plot:
|
|
59 $output_hierarchical_clustering_plot
|
|
60 #else:
|
|
61 /dev/null
|
|
62 #end if
|
|
63
|
|
64 #if $output_heatmap_plot:
|
|
65 $output_heatmap_plot
|
|
66 #else:
|
|
67 /dev/null
|
|
68 #end if
|
|
69
|
|
70 #if $output_RData_obj:
|
|
71 $output_RData_obj
|
|
72 #else:
|
|
73 /dev/null
|
|
74 #end if
|
|
75 '
|
|
76 #if $output_R:
|
|
77 > $output_R
|
|
78 #else:
|
|
79 > /dev/null
|
|
80 #end if
|
|
81
|
|
82 2> stderr.txt
|
|
83 ;
|
|
84 grep -v 'Calculating library sizes from column' stderr.txt 1>&2
|
|
85
|
|
86 </command>
|
|
87
|
|
88 <inputs>
|
|
89 <param name="expression_matrix" type="data" format="tabular" label="Expression (read count) matrix" />
|
|
90 <param name="design_matrix" type="data" format="tabular" label="Design matrix" hepl="Ensure your samplenames are identical to those in the expression matrix. Preferentially, create the contrast matrix using 'edgeR: Design- from Expression matrix'." />
|
|
91
|
|
92 <param name="contrast" type="text" label="Contrast (biological question)" help="e.g. 'tumor-normal' or '(G1+G2)/2-G3' using the factors chosen in the design matrix. Read the 'makeContrasts' manual from Limma package for more info: http://www.bioconductor.org/packages/release/bioc/html/limma.html and http://www.bioconductor.org/packages/release/bioc/vignettes/limma/inst/doc/usersguide.pdf." />
|
|
93
|
|
94 <param name="fdr" type="float" min="0" max="1" value="0.05" label="False Discovery Rate (FDR)" />
|
|
95
|
|
96 <param name="outputs" type="select" label="Optional desired outputs" multiple="true" display="checkboxes">
|
|
97 <option value="make_output_raw_counts">Raw counts table</option>
|
|
98 <option value="make_output_MDSplot">MDS-plot</option>
|
|
99 <option value="make_output_BCVplot">BCV-plot</option>
|
|
100 <option value="make_output_MAplot">MA-plot</option>
|
|
101 <option value="make_output_PValue_distribution_plot">P-Value distribution plot</option>
|
|
102 <option value="make_output_hierarchical_clustering_plot">Hierarchical custering</option>
|
|
103 <option value="make_output_heatmap_plot">Heatmap</option>
|
|
104
|
43
|
105 <option value="make_output_R_stdout">R stdout</option>
|
25
|
106 <option value="make_output_RData_obj">R Data object</option>
|
|
107 </param>
|
|
108 </inputs>
|
|
109
|
|
110 <configfiles>
|
|
111 <configfile name="R_script">
|
|
112 library(limma,quietly=TRUE) ## enable quietly to avoid unnecessaity stderr dumping
|
|
113 library(edgeR,quietly=TRUE) ## enable quietly to avoid unnecessaity stderr dumping
|
|
114 library(splines,quietly=TRUE) ## enable quietly to avoid unnecessaity stderr dumping
|
|
115
|
|
116 ## Fetch commandline arguments
|
|
117 args <- commandArgs(trailingOnly = TRUE)
|
|
118
|
|
119 expression_matrix_file = args[1]
|
|
120 design_matrix_file = args[2]
|
|
121 contrast = args[3]
|
|
122
|
|
123 fdr = args[4]
|
|
124
|
|
125 output_count_edgeR = args[5]
|
|
126 output_cpm = args[6]
|
|
127
|
43
|
128 output_xpkm = args[7] ##FPKM file - yet to be implemented
|
25
|
129
|
|
130 output_raw_counts = args[8]
|
|
131 output_MDSplot = args[9]
|
|
132 output_BCVplot = args[10]
|
|
133 output_MAplot = args[11]
|
|
134 output_PValue_distribution_plot = args[12]
|
|
135 output_hierarchical_clustering_plot = args[13]
|
|
136 output_heatmap_plot = args[14]
|
|
137 output_RData_obj = args[15]
|
|
138
|
|
139
|
|
140 library(edgeR)
|
|
141 ##raw_data <- read.delim(designmatrix,header=T,stringsAsFactors=T)
|
|
142 ## Obtain read-counts
|
|
143
|
|
144 expression_matrix <- read.delim(expression_matrix_file,header=T,stringsAsFactors=F,row.names=1,check.names=FALSE,na.strings=c(""))
|
|
145 design_matrix <- read.delim(design_matrix_file,header=T,stringsAsFactors=F,row.names=1,check.names=FALSE,na.strings=c(""))
|
|
146
|
|
147 colnames(design_matrix) <- make.names(colnames(design_matrix))
|
|
148
|
|
149 for(i in 1:ncol(design_matrix)) {
|
|
150 old = design_matrix[,i]
|
|
151 design_matrix[,i] = make.names(design_matrix[,i])
|
|
152 if(paste(design_matrix[,i],collapse="\t") != paste(old,collapse="\t")) {
|
|
153 print("Renaming of factors:")
|
|
154 print(old)
|
|
155 print("To:")
|
|
156 print(design_matrix[,i])
|
|
157 }
|
45
|
158 ## The following line seems to malfunction the script:
|
|
159 ##design_matrix[,i] <- as.factor(design_matrix[,i])
|
25
|
160 }
|
|
161
|
44
|
162 ## 1) In the expression matrix, you only want to have the samples described in the design matrix
|
25
|
163 columns <- match(rownames(design_matrix),colnames(expression_matrix))
|
43
|
164 columns <- columns[!is.na(columns)]
|
25
|
165 read_counts <- expression_matrix[,columns]
|
|
166
|
44
|
167 ## 2) In the design matrix, you only want to have samples of which you really have the counts
|
|
168 columns <- match(colnames(expression_matrix),rownames(design_matrix))
|
|
169 columns <- columns[!is.na(columns)]
|
|
170 design_matrix <- design_matrix[columns,,drop=FALSE]
|
25
|
171
|
|
172 ## Filter for HTSeq predifined counts:
|
|
173 exclude_HTSeq <- c("no_feature","ambiguous","too_low_aQual","not_aligned","alignment_not_unique")
|
|
174 exclude_DEXSeq <- c("_ambiguous","_empty","_lowaqual","_notaligned")
|
|
175
|
44
|
176 exclude <- match(c(exclude_HTSeq, exclude_DEXSeq),rownames(read_counts))
|
|
177 exclude <- exclude[is.na(exclude)==0]
|
25
|
178 if(length(exclude) != 0) {
|
44
|
179 read_counts <- read_counts[-exclude,]
|
25
|
180 }
|
|
181
|
|
182
|
44
|
183 empty_samples <- apply(read_counts,2,function(x) sum(x) == 0)
|
25
|
184 if(sum(empty_samples) > 0) {
|
|
185 write(paste("There are ",sum(empty_samples)," empty samples found:",sep=""),stderr())
|
|
186 write(colnames(read_counts)[empty_samples],stderr())
|
|
187 } else {
|
|
188
|
|
189 dge <- DGEList(counts=read_counts,genes=rownames(read_counts))
|
|
190
|
|
191 formula <- paste(c("~0",make.names(colnames(design_matrix))),collapse = " + ")
|
|
192 design_matrix_tmp <- design_matrix
|
|
193 colnames(design_matrix_tmp) <- make.names(colnames(design_matrix_tmp))
|
|
194 design <- model.matrix(as.formula(formula),design_matrix_tmp)
|
|
195 rm(design_matrix_tmp)
|
|
196
|
|
197 # Filter prefixes
|
|
198 prefixes = colnames(design_matrix)[attr(design,"assign")]
|
|
199 avoid = nchar(prefixes) == nchar(colnames(design))
|
|
200 replacements = substr(colnames(design),nchar(prefixes)+1,nchar(colnames(design)))
|
|
201 replacements[avoid] = colnames(design)[avoid]
|
|
202 colnames(design) = replacements
|
|
203
|
|
204 # Do normalization
|
|
205 write("Calculating normalization factors...",stdout())
|
|
206 dge <- calcNormFactors(dge)
|
|
207 write("Estimating common dispersion...",stdout())
|
|
208 dge <- estimateGLMCommonDisp(dge,design)
|
|
209 write("Estimating trended dispersion...",stdout())
|
|
210 dge <- estimateGLMTrendedDisp(dge,design)
|
|
211 write("Estimating tagwise dispersion...",stdout())
|
|
212 dge <- estimateGLMTagwiseDisp(dge,design)
|
|
213
|
|
214
|
|
215 if(output_MDSplot != "/dev/null") {
|
|
216 write("Creating MDS plot",stdout())
|
|
217 ##points <- plotMDS(dge,method="bcv",labels=rep("",nrow(dge\$samples)))# Get coordinates of unflexible plot
|
|
218 points <- plotMDS.DGEList(dge,labels=rep("",nrow(dge\$samples)))# Get coordinates of unflexible plot
|
|
219 dev.off()# Kill it
|
|
220
|
|
221 pdf(output_MDSplot)
|
|
222 diff_x <- abs(max(points\$x)-min(points\$x))
|
|
223 diff_y <-(max(points\$y)-min(points\$y))
|
|
224 plot(c(min(points\$x),max(points\$x) + 0.45 * diff_x), c(min(points\$y) - 0.05 * diff_y,max(points\$y) + 0.05 * diff_y), main="edgeR MDS Plot",type="n", xlab="BCV distance 1", ylab="BCV distance 2")
|
|
225 points(points\$x,points\$y,pch=20)
|
|
226 text(points\$x, points\$y,rownames(dge\$samples),cex=0.7,col="gray",pos=4)
|
|
227 rm(diff_x,diff_y)
|
|
228
|
|
229 dev.off()
|
|
230 }
|
|
231
|
|
232 if(output_BCVplot != "/dev/null") {
|
|
233 write("Creating Biological coefficient of variation plot",stdout())
|
|
234 pdf(output_BCVplot)
|
|
235 plotBCV(dge, cex=0.4, main="edgeR: Biological coefficient of variation (BCV) vs abundance")
|
|
236 dev.off()
|
|
237 }
|
|
238
|
|
239
|
|
240 write("Fitting GLM...",stdout())
|
|
241 fit <- glmFit(dge,design)
|
|
242
|
|
243 write(paste("Performing likelihood ratio test: ",contrast,sep=""),stdout())
|
|
244 cont <- c(contrast)
|
|
245 cont <- makeContrasts(contrasts=cont, levels=design)
|
|
246
|
|
247 lrt <- glmLRT(fit, contrast=cont[,1])
|
|
248 write(paste("Exporting to file: ",output_count_edgeR,sep=""),stdout())
|
|
249 write.table(file=output_count_edgeR,topTags(lrt,n=nrow(read_counts))\$table,sep="\t",row.names=TRUE,col.names=NA)
|
|
250 write.table(file=output_cpm,cpm(dge,normalized.lib.sizes=TRUE),sep="\t",row.names=TRUE,col.names=NA)
|
|
251
|
|
252 ## todo EXPORT FPKM
|
|
253 write.table(file=output_raw_counts,dge\$counts,sep="\t",row.names=TRUE,col.names=NA)
|
|
254
|
|
255
|
34
|
256 if(output_MAplot != "/dev/null" || output_PValue_distribution_plot != "/dev/null") {
|
25
|
257 etable <- topTags(lrt, n=nrow(dge))\$table
|
|
258 etable <- etable[order(etable\$FDR), ]
|
32
|
259
|
|
260 if(output_MAplot != "/dev/null") {
|
|
261 write("Creating MA plot...",stdout())
|
|
262 pdf(output_MAplot)
|
|
263 with(etable, plot(logCPM, logFC, pch=20, main="edgeR: Fold change vs abundance"))
|
|
264 with(subset(etable, FDR < fdr), points(logCPM, logFC, pch=20, col="red"))
|
|
265 abline(h=c(-1,1), col="blue")
|
|
266 dev.off()
|
|
267 }
|
25
|
268
|
32
|
269 if(output_PValue_distribution_plot != "/dev/null") {
|
|
270 write("Creating P-value distribution plot...",stdout())
|
|
271 pdf(output_PValue_distribution_plot)
|
|
272 expressed_genes <- subset(etable, PValue < 0.99)
|
|
273 h <- hist(expressed_genes\$PValue,breaks=nrow(expressed_genes)/15,main="Binned P-Values (< 0.99)")
|
|
274 center <- sum(h\$counts) / length(h\$counts)
|
|
275 lines(c(0,1),c(center,center),lty=2,col="red",lwd=2)
|
|
276 k <- ksmooth(h\$mid, h\$counts)
|
|
277 lines(k\$x,k\$y,col="red",lwd=2)
|
|
278 rmsd <- (h\$counts) - center
|
|
279 rmsd <- rmsd^2
|
|
280 rmsd <- sum(rmsd)
|
|
281 rmsd <- sqrt(rmsd)
|
|
282 text(0,max(h\$counts),paste("e=",round(rmsd,2),sep=""),pos=4,col="blue")
|
|
283 ## change e into epsilon somehow
|
|
284 dev.off()
|
|
285 }
|
40
|
286 }
|
|
287
|
|
288 if(output_heatmap_plot != "/dev/null") {
|
42
|
289 pdf(output_heatmap_plot,width=10.5)
|
40
|
290 etable2 <- topTags(lrt, n=100)\$table
|
|
291 order <- rownames(etable2)
|
|
292 cpm_sub <- cpm(dge,normalized.lib.sizes=TRUE,log=TRUE)[as.numeric(order),]
|
|
293 heatmap(t(cpm_sub))
|
|
294 dev.off()
|
25
|
295 }
|
|
296
|
|
297 ##output_hierarchical_clustering_plot = args[13]
|
|
298
|
35
|
299 if(output_RData_obj != "/dev/null") {
|
25
|
300 save.image(output_RData_obj)
|
|
301 }
|
|
302
|
|
303 write("Done!",stdout())
|
|
304 }
|
|
305 </configfile>
|
|
306 </configfiles>
|
|
307
|
|
308 <outputs>
|
|
309 <data format="tabular" name="output_count_edgeR" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - differtially expressed genes" />
|
|
310 <data format="tabular" name="output_cpm" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - CPM" />
|
|
311
|
|
312 <data format="tabular" name="output_raw_counts" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - raw counts">
|
|
313 <filter>("make_output_raw_counts" in outputs)</filter>
|
|
314 </data>
|
|
315
|
|
316 <data format="pdf" name="output_MDSplot" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - MDS-plot">
|
|
317 <filter>("make_output_MDSplot" in outputs)</filter>
|
|
318 </data>
|
|
319
|
|
320 <data format="pdf" name="output_BCVplot" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - BCV-plot">
|
|
321 <filter>("make_output_BCVplot" in outputs)</filter>
|
|
322 </data>
|
|
323
|
|
324 <data format="pdf" name="output_MAplot" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - MA-plot">
|
|
325 <filter>("make_output_MAplot" in outputs)</filter>
|
|
326 </data>
|
|
327
|
|
328 <data format="pdf" name="output_PValue_distribution_plot" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - P-Value distribution">
|
|
329 <filter>("make_output_PValue_distribution_plot" in outputs)</filter>
|
|
330 </data>
|
|
331
|
|
332 <data format="pdf" name="output_hierarchical_clustering_plot" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - Hierarchical custering">
|
|
333 <filter>("make_output_hierarchical_clustering_plot" in outputs)</filter>
|
|
334 </data>
|
|
335
|
|
336 <data format="pdf" name="output_heatmap_plot" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - Heatmap">
|
|
337 <filter>("make_output_heatmap_plot" in outputs)</filter>
|
|
338 </data>
|
|
339
|
|
340 <data format="RData" name="output_RData_obj" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - R data object">
|
40
|
341 <filter>("make_output_RData_obj" in outputs)</filter>
|
25
|
342 </data>
|
|
343
|
40
|
344 <data format="txt" name="output_R" label="edgeR DGE on ${design_matrix.hid}: ${design_matrix.name} - R output (debug)" >
|
43
|
345 <filter>("make_output_R_stdout" in outputs)</filter>
|
25
|
346 </data>
|
|
347 </outputs>
|
|
348
|
|
349 <help>
|
|
350 edgeR: Differential Gene(Expression) Analysis
|
36
|
351 #############################################
|
25
|
352
|
36
|
353 Overview
|
|
354 --------
|
|
355 Differential expression analysis of RNA-seq and digital gene expression profiles with biological replication. Uses empirical Bayes estimation and exact tests based on the negative binomial distribution. Also useful for differential signal analysis with other types of genome-scale count data [1].
|
25
|
356
|
|
357 For every experiment, the algorithm requires a design matrix. This matrix describes which samples belong to which groups.
|
36
|
358 More details on this are given in the edgeR manual: http://www.bioconductor.org/packages/2.12/bioc/vignettes/edgeR/inst/doc/edgeRUsersGuide.pdf
|
25
|
359 and the limma manual.
|
|
360
|
|
361 Because the creation of a design matrix can be complex and time consuming, especially if no GUI is used, this package comes with an alternative tool which can help you with it.
|
|
362 This tool is called *edgeR Design Matrix Creator*.
|
|
363 If the appropriate design matrix (with corresponding links to the files) is given,
|
|
364 the correct contrast ( http://en.wikipedia.org/wiki/Contrast_(statistics) ) has to be given.
|
|
365
|
|
366 If you have for example two groups, with an equal weight, you would like to compare either
|
|
367 "g1~g2" or "normal~cancer".
|
|
368
|
36
|
369 The test function makes use of a MCF7 dataset used in a study that indicates that a higher sequencing depth is not neccesairily more important than a higher amount of replaciates[2].
|
25
|
370
|
36
|
371 Input
|
|
372 -----
|
|
373 Expression matrix
|
|
374 ^^^^^^^^^^^^^^^^^
|
|
375 ::
|
25
|
376
|
|
377 Geneid "\t" Sample-1 "\t" Sample-2 "\t" Sample-3 "\t" Sample-4 [...] "\n"
|
|
378 SMURF "\t" 123 "\t" 21 "\t" 34545 "\t" 98 ... "\n"
|
|
379 BRCA1 "\t" 435 "\t" 6655 "\t" 45 "\t" 55 ... "\n"
|
|
380 LINK33 "\t" 4 "\t" 645 "\t" 345 "\t" 1 ... "\n"
|
|
381 SNORD78 "\t" 498 "\t" 65 "\t" 98 "\t" 27 ... "\n"
|
|
382 [...]
|
|
383
|
36
|
384 *Note: Make sure the number of columns in the header is identical to the number of columns in the body.*
|
25
|
385
|
36
|
386 Design matrix
|
|
387 ^^^^^^^^^^^^^
|
|
388 ::
|
25
|
389
|
|
390 Sample "\t" Condition "\t" Ethnicity "\t" Patient "\t" Batch "\n"
|
|
391 Sample-1 "\t" Tumor "\t" European "\t" 1 "\t" 1 "\n"
|
|
392 Sample-2 "\t" Normal "\t" European "\t" 1 "\t" 1 "\n"
|
|
393 Sample-3 "\t" Tumor "\t" European "\t" 2 "\t" 1 "\n"
|
|
394 Sample-4 "\t" Normal "\t" European "\t" 2 "\t" 1 "\n"
|
|
395 Sample-5 "\t" Tumor "\t" African "\t" 3 "\t" 1 "\n"
|
|
396 Sample-6 "\t" Normal "\t" African "\t" 3 "\t" 1 "\n"
|
|
397 Sample-7 "\t" Tumor "\t" African "\t" 4 "\t" 2 "\n"
|
|
398 Sample-8 "\t" Normal "\t" African "\t" 4 "\t" 2 "\n"
|
|
399 Sample-9 "\t" Tumor "\t" Asian "\t" 5 "\t" 2 "\n"
|
|
400 Sample-10 "\t" Normal "\t" Asian "\t" 5 "\t" 2 "\n"
|
|
401 Sample-11 "\t" Tumor "\t" Asian "\t" 6 "\t" 2 "\n"
|
|
402 Sample-12 "\t" Normal "\t" Asian "\t" 6 "\t" 2 "\n"
|
|
403
|
36
|
404 *Note: Avoid factor names that are (1) numerical, (2) contain mathematical symbols and preferebly only use letters.*
|
25
|
405
|
36
|
406 Contrast
|
|
407 ^^^^^^^^
|
|
408 The contrast represents the biological question. There can be many questions asked, e.g.:
|
25
|
409
|
36
|
410 - Tumor-Normal
|
|
411 - African-European
|
|
412 - 0.5*(Control+Placebo) / Treated
|
25
|
413
|
36
|
414 Installation
|
|
415 ------------
|
25
|
416
|
|
417 This tool requires no specific configurations. The following dependencies are installed automatically:
|
36
|
418
|
|
419 - R
|
|
420 - Bioconductor
|
25
|
421 - limma
|
36
|
422
|
25
|
423 - edgeR
|
|
424
|
36
|
425 License
|
|
426 -------
|
|
427 - R
|
|
428 - GPL-2 & GPL-3
|
|
429 - limma
|
|
430 - GPL (>=2)
|
|
431 - edgeR
|
|
432 - GPL (>=2)
|
|
433
|
|
434 References
|
|
435 ----------
|
|
436
|
|
437 EdgeR
|
|
438 ^^^^^
|
|
439 **[1] edgeR: a Bioconductor package for differential expression analysis of digital gene expression data.**
|
25
|
440
|
36
|
441 *Mark D. Robinson, Davis J. McCarthy and Gordon K. Smyth* - Bioinformatics (2010) 26 (1): 139-140.
|
|
442
|
|
443 - http://www.bioconductor.org/packages/2.12/bioc/html/edgeR.html
|
|
444 - http://dx.doi.org/10.1093/bioinformatics/btp616
|
|
445 - http://www.bioconductor.org/packages/release/bioc/html/edgeR.html
|
25
|
446
|
36
|
447 Test-data (MCF7)
|
|
448 ^^^^^^^^^^^^^^^^
|
|
449 **[2] RNA-seq differential expression studies: more sequence or more replication?**
|
|
450
|
|
451 *Yuwen Liu, Jie Zhou and Kevin P. White* - Bioinformatics (2014) 30 (3): 301-304.
|
|
452
|
|
453 - http://www.ncbi.nlm.nih.gov/pubmed/24319002
|
|
454 - http://dx.doi.org/10.1093/bioinformatics/btt688
|
|
455
|
|
456 Contact
|
|
457 -------
|
25
|
458 The tool wrapper has been written by Youri Hoogstrate from the Erasmus Medical Center (Rotterdam, Netherlands) on behalf of the Translational Research IT (TraIT) project:
|
|
459 http://www.ctmm.nl/en/programmas/infrastructuren/traitprojecttranslationeleresearch
|
|
460
|
36
|
461 I would like to thank Hina Riaz - Naz Khan for her helpful contribution.
|
25
|
462
|
36
|
463 More tools by the Translational Research IT (TraIT) project can be found in the following repository:
|
|
464 http://testtoolshed.g2.bx.psu.edu/
|
25
|
465 </help>
|
|
466 </tool>
|