# HG changeset patch # User dfornika # Date 1528927597 14400 # Node ID 931bd8ac187dab8f046bd2b2ffc833437b4c3d30 # Parent 35f9c28b6fbb9972f2b27ee07aeeaaf18c91e1d3 planemo upload for repository https://github.com/WGS-TB/MentaLiST/tree/master/galaxy commit f59b512dfb769d6dd7e5e992a78bbe60d992ef78-dirty diff -r 35f9c28b6fbb -r 931bd8ac187d tools/mentalist_tree/mentalist_tree --- 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 \n") -} +import Bio.Phylo +from Bio.Phylo.TreeConstruction import DistanceMatrix, DistanceTreeConstructor + +def usage(): + print("usage: mentalist_tree \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() diff -r 35f9c28b6fbb -r 931bd8ac187d tools/mentalist_tree/mentalist_tree.xml --- 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 @@ - r-base - r-phangorn + biopython