diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample
index b884f587f02f..30099bf5ceb8 100644
--- a/config/datatypes_conf.xml.sample
+++ b/config/datatypes_conf.xml.sample
@@ -488,6 +488,9 @@
+
+
+
@@ -679,6 +682,7 @@
+
diff --git a/lib/galaxy/datatypes/annotation.py b/lib/galaxy/datatypes/annotation.py
new file mode 100644
index 000000000000..73e96ff07e04
--- /dev/null
+++ b/lib/galaxy/datatypes/annotation.py
@@ -0,0 +1,85 @@
+import logging
+import tarfile
+
+from galaxy.datatypes.binary import Binary, CompressedArchive
+from galaxy.datatypes.data import get_file_peek, Text
+from galaxy.util import nice_size
+
+log = logging.getLogger(__name__)
+
+
+class SnapHmm(Text):
+ file_ext = "snaphmm"
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ dataset.peek = get_file_peek(dataset.file_name, is_multi_byte=is_multi_byte)
+ dataset.blurb = "SNAP HMM model"
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disc'
+
+ def display_peek(self, dataset):
+ try:
+ return dataset.peek
+ except:
+ return "SNAP HMM model (%s)" % (nice_size(dataset.get_size()))
+
+ def sniff(self, filename):
+ """
+ SNAP model files start with zoeHMM
+ """
+ with open(filename, 'r') as handle:
+ return handle.read(6) == 'zoeHMM'
+ return False
+
+
+class Augustus(CompressedArchive):
+ """
+ Class describing an Augustus prediction model
+ """
+ file_ext = "augustus"
+ compressed = True
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ dataset.peek = "Augustus model"
+ 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:
+ return "Augustus model (%s)" % (nice_size(dataset.get_size()))
+
+ def sniff(self, filename):
+ """
+ Augustus archives always contain the same files
+ """
+ try:
+ if filename and tarfile.is_tarfile(filename):
+ with tarfile.open(filename, 'r') as temptar:
+ for f in temptar:
+ if not f.isfile():
+ continue
+ if f.name.endswith('_exon_probs.pbl') \
+ or f.name.endswith('_igenic_probs.pbl') \
+ or f.name.endswith('_intron_probs.pbl') \
+ or f.name.endswith('_metapars.cfg') \
+ or f.name.endswith('_metapars.utr.cfg') \
+ or f.name.endswith('_parameters.cfg') \
+ or f.name.endswith('_parameters.cgp.cfg') \
+ or f.name.endswith('_utr_probs.pbl') \
+ or f.name.endswith('_weightmatrix.txt'):
+ return True
+ else:
+ return False
+ except Exception as e:
+ log.warning('%s, sniff Exception: %s', self, e)
+ return False
+
+
+Binary.register_sniffable_binary_format("augustus", "augustus", Augustus)