0
|
1 #!/usr/bin/env python
|
|
2 # -*- coding: UTF-8 -*-
|
|
3
|
|
4 import os, sys, subprocess, commands
|
|
5 import random, shutil
|
|
6 import zipfile
|
|
7
|
|
8
|
|
9 blastdbpath = '/home/galaxy/bin/antismash-1.1.0/db'
|
|
10 pfamdbpath = '/home/galaxy/bin/antismash-1.1.0/db'
|
|
11 antismash_path = '/home/galaxy/bin/antismash-1.1.0/antismash.py'
|
|
12
|
|
13
|
|
14 def zipper(dir, zip_file):
|
|
15 zip = zipfile.ZipFile(zip_file, 'w', compression=zipfile.ZIP_DEFLATED)
|
|
16 root_len = len(os.path.abspath(dir))
|
|
17 for root, dirs, files in os.walk(dir):
|
|
18 # only inlcude the result directory
|
|
19 # assumption, each galaxy file and so the result directory starts with dataset_xxx
|
|
20 if root.find('dataset_') != -1:
|
|
21 archive_root = os.path.abspath(root)[root_len:]
|
|
22 for f in files:
|
|
23 fullpath = os.path.join(root, f)
|
|
24 archive_name = os.path.join(archive_root, f)
|
|
25 zip.write(fullpath, archive_name, zipfile.ZIP_DEFLATED)
|
|
26 zip.close()
|
|
27 return zip_file
|
|
28
|
|
29
|
|
30 def anitSMASH(args):
|
|
31 #./antismash.py Tue6071_genome.fasta --geneclustertypes 1 --fullhmm y
|
|
32 rint = random.randint(1,10000000)
|
|
33 tmp_dir = '/tmp/galaxy_%s' % rint
|
|
34 os.mkdir(tmp_dir)
|
|
35 os.mkdir(os.path.join( tmp_dir, 'geneprediction' ))
|
|
36 os.chdir(tmp_dir)
|
|
37 new_input_path = os.path.join(tmp_dir, os.path.basename(args.input) + '.fasta')
|
|
38
|
|
39 # try to generate the same name as in antismash.py
|
|
40 genomename = ".".join( (os.path.basename(args.input) + '.fasta').split(".")[:-1] )
|
|
41 for i in """!"#$%&()*+,./:;=>?@[]^`{|}'""":
|
|
42 genomename = genomename.replace(i,"")
|
|
43 result_path = os.path.join( tmp_dir, genomename )
|
|
44
|
|
45 shutil.copy(args.input, new_input_path )
|
|
46
|
|
47 if args.eukaryotic:
|
|
48 taxon = '--taxon e'
|
|
49 else:
|
|
50 taxon = '--taxon p'
|
|
51
|
|
52 if args.clusterblast:
|
|
53 clusterblast = '--clusterblast y'
|
|
54 else:
|
|
55 clusterblast = '--clusterblast n'
|
|
56
|
|
57 if args.smcogs:
|
|
58 smcogs = '--smcogs y'
|
|
59 else:
|
|
60 smcogs = '--smcogs n'
|
|
61
|
|
62 if args.fullhmm:
|
|
63 fullhmm = '--fullhmm y'
|
|
64 else:
|
|
65 fullhmm = '--fullhmm n'
|
|
66
|
|
67 if args.fullblast:
|
|
68 fullblast = '--fullblast y'
|
|
69 else:
|
|
70 fullblast = '--fullblast n'
|
|
71
|
|
72 h = [antismash_path, new_input_path,
|
|
73 '--geneclustertypes %s' % args.geneclustertypes,
|
|
74 taxon,
|
|
75 clusterblast,
|
|
76 smcogs,
|
|
77 fullhmm,
|
|
78 fullblast,
|
|
79 '--glimmer_prediction %s' % args.glimmer_prediction,
|
|
80 '--blastdbpath %s' % blastdbpath,
|
|
81 '--pfamdbpath %s' % pfamdbpath,
|
|
82 '--cores 10',
|
|
83 ]
|
|
84 a = ' '.join(h)
|
|
85 subprocess.call(a, shell=True)
|
|
86
|
|
87
|
|
88 shutil.copy(os.path.join(result_path, '%s.final.embl' % genomename), args.embl_path)
|
|
89
|
|
90 clustername_mapping = {}
|
|
91 for line in open( os.path.join(result_path, 'clusterblast/geneclusters.txt') ):
|
|
92 token = line.split('\t')
|
|
93 clustername_mapping[token[2]] = token[3]
|
|
94
|
|
95 for line in open( os.path.join(result_path, 'clusterblast/geneclusterprots.fasta') ):
|
|
96 if line.startswith('>'):
|
|
97 for k,v in clustername_mapping.items():
|
|
98 if '|%s|' % k in line:
|
|
99 args.geneclusterprots.write( line.replace('|%s|' % k, '|%s|%s|' % (k,v)) )
|
|
100 else:
|
|
101 args.geneclusterprots.write( line )
|
|
102
|
|
103 zipper(result_path, args.zip)
|
|
104
|
|
105 # html output
|
|
106 shutil.copy( os.path.join(result_path, 'display.xhtml'), args.html_file)
|
|
107 os.mkdir( args.html_path )
|
|
108 html_dest_path = os.path.join(args.html_path, 'html/')
|
|
109 images_dest_path = os.path.join(args.html_path, 'images/')
|
|
110 svg_dest_path = os.path.join(args.html_path, 'svg/')
|
|
111 substrspecs_dest_path = os.path.join(args.html_path, 'substrspecs/')
|
|
112 shutil.copytree( os.path.join(result_path, 'html/'), html_dest_path)
|
|
113 shutil.copytree( os.path.join(result_path, 'images/'), images_dest_path)
|
|
114 shutil.copytree( os.path.join(result_path, 'svg/'), svg_dest_path)
|
|
115 shutil.copytree( os.path.join(result_path, 'substrspecs/'), substrspecs_dest_path)
|
|
116 shutil.copy( os.path.join(result_path, 'jquery.svg.js'), args.html_path )
|
|
117 shutil.copy( os.path.join(result_path, 'jquery.svgdom.js'), args.html_path )
|
|
118 shutil.copy( os.path.join(result_path, 'jquery-1.4.2.min.js'), args.html_path )
|
|
119 shutil.copy( os.path.join(result_path, 'style.css'), args.html_path )
|
|
120
|
|
121 # remove tmp directory
|
|
122 shutil.rmtree(tmp_dir)
|
|
123
|
|
124
|
|
125 def arg_parse():
|
|
126 import argparse
|
|
127 parser = argparse.ArgumentParser(prog = 'antiSMASH-Wrapper')
|
|
128 parser.add_argument('--version', action='version', version='%(prog)s 0.01')
|
|
129 parser.add_argument('--geneclustertypes',
|
|
130 help='Fingerprint Type, currently FP2, FP3, FP4')
|
|
131 parser.add_argument('--clusterblast', action='store_true')
|
|
132 parser.add_argument('--eukaryotic', action='store_true')
|
|
133 parser.add_argument('--fullhmm', action='store_true')
|
|
134 parser.add_argument('--smcogs', action='store_true')
|
|
135 parser.add_argument('--fullblast', action='store_true')
|
|
136
|
|
137 parser.add_argument('--input', '-i', help='FASTA Sequence File')
|
|
138 parser.add_argument('--glimmer_prediction', help='Glimmer Prediction File')
|
|
139
|
|
140 parser.add_argument('--zip', help='output: all files as zip file')
|
|
141 parser.add_argument('--html_file', help='output: the path to the index html file')
|
|
142 parser.add_argument('--html_path', help='output: the path to the output html dir')
|
|
143 parser.add_argument('--embl_path', help='output: the path to the embl output file')
|
|
144 parser.add_argument('--geneclusterprots', help='output: Genecluster Fasta File', type=argparse.FileType('w'))
|
|
145
|
|
146 args = parser.parse_args()
|
|
147 return args
|
|
148
|
|
149
|
|
150 if __name__ == '__main__':
|
|
151 args = arg_parse()
|
|
152 anitSMASH(args)
|
|
153
|