diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample index 58e3586eff7d..ff0991c0ba56 100644 --- a/config/datatypes_conf.xml.sample +++ b/config/datatypes_conf.xml.sample @@ -573,6 +573,7 @@ + @@ -723,6 +724,7 @@ + diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index 7cec2d98c720..7bddf64cfa5b 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -736,6 +736,49 @@ def display_peek(self, dataset): return "Binary HDF5 file (%s)" % (nice_size(dataset.get_size())) +class Trr(Binary): + """ + Class describing an trr file from the GROMACS suite + + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('em.trr') + >>> Trr().sniff(fname) + True + >>> fname = get_test_fname('interval.interval') + >>> Trr().sniff(fname) + False + """ + file_ext = "trr" + + def __init__(self, **kwd): + Binary.__init__(self, **kwd) + self._magic_number = 1993 + + def sniff(self, filename): + # The first 4 bytes of any trr file containing 1993 + try: + header = open(filename, 'rb').read(struct.calcsize('>1i')) + if struct.unpack('>1i', header)[0] == self._magic_number: + return True + return False + except Exception: + return False + + def set_peek(self, dataset, is_multi_byte=False): + if not dataset.dataset.purged: + dataset.peek = "Binary GROMACS trr file" + dataset.blurb = nice_size(dataset.get_size()) + else: + dataset.peek = 'file does not exist' + dataset.blurb = 'file purged from disk' + + def display_peek(self, dataset): + try: + return dataset.peek + except Exception: + return "Binary GROMACS trr file (%s)" % (nice_size(dataset.get_size())) + + class Biom2(H5): """ Class describing a biom2 file (http://biom-format.org/documentation/biom_format.html) diff --git a/lib/galaxy/datatypes/test/em.trr b/lib/galaxy/datatypes/test/em.trr new file mode 100644 index 000000000000..68933ddabff0 Binary files /dev/null and b/lib/galaxy/datatypes/test/em.trr differ