| 0 | 1 #!/usr/bin/python | 
|  | 2 import argparse | 
|  | 3 import sys | 
|  | 4 import os | 
|  | 5 import tempfile | 
|  | 6 import shutil | 
|  | 7 import subprocess | 
|  | 8 import ntpath | 
|  | 9 | 
|  | 10 """ | 
|  | 11  -h, --help            show this help message and exit | 
|  | 12   -o PATH, --output-path PATH | 
|  | 13                         Directory where output files will be written | 
|  | 14   -n NAME               Analysis name | 
|  | 15   --output-format FORMAT | 
|  | 16                         The FORMAT for the output file | 
|  | 17   -N NUMBER, --samplings NUMBER | 
|  | 18                         Number of samplings to compute the FM bias pvalue | 
|  | 19   -e ESTIMATOR, --estimator ESTIMATOR | 
|  | 20                         Test estimator for computation. | 
|  | 21   --gt THRESHOLD, --gene-threshold THRESHOLD | 
|  | 22                         Minimum number of mutations per gene to compute the FM | 
|  | 23                         bias | 
|  | 24   --pt THRESHOLD, --pathway-threshold THRESHOLD | 
|  | 25                         Minimum number of mutations per pathway to compute the | 
|  | 26                         FM bias | 
|  | 27   -s SLICES, --slices SLICES | 
|  | 28                         Slices to process separated by commas | 
|  | 29   -m PATH, --mapping PATH | 
|  | 30                         File with mappings between genes and pathways to be | 
|  | 31                         analysed | 
|  | 32   --save-data           The input data matrix will be saved | 
|  | 33   --save-analysis       The analysis results will be saved | 
|  | 34   -j CORES, --cores CORES | 
|  | 35                         Number of cores to use for calculations. Default is 0 | 
|  | 36                         that means all the available cores | 
|  | 37   -D KEY=VALUE          Define external parameters to be saved in the results | 
|  | 38   -L LEVEL, --log-level LEVEL | 
|  | 39                         Define log level: debug, info, warn, error, critical, | 
|  | 40                         notset | 
|  | 41 """ | 
|  | 42 def stop_err( msg ): | 
|  | 43     sys.stderr.write( '%s\n' % msg ) | 
|  | 44     sys.exit() | 
|  | 45 def main(params): | 
|  | 46     parser = argparse.ArgumentParser() | 
|  | 47     ##TAKEN directly from the source code | 
|  | 48     parser.add_argument("-N", "--samplings", dest="num_samplings", type=int, default=10000, metavar="NUMBER", | 
|  | 49                                         help="Number of samplings to compute the FM bias pvalue") | 
|  | 50     parser.add_argument("-e", "--estimator", dest="estimator", metavar="ESTIMATOR", | 
|  | 51                                         choices=["mean", "median"], default="mean", | 
|  | 52                                         help="Test estimator for computation.") | 
|  | 53     parser.add_argument("--gt", "--gene-threshold", dest="mut_gene_threshold", type=int, default=2, metavar="THRESHOLD", | 
|  | 54                                         help="Minimum number of mutations per gene to compute the FM bias") | 
|  | 55     parser.add_argument("--pt", "--pathway-threshold", dest="mut_pathway_threshold", type=int, default=10, metavar="THRESHOLD", | 
|  | 56                                         help="Minimum number of mutations per pathway to compute the FM bias") | 
|  | 57     parser.add_argument("-s", "--slices", dest="slices", metavar="SLICES", | 
|  | 58                                         help="Slices to process separated by commas") | 
|  | 59     parser.add_argument("-m", "--mapping", dest="mapping", metavar="PATH", | 
|  | 60                                         help="File with mappings between genes and pathways to be analysed") | 
|  | 61     parser.add_argument("-f", "--filter", dest="filter", metavar="PATH", | 
|  | 62                                         help="File containing the features to be filtered. By default labels are includes," | 
|  | 63                                                     " labels preceded with - are excludes.") | 
|  | 64     #parser.add_argument("-o", "--output_path", type=str, required=True, help="Directory where output files will be written") | 
|  | 65     parser.add_argument("-o1", "--output1", type=str, dest="output1", required=True) | 
|  | 66 | 
|  | 67     parser.add_argument("-o2", "--output2", type=str, dest="output2", required=False) | 
|  | 68     parser.add_argument("-n", "--analysis_name", type=str, required=False, help="Analysis name") | 
|  | 69     #parser.add_argument("-e", "--estimator", type=str, required=False, choices=["mean-empirical","median-empirical","mean-zscore","median-zscore"], help="Test estimator for computation") | 
|  | 70     parser.add_argument("--output-format", dest="output_format", required=False, | 
|  | 71                         metavar="FORMAT", | 
|  | 72                         choices=["tsv", "tsv.gz", "tsv.bz2"], | 
|  | 73                         default="tsv", | 
|  | 74                         help="The FORMAT for the output file") | 
|  | 75     parser.add_argument("-j", "--cores", dest="num_cores", type=int, | 
|  | 76                         metavar="CORES", | 
|  | 77                         help="Number of cores to use for calculations.\ | 
|  | 78                         Default is 0 that means all the available cores") | 
|  | 79     parser.add_argument("-D", dest="defines", metavar="KEY=VALUE", action="append", help="Define external parameters to be saved in the results") | 
|  | 80     parser.add_argument("-L", "--log-level", dest="log_level", metavar="LEVEL", default=None, | 
|  | 81                         choices=["debug", "info", "warn", "error", "critical", "notset"], | 
|  | 82                         help="Define log level: debug, info, warn, error, critical, notset") | 
|  | 83     parser.add_argument("-i", "--input", dest="input_path", required=True, type=str, help="Path to input file") | 
|  | 84     args = vars(parser.parse_args(params)) | 
|  | 85     try: | 
|  | 86         mapping_path = args["mapping_path"] | 
|  | 87     except KeyError: | 
|  | 88         mapping_path = "no_mapping_path" | 
|  | 89     #if mapping_path=="no_mapping_path": | 
|  | 90         #params.remove(mapping_path) | 
|  | 91         #params.remove("-m") | 
|  | 92     output_dir = tempfile.mkdtemp() | 
|  | 93     params.append("-o") | 
|  | 94     params.append(output_dir) | 
|  | 95     params.append(args["input_path"]) | 
|  | 96     cmd = "oncodrivefm " | 
|  | 97     i=0 | 
|  | 98     while i<len(params): | 
|  | 99         p=params[i] | 
|  | 100         if p=="-i" or p=="-o1" or p=="-o2": | 
|  | 101             i+=2 | 
|  | 102         else: | 
|  | 103             i+=1 | 
|  | 104             cmd += " "+p | 
|  | 105     cmd += " 2>&1 " | 
|  | 106     #tmp = tempfile.NamedTemporaryFile( dir=output_dir ).name | 
|  | 107     #tmp_stderr = open( tmp, 'wb' ) | 
|  | 108     print cmd | 
|  | 109     proc = subprocess.Popen(args=cmd, shell=True) | 
|  | 110     returncode = proc.wait() | 
|  | 111     #tmp_stderr.close() | 
|  | 112 | 
|  | 113     if args['analysis_name'] is not None: | 
|  | 114         prefix = args["analysis_name"] | 
|  | 115     else: | 
|  | 116         ##refer: http://stackoverflow.com/a/8384788/756986 | 
|  | 117         prefix = ntpath.basename(args["input_path"]).split(".")[0] | 
|  | 118     if args["mapping"] is not None: | 
|  | 119         pathway_file = prefix+"-pathways" | 
|  | 120     else: | 
|  | 121         pathway_file = None | 
|  | 122     output_format = args["output_format"] | 
|  | 123     genes_output_file_name = os.path.join(output_dir, prefix+"-genes."+output_format) | 
|  | 124     shutil.move(genes_output_file_name,args["output1"]) | 
|  | 125     if pathway_file: | 
|  | 126         pathway_output_file_name = os.path.join(output_dir, pathway_file+"."+output_format) | 
|  | 127         shutil.move(pathway_output_file_name,args["output2"]) | 
|  | 128     if os.path.exists( output_dir ): | 
|  | 129         shutil.rmtree( output_dir ) | 
|  | 130 if __name__=="__main__": | 
|  | 131     main(sys.argv[1:]) |