diff --git a/lib/galaxy/config/sample/datatypes_conf.xml.sample b/lib/galaxy/config/sample/datatypes_conf.xml.sample index f3b9d767c86..2efd24f4af4 100644 --- a/lib/galaxy/config/sample/datatypes_conf.xml.sample +++ b/lib/galaxy/config/sample/datatypes_conf.xml.sample @@ -296,6 +296,7 @@ + @@ -305,6 +306,7 @@ + diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index fefb82f13a4..1c1586f0d07 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -4002,6 +4002,34 @@ class WiffTar(BafTar): return "Sciex WIFF/SCAN archive" +class Wiff2Tar(BafTar): + """ + A tar'd up .wiff2/.scan pair containing Sciex WIFF format data + + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('some.wiff2.tar') + >>> Wiff2Tar().sniff(fname) + True + >>> fname = get_test_fname('brukerbaf.d.tar') + >>> Wiff2Tar().sniff(fname) + False + >>> fname = get_test_fname('test.fast5.tar') + >>> Wiff2Tar().sniff(fname) + False + """ + + file_ext = "wiff2.tar" + + def sniff(self, filename: str) -> bool: + if tarfile.is_tarfile(filename): + with tarfile.open(filename) as rawtar: + return ".wiff2" in [os.path.splitext(os.path.basename(f).lower())[1] for f in rawtar.getnames()] + return False + + def get_type(self) -> str: + return "Sciex WIFF2/SCAN archive" + + @build_sniff_from_prefix class Pretext(Binary): """ diff --git a/lib/galaxy/datatypes/proteomics.py b/lib/galaxy/datatypes/proteomics.py index 5135ab419dc..7b5c39cf060 100644 --- a/lib/galaxy/datatypes/proteomics.py +++ b/lib/galaxy/datatypes/proteomics.py @@ -76,6 +76,48 @@ class Wiff(Binary): return "\n".join(rval) +class Wiff2(Binary): + """Class for wiff2 files.""" + + edam_data = "data_2536" + edam_format = "format_3710" + file_ext = "wiff2" + composite_type = "auto_primary_file" + + def __init__(self, **kwd): + super().__init__(**kwd) + + self.add_composite_file( + "wiff2", + description="AB SCIEX files in .wiff2 format. This can contain all needed information or only metadata.", + is_binary=True, + ) + + self.add_composite_file( + "wiff_scan", + description="AB SCIEX spectra file (wiff.scan), if the corresponding .wiff2 file only contains metadata.", + optional="True", + is_binary=True, + ) + + def generate_primary_file(self, dataset: GeneratePrimaryFileDataset) -> str: + rval = ["Wiff2 Composite Dataset

"] + rval.append("

This composite dataset is composed of the following files:

    ") + for composite_name, composite_file in self.get_composite_files(dataset=dataset).items(): + fn = composite_name + opt_text = "" + if composite_file.optional: + opt_text = " (optional)" + if composite_file.get("description"): + rval.append( + f"
  • {fn} ({composite_file.get('description')}){opt_text}
  • " + ) + else: + rval.append(f'
  • {fn}{opt_text}
  • ') + rval.append("
") + return "\n".join(rval) + + @build_sniff_from_prefix class MzTab(Text): """ diff --git a/lib/galaxy/datatypes/test/some.wiff2.tar b/lib/galaxy/datatypes/test/some.wiff2.tar new file mode 100644 index 00000000000..afc936207a9 Binary files /dev/null and b/lib/galaxy/datatypes/test/some.wiff2.tar differ