Mercurial > repos > devteam > cufflinks
comparison cufflinks_wrapper.py @ 11:e04dbae2abe0 draft
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/cufflinks/cufflinks commit 82ee6fc860c52c531b7a57bbb346ab1a67a434a5
| author | devteam |
|---|---|
| date | Sun, 19 Feb 2017 12:12:28 -0500 |
| parents | 83bec71c5c9f |
| children |
comparison
equal
deleted
inserted
replaced
| 10:83bec71c5c9f | 11:e04dbae2abe0 |
|---|---|
| 5 import shutil | 5 import shutil |
| 6 import subprocess | 6 import subprocess |
| 7 import sys | 7 import sys |
| 8 import tempfile | 8 import tempfile |
| 9 | 9 |
| 10 from galaxy.datatypes.util.gff_util import gff_attributes_to_str, parse_gff_attributes | 10 |
| 11 def parse_gff_attributes( attr_str ): | |
| 12 """ | |
| 13 Parses a GFF/GTF attribute string and returns a dictionary of name-value | |
| 14 pairs. The general format for a GFF3 attributes string is | |
| 15 | |
| 16 name1=value1;name2=value2 | |
| 17 | |
| 18 The general format for a GTF attribute string is | |
| 19 | |
| 20 name1 "value1" ; name2 "value2" | |
| 21 | |
| 22 The general format for a GFF attribute string is a single string that | |
| 23 denotes the interval's group; in this case, method returns a dictionary | |
| 24 with a single key-value pair, and key name is 'group' | |
| 25 """ | |
| 26 attributes_list = attr_str.split(";") | |
| 27 attributes = {} | |
| 28 for name_value_pair in attributes_list: | |
| 29 # Try splitting by '=' (GFF3) first because spaces are allowed in GFF3 | |
| 30 # attribute; next, try double quotes for GTF. | |
| 31 pair = name_value_pair.strip().split("=") | |
| 32 if len( pair ) == 1: | |
| 33 pair = name_value_pair.strip().split("\"") | |
| 34 if len( pair ) == 1: | |
| 35 # Could not split for some reason -- raise exception? | |
| 36 continue | |
| 37 if pair == '': | |
| 38 continue | |
| 39 name = pair[0].strip() | |
| 40 if name == '': | |
| 41 continue | |
| 42 # Need to strip double quote from values | |
| 43 value = pair[1].strip(" \"") | |
| 44 attributes[ name ] = value | |
| 45 | |
| 46 if len( attributes ) == 0: | |
| 47 # Could not split attributes string, so entire string must be | |
| 48 # 'group' attribute. This is the case for strictly GFF files. | |
| 49 attributes['group'] = attr_str | |
| 50 return attributes | |
| 51 | |
| 52 | |
| 53 def gff_attributes_to_str( attrs, gff_format ): | |
| 54 """ | |
| 55 Convert GFF attributes to string. Supported formats are GFF3, GTF. | |
| 56 """ | |
| 57 if gff_format == 'GTF': | |
| 58 format_string = '%s "%s"' | |
| 59 # Convert group (GFF) and ID, parent (GFF3) attributes to transcript_id, gene_id | |
| 60 id_attr = None | |
| 61 if 'group' in attrs: | |
| 62 id_attr = 'group' | |
| 63 elif 'ID' in attrs: | |
| 64 id_attr = 'ID' | |
| 65 elif 'Parent' in attrs: | |
| 66 id_attr = 'Parent' | |
| 67 if id_attr: | |
| 68 attrs['transcript_id'] = attrs['gene_id'] = attrs[id_attr] | |
| 69 elif gff_format == 'GFF3': | |
| 70 format_string = '%s=%s' | |
| 71 attrs_strs = [] | |
| 72 for name, value in attrs.items(): | |
| 73 attrs_strs.append( format_string % ( name, value ) ) | |
| 74 return " ; ".join( attrs_strs ) | |
| 11 | 75 |
| 12 | 76 |
| 13 def stop_err(msg): | 77 def stop_err(msg): |
| 14 sys.exit("%s\n" % msg) | 78 sys.exit("%s\n" % msg) |
| 15 | 79 |
| 67 | 131 |
| 68 # Global model (for trackster). | 132 # Global model (for trackster). |
| 69 parser.add_option('', '--global_model', dest='global_model_file', help='Global model used for computing on local data') | 133 parser.add_option('', '--global_model', dest='global_model_file', help='Global model used for computing on local data') |
| 70 | 134 |
| 71 (options, args) = parser.parse_args() | 135 (options, args) = parser.parse_args() |
| 72 | |
| 73 # output version # of tool | |
| 74 try: | |
| 75 with tempfile.NamedTemporaryFile() as tmp_stdout: | |
| 76 returncode = subprocess.call(args='cufflinks --no-update-check 2>&1', stdout=tmp_stdout, shell=True) | |
| 77 stdout = None | |
| 78 with open(tmp_stdout.name) as tmp_stdout2: | |
| 79 for line in tmp_stdout2: | |
| 80 if line.lower().find('cufflinks v') >= 0: | |
| 81 stdout = line.strip() | |
| 82 break | |
| 83 if stdout: | |
| 84 sys.stdout.write('%s\n' % stdout) | |
| 85 else: | |
| 86 raise Exception | |
| 87 except: | |
| 88 sys.stdout.write('Could not determine Cufflinks version\n') | |
| 89 | 136 |
| 90 # If doing bias correction, set/link to sequence file. | 137 # If doing bias correction, set/link to sequence file. |
| 91 if options.do_bias_correction: | 138 if options.do_bias_correction: |
| 92 if options.ref_file: | 139 if options.ref_file: |
| 93 # Sequence data from history. | 140 # Sequence data from history. |
