#!/usr/bin/python
# Load required modules
import sys, os
import multi_dendrix as Multi
def parse_args(input_list=None):
# Parse arguments
import argparse
class Args: pass
args = Args()
description = 'Calculates network permutation test for given pathway set '\
'on the given network.'
parser = argparse.ArgumentParser(description=description)
parser.add_argument('-i', '--permuted_matrices_dir', required=True,
help='Directory of permuted networks.')
parser.add_argument('-p', '--pathway_set_file', required=True,
help='File containing input pathway set.')
parser.add_argument('-o', '--output_file', default=None,
help='Name of output file.')
parser.add_argument('-k_min', '--min_pathway_size', required=True, type=int,
help='Minimum pathway size.')
parser.add_argument('-k_max', '--max_pathway_size', required=True, type=int,
help='Maximum pathway size.')
parser.add_argument('-t', '--num_pathways', required=True, type=int,
help='Minimum number of pathways.')
parser.add_argument('-a', '--alpha', type=float, default=1.0,
help='Parameter that changes weight function W by '\
'weighting the penalty of coverage overlap.')
parser.add_argument('--num_overlaps', type=int, default=0,
help='Number of overlaps allowed per pathway.')
parser.add_argument('--pathways_per_gene', type=int, default=1,
help='Number of pathways a gene can be a member of.')
parser.add_argument('-v', '--verbose', default=False, action='store_true',
help='Flag verbose mode.')
# If called from the command line, parse command line args.
if input_list: parser.parse_args(input_list, namespace=args)
else: parser.parse_args(namespace=args)
return args
[docs]def load_permuted_matrices(input_dir):
return [ Multi.load_mutation_data(input_dir + "/" + fh)
for fh in os.listdir(input_dir) ]
[docs]def load_w_prime(pathway_set_file):
return sum([int(l.rstrip().split("\t")[0]) for l in open(pathway_set_file)])
[docs]def matrix_permutation_test(W_prime, permuted_matrices, t, k_min, k_max,
alpha, num_overlaps, pathways_per_gene):
count = 0.
for m, n, genespace, patientspace, G2T, T2G in permuted_matrices:
multi_args = [ (genespace, T2G, G2T), t, k_min, k_max, alpha,
num_overlaps, pathways_per_gene ]
pathways_w_weights = Multi.multi_dendrix(*multi_args)
if sum([w for pathway, w in pathways_w_weights]) >= W_prime:
count += 1.
return count / float(len(permuted_matrices))
[docs]def run(args):
# Load input
if args.verbose: print 'Loading matrices...'
W_prime = load_w_prime(args.pathway_set_file)
permuted_matrices = load_permuted_matrices(args.permuted_matrices_dir)
# Evaluate the pathway set
if args.verbose: print 'Evaluating input pathway set...'
pval = matrix_permutation_test(W_prime, permuted_matrices, args.num_pathways,
args.min_pathway_size, args.max_pathway_size,
args.alpha, args.num_overlaps,
args.pathways_per_gene)
# Output and return results
test_name = 'Matrix permutation pval: '
if args.output_file:
open(args.output_file, 'w').write(test_name + str(pval))
if args.verbose: print test_name + str(pval)
if __name__ == "__main__": run(parse_args())