0
|
1 """
|
|
2 SnpEff datatypes
|
|
3 """
|
|
4 import os,os.path,re,sys
|
|
5 import galaxy.datatypes.data
|
|
6 from galaxy.datatypes.images import Html
|
|
7 from galaxy.datatypes.metadata import MetadataElement
|
|
8
|
|
9 class RsemReference( Html ):
|
|
10 """Class describing an RSEM reference"""
|
|
11 MetadataElement( name='reference_name', default='galaxy_generated_bowtie_index', desc='RSEM Reference Name', readonly=True, visible=True, no_value=None )
|
|
12
|
|
13 file_ext = 'rsem_ref'
|
|
14 is_binary = True
|
|
15 composite_type = 'auto_primary_file'
|
|
16 allow_datatype_change = False
|
|
17
|
|
18 def generate_primary_file( self, dataset = None ):
|
|
19 """
|
|
20 This is called only at upload to write the html file
|
|
21 cannot rename the datasets here - they come with the default unfortunately
|
|
22 """
|
|
23 return '<html><head></head><body>AutoGenerated Primary File for RSEM Reference Composite Dataset</body></html>'
|
|
24
|
|
25 def regenerate_primary_file(self,dataset):
|
|
26 """
|
|
27 cannot do this until we are setting metadata
|
|
28 """
|
|
29 refname = dataset.metadata.reference_name
|
|
30 flist = os.listdir(dataset.extra_files_path)
|
|
31 rval = ['<html><head><title>RSEM Reference %s</title></head><p/>Comprises the following files:<p/><ul>' % (refname)]
|
|
32 for i,fname in enumerate(flist):
|
|
33 sfname = os.path.split(fname)[-1]
|
|
34 rval.append( '<li><a href="%s">%s</a>' % ( sfname, sfname ) )
|
|
35 rval.append( '</ul></html>' )
|
|
36 f = file(dataset.file_name,'w')
|
|
37 f.write("\n".join( rval ))
|
|
38 f.write('\n')
|
|
39 f.close()
|
|
40
|
|
41 def set_peek( self, dataset, is_multi_byte=False ):
|
|
42 if not dataset.dataset.purged:
|
|
43 dataset.peek = "RSEM Reference (%s)" % ( dataset.metadata.reference_name )
|
|
44 dataset.blurb = "RSEM Reference (%s)" % ( dataset.metadata.reference_name )
|
|
45 else:
|
|
46 dataset.peek = 'RSEM Reference (%s) does not exist' % ( dataset.metadata.reference_name )
|
|
47 dataset.blurb = 'RSEM Reference (%s) purged from disk' % ( dataset.metadata.reference_name )
|
|
48
|
|
49 def display_peek( self, dataset ):
|
|
50 try:
|
|
51 return dataset.peek
|
|
52 except:
|
|
53 return "RSEM Reference"
|
|
54
|
|
55 def set_meta( self, dataset, overwrite = True, **kwd ):
|
|
56 """
|
|
57 Expecting files:
|
|
58 extra_files_path/<reference_name>.grp
|
|
59 extra_files_path/<reference_name>.ti
|
|
60 extra_files_path/<reference_name>.seq
|
|
61 extra_files_path/<reference_name>.transcripts.fa
|
|
62 Optionally includes files:
|
|
63 extra_files_path/<reference_name>.chrlist
|
|
64 extra_files_path/<reference_name>.idx.fa
|
|
65 extra_files_path/<reference_name>.4.ebwt
|
|
66 extra_files_path/<reference_name>.3.ebwt
|
|
67 extra_files_path/<reference_name>.2.ebwt
|
|
68 extra_files_path/<reference_name>.1.ebwt
|
|
69 extra_files_path/<reference_name>.rev.2.ebwt
|
|
70 extra_files_path/<reference_name>.rev.1.ebwt
|
|
71 """
|
|
72 log.info( "RSEM reference set_meta %s %s" % (dataset,dataset.extra_files_path))
|
|
73 pat = '^(.*)\.grp$'
|
|
74 efp = dataset.extra_files_path
|
|
75 flist = os.listdir(efp)
|
|
76 for i,fname in enumerate(flist):
|
|
77 m = re.match(pat,fname)
|
|
78 if m:
|
|
79 dataset.metadata.reference_name = m.groups()[0]
|
|
80 break
|
|
81 self.regenerate_primary_file(dataset)
|
|
82
|
|
83
|