changeset 79:c86f1f86b3c1 draft

Uploaded
author yhoogstrate
date Thu, 13 Nov 2014 10:30:43 -0500
parents 398963a4827a
children c5bd139cd3e8
files README.md design_matrix_creator design_matrix_creator.py edgeR_Concatenate_Expression_Matrices.xml edgeR_Design_from_Expression_Matrix.xml edgeR_Differential_Gene_Expression.xml test-data/GSE51403/mv.sh tool_dependencies.xml
diffstat 8 files changed, 372 insertions(+), 266 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Thu Nov 13 10:30:43 2014 -0500
@@ -0,0 +1,60 @@
+EdgeR wrapper for Galaxy
+========================
+
+<http://www.bioconductor.org/packages/release/bioc/html/edgeR.html>
+
+Implementation of EdgeR supporting quite advanced experimental
+designs.
+
+Development
+-----------
+
+* Repository-Maintainer: Youri Hoogstrate
+
+* Repository-Development: <https://bitbucket.org/EMCbioinf/galaxy-tool-shed-tools>
+
+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:
+
+<http://www.ctmm.nl/en/programmas/infrastructuren/traitprojecttranslationeleresearch>
+
+More tools by the Translational Research IT (TraIT) project can be found in the following repository:
+
+<http://toolshed.dtls.nl/>
+
+License
+-------
+
+**R**:
+
+<http://www.r-project.org/COPYING>
+
+GPL (>=2)
+
+**BioConductor**:
+
+<http://www.bioconductor.org/about/>
+
+Artistic License 2.0
+
+**EdgeR**:
+
+GPL (>=2)
+
+**This wrapper**:
+
+    Copyright (C) 2013-2014  Youri Hoogstrate
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/design_matrix_creator	Thu Nov 13 10:30:43 2014 -0500
@@ -0,0 +1,222 @@
+#!/usr/bin/env python
+
+import argparse, os, shutil, sys, tempfile, subprocess
+
+__version_info__ = ('1', '0', '0')#, 'beta')
+__version__ = '.'.join(__version_info__) if (len(__version_info__) == 3) else '.'.join(__version_info__[0:3])+"-"+__version_info__[3]
+__author__ = 'Youri Hoogstrate'
+__homepage__ = 'https://bitbucket.org/EMCbioinf/galaxy-tool-shed-tools'
+__license__ = 'GNU General Public License v3 (GPLv3)'
+
+
+class sampleContainer:
+	def __init__(self):
+		self.samples = []
+		self.treatments = {}
+		self.treatment_index = []
+		self.treatment_types = {}
+	
+	def do_decode(self,encoded_str):
+		return encoded_str.decode("base64").strip().replace("\t",'')
+	
+	def add_samples(self,argument):
+		print " - Adding samples"
+		for sample in argument:
+			self.add_sample(self.do_decode(sample))
+	
+	def add_sample(self,sample):
+		if(sample in self.samples):
+			sys.stderr.write("Error:\n* Non-unique sample: "+sample+"\n")
+			sys.exit(1)
+		else:
+			self.samples.append(sample)
+			print "     - Added: "+sample
+	
+	def add_blocking(self,argument):
+		print " - Adding paired samples"
+		pair = []
+		for block in argument:
+			self.add_block(block)
+	
+	def add_block(self,blocks):
+		blocks = blocks.split(":")
+		as_treatment = blocks[0]
+		blocks = blocks[1:]
+		
+		used_samples = []
+		indexed_samples = {}
+		
+		for i in range(len(blocks)):
+			block = blocks[i]
+			samples = self.get_samples_from_block(block)
+			indexed_samples[i+1] = []
+			for sample in samples:
+				if(sample in used_samples):
+					sys.stderr.write("Error:\n* Blocking contains multiple times the same sample: "+sample+"\n")
+					sys.exit(0)
+				else:
+					indexed_samples[i+1] = block
+				used_samples.append(sample)
+		
+		for sample in self.samples:
+			if(sample not in used_samples):
+				i = i + 1
+				indexed_samples[i+1] = str(sample).encode('base64').strip()
+		
+		for index in indexed_samples.keys():
+			key = str(index).encode('base64').strip()
+			as_treatment += ":"+key+":"+indexed_samples[index]
+		
+		self.add_treatment(as_treatment)
+	
+	def get_samples_from_block(self,decoded_block):
+		return [ self.do_decode(x) for x in decoded_block.split(",")]
+	
+	def add_treatments(self,argument):
+		print " - Adding treatments"
+		for treatment in argument:
+			self.add_treatment(treatment)
+	
+	def add_treatment(self,treatment_argument):
+		print " - Parsing treatment"
+		
+		
+		treatment_argument = treatment_argument.split(":")
+		name = self.do_decode(treatment_argument[0])
+		treatment_argument = treatment_argument[1:]
+		
+		
+		treatment = {"factor_index":{},"sample_index":{}}
+		only_integers = True
+		
+		i = 1
+		for item in treatment_argument:
+			if(i % 2):
+				factor = self.do_decode(item)
+				
+				if(treatment['factor_index'].has_key(factor)):
+					sys.stderr.write("Error:\n* Factor has been added multiple times to treatment: "+factor+"\n")
+					sys.exit(0)
+				else:
+					print "   - Adding factor: "+factor
+					treatment["factor_index"][factor] = []
+					if(not factor.isdigit()):
+						only_integers = False
+			else:
+				for sample in item.split(","):
+					sample = self.do_decode(sample)
+					
+					if(not sample in self.samples):
+						sys.stderr.write("Error:\n* Unknown sample: "+sample+"\n")
+						sys.exit(0)
+					
+					treatment["factor_index"][factor].append(sample)
+					if(treatment["sample_index"].has_key(sample)):
+						sys.stderr.write("Error:\n* Factor has been added to treatment before: "+sample+"/"+factor+", factors must be mutually exclusive!\n")
+						sys.exit(0)
+					else:
+						treatment["sample_index"][sample] = factor
+			i += 1
+		
+		treatment_factors = sorted(treatment["factor_index"].keys())
+		
+		if(name == None):
+			treatment["name"] = "_vs_".join(treatment_factors)
+		else:
+			treatment["name"] = str(name)
+		
+		if(len(treatment["sample_index"]) != len(self.samples)):
+			sys.stderr.write("Error:\n* The number of samples for treatment '"+treatment["name"]+"' ("+str(len(treatment["sample_index"]))+") is different from the total number of samples ("+str(len(self.samples))+").\n")
+		
+		if(only_integers):
+			treatment_type = "integer"
+		else:
+			treatment_type = "string"
+		
+		if(self.treatments.has_key(treatment["name"])):
+			sys.stderr.write("Error:\n* Treatment was already added: '"+treatment["name"]+"\n")
+		else:
+			self.treatments[treatment["name"]] = treatment
+			self.treatment_index.append(treatment["name"])
+			self.treatment_types[treatment["name"]] = treatment_type
+			print "     - Treatment \""+treatment["name"]+"\" of type \""+treatment_type+"\" is valid"
+	
+	def export(self,output):
+		# Open file stream
+		if(args.output == "-"):
+			fh = sys.stdout
+		else:
+			fh = open(args.output,"w")
+		
+		# Write header:
+		fh.write("sample-name\t"+"\t".join(self.treatment_index)+"\n")
+		
+		# Write body:
+		for sample in self.samples:
+			fh.write(sample)
+			for treatment_id in self.treatment_index:
+				treatment = self.treatments[treatment_id]
+				fh.write("\t"+treatment["sample_index"][sample])
+			fh.write("\n")
+		
+		fh.close()
+
+if __name__=="__main__":
+	parser = argparse.ArgumentParser(description="Create an edgeR design matrix with read-count datasets.")
+	parser.add_argument("-o","--output", help="Output file, '-' for stdout.",required=True)
+	parser.add_argument("-c","--columns-file", nargs="?", help='Use columns of [this] file as UIDs (counting from 1)')
+	parser.add_argument("-s","--sample-names", nargs="*", help='Sample names (UIDs that correspond to the columns in the expression matrix)')
+	parser.add_argument("-t","--treatments", nargs="+", help='Treatment or conditions: "name::sample:condition& (sample-names and conditions have to be provided using Base64 encoding to avoid weird characters)',required=True)
+	parser.add_argument("-b","--blocking", nargs="+", help='Description of sample blocking: "blocking_condition*&sample-1-name&sample-2-name&sample-n-name"')
+	
+	args = parser.parse_args()
+	
+	columns = None
+	if(args.columns_file):
+		with open(args.columns_file, "r") as f:
+			listed_columns = [None] + f.readline().strip("\n").split("\t")
+			for i in range(1,len(listed_columns)):
+				listed_columns[i] =  listed_columns[i].encode('base64').replace('\n','')
+	
+	s = sampleContainer()
+	
+	if(listed_columns):
+		columns = []
+		for sample in args.sample_names:
+			columns.append(listed_columns[int(sample)])
+		
+		
+		treatments = []
+		for treatment in args.treatments:
+			treatment = treatment.split(":")
+			for i in range(1,len(treatment)):
+				if(i%2 == 0):
+					treatment_tmp = treatment[i].split(",")
+					for j in range(len(treatment_tmp)):
+						treatment_tmp[j] = listed_columns[int(treatment_tmp[j])]
+					treatment[i] = ",".join(treatment_tmp)
+					
+			treatments.append(":".join(treatment))
+		
+		blockings = []
+		if(args.blocking):
+			for blocking in args.blocking:
+				blocking = blocking.split(":")
+				for i in range(1,len(blocking)):
+					block = blocking[i].split(",")
+					for j in range(len(block)):
+						block[j] = listed_columns[int(block[j])]
+					blocking[i] = ",".join(block)
+				blockings.append(":".join(blocking))
+		
+		s.add_samples(columns)
+		s.add_treatments(treatments)
+		s.add_blocking(blockings)
+	
+	else:
+		s.add_samples(args.sample_names)
+		s.add_treatments(args.treatments)
+		if(args.blocking):
+			s.add_blocking(args.blocking)
+	
+	s.export(args.output)
--- a/design_matrix_creator.py	Tue Sep 30 11:29:52 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-#!/usr/bin/env python
-import argparse, os, shutil, sys, tempfile, subprocess
-
-
-class sampleContainer:
-	def __init__(self):
-		self.samples = []
-		self.treatments = {}
-		self.treatment_index = []
-		self.treatment_types = {}
-	
-	def do_decode(self,encoded_str):
-		return encoded_str.decode("base64").strip().replace("\t",'')
-	
-	def add_samples(self,argument):
-		print " - Adding samples"
-		for sample in argument:
-			self.add_sample(self.do_decode(sample))
-	
-	def add_sample(self,sample):
-		if(sample in self.samples):
-			sys.stderr.write("Error:\n* Non-unique sample: "+sample+"\n")
-			sys.exit(1)
-		else:
-			self.samples.append(sample)
-			print "     - Added: "+sample
-	
-	def add_blocking(self,argument):
-		print " - Adding paired samples"
-		pair = []
-		for block in argument:
-			self.add_block(block)
-	
-	def add_block(self,blocks):
-		blocks = blocks.split(":")
-		as_treatment = blocks[0]
-		blocks = blocks[1:]
-		
-		used_samples = []
-		indexed_samples = {}
-		
-		for i in range(len(blocks)):
-			block = blocks[i]
-			samples = self.get_samples_from_block(block)
-			indexed_samples[i+1] = []
-			for sample in samples:
-				if(sample in used_samples):
-					sys.stderr.write("Error:\n* Blocking contains multiple times the same sample: "+sample+"\n")
-					sys.exit(0)
-				else:
-					indexed_samples[i+1] = block
-				used_samples.append(sample)
-		
-		for sample in self.samples:
-			if(sample not in used_samples):
-				i = i + 1
-				indexed_samples[i+1] = str(sample).encode('base64').strip()
-		
-		for index in indexed_samples.keys():
-			key = str(index).encode('base64').strip()
-			as_treatment += ":"+key+":"+indexed_samples[index]
-		
-		self.add_treatment(as_treatment)
-	
-	def get_samples_from_block(self,decoded_block):
-		return [ self.do_decode(x) for x in decoded_block.split(",")]
-	
-	def add_treatments(self,argument):
-		print " - Adding treatments"
-		for treatment in argument:
-			self.add_treatment(treatment)
-	
-	def add_treatment(self,treatment_argument):
-		print " - Parsing treatment"
-		
-		
-		treatment_argument = treatment_argument.split(":")
-		name = self.do_decode(treatment_argument[0])
-		treatment_argument = treatment_argument[1:]
-		
-		
-		treatment = {"factor_index":{},"sample_index":{}}
-		only_integers = True
-		
-		i = 1
-		for item in treatment_argument:
-			if(i % 2):
-				factor = self.do_decode(item)
-				
-				if(treatment['factor_index'].has_key(factor)):
-					sys.stderr.write("Error:\n* Factor has been added multiple times to treatment: "+factor+"\n")
-					sys.exit(0)
-				else:
-					print "   - Adding factor: "+factor
-					treatment["factor_index"][factor] = []
-					if(not factor.isdigit()):
-						only_integers = False
-			else:
-				for sample in item.split(","):
-					sample = self.do_decode(sample)
-					
-					if(not sample in self.samples):
-						sys.stderr.write("Error:\n* Unknown sample: "+sample+"\n")
-						sys.exit(0)
-					
-					treatment["factor_index"][factor].append(sample)
-					if(treatment["sample_index"].has_key(sample)):
-						sys.stderr.write("Error:\n* Factor has been added to treatment before: "+sample+"/"+factor+", factors must be mutually exclusive!\n")
-						sys.exit(0)
-					else:
-						treatment["sample_index"][sample] = factor
-			i += 1
-		
-		treatment_factors = sorted(treatment["factor_index"].keys())
-		
-		if(name == None):
-			treatment["name"] = "_vs_".join(treatment_factors)
-		else:
-			treatment["name"] = str(name)
-		
-		if(len(treatment["sample_index"]) != len(self.samples)):
-			sys.stderr.write("Error:\n* The number of samples for treatment '"+treatment["name"]+"' ("+str(len(treatment["sample_index"]))+") is different from the total number of samples ("+str(len(self.samples))+").\n")
-		
-		if(only_integers):
-			treatment_type = "integer"
-		else:
-			treatment_type = "string"
-		
-		if(self.treatments.has_key(treatment["name"])):
-			sys.stderr.write("Error:\n* Treatment was already added: '"+treatment["name"]+"\n")
-		else:
-			self.treatments[treatment["name"]] = treatment
-			self.treatment_index.append(treatment["name"])
-			self.treatment_types[treatment["name"]] = treatment_type
-			print "     - Treatment \""+treatment["name"]+"\" of type \""+treatment_type+"\" is valid"
-	
-	def export(self,output):
-		# Open file stream
-		if(args.output == "-"):
-			fh = sys.stdout
-		else:
-			fh = open(args.output,"w")
-		
-		# Write header:
-		fh.write("sample-name\t"+"\t".join(self.treatment_index)+"\n")
-		
-		# Write body:
-		for sample in self.samples:
-			fh.write(sample)
-			for treatment_id in self.treatment_index:
-				treatment = self.treatments[treatment_id]
-				fh.write("\t"+treatment["sample_index"][sample])
-			fh.write("\n")
-		
-		fh.close()
-
-if __name__=="__main__":
-	parser = argparse.ArgumentParser(description="Create an edgeR design matrix with read-count datasets.")
-	parser.add_argument("-o","--output", help="Output file, '-' for stdout.",required=True)
-	parser.add_argument("-c","--columns-file", nargs="?", help='Use columns of [this] file as UIDs (counting from 1)')
-	parser.add_argument("-s","--sample-names", nargs="*", help='Sample names (UIDs that correspond to the columns in the expression matrix)')
-	parser.add_argument("-t","--treatments", nargs="+", help='Treatment or conditions: "name::sample:condition& (sample-names and conditions have to be provided using Base64 encoding to avoid weird characters)',required=True)
-	parser.add_argument("-b","--blocking", nargs="+", help='Description of sample blocking: "blocking_condition*&sample-1-name&sample-2-name&sample-n-name"')
-	
-	args = parser.parse_args()
-	
-	columns = None
-	if(args.columns_file):
-		with open(args.columns_file, "r") as f:
-			listed_columns = [None] + f.readline().strip("\n").split("\t")
-			for i in range(1,len(listed_columns)):
-				listed_columns[i] =  listed_columns[i].encode('base64').replace('\n','')
-	
-	s = sampleContainer()
-	
-	if(listed_columns):
-		columns = []
-		for sample in args.sample_names:
-			columns.append(listed_columns[int(sample)])
-		
-		
-		treatments = []
-		for treatment in args.treatments:
-			treatment = treatment.split(":")
-			for i in range(1,len(treatment)):
-				if(i%2 == 0):
-					treatment_tmp = treatment[i].split(",")
-					for j in range(len(treatment_tmp)):
-						treatment_tmp[j] = listed_columns[int(treatment_tmp[j])]
-					treatment[i] = ",".join(treatment_tmp)
-					
-			treatments.append(":".join(treatment))
-		
-		blockings = []
-		if(args.blocking):
-			for blocking in args.blocking:
-				blocking = blocking.split(":")
-				for i in range(1,len(blocking)):
-					block = blocking[i].split(",")
-					for j in range(len(block)):
-						block[j] = listed_columns[int(block[j])]
-					blocking[i] = ",".join(block)
-				blockings.append(":".join(blocking))
-		
-		s.add_samples(columns)
-		s.add_treatments(treatments)
-		s.add_blocking(blockings)
-	
-	else:
-		s.add_samples(args.sample_names)
-		s.add_treatments(args.treatments)
-		if(args.blocking):
-			s.add_blocking(args.blocking)
-	
-	s.export(args.output)
--- a/edgeR_Concatenate_Expression_Matrices.xml	Tue Sep 30 11:29:52 2014 -0400
+++ b/edgeR_Concatenate_Expression_Matrices.xml	Thu Nov 13 10:30:43 2014 -0500
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="concatenate_expression_matrices" name="edgeR: Concatenate Expression Matrices">
+<tool id="concatenate_expression_matrices" name="edgeR: Concatenate Expression Matrices" version="1.0.0">
 	<description>Create a full expression matrix by selecting the desired columns from specific count tables</description>
 	
 	<command>
@@ -123,16 +123,34 @@
 	
 	<help>
 edgeR: Concatenate Expression Matrices
+#######################################
+
+Overview
+--------
+
+Create subsets from or combined expression matrices.
 
 **Notes**
 
 Make sure the tables have an identical number of columns compared to the number of headers.
 If you export tables using R, make sure you set: col.names=NA. Otherwise column may be swapped during concatenation.
 
-**References**
+Input
+-----
+
+
+Contact
+-------
 
-The test data is coming from:  doi: 10.1093/bioinformatics/btt688.
-http://www.ncbi.nlm.nih.gov/pubmed/24319002
+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:
+http://www.ctmm.nl/en/programmas/infrastructuren/traitprojecttranslationeleresearch
 
+More tools by the Translational Research IT (TraIT) project can be found
+in the following toolsheds:
+- http://toolshed.dtls.nl/
+- http://toolshed.g2.bx.psu.edu
+- http://testtoolshed.g2.bx.psu.edu/
 	</help>
 </tool>
--- a/edgeR_Design_from_Expression_Matrix.xml	Tue Sep 30 11:29:52 2014 -0400
+++ b/edgeR_Design_from_Expression_Matrix.xml	Thu Nov 13 10:30:43 2014 -0500
@@ -1,9 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="design_from_expression_matrix" name="edgeR: Design- from Expression matrix">
+<tool id="design_from_expression_matrix" name="edgeR: Design- from Expression matrix" version="1.0.0.a">
 	<description>Create design- from an expression matrix</description>
 	
+	<requirements>
+		<requirement type="package" version="1.0.0">design_matrix_creator</requirement>
+	</requirements>
+	
 	<command interpreter="python">
-		design_matrix_creator.py
+		design_matrix_creator
 			-c $expression_matrix
 			
 			#set $unique_columns = []
@@ -86,10 +90,34 @@
 	
 	<help>
 edgeR: Design- from Expression matrix
+#####################################
+
+Overview
+--------
+
+Create a design matrix by selecting the desired patients from an
+expression matrix.
+
+Input
+-----
 
 **References**
 
 The test data is coming from:  doi: 10.1093/bioinformatics/btt688.
 http://www.ncbi.nlm.nih.gov/pubmed/24319002
+
+Contact
+-------
+
+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:
+http://www.ctmm.nl/en/programmas/infrastructuren/traitprojecttranslationeleresearch
+
+More tools by the Translational Research IT (TraIT) project can be found
+in the following toolsheds:
+- http://toolshed.dtls.nl/
+- http://toolshed.g2.bx.psu.edu
+- http://testtoolshed.g2.bx.psu.edu/
 	</help>
 </tool>
--- a/edgeR_Differential_Gene_Expression.xml	Tue Sep 30 11:29:52 2014 -0400
+++ b/edgeR_Differential_Gene_Expression.xml	Thu Nov 13 10:30:43 2014 -0500
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tool id="edger_dge" name="edgeR: Differential Gene(Expression) Analysis">
+<tool id="edger_dge" name="edgeR: Differential Gene(Expression) Analysis" version="3.0.3-latest.a">
 	<description>RNA-Seq gene expression analysis using edgeR (R package)</description>
 	
 	<requirements>
@@ -10,6 +10,8 @@
 		<requirement type="package" version="1.3.18">graphicsmagick</requirement>
 	</requirements>
 	
+	<version_command>R --vanilla --slave -e "library(edgeR) ; cat(sessionInfo()\$otherPkgs\$edgeR\$Version)" 2&gt; /dev/null</version_command>
+	
 	<command>
 		<!--
 			The following script is written in the "Cheetah" language:
@@ -512,7 +514,7 @@
 the correct contrast ( http://en.wikipedia.org/wiki/Contrast_(statistics) ) has to be given.
 
 If you have for example two groups, with an equal weight, you would like to compare either
-"g1~g2" or "normal~cancer".
+"g1-g2" or "normal-cancer".
 
 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].
 
@@ -566,18 +568,17 @@
 
 - R
 - Bioconductor
-   - limma
-
-   - edgeR
+    - limma
+    - edgeR
 
 License
 -------
 - R
-   - GPL-2 &amp; GPL-3
+    - GPL 2 &amp; GPL 3
 - limma
     - GPL (&gt;=2)
 - edgeR
-     - GPL (&gt;=2)
+    - GPL (&gt;=2)
 
 References
 ----------
@@ -603,12 +604,18 @@
 
 Contact
 -------
-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:
+
+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:
 http://www.ctmm.nl/en/programmas/infrastructuren/traitprojecttranslationeleresearch
 
+More tools by the Translational Research IT (TraIT) project can be found
+in the following toolsheds:
+- http://toolshed.dtls.nl/
+- http://toolshed.g2.bx.psu.edu
+- http://testtoolshed.g2.bx.psu.edu/
+
 I would like to thank Hina Riaz - Naz Khan for her helpful contribution.
-
-More tools by the Translational Research IT (TraIT) project can be found in the following repository:
-http://testtoolshed.g2.bx.psu.edu/
 	</help>
 </tool>
--- a/test-data/GSE51403/mv.sh	Tue Sep 30 11:29:52 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-mv GSE51403_featureCounts_Control_3.txt GSE51403_expression_matrix_Control_3.txt
-mv GSE51403_featureCounts_Control_4.txt GSE51403_expression_matrix_Control_4.txt
-mv GSE51403_featureCounts_Control_5.txt GSE51403_expression_matrix_Control_5.txt
-mv GSE51403_featureCounts_Control_6.txt GSE51403_expression_matrix_Control_6.txt
-mv GSE51403_featureCounts_Control_7.txt GSE51403_expression_matrix_Control_7.txt
-mv GSE51403_featureCounts_E2.txt GSE51403_expression_matrix_E2.txt
-mv GSE51403_featureCounts_GeneLengths.txt GSE51403_expression_matrix_GeneLengths.txt
--- a/tool_dependencies.xml	Tue Sep 30 11:29:52 2014 -0400
+++ b/tool_dependencies.xml	Thu Nov 13 10:30:43 2014 -0500
@@ -1,38 +1,14 @@
 <?xml version="1.0"?>
 <tool_dependency>
-	
-	<!-- the following repo does NOT work out of the box:
-	<package name="package_r3_withx" version="3.0.1">
-		<repository changeset_revision="abc274f22004" name="package_r3_withx" owner="joachim-jacob" prior_installation_required="True" toolshed="http://testtoolshed.g2.bx.psu.edu/" />
-	</package>
-	-->
-	
-	<!-- the following repo does NOT even install due to gfortran shared libs:
-	<package name="R" version="3.1.0">
-		<repository changeset_revision="a6cc7706ea14" name="package_r_3_1_0" owner="iuc" prior_installation_required="True" toolshed="http://testtoolshed.g2.bx.psu.edu/" />
-	</package>
-	-->
-	
 	<package name="R" version="3.0.3">
-		<repository changeset_revision="9ff23e0b280b" name="package_r_3_0_3" owner="iuc" prior_installation_required="True" toolshed="http://testtoolshed.g2.bx.psu.edu/" />
+		<repository changeset_revision="9ff23e0b280b" name="package_r_3_0_3" owner="iuc" prior_installation_required="True" toolshed="https://testtoolshed.g2.bx.psu.edu" /><!-- toolshed="http://testtoolshed.g2.bx.psu.edu/" -->
 	</package>
 	
 	<package name="biocLite_edgeR_limma" version="latest">
 		<install version="1.0"> 
 			<actions>
 				<action type="set_environment_for_install">
-					<!-- the following repo does NOT work out of the box:
-					<repository changeset_revision="abc274f22004" name="package_r3_withx" owner="joachim-jacob" toolshed="http://testtoolshed.g2.bx.psu.edu/">
-						<package name="package_r3_withx" version="3.0.1" />
-					</repository>
-					-->
-					<!-- the following repo does NOT even install due to gfortran shared libs:
-					<repository changeset_revision="a6cc7706ea14" name="package_r_3_1_0" owner="iuc" toolshed="http://testtoolshed.g2.bx.psu.edu/">
-						<package name="R" version="3.1.0" />
-					</repository>
-					-->
-					
-					<repository changeset_revision="9ff23e0b280b" name="package_r_3_0_3" owner="iuc" toolshed="http://testtoolshed.g2.bx.psu.edu/">
+					<repository changeset_revision="9ff23e0b280b" name="package_r_3_0_3" owner="iuc" toolshed="https://testtoolshed.g2.bx.psu.edu"><!-- toolshed="http://testtoolshed.g2.bx.psu.edu/" -->
 						<package name="R" version="3.0.3" />
 					</repository>
 					
@@ -54,6 +30,23 @@
 	
 	<!-- instead of using "convert", make use of "gm convert" -->
 	<package name="graphicsmagick" version="1.3.18">
-		<repository changeset_revision="2fd4eb971ba5" name="package_graphicsmagick_1_3" owner="iuc" toolshed="http://testtoolshed.g2.bx.psu.edu/" />
+		<repository changeset_revision="2fd4eb971ba5" name="package_graphicsmagick_1_3" owner="iuc" toolshed="https://testtoolshed.g2.bx.psu.edu" /><!-- toolshed="http://testtoolshed.g2.bx.psu.edu/" -->
+	</package>
+	
+	<package name="design_matrix_creator" version="1.0.0">
+		<install version="1.0">
+			<actions>
+				<action type="move_file">
+					<source>$REPOSITORY_INSTALL_DIR/design_matrix_creator</source>
+					<destination>$INSTALL_DIR/bin/</destination>
+				</action>
+				<action type="chmod">
+					<file mode="755">$INSTALL_DIR/bin/design_matrix_creator</file>
+				</action>
+				<action type="set_environment">
+					<environment_variable action="prepend_to" name="PATH">$INSTALL_DIR/bin</environment_variable>
+				</action>
+			</actions>
+		</install>
 	</package>
 </tool_dependency>