annotate homer.py @ 57:5b919ef94655

Uploaded
author bgruening
date Mon, 12 Aug 2013 14:39:25 -0400
parents 07a5042bbe90
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
54
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
1 """
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
2 HOMER special datatypes
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
3 """
56
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
4 import os
54
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
5 from galaxy.datatypes.data import get_file_peek
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
6 from galaxy.datatypes.data import Text, Data
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
7 from galaxy.datatypes.metadata import MetadataElement
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
8 from galaxy.datatypes.images import Html
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
9
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
10
56
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
11 class TagDirectory( Html ):
54
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
12 """Base class for HOMER's Tag Directory datatype."""
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
13
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
14 file_ext = 'homer_tagdir'
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
15 composite_type = 'auto_primary_file'
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
16 allow_datatype_change = False
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
17
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
18 def __init__(self, **kwd):
56
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
19 Html.__init__( self, **kwd )
54
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
20 #self.add_composite_file('tagInfo.txt', description = 'basic configuration information', mimetype = 'text/html') # Contains basic configuration information
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
21 self.add_composite_file('tagLengthDistribution.txt', description = 'histogram of read lengths used for alignment', mimetype = 'text/html') # File contains a histogram of read lengths used for alignment.
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
22 self.add_composite_file('tagCountDistribution.txt', description = 'histogram of clonal read depth, showing the number of reads per unique position', mimetype = 'text/html') # File contains a histogram of clonal read depth, showing the number of reads per unique position.
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
23 self.add_composite_file('tagAutocorrelation.txt', description = 'distribution of distances between adjacent reads in the genome', mimetype = 'text/html') # The autocorrelation routine creates a distribution of distances between adjacent reads in the genome.
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
24 self.add_composite_file('tagFreq.txt', description = "nucleotide and dinucleotide frequencies as a function of distance from the 5' end of all reads", mimetype = 'text/html', optional=True) # Calculates the nucleotide and dinucleotide frequencies as a function of distance from the 5' end of all reads.
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
25 self.add_composite_file('tagFreqUniq.txt', description = "nucleotide and dinucleotide frequencies as a function of distance from the 5' end of all reads (counted only once)", mimetype = 'text/html', optional=True) # Same as tagFreq.txt, however individual genomic positions are only counted once.
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
26 self.add_composite_file('tagGCcontent.txt', description = 'Distribution of fragment GC%-content', mimetype = 'text/html', optional=True) # Distribution of fragment GC%-content.
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
27 self.add_composite_file('genomeGCcontent.txt', description = 'Distribution of fragment GC%-content at each location in the genome', mimetype = 'text/html', optional=True) # Distribution of fragment GC%-content at each location in the genome.
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
28
55
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
29
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
30 def regenerate_primary_file(self,dataset):
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
31 """
56
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
32 regenerate the index file after metadata generation
55
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
33 """
56
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
34 rval = ['<html><head><title>HOMER database files</title></head>']
55
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
35 rval.append('<body>')
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
36 rval.append('<p/>CuffDiff Outputs:<p/><ul>')
56
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
37 for fname in os.listdir(dataset.extra_files_path):
55
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
38 sfname = os.path.split(fname)[-1]
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
39 rval.append( '<li><a href="%s" type="text/html">%s</a>' % ( sfname, sfname ) )
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
40 rval.append( '</ul></body></html>' )
56
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
41 f = file( dataset.file_name, 'w' )
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
42 f.write( '%s\n' % '\n'.join( rval ) )
55
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
43 f.close()
56
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
44 if not dataset.info:
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
45 dataset.info = 'HOMER datatype object'
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
46 if not dataset.blurb:
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
47 dataset.blurb = 'Composite file - HOMER'
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
48 return True
55
e9cd105a8856 Uploaded
bgruening
parents: 54
diff changeset
49
54
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
50 def generate_primary_file( self, dataset = None ):
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
51 rval = ['<html><head><title>HOMER database files</title></head><ul>']
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
52 for composite_name, composite_file in self.get_composite_files( dataset = dataset ).iteritems():
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
53 opt_text = ''
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
54 if composite_file.optional:
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
55 opt_text = ' (optional)'
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
56 rval.append( '<li><a href="%s">%s</a>%s' % ( composite_name, composite_name, opt_text ) )
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
57 rval.append( '</ul></html>' )
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
58 return "\n".join( rval )
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
59
56
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
60 def set_meta( self, dataset, **kwd ):
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
61 Html.set_meta( self, dataset, **kwd )
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
62 self.regenerate_primary_file(dataset)
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
63
07a5042bbe90 Uploaded
bgruening
parents: 55
diff changeset
64
54
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
65 def display_data(self, trans, data, preview=False, filename=None,
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
66 to_ext=None, size=None, offset=None, **kwd):
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
67 """Apparently an old display method, but still gets called.
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
68
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
69 This allows us to format the data shown in the central pane via the "eye" icon.
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
70 """
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
71 return "This is a HOMER database."
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
72
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
73 def set_peek( self, dataset, is_multi_byte=False ):
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
74 """Set the peek and blurb text."""
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
75 if not dataset.dataset.purged:
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
76 dataset.peek = "HOMER database (multiple files)"
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
77 dataset.blurb = "HOMER database (multiple files)"
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
78 else:
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
79 dataset.peek = 'file does not exist'
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
80 dataset.blurb = 'file purged from disk'
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
81
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
82 def display_peek( self, dataset ):
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
83 """Create HTML content, used for displaying peek."""
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
84 try:
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
85 return dataset.peek
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
86 except:
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
87 return "HOMER database (multiple files)"
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
88
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
89 def get_mime(self):
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
90 """Returns the mime type of the datatype (pretend it is text for peek)"""
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
91 return 'text/plain'
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
92
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
93 def merge(split_files, output_file):
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
94 """Merge HOMER databases (not implemented)."""
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
95 raise NotImplementedError("Merging HOMER databases is not supported")
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
96
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
97 def split( cls, input_datasets, subdir_generator_function, split_params):
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
98 """Split a HOMER database (not implemented)."""
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
99 if split_params is None:
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
100 return None
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
101 raise NotImplementedError("Can't split HOMER databases")
675d25a0b9d4 Uploaded
bgruening
parents:
diff changeset
102