0
|
1 #!/usr/bin/env python
|
|
2 # Based heavily on the HISAT2 data manager wrapper
|
|
3
|
|
4 import argparse
|
|
5 import os
|
|
6 import shlex
|
|
7 import subprocess
|
|
8 import sys
|
|
9 from json import dumps, loads
|
|
10
|
|
11 DEFAULT_DATA_TABLE_NAME = "bwameth_indexes"
|
|
12
|
|
13
|
|
14 def build_hisat_index(data_manager_dict, params, args):
|
|
15 data_table_name = args.data_table_name
|
|
16 target_directory = params[ 'output_data' ][0]['extra_files_path']
|
|
17 if not os.path.exists( target_directory ):
|
|
18 os.mkdir( target_directory )
|
|
19 fasta_base_name = os.path.basename(args.fasta_filename)
|
|
20 sym_linked_fasta_filename = os.path.join(target_directory, fasta_base_name)
|
|
21 os.symlink(options.fasta_filename, sym_linked_fasta_filename)
|
|
22 args = ['bwameth.py', 'index', sym_linked_fasta_filename]
|
|
23 proc = subprocess.Popen( args=args, shell=False, cwd=target_directory )
|
|
24 return_code = proc.wait()
|
|
25 if return_code:
|
|
26 print >> sys.stderr, "Error building index."
|
|
27 sys.exit( return_code )
|
|
28 data_table_entry = dict(value=args.name, dbkey=args.dbkey, name=args.name, path=sequence_id)
|
|
29 _add_data_table_entry(data_manager_dict, data_table_name, data_table_entry)
|
|
30
|
|
31
|
|
32 def _add_data_table_entry( data_manager_dict, data_table_name, data_table_entry ):
|
|
33 data_manager_dict['data_tables'] = data_manager_dict.get( 'data_tables', {} )
|
|
34 data_manager_dict['data_tables'][ data_table_name ] = data_manager_dict['data_tables'].get( data_table_name, [] )
|
|
35 data_manager_dict['data_tables'][ data_table_name ].append( data_table_entry )
|
|
36 return data_manager_dict
|
|
37
|
|
38
|
|
39 def main():
|
|
40 # Parse Command Line
|
|
41 parser = argparse.ArgumentParser()
|
|
42 parser.add_argument( '--output', default=None )
|
|
43 parser.add_argument( '--fasta_filename', default=None )
|
|
44 parser.add_argument( '--dbkey', default=None )
|
|
45 parser.add_argument( '--name', default=None )
|
|
46 parser.add_argument( '--description', default=None )
|
|
47 parser.add_argument( '--data_table_name', default=DEFAULT_DATA_TABLE_NAME )
|
|
48 args = parser.parse_args()
|
|
49
|
|
50 filename = args.output
|
|
51 params = loads(open(filename).read())
|
|
52 data_manager_dict = {}
|
|
53
|
|
54 if args.dbkey in [ None, '', '?' ]:
|
|
55 raise Exception('"%s" is not a valid dbkey. You must specify a valid dbkey.' % (args.dbkey))
|
|
56
|
|
57 # build the index
|
|
58 build_hisat_index(data_manager_dict, args)
|
|
59
|
|
60 # save info to json file
|
|
61 open(filename, 'wb').write(dumps(data_manager_dict))
|
|
62
|
|
63 if __name__ == "__main__":
|
|
64 main()
|