From 6b0d80507c9726c2a59afe5dfa87d6c93cc49145 Mon Sep 17 00:00:00 2001 From: Patrick Austin Date: Tue, 6 Jun 2023 09:47:32 +0000 Subject: [PATCH 1/9] Add datatypes for Larch XAS tools --- .../config/sample/datatypes_conf.xml.sample | 9 + lib/galaxy/datatypes/larch.py | 204 ++++++++++++++++++ lib/galaxy/datatypes/test/bad_atoms.inp | 44 ++++ lib/galaxy/datatypes/test/bad_potentials.inp | 24 +++ lib/galaxy/datatypes/test/no_pymatgen.inp | 51 +++++ lib/galaxy/datatypes/test/test.inp | 52 +++++ lib/galaxy/datatypes/test/test.prj | Bin 0 -> 5372 bytes 7 files changed, 384 insertions(+) create mode 100644 lib/galaxy/datatypes/larch.py create mode 100644 lib/galaxy/datatypes/test/bad_atoms.inp create mode 100644 lib/galaxy/datatypes/test/bad_potentials.inp create mode 100644 lib/galaxy/datatypes/test/no_pymatgen.inp create mode 100644 lib/galaxy/datatypes/test/test.inp create mode 100644 lib/galaxy/datatypes/test/test.prj diff --git a/lib/galaxy/config/sample/datatypes_conf.xml.sample b/lib/galaxy/config/sample/datatypes_conf.xml.sample index 49aab75ddbb..226251828a6 100644 --- a/lib/galaxy/config/sample/datatypes_conf.xml.sample +++ b/lib/galaxy/config/sample/datatypes_conf.xml.sample @@ -946,6 +946,13 @@ + + + + + + + @@ -1204,6 +1211,8 @@ + + diff --git a/lib/galaxy/datatypes/larch.py b/lib/galaxy/datatypes/larch.py new file mode 100644 index 00000000000..80f7fb358c0 --- /dev/null +++ b/lib/galaxy/datatypes/larch.py @@ -0,0 +1,204 @@ +from typing import TYPE_CHECKING + +from galaxy.datatypes.data import ( + get_file_peek, + Text, +) +from galaxy.datatypes.metadata import MetadataElement +from galaxy.datatypes.sniff import ( + build_sniff_from_prefix, + FilePrefix, + get_headers, +) + +if TYPE_CHECKING: + from galaxy.model import DatasetInstance + + +@build_sniff_from_prefix +class AthenaProject(Text): + """ + Athena project format + """ + + file_ext = "prj" + compressed = True + compressed_format = "gzip" + + MetadataElement( + name="atsym", + desc="Atom symbol", + readonly=True, + visible=True, + ) + MetadataElement( + name="bkg_e0", + desc="Edge energy (eV)", + readonly=True, + visible=True, + ) + MetadataElement( + name="edge", + desc="Edge", + readonly=True, + visible=True, + ) + MetadataElement( + name="npts", + desc="Number of points", + readonly=True, + visible=True, + ) + MetadataElement( + name="xmax", + desc="Maximum energy (eV)", + readonly=True, + visible=True, + ) + MetadataElement( + name="xmin", + desc="Minimum energy (eV)", + readonly=True, + visible=True, + ) + + def sniff_prefix(self, file_prefix: FilePrefix) -> bool: + """ + Try to guess if the file is an Athena project file. + + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('test.prj') + >>> AthenaProject().sniff(fname) + True + """ + + return file_prefix.startswith("# Athena project file") + + def set_meta(self, dataset: "DatasetInstance", overwrite: bool = True, **kwd) -> None: + """ + Extract metadata from @args + """ + headers = get_headers(dataset.file_name, sep=" = ", count=3, comment_designator="#") + for header in headers: + if header[0] == "@args": + args = header[1][1:-2].split(",") + break + + index = args.index("'atsym'") + dataset.metadata.atsym = args[index + 1][1:-1] + index = args.index("'bkg_e0'") + dataset.metadata.bkg_e0 = args[index + 1][1:-1] + index = args.index("'edge'") + dataset.metadata.edge = args[index + 1][1:-1] + index = args.index("'npts'") + dataset.metadata.npts = args[index + 1][1:-1] + index = args.index("'xmax'") + dataset.metadata.xmax = args[index + 1][1:-1] + index = args.index("'xmin'") + dataset.metadata.xmin = args[index + 1][1:-1] + + def set_peek(self, dataset: "DatasetInstance", **kwd) -> None: + if not dataset.dataset.purged: + dataset.peek = get_file_peek(dataset.file_name) + dataset.info = ( + f"atsym: {dataset.metadata.atsym}\n" + f"bkg_e0: {dataset.metadata.bkg_e0}\n" + f"edge: {dataset.metadata.edge}\n" + f"npts: {dataset.metadata.npts}\n" + f"xmax: {dataset.metadata.xmax}\n" + f"xmin: {dataset.metadata.xmin}" + ) + dataset.blurb = f"Athena project file of {dataset.metadata.atsym} {dataset.metadata.edge} edge" + + else: + dataset.peek = "file does not exist" + dataset.blurb = "file purged from disk" + + +@build_sniff_from_prefix +class FEFFInput(Text): + """ + FEFF input format + """ + + file_ext = "inp" + + MetadataElement( + name="title_block", + desc="Title block", + readonly=True, + visible=True, + ) + + def sniff_prefix(self, file_prefix: FilePrefix) -> bool: + """ + Try to guess if the file is an FEFF input file. + + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('test.inp') + >>> FEFFInput().sniff(fname) + True + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('no_pymatgen.inp') + >>> FEFFInput().sniff(fname) + True + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('bad_atoms.inp') + >>> FEFFInput().sniff(fname) + False + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('bad_potential.inp') + >>> FEFFInput().sniff(fname) + False + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('Si.cif') + >>> FEFFInput().sniff(fname) + False + """ + # pymatgen marks generated FEFF inputs, but user might also upload from another source + if file_prefix.startswith("* This FEFF.inp file generated by pymatgen"): + return True + + generator = file_prefix.line_iterator() + line = next(generator) + while line is not None: + if line == "POTENTIALS": + line = next(generator).strip() + if line[0] == "*": + words = line[1:].split() + if words[0] in ["potential-index", "ipot"] and words[1] == "Z": + return True + return False + + elif line == "ATOMS": + line = next(generator).strip() + if line[0] == "*": + words = line[1:].split() + if words[:4] == ["x", "y", "z", "ipot"]: + return True + return False + + line = next(generator) + + return False + + def set_meta(self, dataset: "DatasetInstance", overwrite: bool = True, **kwd) -> None: + """ + Extract metadata from TITLE + """ + title_block = "" + headers = get_headers(dataset.file_name, sep=None, comment_designator="*") + for header in headers: + if header and header[0] == "TITLE": + title_block += " ".join(header[1:]) + "\n" + + dataset.metadata.title_block = title_block + + def set_peek(self, dataset: "DatasetInstance", **kwd) -> None: + if not dataset.dataset.purged: + dataset.peek = get_file_peek(dataset.file_name) + dataset.info = dataset.metadata.title_block + + else: + dataset.peek = "file does not exist" + dataset.blurb = "file purged from disk" diff --git a/lib/galaxy/datatypes/test/bad_atoms.inp b/lib/galaxy/datatypes/test/bad_atoms.inp new file mode 100644 index 00000000000..b801beb1bd1 --- /dev/null +++ b/lib/galaxy/datatypes/test/bad_atoms.inp @@ -0,0 +1,44 @@ +TITLE comment: None given +TITLE Source: +TITLE Structure Summary: Fe2 S4 +TITLE Reduced formula: FeS2 +TITLE space group: (Pnnm), space number: (58) +TITLE abc: 3.385200 4.447400 5.428700 +TITLE angles: 90.000000 90.000000 90.000000 +TITLE sites: 6 +* 1 Fe 0.000000 0.000000 0.000000 +* 2 Fe 0.500000 0.500000 0.500000 +* 3 S 0.000000 0.199900 0.378040 +* 4 S 0.000000 0.800100 0.621960 +* 5 S 0.500000 0.699900 0.121960 +* 6 S 0.500000 0.300100 0.878040 + +ATOMS + * a b c ipot Atom Distance Number +**********- ********- ******- ****** ****** ********** ******** + 0 0 0 0 Fe 0 0 + -0.889035 -2.05227 -0 2 S 2.23656 4 + 0.889035 2.05227 0 2 S 2.23656 22 + -1.33466 0.662084 -1.6926 2 S 2.2549 6 + -1.33466 0.662084 1.6926 2 S 2.2549 8 + 1.33466 -0.662084 -1.6926 2 S 2.2549 11 + 1.33466 -0.662084 1.6926 2 S 2.2549 13 + 0 0 -3.3852 1 Fe 3.3852 18 + 0 0 3.3852 1 Fe 3.3852 19 + -0.889035 3.37643 0 2 S 3.49152 9 + 0.889035 -3.37643 -0 2 S 3.49152 15 + -3.11273 -0.662084 -1.6926 2 S 3.60449 1 + -3.11273 -0.662084 1.6926 2 S 3.60449 3 + 3.11273 0.662084 -1.6926 2 S 3.60449 16 + 3.11273 0.662084 1.6926 2 S 3.60449 20 + -2.2237 -2.71435 -1.6926 1 Fe 3.89582 2 + -2.2237 -2.71435 1.6926 1 Fe 3.89582 5 + -2.2237 2.71435 -1.6926 1 Fe 3.89582 7 + -2.2237 2.71435 1.6926 1 Fe 3.89582 10 + 2.2237 -2.71435 -1.6926 1 Fe 3.89582 12 + 2.2237 -2.71435 1.6926 1 Fe 3.89582 14 + 2.2237 2.71435 -1.6926 1 Fe 3.89582 17 + 2.2237 2.71435 1.6926 1 Fe 3.89582 21 +END + + diff --git a/lib/galaxy/datatypes/test/bad_potentials.inp b/lib/galaxy/datatypes/test/bad_potentials.inp new file mode 100644 index 00000000000..e0c3a4f13f8 --- /dev/null +++ b/lib/galaxy/datatypes/test/bad_potentials.inp @@ -0,0 +1,24 @@ +TITLE comment: None given +TITLE Source: +TITLE Structure Summary: Fe2 S4 +TITLE Reduced formula: FeS2 +TITLE space group: (Pnnm), space number: (58) +TITLE abc: 3.385200 4.447400 5.428700 +TITLE angles: 90.000000 90.000000 90.000000 +TITLE sites: 6 +* 1 Fe 0.000000 0.000000 0.000000 +* 2 Fe 0.500000 0.500000 0.500000 +* 3 S 0.000000 0.199900 0.378040 +* 4 S 0.000000 0.800100 0.621960 +* 5 S 0.500000 0.699900 0.121960 +* 6 S 0.500000 0.300100 0.878040 + +POTENTIALS + * pot Z tag lmax1 lmax2 xnatph(stoichometry) spinph +******- **- ****- ******- ******- ********************** ******** + 0 26 Fe -1 -1 0.0001 0 + 1 26 Fe -1 -1 2 0 + 2 16 S -1 -1 4 0 +END + + diff --git a/lib/galaxy/datatypes/test/no_pymatgen.inp b/lib/galaxy/datatypes/test/no_pymatgen.inp new file mode 100644 index 00000000000..d75015dee1c --- /dev/null +++ b/lib/galaxy/datatypes/test/no_pymatgen.inp @@ -0,0 +1,51 @@ +TITLE comment: None given +TITLE Source: +TITLE Structure Summary: Fe2 S4 +TITLE Reduced formula: FeS2 +TITLE space group: (Pnnm), space number: (58) +TITLE abc: 3.385200 4.447400 5.428700 +TITLE angles: 90.000000 90.000000 90.000000 +TITLE sites: 6 +* 1 Fe 0.000000 0.000000 0.000000 +* 2 Fe 0.500000 0.500000 0.500000 +* 3 S 0.000000 0.199900 0.378040 +* 4 S 0.000000 0.800100 0.621960 +* 5 S 0.500000 0.699900 0.121960 +* 6 S 0.500000 0.300100 0.878040 + +POTENTIALS + *ipot Z tag lmax1 lmax2 xnatph(stoichometry) spinph +******- **- ****- ******- ******- ********************** ******** + 0 26 Fe -1 -1 0.0001 0 + 1 26 Fe -1 -1 2 0 + 2 16 S -1 -1 4 0 + +ATOMS + * x y z ipot Atom Distance Number +**********- ********- ******- ****** ****** ********** ******** + 0 0 0 0 Fe 0 0 + -0.889035 -2.05227 -0 2 S 2.23656 4 + 0.889035 2.05227 0 2 S 2.23656 22 + -1.33466 0.662084 -1.6926 2 S 2.2549 6 + -1.33466 0.662084 1.6926 2 S 2.2549 8 + 1.33466 -0.662084 -1.6926 2 S 2.2549 11 + 1.33466 -0.662084 1.6926 2 S 2.2549 13 + 0 0 -3.3852 1 Fe 3.3852 18 + 0 0 3.3852 1 Fe 3.3852 19 + -0.889035 3.37643 0 2 S 3.49152 9 + 0.889035 -3.37643 -0 2 S 3.49152 15 + -3.11273 -0.662084 -1.6926 2 S 3.60449 1 + -3.11273 -0.662084 1.6926 2 S 3.60449 3 + 3.11273 0.662084 -1.6926 2 S 3.60449 16 + 3.11273 0.662084 1.6926 2 S 3.60449 20 + -2.2237 -2.71435 -1.6926 1 Fe 3.89582 2 + -2.2237 -2.71435 1.6926 1 Fe 3.89582 5 + -2.2237 2.71435 -1.6926 1 Fe 3.89582 7 + -2.2237 2.71435 1.6926 1 Fe 3.89582 10 + 2.2237 -2.71435 -1.6926 1 Fe 3.89582 12 + 2.2237 -2.71435 1.6926 1 Fe 3.89582 14 + 2.2237 2.71435 -1.6926 1 Fe 3.89582 17 + 2.2237 2.71435 1.6926 1 Fe 3.89582 21 +END + + diff --git a/lib/galaxy/datatypes/test/test.inp b/lib/galaxy/datatypes/test/test.inp new file mode 100644 index 00000000000..522743703c3 --- /dev/null +++ b/lib/galaxy/datatypes/test/test.inp @@ -0,0 +1,52 @@ +* This FEFF.inp file generated by pymatgen +TITLE comment: None given +TITLE Source: +TITLE Structure Summary: Fe2 S4 +TITLE Reduced formula: FeS2 +TITLE space group: (Pnnm), space number: (58) +TITLE abc: 3.385200 4.447400 5.428700 +TITLE angles: 90.000000 90.000000 90.000000 +TITLE sites: 6 +* 1 Fe 0.000000 0.000000 0.000000 +* 2 Fe 0.500000 0.500000 0.500000 +* 3 S 0.000000 0.199900 0.378040 +* 4 S 0.000000 0.800100 0.621960 +* 5 S 0.500000 0.699900 0.121960 +* 6 S 0.500000 0.300100 0.878040 + +POTENTIALS + *ipot Z tag lmax1 lmax2 xnatph(stoichometry) spinph +******- **- ****- ******- ******- ********************** ******** + 0 26 Fe -1 -1 0.0001 0 + 1 26 Fe -1 -1 2 0 + 2 16 S -1 -1 4 0 + +ATOMS + * x y z ipot Atom Distance Number +**********- ********- ******- ****** ****** ********** ******** + 0 0 0 0 Fe 0 0 + -0.889035 -2.05227 -0 2 S 2.23656 4 + 0.889035 2.05227 0 2 S 2.23656 22 + -1.33466 0.662084 -1.6926 2 S 2.2549 6 + -1.33466 0.662084 1.6926 2 S 2.2549 8 + 1.33466 -0.662084 -1.6926 2 S 2.2549 11 + 1.33466 -0.662084 1.6926 2 S 2.2549 13 + 0 0 -3.3852 1 Fe 3.3852 18 + 0 0 3.3852 1 Fe 3.3852 19 + -0.889035 3.37643 0 2 S 3.49152 9 + 0.889035 -3.37643 -0 2 S 3.49152 15 + -3.11273 -0.662084 -1.6926 2 S 3.60449 1 + -3.11273 -0.662084 1.6926 2 S 3.60449 3 + 3.11273 0.662084 -1.6926 2 S 3.60449 16 + 3.11273 0.662084 1.6926 2 S 3.60449 20 + -2.2237 -2.71435 -1.6926 1 Fe 3.89582 2 + -2.2237 -2.71435 1.6926 1 Fe 3.89582 5 + -2.2237 2.71435 -1.6926 1 Fe 3.89582 7 + -2.2237 2.71435 1.6926 1 Fe 3.89582 10 + 2.2237 -2.71435 -1.6926 1 Fe 3.89582 12 + 2.2237 -2.71435 1.6926 1 Fe 3.89582 14 + 2.2237 2.71435 -1.6926 1 Fe 3.89582 17 + 2.2237 2.71435 1.6926 1 Fe 3.89582 21 +END + + diff --git a/lib/galaxy/datatypes/test/test.prj b/lib/galaxy/datatypes/test/test.prj new file mode 100644 index 0000000000000000000000000000000000000000..55b0926c8718d2fd52ddd2a2bf5c50da946b48dd GIT binary patch literal 5372 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 Date: Tue, 6 Jun 2023 12:54:55 +0000 Subject: [PATCH 2/9] Handle StopIteration in FEFFInput sniffer --- lib/galaxy/datatypes/larch.py | 55 ++++++++++++------- .../test/{no_pymatgen.inp => feff_atoms.inp} | 7 --- .../{bad_atoms.inp => feff_bad_atoms.inp} | 0 ...potentials.inp => feff_bad_potentials.inp} | 0 lib/galaxy/datatypes/test/feff_potentials.inp | 24 ++++++++ .../test/{test.inp => feff_pymatgen.inp} | 0 6 files changed, 58 insertions(+), 28 deletions(-) rename lib/galaxy/datatypes/test/{no_pymatgen.inp => feff_atoms.inp} (85%) rename lib/galaxy/datatypes/test/{bad_atoms.inp => feff_bad_atoms.inp} (100%) rename lib/galaxy/datatypes/test/{bad_potentials.inp => feff_bad_potentials.inp} (100%) create mode 100644 lib/galaxy/datatypes/test/feff_potentials.inp rename lib/galaxy/datatypes/test/{test.inp => feff_pymatgen.inp} (100%) diff --git a/lib/galaxy/datatypes/larch.py b/lib/galaxy/datatypes/larch.py index 80f7fb358c0..43a738e6ba9 100644 --- a/lib/galaxy/datatypes/larch.py +++ b/lib/galaxy/datatypes/larch.py @@ -70,6 +70,10 @@ class AthenaProject(Text): >>> fname = get_test_fname('test.prj') >>> AthenaProject().sniff(fname) True + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('Si.cif') + >>> FEFFInput().sniff(fname) + False """ return file_prefix.startswith("# Athena project file") @@ -135,19 +139,23 @@ class FEFFInput(Text): Try to guess if the file is an FEFF input file. >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('test.inp') + >>> fname = get_test_fname('feff_pymatgen.inp') >>> FEFFInput().sniff(fname) True >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('no_pymatgen.inp') + >>> fname = get_test_fname('feff_atoms.inp') >>> FEFFInput().sniff(fname) True >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('bad_atoms.inp') + >>> fname = get_test_fname('feff_potentials.inp') + >>> FEFFInput().sniff(fname) + True + >>> from galaxy.datatypes.sniff import get_test_fname + >>> fname = get_test_fname('feff_bad_atoms.inp') >>> FEFFInput().sniff(fname) False >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('bad_potential.inp') + >>> fname = get_test_fname('feff_bad_potentials.inp') >>> FEFFInput().sniff(fname) False >>> from galaxy.datatypes.sniff import get_test_fname @@ -160,25 +168,30 @@ class FEFFInput(Text): return True generator = file_prefix.line_iterator() - line = next(generator) - while line is not None: - if line == "POTENTIALS": - line = next(generator).strip() - if line[0] == "*": - words = line[1:].split() - if words[0] in ["potential-index", "ipot"] and words[1] == "Z": - return True - return False + try: + line = next(generator).strip() + while line is not None: + if line == "POTENTIALS": + line = next(generator).strip() + if line[0] == "*": + words = line[1:].split() + if (words[0] in ["potential-index", "ipot"]) and (words[1] == "Z"): + return True + return False - elif line == "ATOMS": - line = next(generator).strip() - if line[0] == "*": - words = line[1:].split() - if words[:4] == ["x", "y", "z", "ipot"]: - return True - return False + elif line == "ATOMS": + line = next(generator).strip() + if line[0] == "*": + words = line[1:].split() + if words[:4] == ["x", "y", "z", "ipot"]: + return True + return False - line = next(generator) + else: + line = next(generator).strip() + + except StopIteration: + return False return False diff --git a/lib/galaxy/datatypes/test/no_pymatgen.inp b/lib/galaxy/datatypes/test/feff_atoms.inp similarity index 85% rename from lib/galaxy/datatypes/test/no_pymatgen.inp rename to lib/galaxy/datatypes/test/feff_atoms.inp index d75015dee1c..6deb2fb4635 100644 --- a/lib/galaxy/datatypes/test/no_pymatgen.inp +++ b/lib/galaxy/datatypes/test/feff_atoms.inp @@ -13,13 +13,6 @@ TITLE sites: 6 * 5 S 0.500000 0.699900 0.121960 * 6 S 0.500000 0.300100 0.878040 -POTENTIALS - *ipot Z tag lmax1 lmax2 xnatph(stoichometry) spinph -******- **- ****- ******- ******- ********************** ******** - 0 26 Fe -1 -1 0.0001 0 - 1 26 Fe -1 -1 2 0 - 2 16 S -1 -1 4 0 - ATOMS * x y z ipot Atom Distance Number **********- ********- ******- ****** ****** ********** ******** diff --git a/lib/galaxy/datatypes/test/bad_atoms.inp b/lib/galaxy/datatypes/test/feff_bad_atoms.inp similarity index 100% rename from lib/galaxy/datatypes/test/bad_atoms.inp rename to lib/galaxy/datatypes/test/feff_bad_atoms.inp diff --git a/lib/galaxy/datatypes/test/bad_potentials.inp b/lib/galaxy/datatypes/test/feff_bad_potentials.inp similarity index 100% rename from lib/galaxy/datatypes/test/bad_potentials.inp rename to lib/galaxy/datatypes/test/feff_bad_potentials.inp diff --git a/lib/galaxy/datatypes/test/feff_potentials.inp b/lib/galaxy/datatypes/test/feff_potentials.inp new file mode 100644 index 00000000000..cc96ad4cd11 --- /dev/null +++ b/lib/galaxy/datatypes/test/feff_potentials.inp @@ -0,0 +1,24 @@ +TITLE comment: None given +TITLE Source: +TITLE Structure Summary: Fe2 S4 +TITLE Reduced formula: FeS2 +TITLE space group: (Pnnm), space number: (58) +TITLE abc: 3.385200 4.447400 5.428700 +TITLE angles: 90.000000 90.000000 90.000000 +TITLE sites: 6 +* 1 Fe 0.000000 0.000000 0.000000 +* 2 Fe 0.500000 0.500000 0.500000 +* 3 S 0.000000 0.199900 0.378040 +* 4 S 0.000000 0.800100 0.621960 +* 5 S 0.500000 0.699900 0.121960 +* 6 S 0.500000 0.300100 0.878040 + +POTENTIALS + *ipot Z tag lmax1 lmax2 xnatph(stoichometry) spinph +******- **- ****- ******- ******- ********************** ******** + 0 26 Fe -1 -1 0.0001 0 + 1 26 Fe -1 -1 2 0 + 2 16 S -1 -1 4 0 +END + + diff --git a/lib/galaxy/datatypes/test/test.inp b/lib/galaxy/datatypes/test/feff_pymatgen.inp similarity index 100% rename from lib/galaxy/datatypes/test/test.inp rename to lib/galaxy/datatypes/test/feff_pymatgen.inp From 2efae4c392fb98b2ea512fcc303464e34940fe8a Mon Sep 17 00:00:00 2001 From: Patrick Austin Date: Tue, 6 Jun 2023 15:26:36 +0000 Subject: [PATCH 3/9] Rename test files to avoid guessing feff datatype --- lib/galaxy/datatypes/larch.py | 10 +++++----- .../datatypes/test/{feff_atoms.inp => inp_atoms.inp} | 0 .../test/{feff_bad_atoms.inp => inp_bad_atoms.inp} | 0 ...{feff_bad_potentials.inp => inp_bad_potentials.inp} | 0 .../test/{feff_potentials.inp => inp_potentials.inp} | 0 .../test/{feff_pymatgen.inp => inp_pymatgen.inp} | 0 6 files changed, 5 insertions(+), 5 deletions(-) rename lib/galaxy/datatypes/test/{feff_atoms.inp => inp_atoms.inp} (100%) rename lib/galaxy/datatypes/test/{feff_bad_atoms.inp => inp_bad_atoms.inp} (100%) rename lib/galaxy/datatypes/test/{feff_bad_potentials.inp => inp_bad_potentials.inp} (100%) rename lib/galaxy/datatypes/test/{feff_potentials.inp => inp_potentials.inp} (100%) rename lib/galaxy/datatypes/test/{feff_pymatgen.inp => inp_pymatgen.inp} (100%) diff --git a/lib/galaxy/datatypes/larch.py b/lib/galaxy/datatypes/larch.py index 43a738e6ba9..6494776e8cc 100644 --- a/lib/galaxy/datatypes/larch.py +++ b/lib/galaxy/datatypes/larch.py @@ -139,23 +139,23 @@ class FEFFInput(Text): Try to guess if the file is an FEFF input file. >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('feff_pymatgen.inp') + >>> fname = get_test_fname('inp_pymatgen.inp') >>> FEFFInput().sniff(fname) True >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('feff_atoms.inp') + >>> fname = get_test_fname('inp_atoms.inp') >>> FEFFInput().sniff(fname) True >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('feff_potentials.inp') + >>> fname = get_test_fname('inp_potentials.inp') >>> FEFFInput().sniff(fname) True >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('feff_bad_atoms.inp') + >>> fname = get_test_fname('inp_bad_atoms.inp') >>> FEFFInput().sniff(fname) False >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('feff_bad_potentials.inp') + >>> fname = get_test_fname('inp_bad_potentials.inp') >>> FEFFInput().sniff(fname) False >>> from galaxy.datatypes.sniff import get_test_fname diff --git a/lib/galaxy/datatypes/test/feff_atoms.inp b/lib/galaxy/datatypes/test/inp_atoms.inp similarity index 100% rename from lib/galaxy/datatypes/test/feff_atoms.inp rename to lib/galaxy/datatypes/test/inp_atoms.inp diff --git a/lib/galaxy/datatypes/test/feff_bad_atoms.inp b/lib/galaxy/datatypes/test/inp_bad_atoms.inp similarity index 100% rename from lib/galaxy/datatypes/test/feff_bad_atoms.inp rename to lib/galaxy/datatypes/test/inp_bad_atoms.inp diff --git a/lib/galaxy/datatypes/test/feff_bad_potentials.inp b/lib/galaxy/datatypes/test/inp_bad_potentials.inp similarity index 100% rename from lib/galaxy/datatypes/test/feff_bad_potentials.inp rename to lib/galaxy/datatypes/test/inp_bad_potentials.inp diff --git a/lib/galaxy/datatypes/test/feff_potentials.inp b/lib/galaxy/datatypes/test/inp_potentials.inp similarity index 100% rename from lib/galaxy/datatypes/test/feff_potentials.inp rename to lib/galaxy/datatypes/test/inp_potentials.inp diff --git a/lib/galaxy/datatypes/test/feff_pymatgen.inp b/lib/galaxy/datatypes/test/inp_pymatgen.inp similarity index 100% rename from lib/galaxy/datatypes/test/feff_pymatgen.inp rename to lib/galaxy/datatypes/test/inp_pymatgen.inp From 44bf8f5007ac7ba0f9764822e6186a483477ef7a Mon Sep 17 00:00:00 2001 From: Patrick Austin Date: Wed, 7 Jun 2023 08:39:12 +0000 Subject: [PATCH 4/9] Rename bad test files to avoid guessing inp datatype --- lib/galaxy/datatypes/test/{inp_atoms.inp => larch_atoms.inp} | 0 .../datatypes/test/{inp_bad_atoms.inp => larch_bad_atoms.txt} | 0 .../test/{inp_bad_potentials.inp => larch_bad_potentials.txt} | 0 .../datatypes/test/{inp_potentials.inp => larch_potentials.inp} | 0 .../datatypes/test/{inp_pymatgen.inp => larch_pymatgen.inp} | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename lib/galaxy/datatypes/test/{inp_atoms.inp => larch_atoms.inp} (100%) rename lib/galaxy/datatypes/test/{inp_bad_atoms.inp => larch_bad_atoms.txt} (100%) rename lib/galaxy/datatypes/test/{inp_bad_potentials.inp => larch_bad_potentials.txt} (100%) rename lib/galaxy/datatypes/test/{inp_potentials.inp => larch_potentials.inp} (100%) rename lib/galaxy/datatypes/test/{inp_pymatgen.inp => larch_pymatgen.inp} (100%) diff --git a/lib/galaxy/datatypes/test/inp_atoms.inp b/lib/galaxy/datatypes/test/larch_atoms.inp similarity index 100% rename from lib/galaxy/datatypes/test/inp_atoms.inp rename to lib/galaxy/datatypes/test/larch_atoms.inp diff --git a/lib/galaxy/datatypes/test/inp_bad_atoms.inp b/lib/galaxy/datatypes/test/larch_bad_atoms.txt similarity index 100% rename from lib/galaxy/datatypes/test/inp_bad_atoms.inp rename to lib/galaxy/datatypes/test/larch_bad_atoms.txt diff --git a/lib/galaxy/datatypes/test/inp_bad_potentials.inp b/lib/galaxy/datatypes/test/larch_bad_potentials.txt similarity index 100% rename from lib/galaxy/datatypes/test/inp_bad_potentials.inp rename to lib/galaxy/datatypes/test/larch_bad_potentials.txt diff --git a/lib/galaxy/datatypes/test/inp_potentials.inp b/lib/galaxy/datatypes/test/larch_potentials.inp similarity index 100% rename from lib/galaxy/datatypes/test/inp_potentials.inp rename to lib/galaxy/datatypes/test/larch_potentials.inp diff --git a/lib/galaxy/datatypes/test/inp_pymatgen.inp b/lib/galaxy/datatypes/test/larch_pymatgen.inp similarity index 100% rename from lib/galaxy/datatypes/test/inp_pymatgen.inp rename to lib/galaxy/datatypes/test/larch_pymatgen.inp From fb64b7d989601a0a1446922d45e1cb33e5117118 Mon Sep 17 00:00:00 2001 From: Patrick Austin Date: Wed, 7 Jun 2023 09:38:19 +0000 Subject: [PATCH 5/9] Edit test filenames in larch.py --- lib/galaxy/datatypes/larch.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/galaxy/datatypes/larch.py b/lib/galaxy/datatypes/larch.py index 6494776e8cc..28715e8695c 100644 --- a/lib/galaxy/datatypes/larch.py +++ b/lib/galaxy/datatypes/larch.py @@ -139,23 +139,23 @@ class FEFFInput(Text): Try to guess if the file is an FEFF input file. >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('inp_pymatgen.inp') + >>> fname = get_test_fname('larch_pymatgen.inp') >>> FEFFInput().sniff(fname) True >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('inp_atoms.inp') + >>> fname = get_test_fname('larch_atoms.inp') >>> FEFFInput().sniff(fname) True >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('inp_potentials.inp') + >>> fname = get_test_fname('larch_potentials.inp') >>> FEFFInput().sniff(fname) True >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('inp_bad_atoms.inp') + >>> fname = get_test_fname('larch_bad_atoms.txt') >>> FEFFInput().sniff(fname) False >>> from galaxy.datatypes.sniff import get_test_fname - >>> fname = get_test_fname('inp_bad_potentials.inp') + >>> fname = get_test_fname('larch_bad_potentials.txt') >>> FEFFInput().sniff(fname) False >>> from galaxy.datatypes.sniff import get_test_fname From 1b24e52c6e21117116922e57a7a3d1f19934f070 Mon Sep 17 00:00:00 2001 From: Patrick Austin Date: Fri, 4 Aug 2023 17:09:15 +0000 Subject: [PATCH 6/9] Allow unset metadata for athena project --- lib/galaxy/datatypes/larch.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/galaxy/datatypes/larch.py b/lib/galaxy/datatypes/larch.py index 28715e8695c..75118f0f99d 100644 --- a/lib/galaxy/datatypes/larch.py +++ b/lib/galaxy/datatypes/larch.py @@ -82,24 +82,26 @@ class AthenaProject(Text): """ Extract metadata from @args """ + def extract_arg(args: "list[str]", arg_name: str): + try: + index = args.index(f"'{arg_name}'") + setattr(dataset.metadata, arg_name, args[index + 1].replace("'", "")) + except ValueError: + return + headers = get_headers(dataset.file_name, sep=" = ", count=3, comment_designator="#") + args = [] for header in headers: if header[0] == "@args": args = header[1][1:-2].split(",") break - index = args.index("'atsym'") - dataset.metadata.atsym = args[index + 1][1:-1] - index = args.index("'bkg_e0'") - dataset.metadata.bkg_e0 = args[index + 1][1:-1] - index = args.index("'edge'") - dataset.metadata.edge = args[index + 1][1:-1] - index = args.index("'npts'") - dataset.metadata.npts = args[index + 1][1:-1] - index = args.index("'xmax'") - dataset.metadata.xmax = args[index + 1][1:-1] - index = args.index("'xmin'") - dataset.metadata.xmin = args[index + 1][1:-1] + extract_arg(args, "atsym") + extract_arg(args, "bkg_e0") + extract_arg(args, "edge") + extract_arg(args, "npts") + extract_arg(args, "xmax") + extract_arg(args, "xmin") def set_peek(self, dataset: "DatasetInstance", **kwd) -> None: if not dataset.dataset.purged: From d8a80eff49148405a2c34dced448285b559fe921 Mon Sep 17 00:00:00 2001 From: Patrick Austin Date: Fri, 24 Nov 2023 11:39:23 +0000 Subject: [PATCH 7/9] Fix typo in AthenaProject sniffer --- lib/galaxy/datatypes/larch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/datatypes/larch.py b/lib/galaxy/datatypes/larch.py index 75118f0f99d..25248be09c6 100644 --- a/lib/galaxy/datatypes/larch.py +++ b/lib/galaxy/datatypes/larch.py @@ -72,7 +72,7 @@ class AthenaProject(Text): True >>> from galaxy.datatypes.sniff import get_test_fname >>> fname = get_test_fname('Si.cif') - >>> FEFFInput().sniff(fname) + >>> AthenaProject().sniff(fname) False """ From 36616a822794e9cb632b17ac4e10412db585dce8 Mon Sep 17 00:00:00 2001 From: Patrick Austin Date: Fri, 24 Nov 2023 12:02:01 +0000 Subject: [PATCH 8/9] Use List from typing for typehint in larch.py --- lib/galaxy/datatypes/larch.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/galaxy/datatypes/larch.py b/lib/galaxy/datatypes/larch.py index 25248be09c6..c91231af9c2 100644 --- a/lib/galaxy/datatypes/larch.py +++ b/lib/galaxy/datatypes/larch.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING +from typing import List, TYPE_CHECKING from galaxy.datatypes.data import ( get_file_peek, @@ -82,7 +82,8 @@ class AthenaProject(Text): """ Extract metadata from @args """ - def extract_arg(args: "list[str]", arg_name: str): + + def extract_arg(args: List[str], arg_name: str): try: index = args.index(f"'{arg_name}'") setattr(dataset.metadata, arg_name, args[index + 1].replace("'", "")) From cfab9e8169c44f5eae11c0ffedaaf83524273c7b Mon Sep 17 00:00:00 2001 From: Patrick Austin Date: Fri, 24 Nov 2023 13:23:15 +0000 Subject: [PATCH 9/9] DatasetInstance -> DatasetProtocol in larch.py typehints --- lib/galaxy/datatypes/larch.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/galaxy/datatypes/larch.py b/lib/galaxy/datatypes/larch.py index c91231af9c2..212f41af1a0 100644 --- a/lib/galaxy/datatypes/larch.py +++ b/lib/galaxy/datatypes/larch.py @@ -1,19 +1,17 @@ -from typing import List, TYPE_CHECKING +from typing import List from galaxy.datatypes.data import ( get_file_peek, Text, ) from galaxy.datatypes.metadata import MetadataElement +from galaxy.datatypes.protocols import DatasetProtocol from galaxy.datatypes.sniff import ( build_sniff_from_prefix, FilePrefix, get_headers, ) -if TYPE_CHECKING: - from galaxy.model import DatasetInstance - @build_sniff_from_prefix class AthenaProject(Text): @@ -78,7 +76,7 @@ class AthenaProject(Text): return file_prefix.startswith("# Athena project file") - def set_meta(self, dataset: "DatasetInstance", overwrite: bool = True, **kwd) -> None: + def set_meta(self, dataset: DatasetProtocol, *, overwrite: bool = True, **kwd) -> None: """ Extract metadata from @args """ @@ -104,7 +102,7 @@ class AthenaProject(Text): extract_arg(args, "xmax") extract_arg(args, "xmin") - def set_peek(self, dataset: "DatasetInstance", **kwd) -> None: + def set_peek(self, dataset: DatasetProtocol, **kwd) -> None: if not dataset.dataset.purged: dataset.peek = get_file_peek(dataset.file_name) dataset.info = ( @@ -198,7 +196,7 @@ class FEFFInput(Text): return False - def set_meta(self, dataset: "DatasetInstance", overwrite: bool = True, **kwd) -> None: + def set_meta(self, dataset: DatasetProtocol, overwrite: bool = True, **kwd) -> None: """ Extract metadata from TITLE """ @@ -210,7 +208,7 @@ class FEFFInput(Text): dataset.metadata.title_block = title_block - def set_peek(self, dataset: "DatasetInstance", **kwd) -> None: + def set_peek(self, dataset: DatasetProtocol, **kwd) -> None: if not dataset.dataset.purged: dataset.peek = get_file_peek(dataset.file_name) dataset.info = dataset.metadata.title_block