changeset 62:931bd8ac187d draft

planemo upload for repository https://github.com/WGS-TB/MentaLiST/tree/master/galaxy commit f59b512dfb769d6dd7e5e992a78bbe60d992ef78-dirty
author dfornika
date Wed, 13 Jun 2018 18:06:37 -0400
parents 35f9c28b6fbb
children c9d05c980d2a
files tools/mentalist_tree/mentalist_tree tools/mentalist_tree/mentalist_tree.xml
diffstat 2 files changed, 49 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/tools/mentalist_tree/mentalist_tree	Tue Jun 12 19:10:39 2018 -0400
+++ b/tools/mentalist_tree/mentalist_tree	Wed Jun 13 18:06:37 2018 -0400
@@ -1,24 +1,52 @@
-#!/usr/bin/env Rscript
+#!/usr/bin/env python
 
-args = commandArgs(trailingOnly=TRUE)
+import sys
+import csv
+import numpy as np
 
-usage <- function() {
-  cat("usage: mentalist_tree <input.tsv>\n")
-}
+import Bio.Phylo
+from Bio.Phylo.TreeConstruction import DistanceMatrix, DistanceTreeConstructor
+
+def usage():
+  print("usage: mentalist_tree <input.tsv>\n")
 
-main <- function(args) {
-  if(is.na(args[1])){
-    usage()
-    return()
-  }
-  suppressMessages(library(phangorn))
-  
-  distance_matrix <- as.matrix(read.csv(args[1], row.names=1, sep="\t"))
-  nj_tree <- NJ(distance_matrix)
-  newick_tree <- write.tree(nj_tree)
-  cat(newick_tree, '\n')
-}
+def process_input_matrix(input_matrix):
+    """ Converts an array-of-arrays containting sample IDs and distances
+        into a BioPython DistanceMatrix object
+    """
+    input_matrix.pop(0)
+    sample_names = [row[0] for row in input_matrix]
+    for row in input_matrix:
+        row.pop(0)
+    distance_matrix = []
+    for input_matrix_row in input_matrix:
+        distance_matrix.append([int(i) for i in input_matrix_row])
+    distance_matrix = np.tril(np.array(distance_matrix))
+    num_rows = distance_matrix.shape[0]
+    lower_triangular_idx_mask = np.tril_indices(num_rows)
+    linear_distance_matrix = distance_matrix[lower_triangular_idx_mask]
+    distance_matrix = []
+    min = 0
+    max = 1
+    for i in range(num_rows):
+        distance_matrix.append(linear_distance_matrix[min:max].tolist())
+        min = max
+        max = max + (i + 2) 
+    distance_matrix = DistanceMatrix(names=sample_names, matrix=distance_matrix)
+    return distance_matrix
 
-if(!interactive()) {
-    main(args)
-}
+def main():
+    if len(sys.argv) < 2:
+        usage()
+        sys.exit(1)
+
+    input_file = sys.argv[1]
+    reader = csv.reader(open(input_file, "r"), delimiter="\t")
+    input_matrix = list(reader)
+    distance_matrix = process_input_matrix(input_matrix)
+    constructor = DistanceTreeConstructor()
+    tree = constructor.nj(distance_matrix)
+    Bio.Phylo.write(tree, sys.stdout, 'newick')
+
+if __name__ == '__main__':
+    main()
--- a/tools/mentalist_tree/mentalist_tree.xml	Tue Jun 12 19:10:39 2018 -0400
+++ b/tools/mentalist_tree/mentalist_tree.xml	Wed Jun 13 18:06:37 2018 -0400
@@ -1,7 +1,6 @@
 <tool id="mentalist_tree" name="MentaLiST Tree" version="0.1.8">
   <requirements>
-    <requirement type="package" version="3.4.1">r-base</requirement>
-    <requirement type="package" version="2.3.1">r-phangorn</requirement>
+    <requirement type="package" version="1.7.0">biopython</requirement>
   </requirements>
   <command detect_errors="exit_code"><![CDATA[
     $__tool_directory__/mentalist_tree