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