Mercurial > repos > yating-l > jbrowsearchivecreator
annotate utils.py @ 22:bebe8aaf1656 draft
Uploaded
| author | yating-l | 
|---|---|
| date | Fri, 07 Jul 2017 17:06:00 -0400 | 
| parents | 671231da45f9 | 
| children | 
| rev | line source | 
|---|---|
| 
0
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
1 #!/usr/bin/env python | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
2 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
3 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
4 This file include common used functions for converting file format to gff3 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
5 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
6 from collections import OrderedDict | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
7 import json | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
8 import subprocess | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
9 import os | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
10 import tempfile | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
11 import string | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
12 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
13 def write_features(field, attribute, gff3): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
14 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
15 The function write the features to gff3 format (defined in https://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
16 field, attribute are ordered dictionary | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
17 gff3 is the file handler | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
18 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
19 attr = [] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
20 for v in field.values(): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
21 gff3.write(str(v) + '\t') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
22 for k, v in attribute.items(): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
23 s = str(k) + '=' + str(v) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
24 attr.append(s) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
25 gff3.write(';'.join(attr)) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
26 gff3.write('\n') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
27 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
28 def getChromSizes(reference, tool_dir): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
29 #TODO: find a better way instead of shipping the two exec files with the tool | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
30 faToTwoBit = os.path.join(tool_dir, 'faToTwoBit') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
31 twoBitInfo = os.path.join(tool_dir, 'twoBitInfo') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
32 try: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
33 twoBitFile = tempfile.NamedTemporaryFile(bufsize=0) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
34 chrom_sizes = tempfile.NamedTemporaryFile(bufsize=0, suffix='.chrom.sizes', delete=False) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
35 except IOError as err: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
36 print "Cannot create tempfile err({0}): {1}".format(err.errno, err.strerror) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
37 try: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
38 subprocess.call(['faToTwoBit', reference, twoBitFile.name]) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
39 except OSError as err: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
40 print "Cannot generate twoBitFile from faToTwoBit err({0}): {1}".format(err.errno, err.strerror) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
41 try: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
42 subprocess.call(['twoBitInfo', twoBitFile.name, chrom_sizes.name]) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
43 except OSError as err: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
44 print "Cannot generate chrom_sizes from twoBitInfo err({0}): {1}".format(err.errno, err.strerror) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
45 return chrom_sizes | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
46 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
47 def sequence_region(chrom_sizes): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
48 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
49 This function read from a chromatin size file generated by twoBitInfo and write the information to dict | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
50 return a dict | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
51 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
52 f = open(chrom_sizes, 'r') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
53 sizes = f.readlines() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
54 sizes_dict = {} | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
55 for line in sizes: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
56 chrom_info = line.rstrip().split('\t') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
57 sizes_dict[chrom_info[0]] = chrom_info[1] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
58 return sizes_dict | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
59 | 
| 
15
 
671231da45f9
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit 594c5fa1e3cdb378ecf6b5490ec2cbac5fa8a61e-dirty
 
yating-l 
parents: 
0 
diff
changeset
 | 
60 def child_blocks(parent_field, parent_attr, gff3, child_type): | 
| 
0
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
61 num = 0 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
62 blockcount = int(parent_attr['blockcount']) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
63 chromstart = parent_attr['chromstarts'].split(',') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
64 blocksize = parent_attr['blocksizes'].split(',') | 
| 
15
 
671231da45f9
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit 594c5fa1e3cdb378ecf6b5490ec2cbac5fa8a61e-dirty
 
yating-l 
parents: 
0 
diff
changeset
 | 
65 parent_start = parent_field['start'] | 
| 
0
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
66 while num < blockcount: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
67 child_attr = OrderedDict() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
68 child_field = parent_field | 
| 
15
 
671231da45f9
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit 594c5fa1e3cdb378ecf6b5490ec2cbac5fa8a61e-dirty
 
yating-l 
parents: 
0 
diff
changeset
 | 
69 child_field['type'] = child_type | 
| 
 
671231da45f9
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit 594c5fa1e3cdb378ecf6b5490ec2cbac5fa8a61e-dirty
 
yating-l 
parents: 
0 
diff
changeset
 | 
70 child_field['start'] = int(chromstart[num]) + int(parent_start) | 
| 
0
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
71 child_field['end'] = int(child_field['start']) + int(blocksize[num]) - 1 | 
| 
15
 
671231da45f9
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit 594c5fa1e3cdb378ecf6b5490ec2cbac5fa8a61e-dirty
 
yating-l 
parents: 
0 
diff
changeset
 | 
72 child_attr['ID'] = parent_attr['ID'] + '_part_' + str(num+1) | 
| 
0
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
73 child_attr['Parent'] = parent_attr['ID'] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
74 write_features(child_field, child_attr, gff3) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
75 num = num + 1 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
76 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
77 def add_tracks_to_json(trackList_json, new_tracks, modify_type): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
78 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
79 Add to track configuration (trackList.json) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
80 # modify_type = 'add_tracks': add a new track like bam or bigwig, new_track = dict() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
81 # modify_type = 'add_attr': add configuration to the existing track, new_track = dict(track_name: dict()) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
82 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
83 with open(trackList_json, 'r+') as f: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
84 data = json.load(f) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
85 if modify_type == 'add_tracks': | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
86 data['tracks'].append(new_tracks) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
87 elif modify_type == 'add_attr': | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
88 for k in new_tracks: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
89 for track in data['tracks']: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
90 if k.lower() in track['urlTemplate'].lower(): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
91 attr = new_tracks[k] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
92 for k, v in attr.items(): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
93 track[k] = v | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
94 f.seek(0, 0) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
95 f.write(json.dumps(data, separators=(',' , ':'), indent=4)) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
96 f.truncate() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
97 f.close() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
98 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
99 def gtfToGff3(gtf_file, gff3_file, chrom_sizes): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
100 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
101 Covert gtf file output from StringTie to gff3 format | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
102 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
103 gff3 = open(gff3_file, 'w') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
104 gff3.write("##gff-version 3\n") | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
105 sizes_dict = sequence_region(chrom_sizes) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
106 seq_regions = dict() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
107 parents = dict() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
108 with open(gtf_file, 'r') as gtf: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
109 for line in gtf: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
110 if line.startswith('#'): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
111 continue | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
112 field = OrderedDict() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
113 attribute = OrderedDict() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
114 li = line.rstrip().split("\t") | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
115 #print li | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
116 field['seqid'] = li[0] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
117 #print field['seqid'] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
118 if field['seqid'] not in seq_regions: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
119 end_region = sizes_dict[field['seqid']] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
120 gff3.write("##sequence-region " + field['seqid'] + ' 1 ' + str(end_region) + '\n') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
121 seq_regions[field['seqid']] = end_region | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
122 field['source'] = li[1] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
123 field['type'] = li[2] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
124 # The first base in a chromosome is numbered 0 in BED format | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
125 field['start'] = li[3] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
126 field['end'] = li[4] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
127 field['score'] = li[5] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
128 field['strand'] = li[6] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
129 field['phase'] = li[7] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
130 attr_li = li[8].split(';') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
131 gene_id = attr_li[0].split()[1].strip('"') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
132 attribute['ID'] = gene_id + '_' + field['type'] + '_' + str(field['start']) + '_' + str(field['end']) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
133 if field['type'] == 'transcript': | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
134 parents[gene_id] = attribute['ID'] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
135 attribute['transcript_id'] = attr_li[1].split()[1].strip('"') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
136 attribute['coverage'] = attr_li[2].split()[1].strip('"') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
137 attribute['fpkm'] = attr_li[3].split()[1].strip('"') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
138 attribute['tpm'] = attr_li[4].split()[1].strip('"') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
139 elif field['type'] == 'exon': | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
140 attribute['Parent'] = parents[gene_id] | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
141 attribute['transcript_id'] = attr_li[1].split()[1].strip('"') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
142 attribute['coverage'] = attr_li[3].split()[1].strip('"') | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
143 write_features(field, attribute, gff3) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
144 gff3.close() | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
145 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
146 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
147 def sanitize_name(input_name): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
148 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
149 Galaxy will name all the files and dirs as *.dat, | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
150 the function can replace '.' to '_' for the dirs | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
151 """ | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
152 validChars = "_-%s%s" % (string.ascii_letters, string.digits) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
153 sanitized_name = ''.join([c if c in validChars else '_' for c in input_name]) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
154 return "gonramp_" + sanitized_name | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
155 | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
156 def createBamIndex(bamfile): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
157 subprocess.call(['samtools', 'index', bamfile]) | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
158 filename = bamfile + '.bai' | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
159 if os.path.exists(filename): | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
160 return filename | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
161 else: | 
| 
 
8d1cf7ce65cd
planemo upload for repository https://github.com/Yating-L/jbrowse-archive-creator.git commit d583ac16a6c6942730ea536eb59cc37941816030-dirty
 
yating-l 
parents:  
diff
changeset
 | 
162 raise ValueError('Did not find bai file') | 
