diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample index b7f3b567a86..73003d5ea65 100644 --- a/config/datatypes_conf.xml.sample +++ b/config/datatypes_conf.xml.sample @@ -16,6 +16,7 @@ + @@ -442,6 +443,7 @@ + diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index 5bbad2e4dd0..1a54e78e6af 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -456,6 +456,40 @@ class Bam( Binary ): Binary.register_sniffable_binary_format("bam", "bam", Bam) +class CRAM( Binary ): + file_ext = "cram" + edam_format = "format_3462" + + MetadataElement( name="cram_version", default=None, desc="CRAM Version", param=MetadataParameter, readonly=True, visible=False, optional=False, no_value=None ) + + def set_meta( self, dataset, overwrite=True, **kwd ): + try: + with open(dataset.file_name, "r") as fh: + header = fh.read(6) + dataset.metadata.cram_version = str(ord(header[4]))+"."+str(ord(header[5])) + except Exception as exc: + log.warn( '%s, set_meta Exception: %s', self, exc ) + + def set_peek( self, dataset, is_multi_byte=False ): + if not dataset.dataset.purged: + dataset.peek = 'CRAM binary alignment file' + dataset.blurb = 'binary data' + else: + dataset.peek = 'file does not exist' + dataset.blurb = 'file purged from disk' + + def sniff( self, filename ): + try: + header = open( filename ).read(4) + if header[0:4] == "CRAM": + return True + return False + except: + return False + +Binary.register_sniffable_binary_format('cram', 'cram', CRAM) + + class Bcf( Binary): """Class describing a BCF file""" edam_format = "format_3020"