| 
54
 | 
     1 """
 | 
| 
 | 
     2 HOMER special datatypes
 | 
| 
 | 
     3 """
 | 
| 
 | 
     4 
 | 
| 
 | 
     5 from galaxy.datatypes.data import get_file_peek
 | 
| 
 | 
     6 from galaxy.datatypes.data import Text, Data
 | 
| 
 | 
     7 from galaxy.datatypes.metadata import MetadataElement
 | 
| 
 | 
     8 from galaxy.datatypes.images import Html
 | 
| 
 | 
     9 
 | 
| 
 | 
    10 
 | 
| 
 | 
    11 class TagDirectory(object):
 | 
| 
 | 
    12     """Base class for HOMER's Tag Directory datatype."""
 | 
| 
 | 
    13 
 | 
| 
 | 
    14     file_ext = 'homer_tagdir'
 | 
| 
 | 
    15     composite_type = 'auto_primary_file'
 | 
| 
 | 
    16     allow_datatype_change = False
 | 
| 
 | 
    17 
 | 
| 
 | 
    18     def __init__(self, **kwd):
 | 
| 
 | 
    19         Text.__init__( self, **kwd )
 | 
| 
 | 
    20         #self.add_composite_file('tagInfo.txt', description = 'basic configuration information', mimetype = 'text/html') # Contains basic configuration information
 | 
| 
 | 
    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.
 | 
| 
 | 
    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.
 | 
| 
 | 
    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.
 | 
| 
 | 
    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.
 | 
| 
 | 
    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.
 | 
| 
 | 
    26         self.add_composite_file('tagGCcontent.txt', description = 'Distribution of fragment GC%-content', mimetype = 'text/html', optional=True) # Distribution of fragment GC%-content.
 | 
| 
 | 
    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.
 | 
| 
 | 
    28 
 | 
| 
 | 
    29     def generate_primary_file( self, dataset = None ):
 | 
| 
 | 
    30         rval = ['<html><head><title>HOMER database files</title></head><ul>']
 | 
| 
 | 
    31         for composite_name, composite_file in self.get_composite_files( dataset = dataset ).iteritems():
 | 
| 
 | 
    32             opt_text = ''
 | 
| 
 | 
    33             if composite_file.optional:
 | 
| 
 | 
    34                 opt_text = ' (optional)'
 | 
| 
 | 
    35             rval.append( '<li><a href="%s">%s</a>%s' % ( composite_name, composite_name, opt_text ) )
 | 
| 
 | 
    36         rval.append( '</ul></html>' )
 | 
| 
 | 
    37         return "\n".join( rval )
 | 
| 
 | 
    38 
 | 
| 
 | 
    39     def display_data(self, trans, data, preview=False, filename=None,
 | 
| 
 | 
    40                      to_ext=None, size=None, offset=None, **kwd):
 | 
| 
 | 
    41         """Apparently an old display method, but still gets called.
 | 
| 
 | 
    42 
 | 
| 
 | 
    43         This allows us to format the data shown in the central pane via the "eye" icon.
 | 
| 
 | 
    44         """
 | 
| 
 | 
    45         return "This is a HOMER database."
 | 
| 
 | 
    46 
 | 
| 
 | 
    47     def set_peek( self, dataset, is_multi_byte=False ):
 | 
| 
 | 
    48         """Set the peek and blurb text."""
 | 
| 
 | 
    49         if not dataset.dataset.purged:
 | 
| 
 | 
    50             dataset.peek  = "HOMER database (multiple files)"
 | 
| 
 | 
    51             dataset.blurb = "HOMER database (multiple files)"
 | 
| 
 | 
    52         else:
 | 
| 
 | 
    53             dataset.peek = 'file does not exist'
 | 
| 
 | 
    54             dataset.blurb = 'file purged from disk'
 | 
| 
 | 
    55 
 | 
| 
 | 
    56     def display_peek( self, dataset ):
 | 
| 
 | 
    57         """Create HTML content, used for displaying peek."""
 | 
| 
 | 
    58         try:
 | 
| 
 | 
    59             return dataset.peek
 | 
| 
 | 
    60         except:
 | 
| 
 | 
    61             return "HOMER database (multiple files)"
 | 
| 
 | 
    62 
 | 
| 
 | 
    63     def get_mime(self):
 | 
| 
 | 
    64         """Returns the mime type of the datatype (pretend it is text for peek)"""
 | 
| 
 | 
    65         return 'text/plain'
 | 
| 
 | 
    66 
 | 
| 
 | 
    67     def merge(split_files, output_file):
 | 
| 
 | 
    68         """Merge HOMER databases (not implemented)."""
 | 
| 
 | 
    69         raise NotImplementedError("Merging HOMER databases is not supported")
 | 
| 
 | 
    70 
 | 
| 
 | 
    71     def split( cls, input_datasets, subdir_generator_function, split_params):
 | 
| 
 | 
    72         """Split a HOMER database (not implemented)."""
 | 
| 
 | 
    73         if split_params is None:
 | 
| 
 | 
    74             return None
 | 
| 
 | 
    75         raise NotImplementedError("Can't split HOMER databases")
 | 
| 
 | 
    76 
 |