Mercurial > repos > dfornika > mentalist
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