0
|
1 """
|
|
2 RSEM datatypes
|
|
3 """
|
|
4 import os,os.path,re,sys
|
|
5 from galaxy.datatypes.data import get_file_peek
|
|
6 from galaxy.datatypes.images import Html
|
|
7 from galaxy.datatypes.tabular import Tabular
|
|
8 from galaxy.datatypes.metadata import MetadataElement
|
|
9 from galaxy.datatypes.sniff import get_headers
|
|
10
|
|
11 import logging
|
|
12
|
|
13 log = logging.getLogger(__name__)
|
|
14
|
|
15 class RsemIsoformsResults( Tabular ):
|
|
16 file_ext = "rsem.isoforms.results"
|
|
17 """
|
|
18 required columns:
|
|
19 transcript_id gene_id length effective_length expected_count TPM FPKM IsoPct
|
|
20 optional columns:
|
|
21 pme_expected_count pme_TPM pme_FPKM IsoPct_from_pme_TPM TPM_ci_lower_bound TPM_ci_upper_bound FPKM_ci_lower_bound FPKM_ci_upper_bound
|
|
22 """
|
|
23 def __init__(self, **kwd):
|
|
24 Tabular.__init__( self, **kwd )
|
|
25 """Initialize RsemResults datatype"""
|
|
26 self.comment_lines = 1
|
|
27 def sniff( self, filename ):
|
|
28 headers = get_headers( filename, '\n', count=1 )
|
|
29 return len(headers) > 0 and len(headers[0]) >= 8 and headers[0][0] == "transcript_id" and headers[0][1] == "gene_id" and headers[0][6] == "FPKM"
|
|
30 def set_meta( self, dataset, **kwd ):
|
|
31 Tabular.set_meta( self, dataset, skip=None, **kwd )
|
|
32
|
|
33 class RsemGenesResults( Tabular ):
|
|
34 file_ext = "rsem.genes.results"
|
|
35 """
|
|
36 required columns:
|
|
37 gene_id transcript_id(s) length effective_length expected_count TPM FPKM
|
|
38 optional columns:
|
|
39 pme_expected_count pme_TPM pme_FPKM TPM_ci_lower_bound TPM_ci_upper_bound FPKM_ci_lower_bound FPKM_ci_upper_bound
|
|
40 """
|
|
41 def __init__(self, **kwd):
|
|
42 Tabular.__init__( self, **kwd )
|
|
43 """Initialize RsemResults datatype"""
|
|
44 self.comment_lines = 1
|
|
45 def sniff( self, filename ):
|
|
46 headers = get_headers( filename, '\n', count=1 )
|
|
47 return len(headers) > 0 and len(headers[0]) >= 7 and headers[0][0] == "gene_id" and headers[0][1].startswith("transcript_id") and headers[0][6] == "FPKM"
|
|
48 def set_meta( self, dataset, **kwd ):
|
|
49 Tabular.set_meta( self, dataset, skip=None, **kwd )
|
|
50
|
|
51 class RsemReference( Html ):
|
|
52 """Class describing an RSEM reference"""
|
|
53 MetadataElement( name='reference_name', default='rsem_ref' , desc='RSEM Reference Name', readonly=True, visible=True, set_in_upload=True, no_value='rsem_ref' )
|
|
54 file_ext = 'rsem_ref'
|
|
55 allow_datatype_change = False
|
|
56 composite_type = 'auto_primary_file'
|
|
57 def __init__( self, **kwd ):
|
|
58 Html.__init__(self, **kwd)
|
|
59 """
|
|
60 Expecting files:
|
|
61 extra_files_path/<reference_name>.grp
|
|
62 extra_files_path/<reference_name>.ti
|
|
63 extra_files_path/<reference_name>.seq
|
|
64 extra_files_path/<reference_name>.transcripts.fa
|
|
65 Optionally includes files:
|
|
66 extra_files_path/<reference_name>.chrlist
|
|
67 extra_files_path/<reference_name>.idx.fa
|
|
68 extra_files_path/<reference_name>.1.ebwt
|
|
69 extra_files_path/<reference_name>.2.ebwt
|
|
70 extra_files_path/<reference_name>.3.ebwt
|
|
71 extra_files_path/<reference_name>.4.ebwt
|
|
72 extra_files_path/<reference_name>.rev.1.ebwt
|
|
73 extra_files_path/<reference_name>.rev.2.ebwt
|
|
74 """
|
|
75 self.add_composite_file( '%s.grp', description = 'Group File', substitute_name_with_metadata = 'reference_name', is_binary = False )
|
|
76 self.add_composite_file( '%s.ti', description = '', substitute_name_with_metadata = 'reference_name', is_binary = False )
|
|
77 self.add_composite_file( '%s.seq', description = '', substitute_name_with_metadata = 'reference_name', is_binary = False )
|
|
78 self.add_composite_file( '%s.transcripts.fa', description = '', substitute_name_with_metadata = 'reference_name', is_binary = False )
|
|
79 self.add_composite_file( '%s.chrlist', description = '', substitute_name_with_metadata = 'reference_name', is_binary = False, optional=True )
|
|
80 self.add_composite_file( '%s.idx.fa', description = '', substitute_name_with_metadata = 'reference_name', is_binary = False, optional=True )
|
|
81 self.add_composite_file( '%s.1.ebwt', description = '', substitute_name_with_metadata = 'reference_name', is_binary = True, optional=True )
|
|
82 self.add_composite_file( '%s.2.ebwt', description = '', substitute_name_with_metadata = 'reference_name', is_binary = True, optional=True )
|
|
83 self.add_composite_file( '%s.3.ebwt', description = '', substitute_name_with_metadata = 'reference_name', is_binary = True, optional=True )
|
|
84 self.add_composite_file( '%s.4.ebwt', description = '', substitute_name_with_metadata = 'reference_name', is_binary = True, optional=True )
|
|
85 self.add_composite_file( '%s.rev.1.ebwt', description = '', substitute_name_with_metadata = 'reference_name', is_binary = True, optional=True )
|
|
86 self.add_composite_file( '%s.rev.2.ebwt', description = '', substitute_name_with_metadata = 'reference_name', is_binary = True, optional=True )
|
|
87
|
|
88 def generate_primary_file( self, dataset = None ):
|
|
89 """
|
|
90 This is called only at upload to write the file
|
|
91 cannot rename the datasets here - they come with the default unfortunately
|
|
92 """
|
|
93
|
|
94 def regenerate_primary_file(self,dataset):
|
|
95 """
|
|
96 cannot do this until we are setting metadata
|
|
97 """
|
|
98 link_to_exts = ['.grp','.ti','.seq','.fa','.chrlist','.log']
|
|
99 ref_name = dataset.metadata.reference_name
|
|
100 efp = dataset.extra_files_path
|
|
101 flist = os.listdir(efp)
|
|
102 rval = ['<html><head><title>%s</title></head><body><p/>RSEM Reference %s files:<p/><ul>' % (dataset.name,ref_name)]
|
|
103 rvalb = []
|
|
104 for i,fname in enumerate(flist):
|
|
105 sfname = os.path.split(fname)[-1]
|
|
106 f,e = os.path.splitext(fname)
|
|
107 if e in link_to_exts:
|
|
108 rval.append( '<li><a href="%s">%s</a></li>' % ( sfname, sfname) )
|
|
109 else:
|
|
110 rvalb.append( '<li>%s</li>' % (sfname) )
|
|
111 if len(rvalb) > 0:
|
|
112 rval += rvalb
|
|
113 rval.append( '</ul></body></html>' )
|
|
114 fh = file(dataset.file_name,'w')
|
|
115 fh.write("\n".join( rval ))
|
|
116 fh.write('\n')
|
|
117 fh.close()
|
|
118
|
|
119 def set_meta( self, dataset, **kwd ):
|
|
120 Html.set_meta( self, dataset, **kwd )
|
|
121 efp = dataset.extra_files_path
|
|
122 flist = os.listdir(efp)
|
|
123 for i,fname in enumerate(flist):
|
|
124 if fname.endswith('.grp'):
|
|
125 dataset.metadata.reference_name = fname[:-4]
|
|
126 break
|
|
127 self.regenerate_primary_file(dataset)
|
|
128
|