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