diff --git a/config/datatypes_conf.xml.sample b/config/datatypes_conf.xml.sample
index 70ab3228653..2f7f38d368c 100644
--- a/config/datatypes_conf.xml.sample
+++ b/config/datatypes_conf.xml.sample
@@ -219,6 +219,12 @@
+
+
+
+
+
+
@@ -745,6 +751,12 @@
+
+
+
+
+
+
diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py
index b03e2618c0d..b04f7bb03d3 100644
--- a/lib/galaxy/datatypes/binary.py
+++ b/lib/galaxy/datatypes/binary.py
@@ -2239,6 +2239,118 @@ class ICM(Binary):
return False
+class BafTar(CompressedArchive):
+ """
+ Base class for common behavior of tar files of directory-based raw file formats
+ >>> from galaxy.datatypes.sniff import get_test_fname
+ >>> fname = get_test_fname('brukerbaf.d.tar')
+ >>> BafTar().sniff(fname)
+ True
+ >>> fname = get_test_fname('test.fast5.tar')
+ >>> BafTar().sniff(fname)
+ False
+ """
+ edam_data = "data_2536" # mass spectrometry data
+ edam_format = "format_3712" # TODO: add more raw formats to EDAM?
+ file_ext = "brukerbaf.d.tar"
+
+ def get_signature_file(self):
+ return "analysis.baf"
+
+ def sniff(self, filename):
+ if tarfile.is_tarfile(filename):
+ with tarfile.open(filename) as rawtar:
+ return self.get_signature_file() in [os.path.basename(f).lower() for f in rawtar.getnames()]
+ return False
+
+ def get_type(self):
+ return "Bruker BAF directory archive"
+
+ def set_peek(self, dataset, is_multi_byte=False):
+ if not dataset.dataset.purged:
+ dataset.peek = self.get_type()
+ 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 "%s (%s)" % (self.get_type(), nice_size(dataset.get_size()))
+
+
+class YepTar(BafTar):
+ """ A tar'd up .d directory containing Agilent/Bruker YEP format data """
+ file_ext = "agilentbrukeryep.d.tar"
+
+ def get_signature_file(self):
+ return "analysis.yep"
+
+ def get_type(self):
+ return "Agilent/Bruker YEP directory archive"
+
+
+class TdfTar(BafTar):
+ """ A tar'd up .d directory containing Bruker TDF format data """
+ file_ext = "brukertdf.d.tar"
+
+ def get_signature_file(self):
+ return "analysis.tdf"
+
+ def get_type(self):
+ return "Bruker TDF directory archive"
+
+
+class MassHunterTar(BafTar):
+ """ A tar'd up .d directory containing Agilent MassHunter format data """
+ file_ext = "agilentmasshunter.d.tar"
+
+ def get_signature_file(self):
+ return "msscan.bin"
+
+ def get_type(self):
+ return "Agilent MassHunter directory archive"
+
+
+class MassLynxTar(BafTar):
+ """ A tar'd up .d directory containing Waters MassLynx format data """
+ file_ext = "watersmasslynx.raw.tar"
+
+ def get_signature_file(self):
+ return "_func001.dat"
+
+ def get_type(self):
+ return "Waters MassLynx RAW directory archive"
+
+
+class WiffTar(BafTar):
+ """
+ A tar'd up .wiff/.scan pair containing Sciex WIFF format data
+ >>> from galaxy.datatypes.sniff import get_test_fname
+ >>> fname = get_test_fname('some.wiff.tar')
+ >>> WiffTar().sniff(fname)
+ True
+ >>> fname = get_test_fname('brukerbaf.d.tar')
+ >>> WiffTar().sniff(fname)
+ False
+ >>> fname = get_test_fname('test.fast5.tar')
+ >>> WiffTar().sniff(fname)
+ False
+ """
+ file_ext = "wiff.tar"
+
+ def sniff(self, filename):
+ if tarfile.is_tarfile(filename):
+ with tarfile.open(filename) as rawtar:
+ return ".wiff" in [os.path.splitext(os.path.basename(f).lower())[1] for f in rawtar.getnames()]
+ return False
+
+ def get_type(self):
+ return "Sciex WIFF/SCAN archive"
+
+
if __name__ == '__main__':
import doctest
doctest.testmod(sys.modules[__name__])
diff --git a/lib/galaxy/datatypes/test/brukerbaf.d.tar b/lib/galaxy/datatypes/test/brukerbaf.d.tar
new file mode 100644
index 00000000000..9e27e71aeff
Binary files /dev/null and b/lib/galaxy/datatypes/test/brukerbaf.d.tar differ
diff --git a/lib/galaxy/datatypes/test/some.wiff.tar b/lib/galaxy/datatypes/test/some.wiff.tar
new file mode 100644
index 00000000000..1a17ec84a28
Binary files /dev/null and b/lib/galaxy/datatypes/test/some.wiff.tar differ