From c7d8a84c729d752a6cc229e07dcdd700245d35a3 Mon Sep 17 00:00:00 2001 From: Nathan Stender Date: Tue, 11 Jun 2024 09:48:37 -0700 Subject: [PATCH 1/8] internal: Verify that there are no repeated IDs that we expect to be unique in all content tests (#461) --- src/allotropy/testing/utils.py | 51 +++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/allotropy/testing/utils.py b/src/allotropy/testing/utils.py index e6b305cd3..e4a8df7c6 100644 --- a/src/allotropy/testing/utils.py +++ b/src/allotropy/testing/utils.py @@ -1,5 +1,6 @@ from __future__ import annotations +from collections import defaultdict from collections.abc import Iterator, Mapping from contextlib import contextmanager import json @@ -32,12 +33,57 @@ def _replace_asm_converter_name_and_version(allotrope_dict: DictType) -> DictTyp return new_dict +# List of keys in ASM with "identifier" that do not need to be unique. +# Currently, only "measurement identifier" and "calculated data document" identifier should be unique. +# However, it is better to have positive exceptions, so we don't accidentally miss a newly added unique identifier. +NON_UNIQUE_IDENTIFIERS = { + "analytical method identifier", + "assay bead identifier", + "batch identifier", + "data source identifier", + "device identifier", + "experimental data identifier", + "location identifier", + "measurement method identifier", + "sample identifier", + "well location identifier", + "well plate identifier", +} + + +def _is_unique_identifier(key: str) -> bool: + return "identifier" in key and key not in NON_UNIQUE_IDENTIFIERS + + +def _get_all_identifiers(asm: DictType) -> dict[str, list[str]]: + all_identifiers = defaultdict(list) + for key, value in asm.items(): + if isinstance(value, dict): + for subkey, subvalue in _get_all_identifiers(value).items(): + all_identifiers[subkey].extend(subvalue) + elif isinstance(value, list): + for v in value: + if isinstance(v, dict): + for subkey, subvalue in _get_all_identifiers(v).items(): + all_identifiers[subkey].extend(subvalue) + elif _is_unique_identifier(key): + all_identifiers[key].append(value) + return {key: list(value) for key, value in all_identifiers.items()} + + +def _validate_identifiers(asm: DictType) -> None: + for key, value in _get_all_identifiers(asm).items(): + if len(value) != len(set(value)): + non_unique = [id_ for id_ in set(value) if value.count(id_) > 1] + msg = f"Detected non-unique identifiers for key '{key}'. If this key should allow repeat values, add to NON_UNIQUE_IDENTIFIERS. Identifiers: {non_unique}" + raise AssertionError(msg) + + def _assert_allotrope_dicts_equal( expected: DictType, actual: DictType, print_verbose_deep_diff: bool = False, # noqa: FBT001, FBT002 ) -> None: - expected_replaced = _replace_asm_converter_name_and_version(expected) ddiff = DeepDiff( @@ -105,6 +151,9 @@ def validate_contents( # Ensure that allotrope_dict can be structured back into a python model. structure(allotrope_dict) + # Ensure that all IDs are unique + _validate_identifiers(allotrope_dict) + try: _assert_allotrope_dicts_equal( expected_dict, allotrope_dict, print_verbose_deep_diff From 0b0681ef38ae305bece065aa4272f986ace43d84 Mon Sep 17 00:00:00 2001 From: Joe Negri <104152759+LimulusPolyphemus@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:26:07 -0400 Subject: [PATCH 2/8] Chore: Adding test files for Agilent TapeStation Analysis (#450) Co-authored-by: Nathan Stender --- CHANGELOG.md | 1 + ...gilent_tapestation_analysis_example_01.xml | 4766 +++++++++++++++++ ...gilent_tapestation_analysis_example_02.xml | 2105 ++++++++ 3 files changed, 6872 insertions(+) create mode 100644 tests/parsers/agilent_tapestation_analysis/testdata/agilent_tapestation_analysis_example_01.xml create mode 100644 tests/parsers/agilent_tapestation_analysis/testdata/agilent_tapestation_analysis_example_02.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d6b532b3..295dbcfb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added github enforcement that CHANGELOG.md is updated +- Added test files Agilent TapeStation Analysis ### Fixed diff --git a/tests/parsers/agilent_tapestation_analysis/testdata/agilent_tapestation_analysis_example_01.xml b/tests/parsers/agilent_tapestation_analysis/testdata/agilent_tapestation_analysis_example_01.xml new file mode 100644 index 000000000..7fb2c32c8 --- /dev/null +++ b/tests/parsers/agilent_tapestation_analysis/testdata/agilent_tapestation_analysis_example_01.xml @@ -0,0 +1,4766 @@ + + + + \\Mac\Home\Documents\Agilent\TapeStation Data\Demo Files\Eukaryotic RNA-Plate-64.RNA + RNA + + + + + 2015-07-21T09:18:19-05:00 + 5.1.0.47235 + + + Demo File + + 01-S027-150626-02-000035 + 2015-08-04T23:59:59 + First run 21-Jul-2015, 1 run(s) performed + 25.5 + 208 + 2015-07-21T08:14:29-05:00 + + + + + + TapeStation User + 32768 + DEDAA00054 + TapeStation PC + 2.1.17.8091 + Microsoft Windows 10 + 2.1.17.8091 + + + Demo File + + 01-S027-150626-02-000029 + 2015-08-04T23:59:59 + First run 21-Jul-2015, 1 run(s) performed + 26 + 204 + 2015-07-21T08:14:29-05:00 + + + + + + TapeStation User + 32768 + DEDAA00054 + TapeStation PC + 2.1.17.8091 + Microsoft Windows 10 + 2.1.17.8091 + + + Demo File + + 01-S027-150626-02-000028 + 2015-08-04T23:59:59 + First run 21-Jul-2015, 1 run(s) performed + 26.3 + 202 + 2015-07-21T08:14:29-05:00 + + + + + + TapeStation User + 32768 + DEDAA00054 + TapeStation PC + 2.1.17.8091 + Microsoft Windows 10 + 2.1.17.8091 + + + Demo File + + 01-S027-150626-02-000019 + 2015-08-04T23:59:59 + First run 21-Jul-2015, 1 run(s) performed + 26.5 + 201 + 2015-07-21T08:14:29-05:00 + + + + + + TapeStation User + 32768 + DEDAA00054 + TapeStation PC + 2.1.17.8091 + Microsoft Windows 10 + 2.1.17.8091 + + + Demo File + + 01-S027-150626-02-000032 + 2015-08-04T23:59:59 + First run 21-Jul-2015, 1 run(s) performed + 26.6 + 200 + 2015-07-21T08:14:29-05:00 + + + + + + TapeStation User + 32768 + DEDAA00054 + TapeStation PC + 2.1.17.8091 + Microsoft Windows 10 + 2.1.17.8091 + + + + + + ng/µl + nmol/l + nt + + + + + L1 + Ladder + 86.8 + Ladder + + + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.1 + 3730.080 + 4710 + 25 + - + Lower Marker + - + - + 83.2 + 38 + 86.2 + + + 0.197 + - + 7.86 + + + 141 + 65.9 + 1792.736 + 116 + 200 + 1 + + + 10.77 + 9.06 + 68.1 + 268 + 70.6 + + + 0.401 + - + 16.1 + + + 350 + 58.8 + 3419.682 + 94.4 + 500 + 2 + + + 21.98 + 18.48 + 61.3 + 646 + 64.0 + + + 0.333 + - + 13.3 + + + 819 + 52.2 + 3823.579 + 39.2 + 1000 + 3 + + + 18.24 + 15.34 + 54.5 + 1252 + 56.5 + + + 0.337 + - + 13.5 + + + 1643 + 45.1 + 3642.857 + 19.9 + 2000 + 4 + + + 18.48 + 15.54 + 47.6 + 2607 + 49.5 + + + 0.323 + - + 12.9 + + + 3504 + 39.2 + 3698.553 + 9.49 + 4000 + 5 + + + 17.68 + 14.87 + 41.2 + 5219 + 42.4 + + + 0.235 + - + 9.39 + + + 5219 + 35.8 + 3024.454 + 4.60 + 6000 + 6 + + + 12.86 + 10.81 + 38.2 + 8341 + 39.2 + + + + + + A1 + Rat Kidney 400 ng/µl + 363 + + + + + + 8.6 + 17.71 + 6.69 + 2.1 + 3.0 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.0 + 25/Height> + 4710 + 25 + - + Lower Marker + - + - + 82.1 + 38 + 84.9 + + + 1.682 + - + 67.3 + + + 1558 + 45.3 + 5194.973 + 114 + 1730 + 1 + 18S + 25.16 + 18.56 + 48.3 + 2376 + 49.3 + + + 5.004 + - + 200 + + + 3075 + 35.3 + 10985.712 + 134 + 4405 + 2 + 28S + 74.84 + 55.20 + 39.9 + 8260 + 43.0 + + + + + + B1 + Rat Kidney 400 ng/µl + 361 + + + + + + 8.8 + 17.65 + 6.79 + 2.0 + 2.9 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 78.9 + 1537.717 + 4710 + 25 + - + Lower Marker + - + - + 82.0 + 38 + 84.8 + + + 1.726 + - + 69.0 + + + 1564 + 45.0 + 5289.333 + 116 + 1752 + 1 + 18S + 25.42 + 19.10 + 48.1 + 2436 + 49.3 + + + 5.064 + - + 203 + + + 3057 + 35.3 + 10676.371 + 131 + 4547 + 2 + 28S + 74.58 + 56.06 + 39.6 + 8209 + 43.0 + + + + + + C1 + Rat Kidney 200 ng/µl + 181 + + + + + + 9.0 + 8.85 + 3.28 + 1.8 + 2.7 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 77.9 + 2736.667 + 4710 + 25 + - + Lower Marker + - + - + 81.0 + 39 + 83.9 + + + 0.883 + - + 35.3 + + + 1534 + 44.9 + 5922.603 + 59.8 + 1738 + 1 + 18S + 26.91 + 19.49 + 47.6 + 2324 + 48.8 + + + 2.399 + - + 96.0 + + + 3082 + 35.1 + 10700.530 + 61.1 + 4617 + 2 + 28S + 73.09 + 52.94 + 39.0 + 7864 + 42.3 + + + + + + D1 + Rat Kidney 200 ng/µl + 213 + + + + + + 8.7 + 10.39 + 3.66 + 1.8 + 2.8 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 77.9 + 2270.698 + 4710 + 25 + - + Lower Marker + - + - + 81.1 + 39 + 83.9 + + + 0.952 + - + 38.1 + + + 1514 + 45.3 + 5595.302 + 65.3 + 1715 + 1 + 18S + 26.02 + 17.89 + 47.8 + 2220 + 49.0 + + + 2.706 + - + 108 + + + 3036 + 35.5 + 10247.441 + 70.3 + 4530 + 2 + 28S + 73.98 + 50.87 + 39.1 + 7514 + 42.5 + + + + + + E1 + Rat Kidney 100 ng/µl + 80.9 + + + + + + 9.0 + 3.95 + 1.48 + 1.4 + 1.7 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 76.7 + 4688.189 + 4710 + 25 + - + Lower Marker + - + - + 79.9 + 39 + 82.8 + + + 0.550 + - + 22.0 + + + 1292 + 42.8 + 5578.792 + 36.7 + 1763 + 1 + 18S + 37.23 + 27.18 + 46.7 + 2720 + 49.7 + + + 0.927 + - + 37.1 + + + 3397 + 33.9 + 7863.989 + 21.1 + 5174 + 2 + 28S + 62.77 + 45.82 + 37.5 + 8643 + 40.8 + + + + + + F1 + Rat Kidney 100 ng/µl + 85.0 + + + + + + 9.1 + 4.15 + 1.48 + 1.4 + 2.3 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 77.9 + 4353.073 + 4710 + 25 + - + Lower Marker + - + - + 81.1 + 39 + 84.0 + + + 0.451 + - + 18.0 + + + 1274 + 45.6 + 5467.560 + 30.3 + 1748 + 1 + 18S + 30.43 + 21.19 + 47.6 + 2151 + 50.7 + + + 1.030 + - + 41.2 + + + 3232 + 34.0 + 7752.346 + 23.8 + 5091 + 2 + 28S + 69.57 + 48.45 + 38.3 + 9247 + 41.9 + + + + + + G1 + Rat Kidney 50 ng/µl + 42.3 + + + + + + 8.9 + 2.07 + 0.62 + 1.2 + 1.7 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 16 + 76.4 + 5731.797 + 4710 + 25 + - + Lower Marker + - + - + 79.6 + 39 + 82.6 + + + 0.235 + - + 9.41 + + + 1231 + 44.9 + 3884.520 + 16.0 + 1731 + 1 + 18S + 37.65 + 22.22 + 46.7 + 2092 + 50.0 + + + 0.390 + - + 15.6 + + + 3998 + 33.0 + 4576.494 + 8.14 + 5633 + 2 + 28S + 62.35 + 36.80 + 36.8 + 9677 + 39.2 + + + + + + H1 + Rat Kidney 50 ng/µl + 42.7 + + + + + + 9.1 + 2.08 + 0.64 + 1.2 + 1.7 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.1 + 5812.798 + 4710 + 25 + - + Lower Marker + - + - + 82.2 + 38 + 85.2 + + + 0.236 + - + 9.42 + + + 1509 + 45.5 + 3803.128 + 15.1 + 1842 + 1 + 18S + 36.77 + 22.09 + 47.8 + 2342 + 49.7 + + + 0.405 + - + 16.2 + + + 4268 + 34.3 + 4642.904 + 7.90 + 6032 + 2 + 28S + 63.23 + 37.99 + 37.6 + 9569 + 40.2 + + + + + + A2 + Rat Kidney 400 ng/µl + 373 + + + + + + 8.8 + 18.22 + 6.67 + 2.1 + 3.0 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.5 + 1354.025 + 4710 + 25 + - + Lower Marker + - + - + 83.6 + 38 + 86.3 + + + 1.658 + - + 66.3 + + + 1666 + 45.9 + 5083.332 + 106 + 1846 + 1 + 18S + 24.84 + 17.77 + 48.6 + 2461 + 49.6 + + + 5.015 + - + 201 + + + 3172 + 36.6 + 10429.090 + 125 + 4723 + 2 + 28S + 75.16 + 53.75 + 40.2 + 7628 + 43.5 + + + + + + B2 + Rat Kidney 400 ng/µl + 342 + + + + + + 8.7 + 16.71 + 6.33 + 2.2 + 2.9 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 78.8 + 1622.033 + 4710 + 25 + - + Lower Marker + - + - + 82.0 + 39 + 84.7 + + + 1.613 + - + 64.5 + + + 1624 + 44.9 + 5335.852 + 106 + 1786 + 1 + 18S + 25.47 + 18.86 + 47.9 + 2486 + 48.9 + + + 4.720 + - + 189 + + + 3121 + 35.8 + 11481.279 + 122 + 4547 + 2 + 28S + 74.53 + 55.20 + 39.6 + 7698 + 42.8 + + + + + + C2 + Rat Kidney 200 ng/µl + 199 + + + + + + 9.1 + 9.71 + 3.45 + 1.8 + 2.8 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 16 + 78.0 + 2258.088 + 4710 + 25 + - + Lower Marker + - + - + 81.2 + 39 + 84.3 + + + 0.899 + - + 36.0 + + + 1553 + 45.4 + 6424.090 + 60.1 + 1759 + 1 + 18S + 26.04 + 18.08 + 47.6 + 2210 + 48.8 + + + 2.554 + - + 102 + + + 3118 + 35.5 + 11269.562 + 65.0 + 4620 + 2 + 28S + 73.96 + 51.36 + 39.0 + 7561 + 42.3 + + + + + + D2 + Rat Kidney 200 ng/µl + 196 + + + + + + 9.3 + 9.59 + 3.28 + 1.7 + 2.7 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.1 + 2261.706 + 4710 + 25 + - + Lower Marker + - + - + 83.1 + 38 + 86.0 + + + 0.879 + - + 35.1 + + + 1649 + 46.1 + 6014.634 + 56.0 + 1845 + 1 + 18S + 26.80 + 17.89 + 48.3 + 2340 + 49.4 + + + 2.399 + - + 96.0 + + + 3379 + 36.1 + 10074.528 + 56.6 + 4992 + 2 + 28S + 73.20 + 48.86 + 39.5 + 7880 + 42.7 + + + + + + E2 + Rat Kidney 100 ng/µl + 84.0 + + + + + + 9.1 + 4.10 + 1.25 + 1.4 + 2.0 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 77.7 + 4477.412 + 4710 + 25 + - + Lower Marker + - + - + 80.9 + 39 + 83.8 + + + 0.414 + - + 16.5 + + + 1524 + 45.1 + 5855.116 + 27.4 + 1778 + 1 + 18S + 32.96 + 19.69 + 47.3 + 2238 + 48.8 + + + 0.841 + - + 33.6 + + + 4026 + 34.9 + 8104.585 + 18.9 + 5222 + 2 + 28S + 67.04 + 40.05 + 38.0 + 8021 + 39.9 + + + + + + F2 + Rat Kidney 100 ng/µl + 78.3 + + + + + + 9.3 + 3.82 + 1.33 + 1.4 + 2.1 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 17 + 78.1 + 4402.320 + 4710 + 25 + - + Lower Marker + - + - + 81.2 + 39 + 84.1 + + + 0.425 + - + 17.0 + + + 1294 + 45.7 + 5552.969 + 28.4 + 1759 + 1 + 18S + 32.03 + 21.71 + 47.6 + 2142 + 50.6 + + + 0.902 + - + 36.1 + + + 3285 + 35.1 + 7707.502 + 20.7 + 5125 + 2 + 28S + 67.97 + 46.07 + 38.3 + 7964 + 41.9 + + + + + + G2 + Rat Kidney 50 ng/µl + 40.6 + + + + + + 9.0 + 1.98 + 0.58 + 1.2 + 1.9 + + 01-S027-150626-02-000035 + + + 1.000 + 40.0 + 40.0 + + + 16 + 76.6 + 5660.071 + 4710 + 25 + - + Lower Marker + - + - + 79.8 + 39 + 82.8 + + + 0.196 + - + 7.85 + + + 1443 + 45.0 + 3803.042 + 13.2 + 1753 + 1 + 18S + 34.12 + 19.35 + 46.7 + 2096 + 48.6 + + + 0.379 + - + 15.2 + + + 4001 + 33.3 + 4624.571 + 7.81 + 5710 + 2 + 28S + 65.88 + 37.36 + 36.8 + 9295 + 39.3 + + + + + + H2 + Rat Kidney 50 ng/µl + 46.0 + + + + + + 9.4 + 2.32 + 0.75 + 1.2 + 1.9 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.2 + 4541.639 + 4710 + 25 + - + Lower Marker + - + - + 84.2 + 38 + 87.1 + + + 0.257 + - + 10.3 + + + 1271 + 47.7 + 3162.066 + 17.2 + 1758 + 1 + 18S + 34.26 + 22.36 + 49.4 + 2106 + 52.7 + + + 0.493 + - + 19.7 + + + 4020 + 35.0 + 3922.370 + 10.2 + 5712 + 2 + 28S + 65.74 + 42.92 + 39.0 + 9794 + 41.7 + + + + + + A3 + Rat Kidney 0 min at 94ºC + 200 + + + + + + 9.2 + 10.09 + 3.49 + 1.7 + 3.0 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.6 + 2487.420 + 4710 + 25 + - + Lower Marker + - + - + 83.7 + 38 + 86.5 + + + 0.870 + - + 34.8 + + + 1570 + 47.0 + 6147.692 + 57.8 + 1773 + 1 + 18S + 24.97 + 17.45 + 49.1 + 2192 + 50.3 + + + 2.615 + - + 105 + + + 3190 + 36.4 + 10470.189 + 67.2 + 4578 + 2 + 28S + 75.03 + 52.42 + 40.4 + 7871 + 43.5 + + + + + + B3 + Rat Kidney 2.5 min at 94ºC + 199 + + + + + + 7.1 + 10.06 + 3.18 + 1.1 + 1.6 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.3 + 2428.655 + 4710 + 25 + - + Lower Marker + - + - + 84.4 + 38 + 87.2 + + + 1.223 + - + 48.9 + + + 1286 + 47.6 + 5646.978 + 80.2 + 1795 + 1 + 18S + 38.42 + 24.59 + 49.3 + 2153 + 52.7 + + + 1.960 + - + 78.4 + + + 2912 + 36.9 + 5995.291 + 48.1 + 4795 + 2 + 28S + 61.58 + 39.42 + 40.4 + 7715 + 44.8 + + + + + + C3 + Rat Kidney 5 min at 94ºC + 178 + + + + + + 6.2 + 9.02 + 2.71 + 0.8 + 1.3 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.1 + 2784.816 + 4710 + 25 + - + Lower Marker + - + - + 83.1 + 38 + 86.0 + + + 1.187 + - + 47.5 + + + 1256 + 47.0 + 5583.903 + 80.8 + 1728 + 1 + 18S + 43.84 + 26.61 + 49.0 + 2113 + 52.2 + + + 1.521 + - + 60.8 + + + 2645 + 36.8 + 4221.034 + 38.2 + 4685 + 2 + 28S + 56.16 + 34.10 + 40.0 + 7211 + 44.9 + + + + + + D3 + Rat Kidney 10 min at 94ºC + 184 + The upper ribosomal fragment has degraded + + + + 3.8 + 9.31 + 1.72 + 0.4 + 0.3 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.1 + 2878.372 + 4710 + 25 + - + Lower Marker + - + - + 83.2 + 38 + 86.0 + + + 1.365 + - + 54.6 + + + 1482 + 43.9 + 4606.247 + 94.2 + 1706 + 1 + 18S + 79.61 + 29.65 + 49.2 + 2976 + 50.6 + + + 0.350 + - + 14.0 + + + 2976 + 40.6 + 1860.827 + 13.4 + 3069 + 2 + 28S + 20.39 + 7.59 + 43.6 + 4316 + 43.9 + + + + + + E3 + Rat Kidney 15 min at 94ºC + 204 + The upper ribosomal fragment has degraded + + + + 2.5 + 10.33 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.5 + 2408.204 + 4710 + 25 + - + Lower Marker + - + - + 84.6 + 38 + 87.5 + + + 0.906 + - + 36.2 + + + 1686 + 42.7 + 2839.580 + 59.2 + 1799 + 1 + 18S + 100.00 + 17.73 + 49.4 + 3675 + 50.1 + + + + + + F3 + Rat Kidney 20 min at 94ºC + 189 + The lower ribosomal fragment is missing + ! + + 1.6 + 9.58 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.7 + 2589.326 + 4710 + 25 + - + Lower Marker + - + - + 82.9 + 39 + 85.8 + + + + + + G3 + Rat Kidney 25 min at 94ºC + 168 + The lower ribosomal fragment is missing + ! + + 1.1 + 8.49 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 78.7 + 3139.650 + 4710 + 25 + - + Lower Marker + - + - + 81.8 + 39 + 84.7 + + + + + + H3 + Rat Kidney 30 min at 94ºC + 171 + The lower ribosomal fragment is missing + ! + + 1.1 + 8.65 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.1 + 2871.430 + 4710 + 25 + - + Lower Marker + - + - + 83.1 + 38 + 86.0 + + + + + + A4 + Rat Kidney 0 min at 94ºC + 208 + + + + + + 9.1 + 10.49 + 3.54 + 1.7 + 2.7 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.7 + 2232.990 + 4710 + 25 + - + Lower Marker + - + - + 84.7 + 37 + 87.5 + + + 0.947 + - + 37.9 + + + 1675 + 46.7 + 5813.658 + 59.0 + 1888 + 1 + 18S + 26.78 + 18.26 + 49.1 + 2414 + 50.3 + + + 2.590 + - + 104 + + + 3463 + 36.8 + 9685.280 + 60.4 + 5046 + 2 + 28S + 73.22 + 49.92 + 40.3 + 8004 + 43.4 + + + + + + B4 + Rat Kidney 2.5 min at 94ºC + 205 + + + + + + 7.2 + 10.38 + 3.25 + 1.0 + 1.6 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.2 + 2230.512 + 4710 + 25 + - + Lower Marker + - + - + 84.3 + 38 + 87.1 + + + 1.263 + - + 50.5 + + + 1377 + 46.7 + 5365.884 + 78.0 + 1904 + 1 + 18S + 38.86 + 24.59 + 48.7 + 2343 + 52.0 + + + 1.987 + - + 79.5 + + + 3076 + 36.5 + 5565.636 + 43.8 + 5332 + 2 + 28S + 61.14 + 38.69 + 39.6 + 8062 + 44.2 + + + + + + C4 + Rat Kidney 5 min at 94ºC + 197 + + + + + + 6.3 + 9.98 + 3.04 + 0.8 + 1.2 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.4 + 1088.998 + 4710 + 25 + - + Lower Marker + - + - + 84.5 + 38 + 87.3 + + + 1.384 + - + 55.4 + + + 1394 + 46.3 + 2491.348 + 82.2 + 1980 + 1 + 18S + 45.58 + 28.05 + 48.4 + 2469 + 52.0 + + + 1.652 + - + 66.1 + + + 3080 + 36.1 + 1892.084 + 33.8 + 5750 + 2 + 28S + 54.42 + 33.49 + 39.1 + 8579 + 44.3 + + + + + + D4 + Rat Kidney 10 min at 94ºC + 173 + The upper ribosomal fragment has degraded + + + + 3.9 + 8.76 + 1.62 + 0.2 + 0.1 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.7 + 2504.653 + 4710 + 25 + - + Lower Marker + - + - + 82.9 + 39 + 85.7 + + + 1.487 + - + 59.5 + + + 1713 + 39.3 + 3722.802 + 91.2 + 1918 + 1 + 18S + 91.60 + 34.31 + 47.8 + 5019 + 48.9 + + + 0.136 + - + 5.45 + + + 5214 + 35.6 + 875.197 + 2.96 + 5417 + 2 + 28S + 8.40 + 3.15 + 38.8 + 8349 + 39.0 + + + + + + E4 + Rat Kidney 15 min at 94ºC + 184 + The upper ribosomal fragment has degraded; RINe edited + + + + 2.4 + 9.29 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.6 + 2530.402 + 4710 + 25 + - + Lower Marker + - + - + 82.7 + 38 + 85.6 + + + 0.736 + - + 29.4 + + + 1602 + 44.4 + 2585.937 + 47.0 + 1843 + 1 + 18S edited + 100.00 + 16.03 + 48.0 + 2726 + 49.4 + + + + + + F4 + Rat Kidney 20 min at 94ºC + 177 + The upper ribosomal fragment has degraded + + + + 1.6 + 8.97 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.4 + 2511.444 + 4710 + 25 + - + Lower Marker + - + - + 82.6 + 39 + 85.5 + + + 0.354 + - + 14.1 + + + 1815 + 42.2 + 1483.661 + 22.3 + 1867 + 1 + 18S + 100.00 + 7.97 + 47.8 + 3437 + 48.1 + + + + + + G4 + Rat Kidney 25 min at 94ºC + 168 + The lower ribosomal fragment is missing + ! + + 1.3 + 8.51 + + 01-S027-150626-02-000029 + + + 1.000 + 40.0 + 40.0 + + + 17 + 78.0 + 2694.141 + 4710 + 25 + - + Lower Marker + - + - + 81.2 + 39 + 84.0 + + + + + + H4 + Rat Kidney 30 min at 94ºC + 167 + The lower ribosomal fragment is missing + ! + + 1.0 + 8.62 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 82.2 + 2036.913 + 4710 + 25 + - + Lower Marker + - + - + 85.3 + 38 + 88.1 + + + + + + A5 + Human Universal Reference RNA 0 min at 94ºC + 270 + + + + + + 8.7 + 13.94 + 4.90 + 1.9 + 2.1 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.4 + 1737.651 + 4710 + 25 + - + Lower Marker + - + - + 83.5 + 38 + 86.3 + + + 1.561 + - + 62.5 + + + 1162 + 46.3 + 5104.082 + 102 + 1802 + 1 + 18S + 31.87 + 23.14 + 48.8 + 2349 + 53.2 + + + 3.337 + - + 133 + + + 3527 + 36.0 + 9447.354 + 81.6 + 4811 + 2 + 28S + 68.13 + 49.46 + 40.0 + 8179 + 42.5 + + + + + + B5 + Human Universal Reference RNA 0 min at 94ºC + 271 + + + + + + 8.7 + 14.00 + 4.80 + 1.8 + 2.1 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.0 + 1719.340 + 4710 + 25 + - + Lower Marker + - + - + 84.1 + 38 + 86.9 + + + 1.537 + - + 61.5 + + + 1195 + 46.7 + 5150.995 + 102 + 1781 + 1 + 18S + 32.02 + 22.68 + 49.3 + 2315 + 53.3 + + + 3.263 + - + 131 + + + 3574 + 36.4 + 9527.392 + 80.6 + 4760 + 2 + 28S + 67.98 + 48.15 + 40.4 + 8066 + 42.7 + + + + + + C5 + Human Universal Reference RNA 5 min at 94ºC + 246 + + + + + + 5.5 + 12.73 + 3.31 + 0.6 + 0.4 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.1 + 1872.433 + 4710 + 25 + - + Lower Marker + - + - + 84.1 + 38 + 86.9 + + + 2.367 + - + 94.7 + + + 920 + 47.1 + 4681.205 + 156 + 1781 + 1 + 18S + 71.56 + 38.41 + 49.3 + 2223 + 55.9 + + + 0.941 + - + 37.6 + + + 3954 + 36.3 + 3021.872 + 22.7 + 4881 + 2 + 28S + 28.44 + 15.26 + 40.2 + 8168 + 41.8 + + + + + + D5 + Human Universal Reference RNA 5 min at 94ºC + 253 + + + + + + 5.4 + 13.08 + 3.38 + 0.7 + 0.4 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.7 + 1962.631 + 4710 + 25 + - + Lower Marker + - + - + 82.8 + 38 + 85.6 + + + 2.332 + - + 93.3 + + + 880 + 47.0 + 5109.415 + 160 + 1720 + 1 + 18S + 69.00 + 36.83 + 48.8 + 2061 + 55.4 + + + 1.048 + - + 41.9 + + + 3697 + 36.0 + 3394.460 + 26.7 + 4619 + 2 + 28S + 31.00 + 16.55 + 39.9 + 7886 + 41.7 + + + + + + E5 + Human Universal Reference RNA 15 min at 94ºC + 247 + The upper ribosomal fragment has degraded + + + + 3.8 + 12.75 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.7 + 2044.191 + 4710 + 25 + - + Lower Marker + - + - + 82.8 + 38 + 85.6 + + + 4.463 + - + 179 + + + 673 + 40.0 + 4434.451 + 300 + 1752 + 1 + 18S + 100.00 + 72.36 + 48.6 + 4561 + 58.1 + + + + + + F5 + Human Universal Reference RNA 15 min at 94ºC + 249 + The upper ribosomal fragment has degraded + + + + 3.8 + 12.85 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.1 + 1898.095 + 4710 + 25 + - + Lower Marker + - + - + 83.2 + 38 + 86.1 + + + 3.897 + - + 156 + + + 884 + 40.5 + 4314.033 + 259 + 1771 + 1 + 18S + 100.00 + 62.67 + 48.8 + 4371 + 55.7 + + + + + + G5 + Human Universal Reference RNA 25 min at 94ºC + 246 + The upper ribosomal fragment has degraded + + + + 2.9 + 12.70 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 78.5 + 1916.554 + 4710 + 25 + - + Lower Marker + - + - + 81.6 + 39 + 84.5 + + + 1.545 + - + 61.8 + + + 1631 + 39.9 + 3455.514 + 102 + 1778 + 1 + 18S + 100.00 + 25.14 + 47.8 + 4257 + 48.6 + + + + + + H5 + Human Universal Reference RNA 25 min at 94ºC + 257 + The upper ribosomal fragment has degraded + + + + 3.0 + 13.30 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.9 + 2015.483 + 4710 + 25 + - + Lower Marker + - + - + 82.9 + 38 + 85.6 + + + 1.678 + - + 67.1 + + + 1713 + 40.1 + 3487.250 + 105 + 1882 + 1 + 18S + 100.00 + 26.06 + 47.9 + 4533 + 48.9 + + + + + + A6 + Human Universal Reference RNA 0 min at 94ºC + 274 + + + + + + 8.8 + 14.16 + 5.01 + 1.8 + 2.4 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.6 + 1852.378 + 4710 + 25 + - + Lower Marker + - + - + 82.7 + 38 + 85.4 + + + 1.482 + - + 59.3 + + + 1195 + 46.2 + 5868.617 + 95.5 + 1826 + 1 + 18S + 29.59 + 21.63 + 48.1 + 2247 + 52.3 + + + 3.526 + - + 141 + + + 3318 + 35.1 + 10483.297 + 85.9 + 4828 + 2 + 28S + 70.41 + 51.45 + 39.5 + 8791 + 42.6 + + + + + + B6 + Human Universal Reference RNA 0 min at 94ºC + 290 + + + + + + 8.8 + 15.00 + 4.86 + 1.8 + 2.1 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.6 + 1629.762 + 4710 + 25 + - + Lower Marker + - + - + 84.6 + 38 + 87.4 + + + 1.566 + - + 62.7 + + + 1274 + 46.6 + 5328.079 + 96.4 + 1912 + 1 + 18S + 32.23 + 21.58 + 48.9 + 2424 + 53.0 + + + 3.293 + - + 132 + + + 3885 + 36.3 + 9443.407 + 73.5 + 5270 + 2 + 28S + 67.77 + 45.38 + 39.9 + 8468 + 42.2 + + + + + + C6 + Human Universal Reference RNA 5 min at 94ºC + 284 + + + + + + 5.6 + 14.66 + 3.69 + 0.7 + 0.5 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.3 + 1660.648 + 4710 + 25 + - + Lower Marker + - + - + 83.4 + 38 + 86.2 + + + 2.526 + - + 101 + + + 994 + 46.0 + 4734.503 + 153 + 1949 + 1 + 18S + 68.41 + 35.62 + 47.9 + 2407 + 54.7 + + + 1.167 + - + 46.7 + + + 4265 + 35.7 + 3117.767 + 24.4 + 5633 + 2 + 28S + 31.59 + 16.45 + 38.8 + 8551 + 40.8 + + + + + + D6 + Human Universal Reference RNA 5 min at 94ºC + 267 + + + + + + 5.6 + 13.81 + 3.47 + 0.6 + 0.4 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.6 + 1744.405 + 4710 + 25 + - + Lower Marker + - + - + 83.7 + 38 + 86.5 + + + 2.447 + - + 97.9 + + + 985 + 46.4 + 4874.333 + 151 + 1910 + 1 + 18S + 70.51 + 36.61 + 48.3 + 2330 + 55.0 + + + 1.023 + - + 40.9 + + + 4298 + 36.0 + 3086.386 + 22.0 + 5461 + 2 + 28S + 29.49 + 15.31 + 39.1 + 8384 + 40.9 + + + + + + E6 + Human Universal Reference RNA 15 min at 94ºC + 252 + The upper ribosomal fragment has degraded + + + + 3.9 + 13.01 + 2.68 + 0.2 + 0.1 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.0 + 1759.663 + 4710 + 25 + - + Lower Marker + - + - + 83.1 + 39 + 86.0 + + + 2.488 + - + 99.5 + + + 1573 + 39.8 + 3932.058 + 151 + 1933 + 1 + 18S + 92.92 + 39.51 + 47.8 + 4805 + 49.9 + + + 0.190 + - + 7.59 + + + 5318 + 35.4 + 880.729 + 4.04 + 5525 + 2 + 28S + 7.08 + 3.01 + 38.8 + 8722 + 39.0 + + + + + + F6 + Human Universal Reference RNA 15 min at 94ºC + 245 + The upper ribosomal fragment has degraded + + + + 3.9 + 12.68 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.9 + 1765.919 + 4710 + 25 + - + Lower Marker + - + - + 83.1 + 39 + 85.9 + + + 3.779 + - + 151 + + + 959 + 39.7 + 3991.586 + 227 + 1959 + 1 + 18S + 100.00 + 61.59 + 47.7 + 4834 + 54.8 + + + + + + G6 + Human Universal Reference RNA 25 min at 94ºC + 258 + The upper ribosomal fragment has degraded + + + + 3.1 + 13.31 + + 01-S027-150626-02-000028 + + + 1.000 + 40.0 + 40.0 + + + 17 + 78.4 + 1761.818 + 4710 + 25 + - + Lower Marker + - + - + 81.6 + 39 + 84.5 + + + 1.644 + - + 65.7 + + + 1784 + 39.0 + 3350.863 + 99.5 + 1944 + 1 + 18S + 100.00 + 25.53 + 46.8 + 4810 + 47.7 + + + + + + H6 + Human Universal Reference RNA 25 min at 94ºC + 274 + The upper ribosomal fragment has degraded + + + + 3.0 + 14.34 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.1 + 1909.349 + 4710 + 25 + - + Lower Marker + - + - + 83.1 + 38 + 85.9 + + + 1.693 + - + 67.7 + + + 1794 + 40.0 + 3407.431 + 102 + 1952 + 1 + 18S + 100.00 + 24.76 + 47.8 + 4685 + 48.6 + + + + + + A7 + Human Cerebellum + 159 + + + + + + 7.2 + 8.34 + 2.26 + 1.4 + 1.4 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.7 + 2356.466 + 4710 + 25 + - + Lower Marker + - + - + 84.8 + 38 + 87.6 + + + 0.946 + - + 37.9 + + + 1221 + 47.0 + 3770.480 + 57.6 + 1934 + 1 + 18S + 41.83 + 23.79 + 48.9 + 2356 + 53.6 + + + 1.316 + - + 52.6 + + + 4110 + 36.0 + 5358.301 + 26.9 + 5753 + 2 + 28S + 58.17 + 33.09 + 39.3 + 9007 + 41.9 + + + + + + B7 + Human Adrenal Gland + 129 + + + + + + 9.4 + 6.78 + 2.51 + 1.0 + 1.0 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 20 + 81.2 + 165.037 + 4710 + 25 + - + Lower Marker + - + - + 82.9 + 32 + 84.6 + + + 1.263 + - + 50.5 + + + 1433 + 44.9 + 334.019 + 71.6 + 2074 + 1 + 18S + 50.34 + 39.04 + 47.0 + 2598 + 50.7 + + + 1.246 + - + 49.8 + + + 4420 + 35.1 + 327.571 + 22.9 + 6392 + 2 + 28S + 49.66 + 38.51 + 37.5 + 8898 + 40.3 + + + + + + C7 + Human Foetal Brain + 154 + + + + + + 7.7 + 8.05 + 2.02 + 1.6 + 2.1 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 78.7 + 2627.326 + 4710 + 25 + - + Lower Marker + - + - + 81.9 + 39 + 84.7 + + + 0.659 + - + 26.3 + + + 1554 + 45.6 + 4567.336 + 42.0 + 1844 + 1 + 18S + 32.56 + 17.16 + 47.6 + 2275 + 49.3 + + + 1.365 + - + 54.6 + + + 3855 + 35.8 + 7112.527 + 30.1 + 5338 + 2 + 28S + 67.44 + 35.55 + 38.4 + 7650 + 40.8 + + + + + + D7 + Human Brain + 120 + + + + + + 7.0 + 6.29 + 1.17 + 1.1 + 1.4 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.2 + 2765.930 + 4710 + 25 + - + Lower Marker + - + - + 83.4 + 39 + 86.4 + + + 0.480 + - + 19.2 + + + 1543 + 46.7 + 3538.899 + 30.9 + 1825 + 1 + 18S + 41.10 + 15.99 + 48.6 + 2219 + 50.3 + + + 0.687 + - + 27.5 + + + 4055 + 35.8 + 3787.622 + 14.5 + 5563 + 2 + 28S + 58.90 + 22.92 + 38.9 + 8443 + 41.2 + + + + + + E7 + Human Foetal Liver + 138 + + + + + + 7.2 + 7.21 + 1.50 + 1.1 + 1.4 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.8 + 2673.075 + 4710 + 25 + - + Lower Marker + - + - + 83.0 + 39 + 85.9 + + + 0.625 + - + 25.0 + + + 1540 + 46.5 + 4749.358 + 41.1 + 1790 + 1 + 18S + 41.80 + 18.17 + 48.5 + 2197 + 50.0 + + + 0.870 + - + 34.8 + + + 3777 + 36.7 + 5104.060 + 19.5 + 5249 + 2 + 28S + 58.20 + 25.31 + 39.0 + 7212 + 41.6 + + + + + + F7 + Human Heart + 165 + + + + + + 7.6 + 8.65 + 2.40 + 1.1 + 1.1 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.8 + 2304.720 + 4710 + 25 + - + Lower Marker + - + - + 84.0 + 39 + 86.9 + + + 1.124 + - + 45.0 + + + 1155 + 47.3 + 5208.949 + 74.0 + 1787 + 1 + 18S + 46.85 + 27.24 + 49.2 + 2166 + 53.6 + + + 1.275 + - + 51.0 + + + 3739 + 36.0 + 5803.442 + 29.4 + 5099 + 2 + 28S + 53.15 + 30.91 + 39.8 + 8430 + 42.2 + + + + + + G7 + Human Salivary Gland + 140 + + + + + + 7.1 + 7.35 + 1.56 + 0.9 + 1.3 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 77.4 + 2650.185 + 4710 + 25 + - + Lower Marker + - + - + 80.5 + 39 + 83.4 + + + 0.679 + - + 27.1 + + + 1459 + 45.9 + 5132.335 + 46.4 + 1719 + 1 + 18S + 43.49 + 19.37 + 47.4 + 2007 + 49.0 + + + 0.882 + - + 35.3 + + + 3652 + 34.8 + 4647.263 + 20.9 + 4952 + 2 + 28S + 56.51 + 25.17 + 38.2 + 7923 + 40.5 + + + + + + H7 + Human Placenta + 282 + + + + + + 7.9 + 14.80 + 3.98 + 1.5 + 1.9 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.8 + 1787.828 + 4710 + 25 + - + Lower Marker + - + - + 82.9 + 38 + 85.6 + + + 1.370 + - + 54.8 + + + 1589 + 46.1 + 5741.198 + 87.3 + 1847 + 1 + 18S + 34.43 + 19.42 + 48.1 + 2298 + 49.6 + + + 2.609 + - + 104 + + + 3794 + 35.9 + 8629.987 + 61.2 + 5019 + 2 + 28S + 65.57 + 36.97 + 39.3 + 8037 + 41.5 + + + + + + A8 + Human Skeletal Muscle + 141 + + + + + + 7.4 + 7.41 + 1.99 + 1.1 + 1.1 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.3 + 2687.465 + 4710 + 25 + - + Lower Marker + - + - + 83.4 + 38 + 86.2 + + + 0.968 + - + 38.7 + + + 1244 + 46.1 + 4695.710 + 57.9 + 1967 + 1 + 18S + 48.63 + 27.42 + 47.8 + 2383 + 52.4 + + + 1.023 + - + 40.9 + + + 4320 + 34.9 + 5029.667 + 20.1 + 6001 + 2 + 28S + 51.37 + 28.96 + 38.3 + 9461 + 40.7 + + + + + + B8 + Human Spleen + 139 + + + + + + 7.1 + 7.26 + 1.49 + 1.1 + 1.4 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.5 + 2960.208 + 4710 + 25 + - + Lower Marker + - + - + 82.6 + 38 + 85.4 + + + 0.611 + - + 24.5 + + + 1621 + 45.9 + 5040.825 + 38.5 + 1867 + 1 + 18S + 41.17 + 17.65 + 47.8 + 2303 + 49.3 + + + 0.874 + - + 34.9 + + + 4063 + 35.2 + 5305.345 + 18.4 + 5590 + 2 + 28S + 58.83 + 25.22 + 38.4 + 8627 + 40.7 + + + + + + C8 + Human Thymus + 162 + + + + + + 7.9 + 8.49 + 2.61 + 1.3 + 1.6 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 78.9 + 2594.633 + 4710 + 25 + - + Lower Marker + - + - + 82.0 + 38 + 84.8 + + + 0.991 + - + 39.6 + + + 1176 + 45.9 + 5391.907 + 63.5 + 1838 + 1 + 18S + 37.99 + 24.48 + 47.7 + 2219 + 52.1 + + + 1.618 + - + 64.7 + + + 3253 + 34.8 + 6841.327 + 35.9 + 5305 + 2 + 28S + 62.01 + 39.97 + 38.5 + 8753 + 42.4 + + + + + + D8 + Human Uterus + 152 + + + + + + 7.3 + 7.94 + 1.72 + 1.0 + 1.4 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 80.1 + 2457.259 + 4710 + 25 + - + Lower Marker + - + - + 83.2 + 39 + 86.1 + + + 0.717 + - + 28.7 + + + 1597 + 46.3 + 4857.858 + 44.6 + 1891 + 1 + 18S + 41.77 + 18.93 + 48.1 + 2307 + 49.8 + + + 1.000 + - + 40.0 + + + 4000 + 35.7 + 4988.489 + 20.6 + 5703 + 2 + 28S + 58.23 + 26.40 + 38.6 + 8448 + 41.2 + + + + + + E8 + Rat Kidney + 127 + + + + + + 7.3 + 6.65 + 1.43 + 1.0 + 1.3 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.5 + 2550.325 + 4710 + 25 + - + Lower Marker + - + - + 82.7 + 39 + 85.6 + + + 0.615 + - + 24.6 + + + 1570 + 46.1 + 4294.450 + 38.5 + 1878 + 1 + 18S + 42.89 + 19.39 + 47.8 + 2270 + 49.6 + + + 0.819 + - + 32.8 + + + 4143 + 35.0 + 4335.758 + 16.7 + 5772 + 2 + 28S + 57.11 + 25.82 + 38.2 + 8903 + 40.6 + + + + + + F8 + Human Universal Reference RNA + 261 + + + + + + 8.9 + 13.69 + 4.61 + 1.9 + 2.4 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 79.0 + 1477.117 + 4710 + 25 + - + Lower Marker + - + - + 82.2 + 39 + 84.8 + + + 1.371 + - + 54.8 + + + 1237 + 45.5 + 4638.590 + 85.1 + 1895 + 1 + 18S + 29.76 + 21.00 + 47.5 + 2342 + 51.7 + + + 3.237 + - + 129 + + + 3801 + 34.7 + 8620.227 + 71.8 + 5307 + 2 + 28S + 70.24 + 49.57 + 38.6 + 8975 + 41.1 + + + + + + G8 + Mouse Heart + 84.7 + + + + + + 8.6 + 4.44 + 1.31 + 1.3 + 2.1 + + 01-S027-150626-02-000019 + + + 1.000 + 40.0 + 40.0 + + + 17 + 81.0 + 7472.726 + 4710 + 25 + - + Lower Marker + - + - + 84.2 + 39 + 87.0 + + + 0.421 + - + 16.9 + + + 1648 + 46.3 + 9288.971 + 26.4 + 1876 + 1 + 18S + 32.23 + 19.90 + 48.8 + 2425 + 50.1 + + + 0.886 + - + 35.4 + + + 3558 + 36.1 + 11763.699 + 18.9 + 5501 + 2 + 28S + 67.77 + 41.84 + 39.3 + 8426 + 42.8 + + + + + + H8 + Rat Heart + 346 + + + + + + 8.5 + 18.27 + 5.22 + 1.9 + 2.7 + + 01-S027-150626-02-000032 + + + 1.000 + 40.0 + 40.0 + + + 17 + 77.2 + 1277.837 + 4710 + 25 + - + Lower Marker + - + - + 80.1 + 38 + 82.7 + + + 1.404 + - + 56.2 + + + 1465 + 45.0 + 4219.353 + 95.6 + 1727 + 1 + 18S + 26.90 + 16.24 + 47.1 + 2151 + 48.7 + + + 3.816 + - + 153 + + + 3245 + 35.7 + 7909.559 + 104 + 4338 + 2 + 28S + 73.10 + 44.14 + 39.0 + 6864 + 41.4 + + + + + + \ No newline at end of file diff --git a/tests/parsers/agilent_tapestation_analysis/testdata/agilent_tapestation_analysis_example_02.xml b/tests/parsers/agilent_tapestation_analysis/testdata/agilent_tapestation_analysis_example_02.xml new file mode 100644 index 000000000..2d7d5e68c --- /dev/null +++ b/tests/parsers/agilent_tapestation_analysis/testdata/agilent_tapestation_analysis_example_02.xml @@ -0,0 +1,2105 @@ + + + + \\Mac\Home\Documents\Agilent\TapeStation Data\Demo Files\gDNA-Tubes-16.gDNA + Genomic DNA + This is only a test run + + + 2020-09-20T04:15:12-05:00 + 5.1.0.47235 + + + + + + 01-S025-200617-01-899752 + 2020-10-04T23:59:59 + First run 20-Sep-2020, 1 run(s) performed + 26.4 + 205 + 2020-09-20T03:52:58-05:00 + + + + + + TapeStation User + 65536 + DEDAB00201 + TapeStationPC + 3.2.0.37131 + Microsoft Windows 10 Enterprise + 3.2.0.37131 + + + + + + ng/µl + nmol/l + bp + + + + + A1 + Ladder + 58.2 + Ladder + + + + - + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 68 + 80.6 + 261.379 + 131 + 100 + - + Lower Marker + - + - + 83.2 + 158 + 85.4 + + + 0.58 + - + 4.90 + + + 184 + 75.7 + 169.959 + 30.1 + 250 + 1 + + + 8.56 + 8.41 + 78.0 + 319 + 79.7 + + + 0.56 + - + 4.75 + + + 335 + 71.4 + 175.670 + 18.3 + 400 + 2 + + + 8.31 + 8.16 + 73.7 + 501 + 75.3 + + + 0.53 + - + 4.53 + + + 518 + 67.4 + 176.440 + 11.6 + 600 + 3 + + + 7.92 + 7.78 + 69.6 + 752 + 71.0 + + + 0.53 + - + 4.49 + + + 779 + 64.1 + 188.527 + 7.68 + 900 + 4 + + + 7.85 + 7.71 + 65.7 + 1070 + 67.0 + + + 0.52 + - + 4.42 + + + 1070 + 61.9 + 204.901 + 5.67 + 1200 + 5 + + + 7.73 + 7.59 + 63.0 + 1361 + 64.1 + + + 0.58 + - + 4.96 + + + 1361 + 59.1 + 208.074 + 5.09 + 1500 + 6 + + + 8.68 + 8.52 + 61.0 + 1807 + 61.9 + + + 0.52 + - + 4.42 + + + 1807 + 56.6 + 201.652 + 3.40 + 2000 + 7 + + + 7.72 + 7.59 + 58.1 + 2290 + 59.1 + + + 0.50 + - + 4.26 + + + 2290 + 54.3 + 200.443 + 2.62 + 2500 + 8 + + + 7.45 + 7.32 + 55.7 + 2809 + 56.6 + + + 0.53 + - + 4.49 + + + 2809 + 51.4 + 203.746 + 2.30 + 3000 + 9 + + + 7.85 + 7.71 + 53.5 + 3634 + 54.3 + + + 0.49 + - + 4.20 + + + 3634 + 48.3 + 196.276 + 1.62 + 4000 + 10 + + + 7.35 + 7.22 + 50.3 + 5613 + 51.4 + + + 0.50 + - + 4.29 + + + 5613 + 45.6 + 214.744 + 0.942 + 7000 + 11 + + + 7.49 + 7.36 + 47.0 + 11119 + 48.3 + + + 0.51 + - + 4.34 + + + 11119 + 43.0 + 193.805 + 0.445 + 15000 + 12 + + + 7.58 + 7.45 + 44.6 + 24520 + 45.6 + + + 0.37 + - + 3.15 + + + 24520 + 39.8 + 122.569 + 0.100 + 48500 + 13 + + + 5.51 + 5.41 + 42.1 + 78534 + 43.0 + + + + + + B1 + gDNA sample 1 + 27.2 + + + + + + 9.5 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 67 + 81.3 + 542.635 + 131 + 100 + - + Lower Marker + - + - + 84.0 + 160 + 86.3 + + + 2.33 + - + 19.8 + High Quality DNA + 22602 + 36.5 + 730.682 + - + >60000 + 1 + + + 98.40 + 72.91 + 39.9 + >60000 + 43.7 + + + 0.04 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.8 + - + - + + + + + 101 + 1000 + 395 + 1.11 + 65.8 + 4.09 + 0.13 + Degraded + True + + + 1001 + 3000 + 1944 + 0.862 + 0.765 + 3.17 + 0.10 + Partially Degraded + True + + + 3001 + >60000 + - + 22.2 + 0.792 + 81.74 + 2.61 + Good quality + True + + + + + C1 + gDNA sample 2 + 28.1 + + + + + + 5.9 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 67 + 81.4 + 608.498 + 131 + 100 + - + Lower Marker + - + - + 83.7 + 151 + 86.0 + + + 1.46 + - + 12.4 + + + 3782 + 40.9 + 234.755 + 1.87 + 10247 + 1 + + + 91.98 + 44.22 + 46.1 + >60000 + 51.3 + + + 0.13 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.5 + - + - + + + + + 101 + 1000 + 543 + 4.01 + 73.8 + 14.24 + 0.47 + Degraded + True + + + 1001 + 3000 + 1956 + 7.76 + 6.74 + 27.59 + 0.91 + Partially Degraded + True + + + 3001 + 60000 + 11569 + 14.3 + 3.18 + 50.77 + 1.68 + Good quality + True + + + + + D1 + gDNA sample 2 + 25.5 + + + + + + 5.8 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 67 + 81.2 + 796.768 + 131 + 100 + - + Lower Marker + - + - + 83.3 + 145 + 85.6 + + + 1.33 + - + 11.3 + + + 3812 + 41.1 + 284.723 + 2.05 + 8525 + 1 + + + 92.30 + 44.38 + 46.5 + >60000 + 50.9 + + + 0.11 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.6 + - + - + + + + + 101 + 1000 + 539 + 3.51 + 67.1 + 13.73 + 0.41 + Degraded + True + + + 1001 + 3000 + 1966 + 7.53 + 6.51 + 29.47 + 0.89 + Partially Degraded + True + + + 3001 + 60000 + 10428 + 13.4 + 3.12 + 52.35 + 1.57 + Good quality + True + + + + + E1 + gDNA sample 3 + 38.7 + + + + + + 4.0 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 68 + 82.3 + 450.190 + 131 + 100 + - + Lower Marker + - + - + 85.0 + 157 + 87.2 + + + 1.48 + - + 12.6 + + + 801 + 59.4 + 184.889 + 10.2 + 1893 + 1 + + + 99.01 + 32.56 + 59.9 + 1974 + 68.2 + + + 0.01 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.5 + - + - + + + + + 101 + 1000 + 598 + 7.65 + 86.7 + 19.80 + 0.90 + Degraded + True + + + 1001 + 3000 + 1924 + 18.9 + 16.6 + 48.77 + 2.22 + Partially Degraded + True + + + 3001 + >60000 + - + 11.5 + 3.65 + 29.65 + 1.35 + Good quality + True + + + + + F1 + gDNA sample 3 + 39.0 + + + + + + 4.1 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 68 + 82.2 + 447.837 + 131 + 100 + - + Lower Marker + - + - + 84.9 + 159 + 87.2 + + + 1.47 + - + 12.5 + + + 822 + 59.5 + 185.166 + 10.2 + 1893 + 1 + + + 99.17 + 32.09 + 59.8 + 1957 + 67.9 + + + 0.01 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.6 + - + - + + + + + 101 + 1000 + 607 + 7.74 + 87.7 + 19.84 + 0.91 + Degraded + True + + + 1001 + 3000 + 1925 + 19.3 + 17.0 + 49.44 + 2.27 + Partially Degraded + True + + + 3001 + >60000 + - + 11.3 + 3.77 + 28.97 + 1.33 + Good quality + True + + + + + G1 + gDNA sample 4 + 33.7 + + + + + + 2.0 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 67 + 82.2 + 615.312 + 131 + 100 + - + Lower Marker + - + - + 84.4 + 146 + 86.7 + + + 2.96 + - + 25.2 + Degraded DNA + 425 + 58.1 + 276.256 + 39.4 + 983 + 1 + + + 100.00 + 74.75 + 65.8 + 2157 + 74.1 + + + + + 101 + 1000 + 583 + 20.2 + 128 + 59.94 + 2.37 + Degraded + True + + + 1001 + 3000 + 1511 + 12.1 + 13.4 + 36.08 + 1.43 + Partially Degraded + True + + + 3001 + >60000 + - + 0.994 + 0.295 + 2.95 + 0.12 + Good quality + True + + + + + H1 + Ladder + 72.9 + Ladder run as sample + + + + - + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 68 + 83.0 + 310.264 + 131 + 100 + - + Lower Marker + - + - + 85.0 + 141 + 87.3 + + + 0.64 + - + 5.45 + + + 180 + 77.9 + 235.809 + 33.5 + 250 + 1 + + + 7.80 + 7.47 + 79.7 + 301 + 81.6 + + + 0.63 + - + 5.33 + + + 330 + 73.7 + 260.188 + 20.8 + 394 + 2 + + + 7.63 + 7.31 + 75.4 + 464 + 77.1 + + + 0.63 + - + 5.32 + + + 509 + 69.6 + 281.447 + 13.8 + 593 + 3 + + + 7.61 + 7.30 + 71.2 + 696 + 72.8 + + + 0.64 + - + 5.47 + + + 754 + 65.9 + 311.772 + 9.52 + 884 + 4 + + + 7.84 + 7.51 + 67.3 + 1018 + 68.8 + + + 0.65 + - + 5.53 + + + 1018 + 63.6 + 328.437 + 7.19 + 1184 + 5 + + + 7.92 + 7.59 + 64.5 + 1315 + 65.9 + + + 0.68 + - + 5.75 + + + 1315 + 61.0 + 339.073 + 5.99 + 1475 + 6 + + + 8.23 + 7.89 + 62.5 + 1703 + 63.6 + + + 0.66 + - + 5.57 + + + 1717 + 58.3 + 333.179 + 4.37 + 1962 + 7 + + + 7.98 + 7.65 + 59.5 + 2193 + 60.9 + + + 0.63 + - + 5.35 + + + 2193 + 56.0 + 331.442 + 3.34 + 2467 + 8 + + + 7.66 + 7.35 + 57.0 + 2692 + 58.3 + + + 0.65 + - + 5.54 + + + 2692 + 53.3 + 341.250 + 2.86 + 2977 + 9 + + + 7.93 + 7.60 + 54.7 + 3374 + 56.0 + + + 0.62 + - + 5.23 + + + 3538 + 50.2 + 330.535 + 2.04 + 3950 + 10 + + + 7.48 + 7.17 + 51.6 + 4930 + 52.8 + + + 0.62 + - + 5.29 + + + 5457 + 46.8 + 326.132 + 1.18 + 6883 + 11 + + + 7.57 + 7.25 + 48.2 + 10146 + 49.6 + + + 0.63 + - + 5.32 + + + 10146 + 44.6 + 323.347 + 0.540 + 15171 + 12 + + + 7.62 + 7.30 + 45.5 + 20377 + 46.8 + + + 0.55 + - + 4.71 + + + 20377 + 41.1 + 203.418 + 0.150 + 48445 + 13 + + + 6.74 + 6.46 + 43.0 + >60000 + 44.6 + + + + + 101 + 1000 + 522 + 22.6 + 138 + 31.05 + 2.66 + Degraded + True + + + 1001 + 3000 + 1935 + 26.1 + 23.2 + 35.75 + 3.07 + Partially Degraded + True + + + 3001 + >60000 + - + 22.5 + 5.11 + 30.86 + 2.65 + Good quality + True + + + + + A2 + gDNA sample 1 + 31.2 + + + + + + 9.5 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 69 + 82.0 + 496.571 + 131 + 100 + - + Lower Marker + - + - + 84.7 + 160 + 86.9 + + + 2.69 + - + 22.9 + + + 20893 + 37.0 + 783.691 + - + >60000 + 1 + + + 98.10 + 73.34 + 40.5 + >60000 + 44.3 + + + 0.05 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.6 + - + - + + + + + 101 + 1000 + 414 + 1.37 + 69.6 + 4.40 + 0.16 + Degraded + True + + + 1001 + 3000 + 1945 + 0.704 + 0.657 + 2.26 + 0.08 + Partially Degraded + True + + + 3001 + >60000 + - + 25.0 + 0.951 + 80.23 + 2.94 + Good quality + True + + + + + B2 + gDNA sample 1 + 29.4 + + + + + + 9.6 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 68 + 81.9 + 603.991 + 131 + 100 + - + Lower Marker + - + - + 84.2 + 148 + 86.4 + + + 2.51 + - + 21.3 + + + 20035 + 37.2 + 823.702 + - + >60000 + 1 + + + 98.05 + 72.47 + 40.3 + >60000 + 44.2 + + + 0.05 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.5 + - + - + + + + + 101 + 1000 + 382 + 1.18 + 64.2 + 4.00 + 0.14 + Degraded + True + + + 1001 + 3000 + 1974 + 0.695 + 0.613 + 2.36 + 0.08 + Partially Degraded + True + + + 3001 + >60000 + - + 24.1 + 0.981 + 81.74 + 2.83 + Good quality + True + + + + + C2 + gDNA sample 2 + 32.8 + + + + + + 5.9 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 68 + 82.2 + 563.890 + 131 + 100 + - + Lower Marker + - + - + 84.5 + 148 + 86.7 + + + 1.62 + - + 13.8 + + + 3987 + 41.4 + 242.520 + 2.19 + 9709 + 1 + + + 92.51 + 42.15 + 46.7 + >60000 + 51.1 + + + 0.13 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.5 + - + - + + + + + 101 + 1000 + 526 + 4.50 + 77.1 + 13.74 + 0.53 + Degraded + True + + + 1001 + 3000 + 1966 + 9.04 + 7.78 + 27.60 + 1.06 + Partially Degraded + True + + + 3001 + >60000 + - + 17.1 + 3.73 + 52.27 + 2.01 + Good quality + True + + + + + D2 + gDNA sample 2 + 29.3 + + + + + + 5.9 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 68 + 83.2 + 616.923 + 131 + 100 + - + Lower Marker + - + - + 85.3 + 144 + 87.6 + + + 1.53 + - + 13.0 + + + 3888 + 41.8 + 238.524 + 2.03 + 9877 + 1 + + + 92.51 + 44.50 + 47.1 + >60000 + 51.9 + + + 0.12 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.6 + - + - + + + + + 101 + 1000 + 542 + 3.81 + 74.4 + 13.04 + 0.45 + Degraded + True + + + 1001 + 3000 + 1976 + 8.22 + 7.23 + 28.11 + 0.97 + Partially Degraded + True + + + 3001 + >60000 + - + 15.8 + 3.50 + 53.94 + 1.86 + Good quality + True + + + + + E2 + gDNA sample 3 + 36.4 + + + + + + 4.1 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 68 + 81.7 + 352.039 + 131 + 100 + - + Lower Marker + - + - + 84.7 + 167 + 86.9 + + + 0.34 + - + 2.91 + + + 1717 + 59.1 + 141.232 + 2.32 + 1932 + 1 + + + 95.54 + 8.00 + 59.5 + 2014 + 60.7 + + + 0.02 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.3 + - + - + + + + + 101 + 1000 + 601 + 6.96 + 87.5 + 19.12 + 0.82 + Degraded + True + + + 1001 + 3000 + 1928 + 17.1 + 15.1 + 46.97 + 2.01 + Partially Degraded + True + + + 3001 + >60000 + - + 10.5 + 3.41 + 28.79 + 1.23 + Good quality + True + + + + + F2 + gDNA sample 3 + 35.0 + + + + + + 4.0 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 67 + 82.9 + 438.814 + 131 + 100 + - + Lower Marker + - + - + 85.2 + 148 + 87.5 + + + 1.29 + - + 11.0 + + + 825 + 59.8 + 154.876 + 9.16 + 1848 + 1 + + + 99.41 + 31.41 + 60.3 + 1927 + 68.0 + + + 0.01 + - + - + + + - + - + - + - + - + 2 + Sample Well + - + - + 4.5 + - + - + + + + + 101 + 1000 + 587 + 7.23 + 86.5 + 20.65 + 0.85 + Degraded + True + + + 1001 + 3000 + 1917 + 17.4 + 15.5 + 49.60 + 2.04 + Partially Degraded + True + + + 3001 + >60000 + - + 10.2 + 3.45 + 29.01 + 1.19 + Good quality + True + + + + + G2 + gDNA sample 4 + 34.6 + + + + + + 2.1 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 67 + 80.2 + 468.435 + 131 + 100 + - + Lower Marker + - + - + 82.3 + 146 + 84.6 + + + 3.02 + - + 25.6 + + + 436 + 55.7 + 212.649 + 36.4 + 1084 + 1 + + + 100.00 + 74.02 + 63.3 + 2356 + 72.0 + + + + + 101 + 1000 + 576 + 19.3 + 124 + 55.73 + 2.27 + Degraded + True + + + 1001 + 3000 + 1572 + 13.7 + 14.7 + 39.44 + 1.61 + Partially Degraded + True + + + 3001 + >60000 + - + 1.50 + 0.495 + 4.32 + 0.18 + Good quality + True + + + + + H2 + gDNA sample 4 + 30.9 + + + + + + 2.0 + 01-S025-180717-01-899752 + + + 1.00 + 8.50 + 8.50 + + + 67 + 80.5 + 665.456 + 131 + 100 + - + Lower Marker + - + - + 82.7 + 148 + 85.0 + + + 2.73 + - + 23.2 + + + 433 + 56.5 + 284.817 + 34.4 + 1038 + 1 + + + 100.00 + 75.08 + 63.9 + 2244 + 72.4 + + + + + 101 + 1000 + 586 + 18.4 + 121 + 59.58 + 2.17 + Degraded + True + + + 1001 + 3000 + 1526 + 11.4 + 12.5 + 36.86 + 1.34 + Partially Degraded + True + + + 3001 + >60000 + - + 0.979 + 0.315 + 3.17 + 0.12 + Good quality + True + + + + + \ No newline at end of file From 406b73bd60b95d441ca7d6464d9680c53b16affe Mon Sep 17 00:00:00 2001 From: Sebastian Lopez Date: Tue, 11 Jun 2024 14:31:38 -0500 Subject: [PATCH 3/8] feat: add electrophoresis schema (#455) Add new Electrophoresis BENCHLING/2024/06 schema. --- CHANGELOG.md | 2 +- .../models/adm/electrophoresis/__init__.py | 0 .../benchling/_2024/_06/__init__.py | 0 .../benchling/_2024/_06/electrophoresis.py | 320 + .../benchling/_2024/__init__.py | 0 .../adm/electrophoresis/benchling/__init__.py | 0 .../models/shared/definitions/custom.py | 11 + .../models/shared/definitions/units.py | 5 + .../BENCHLING/2024/06/CHANGE_NOTES.md | 3 + .../2024/06/electrophoresis.schema.json | 11888 ++++++++++++++++ .../schemas/shared/definitions/custom.json | 20 + .../schemas/shared/definitions/units.json | 16 +- 12 files changed, 12262 insertions(+), 3 deletions(-) create mode 100644 src/allotropy/allotrope/models/adm/electrophoresis/__init__.py create mode 100644 src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/__init__.py create mode 100644 src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/electrophoresis.py create mode 100644 src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/__init__.py create mode 100644 src/allotropy/allotrope/models/adm/electrophoresis/benchling/__init__.py create mode 100644 src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/CHANGE_NOTES.md create mode 100644 src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/electrophoresis.schema.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 295dbcfb1..7af8b174c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added - +- Add Electrophoresis BENCHLING/2024/06 schema. - Added github enforcement that CHANGELOG.md is updated - Added test files Agilent TapeStation Analysis diff --git a/src/allotropy/allotrope/models/adm/electrophoresis/__init__.py b/src/allotropy/allotrope/models/adm/electrophoresis/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/__init__.py b/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/electrophoresis.py b/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/electrophoresis.py new file mode 100644 index 000000000..e6c8d93e7 --- /dev/null +++ b/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/electrophoresis.py @@ -0,0 +1,320 @@ +# generated by datamodel-codegen: +# filename: electrophoresis.schema.json +# timestamp: 2024-06-06T23:49:05+00:00 + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Any + +from allotropy.allotrope.models.shared.definitions.custom import ( + TQuantityValueDegreeCelsius, + TQuantityValueKiloDalton, + TQuantityValueMilliAbsorbanceUnit, + TQuantityValueNanometer, + TQuantityValueNumber, + TQuantityValuePercent, + TQuantityValueRelativeFluorescenceUnit, + TQuantityValueSecondTime, + TQuantityValueUnitless, +) +from allotropy.allotrope.models.shared.definitions.definitions import ( + TClass, + TDatacube, + TDateTimeStampValue, + TStatisticDatumRole, + TStringValue, + TUnit, +) + + +@dataclass(kw_only=True) +class DiagnosticTraceDocumentItem: + description: Any + + +@dataclass(kw_only=True) +class DiagnosticTraceAggregateDocument: + diagnostic_trace_document: list[DiagnosticTraceDocumentItem] | None = None + + +@dataclass(kw_only=True) +class AdmCoreREC202309ManifestSchema: + vocabulary: list[str] + json_schemas: list[str] + field_id: str | None = None + field_type: str | None = None + shapes: list[str] | None = None + + +@dataclass(kw_only=True) +class OrderedItem: + field_index: int | None = None + + +@dataclass(kw_only=True) +class DataSourceDocumentItem: + data_source_identifier: TStringValue + data_source_feature: TStringValue + field_index: int | None = None + + +@dataclass(kw_only=True) +class DataSourceAggregateDocument: + data_source_document: list[DataSourceDocumentItem] + + +@dataclass(kw_only=True) +class ProcessedDataDocumentItem1(OrderedItem): + data_processing_document: dict[str, Any] | None = None + data_source_aggregate_document: DataSourceAggregateDocument | None = None + processed_data_identifier: TStringValue | None = None + + +@dataclass(kw_only=True) +class ProcessedDataAggregateDocument: + processed_data_document: list[ProcessedDataDocumentItem1] + + +@dataclass(kw_only=True) +class StatisticsDocumentItem: + statistical_feature: TClass + + +@dataclass(kw_only=True) +class StatisticsAggregateDocument: + statistics_document: list[StatisticsDocumentItem] | None = None + + +@dataclass(kw_only=True) +class TQuantityValueModel: + value: float + unit: TUnit + has_statistic_datum_role: TStatisticDatumRole | None = None + field_type: TClass | None = None + + +@dataclass(kw_only=True) +class DeviceDocumentItem: + device_type: TStringValue + device_identifier: TStringValue | None = None + model_number: TStringValue | None = None + product_manufacturer: TStringValue | None = None + brand_name: TStringValue | None = None + equipment_serial_number: TStringValue | None = None + firmware_version: TStringValue | None = None + field_index: int | None = None + + +@dataclass(kw_only=True) +class DeviceSystemDocument: + asset_management_identifier: TStringValue + description: Any | None = None + brand_name: TStringValue | None = None + product_manufacturer: TStringValue | None = None + device_identifier: TStringValue | None = None + model_number: TStringValue | None = None + equipment_serial_number: TStringValue | None = None + firmware_version: TStringValue | None = None + device_document: list[DeviceDocumentItem] | None = None + + +@dataclass(kw_only=True) +class DataSystemDocument: + data_system_instance_identifier: TStringValue | None = None + file_name: TStringValue | None = None + UNC_path: TStringValue | None = None + software_name: TStringValue | None = None + software_version: TStringValue | None = None + ASM_converter_name: TStringValue | None = None + ASM_converter_version: TStringValue | None = None + + +@dataclass(kw_only=True) +class DeviceControlDocumentItem: + device_type: TStringValue + device_identifier: TStringValue | None = None + detection_type: TStringValue | None = None + product_manufacturer: TStringValue | None = None + brand_name: TStringValue | None = None + equipment_serial_number: TStringValue | None = None + model_number: TStringValue | None = None + firmware_version: TStringValue | None = None + field_index: int | None = None + detector_wavelength_setting: TQuantityValueNanometer | None = None + detector_bandwidth_setting: TQuantityValueNanometer | None = None + excitation_wavelength_setting: TQuantityValueNanometer | None = None + excitation_bandwidth_setting: TQuantityValueNanometer | None = None + + +@dataclass(kw_only=True) +class DeviceControlAggregateDocument: + device_control_document: list[DeviceControlDocumentItem] + + +@dataclass(kw_only=True) +class SampleDocument: + sample_identifier: TStringValue + description: Any | None = None + batch_identifier: TStringValue | None = None + sample_role_type: TClass | None = None + written_name: TStringValue | None = None + location_identifier: TStringValue | None = None + + +@dataclass(kw_only=True) +class PeakItem: + peak_identifier: TStringValue + peak_name: TStringValue | None = None + written_name: TStringValue | None = None + peak_height: TQuantityValueMilliAbsorbanceUnit | TQuantityValueRelativeFluorescenceUnit | None = ( + None + ) + relative_peak_height: TQuantityValueKiloDalton | TQuantityValueNumber | TQuantityValueSecondTime | None = ( + None + ) + peak_start: TQuantityValueKiloDalton | TQuantityValueNumber | TQuantityValueSecondTime | None = ( + None + ) + peak_end: TQuantityValueKiloDalton | TQuantityValueNumber | TQuantityValueSecondTime | None = ( + None + ) + peak_position: TQuantityValueKiloDalton | TQuantityValueNumber | TQuantityValueSecondTime | None = ( + None + ) + peak_area: TQuantityValueUnitless | None = None + relative_peak_area: TQuantityValuePercent | None = None + relative_corrected_peak_area: TQuantityValuePercent | None = None + comment: TStringValue | None = None + field_index: int | None = None + + +@dataclass(kw_only=True) +class PeakList: + peak: list[PeakItem] + + +@dataclass(kw_only=True) +class DataRegionDocumentItem: + region_identifier: TStringValue + region_name: TStringValue | None = None + written_name: TStringValue | None = None + region_start: TQuantityValueKiloDalton | TQuantityValueNumber | TQuantityValueSecondTime | None = ( + None + ) + region_end: TQuantityValueKiloDalton | TQuantityValueNumber | TQuantityValueSecondTime | None = ( + None + ) + region_area: TQuantityValueUnitless | None = None + relative_region_area: TQuantityValuePercent | None = None + comment: TStringValue | None = None + + +@dataclass(kw_only=True) +class DataRegionAggregateDocument: + data_region_document: list[DataRegionDocumentItem] + + +@dataclass(kw_only=True) +class ImageDocumentItem: + experimental_data_identifier: TStringValue | None = None + field_index: int | None = None + + +@dataclass(kw_only=True) +class ImageAggregateDocument: + image_document: list[ImageDocumentItem] + + +@dataclass(kw_only=True) +class ErrorDocumentItem: + error: TStringValue + error_feature: TStringValue | None = None + + +@dataclass(kw_only=True) +class ErrorAggregateDocument: + error_document: list[ErrorDocumentItem] | None = None + + +@dataclass(kw_only=True) +class CalculatedDataDocumentItem: + calculated_data_name: TStringValue + calculated_result: TQuantityValueModel + data_source_aggregate_document: DataSourceAggregateDocument | None = None + calculated_data_identifier: TStringValue | None = None + calculation_description: TStringValue | None = None + field_index: int | None = None + + +@dataclass(kw_only=True) +class CalculatedDataAggregateDocument: + calculated_data_document: list[CalculatedDataDocumentItem] + + +@dataclass(kw_only=True) +class ProcessedDataDocumentItem: + peak_list: PeakList + data_processing_document: dict[str, Any] | None = None + data_source_aggregate_document: DataSourceAggregateDocument | None = None + processed_data_identifier: TStringValue | None = None + field_index: int | None = None + derived_electropherogram_data_cube: TDatacube | None = None + data_region_aggregate_document: DataRegionAggregateDocument | None = None + + +@dataclass(kw_only=True) +class ProcessedDataAggregateDocument1: + processed_data_document: list[ProcessedDataDocumentItem] + + +@dataclass(kw_only=True) +class MeasurementDocumentItem: + measurement_time: TDateTimeStampValue + measurement_identifier: TStringValue + device_control_aggregate_document: DeviceControlAggregateDocument + sample_document: SampleDocument + processed_data_aggregate_document: ProcessedDataAggregateDocument1 + detection_type: TStringValue | None = None + calculated_data_aggregate_document: CalculatedDataAggregateDocument | None = None + statistics_aggregate_document: StatisticsAggregateDocument | None = None + compartment_temperature: TQuantityValueDegreeCelsius | None = None + electropherogram_data_cube: TDatacube | None = None + image_aggregate_document: ImageAggregateDocument | None = None + error_aggregate_document: ErrorAggregateDocument | None = None + + +@dataclass(kw_only=True) +class MeasurementAggregateDocument: + measurement_document: list[MeasurementDocumentItem] + diagnostic_trace_aggregate_document: DiagnosticTraceAggregateDocument | None = None + processed_data_aggregate_document: ProcessedDataAggregateDocument | None = None + calculated_data_aggregate_document: CalculatedDataAggregateDocument | None = None + statistics_aggregate_document: StatisticsAggregateDocument | None = None + + +@dataclass(kw_only=True) +class ElectrophoresisDocumentItem: + measurement_aggregate_document: MeasurementAggregateDocument + analyst: TStringValue | None = None + submitter: TStringValue | None = None + analytical_method_identifier: TStringValue | None = None + method_version: TStringValue | None = None + experimental_data_identifier: TStringValue | None = None + experiment_type: TStringValue | None = None + + +@dataclass(kw_only=True) +class ElectrophoresisAggregateDocument: + data_system_document: DataSystemDocument + electrophoresis_document: list[ElectrophoresisDocumentItem] + device_system_document: DeviceSystemDocument | None = None + processed_data_aggregate_document: ProcessedDataAggregateDocument | None = None + calculated_data_aggregate_document: CalculatedDataAggregateDocument | None = None + statistics_aggregate_document: StatisticsAggregateDocument | None = None + + +@dataclass(kw_only=True) +class Model: + electrophoresis_aggregate_document: ElectrophoresisAggregateDocument + field_asm_manifest: AdmCoreREC202309ManifestSchema | str diff --git a/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/__init__.py b/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/allotropy/allotrope/models/adm/electrophoresis/benchling/__init__.py b/src/allotropy/allotrope/models/adm/electrophoresis/benchling/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/allotropy/allotrope/models/shared/definitions/custom.py b/src/allotropy/allotrope/models/shared/definitions/custom.py index 0192babf9..cc7607a9e 100644 --- a/src/allotropy/allotrope/models/shared/definitions/custom.py +++ b/src/allotropy/allotrope/models/shared/definitions/custom.py @@ -15,6 +15,7 @@ DegreeCelsius, GramPerLiter, Hertz, + KiloDalton, MicrogramPerMicroliter, MicrogramPerMilliliter, Microliter, @@ -149,6 +150,16 @@ class TNullableQuantityValueHertz(Hertz, TNullableQuantityValue): pass +@dataclass(frozen=True, kw_only=True) +class TQuantityValueKiloDalton(KiloDalton, TQuantityValue): + pass + + +@dataclass(frozen=True, kw_only=True) +class TNullableQuantityValueKiloDalton(KiloDalton, TNullableQuantityValue): + pass + + @dataclass(frozen=True, kw_only=True) class TQuantityValueMicrogramPerMicroliter(MicrogramPerMicroliter, TQuantityValue): pass diff --git a/src/allotropy/allotrope/models/shared/definitions/units.py b/src/allotropy/allotrope/models/shared/definitions/units.py index ae555e89c..154d75b04 100644 --- a/src/allotropy/allotrope/models/shared/definitions/units.py +++ b/src/allotropy/allotrope/models/shared/definitions/units.py @@ -54,6 +54,11 @@ class Hertz(HasUnit): unit: str = "Hz" +@dataclass(frozen=True, kw_only=True) +class KiloDalton(HasUnit): + unit: str = "kDa" + + @dataclass(frozen=True, kw_only=True) class MicrogramPerMicroliter(HasUnit): unit: str = "ug/uL" diff --git a/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/CHANGE_NOTES.md b/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/CHANGE_NOTES.md new file mode 100644 index 000000000..aab8a521a --- /dev/null +++ b/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/CHANGE_NOTES.md @@ -0,0 +1,3 @@ +Base schema: None + +This is a proposed new schema for electrophoresis devices. diff --git a/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/electrophoresis.schema.json b/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/electrophoresis.schema.json new file mode 100644 index 000000000..5474267e9 --- /dev/null +++ b/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/electrophoresis.schema.json @@ -0,0 +1,11888 @@ +{ + "$id": "http://purl.allotrope.org/json-schemas/adm/electrophoresis/BENCHLING/2024/06/electrophoresis.schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "allOf": [ + { + "properties": { + "electrophoresis aggregate document": { + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/hierarchy.schema#/$defs/techniqueAggregateDocument" + }, + { + "type": "object", + "$asm.property-class": "TODO", + "$asm.pattern": "aggregate datum", + "properties": { + "data system document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002771", + "$asm.pattern": "aggregate datum", + "properties": { + "data system instance identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002772", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "file name": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001926", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "UNC path": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001906", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "software name": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002802", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "software version": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001700", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "ASM converter name": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002748", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "ASM converter version": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002749", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + } + }, + "electrophoresis document": { + "type": "array", + "items": { + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/hierarchy.schema#/$defs/techniqueDocument" + }, + { + "type": "object", + "$asm.property-class": "TODO", + "properties": { + "analytical method identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001978", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "method version": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002837", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "experimental data identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001977", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "experiment type": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002229", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "measurement aggregate document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002374", + "$asm.pattern": "aggregate datum", + "properties": { + "measurement document": { + "type": "array", + "items": { + "type": "object", + "properties": { + "compartment temperature": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002549", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/degC" + } + ] + }, + "device control aggregate document": { + "type": "object", + "properties": { + "device control document": { + "type": "array", + "items": { + "type": "object", + "properties": { + "detector wavelength setting": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002456", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/nm" + } + ] + }, + "detector bandwidth setting": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002477", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/nm" + } + ] + }, + "excitation wavelength setting": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002479", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/nm" + } + ] + }, + "excitation bandwidth setting": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002548", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/nm" + } + ] + } + } + }, + "minItems": 1 + } + } + }, + "sample document": { + "properties": { + "location identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002844", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + } + }, + "electropherogram data cube": { + "$asm.property-class": "TODO", + "$asm.pattern": "datacube", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema#/$defs/tDatacube" + }, + { + "properties": { + "cube-structure": { + "properties": { + "dimensions": { + "minItems": 1, + "maxItems": 1, + "prefixItems": [ + { + "oneOf": [ + { + "properties": { + "concept": { + "const": "elapsed time" + }, + "unit": { + "const": "s" + }, + "@componentDatatype": { + "const": "double" + } + } + } + ] + } + ] + }, + "measures": { + "minItems": 1, + "maxItems": 1, + "contains": { + "oneOf": [ + { + "properties": { + "concept": { + "const": "fluorescence" + }, + "unit": { + "const": "RFU" + }, + "@componentDatatype": { + "const": "double" + } + } + }, + { + "properties": { + "concept": { + "const": "absorbance" + }, + "unit": { + "const": "mAU" + }, + "@componentDatatype": { + "const": "double" + } + } + } + ] + } + } + } + } + } + } + ] + }, + "image aggregate document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002869", + "$asm.pattern": "aggregate datum", + "required": [ + "image document" + ], + "properties": { + "image document": { + "type": "array", + "$asm.array-ordered": false, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "required": [ + "experimental data identifier" + ], + "items": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002225", + "$asm.pattern": "aggregate datum", + "properties": { + "experimental data identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001977", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "@index": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647 + } + } + } + } + } + }, + "processed data aggregate document": { + "type": "object", + "properties": { + "processed data document": { + "type": "array", + "items": { + "properties": { + "derived electropherogram data cube": { + "$asm.property-class": "TODO", + "$asm.pattern": "datacube", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema#/$defs/tDatacube" + }, + { + "properties": { + "cube-structure": { + "properties": { + "dimensions": { + "minItems": 1, + "maxItems": 1, + "prefixItems": [ + { + "oneOf": [ + { + "properties": { + "concept": { + "const": "molecular mass" + }, + "unit": { + "const": "kDa" + }, + "@componentDatatype": { + "const": "double" + } + } + }, + { + "properties": { + "concept": { + "const": "polymer length" + }, + "unit": { + "const": "#" + }, + "@componentDatatype": { + "const": "double" + } + } + } + ] + } + ] + }, + "measures": { + "minItems": 1, + "maxItems": 1, + "contains": { + "oneOf": [ + { + "properties": { + "concept": { + "const": "fluorescence" + }, + "unit": { + "const": "RFU" + }, + "@componentDatatype": { + "const": "double" + } + } + }, + { + "properties": { + "concept": { + "const": "absorbance" + }, + "unit": { + "const": "mAU" + }, + "@componentDatatype": { + "const": "double" + } + } + } + ] + } + } + } + } + } + } + ] + }, + "peak list": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000432", + "$asm.pattern": "aggregate datum", + "properties": { + "peak": { + "type": "array", + "$asm.array-ordered": true, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "allOf": [ + { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000413", + "$asm.pattern": "aggregate datum", + "properties": { + "peak identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001164", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "peak name": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001167", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "written name": { + "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000590", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "peak height": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000948", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "oneOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/RFU" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/mAU" + } + ] + } + ] + }, + "relative peak height": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000949", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "oneOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + }, + { + "$ref": "#/$custom/tQuantityValueKiloDalton" + } + ] + } + ] + }, + "peak start": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001178", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "oneOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + }, + { + "$ref": "#/$custom/tQuantityValueKiloDalton" + } + ] + } + ] + }, + "peak end": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001180", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "oneOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + }, + { + "$ref": "#/$custom/tQuantityValueKiloDalton" + } + ] + } + ] + }, + "peak position": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001074", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "oneOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + }, + { + "$ref": "#/$custom/tQuantityValueKiloDalton" + } + ] + } + ] + }, + "peak area": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001073", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/(unitless)" + } + ] + }, + "relative peak area": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001165", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/%" + } + ] + }, + "relative corrected peak area": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002775", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/%" + } + ] + }, + "comment": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002017", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + }, + "required": [ + "peak identifier" + ] + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + } + ] + }, + "minItems": 0 + } + }, + "required": [ + "peak" + ] + }, + "data region aggregate document": { + "type": "object", + "$asm.property-class": "TODO", + "$asm.pattern": "aggregate datum", + "properties": { + "data region document": { + "type": "array", + "$asm.array-ordered": false, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "type": "object", + "$asm.property-class": "TODO", + "$asm.pattern": "aggregate datum", + "properties": { + "region identifier": { + "$asm.property-class": "TODO", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "region name": { + "$asm.property-class": "TODO", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "written name": { + "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000590", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "region start": { + "$asm.property-class": "TODO", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "oneOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + }, + { + "$ref": "#/$custom/tQuantityValueKiloDalton" + } + ] + } + ] + }, + "region end": { + "$asm.property-class": "TODO", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "oneOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + }, + { + "$ref": "#/$custom/tQuantityValueKiloDalton" + } + ] + } + ] + }, + "region area": { + "$asm.property-class": "TODO", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/(unitless)" + } + ] + }, + "relative region area": { + "$asm.property-class": "TODO", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/%" + } + ] + }, + "comment": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002017", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + }, + "required": [ + "region identifier" + ] + } + } + }, + "required": [ + "data region document" + ] + } + }, + "required": [ + "peak list" + ] + } + } + }, + "required":[ + "processed data document" + ] + }, + "error aggregate document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002951", + "$asm.pattern": "aggregate datum", + "properties": { + "error document": { + "type": "array", + "$asm.array-ordered": false, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002952", + "$asm.pattern": "aggregate datum", + "required": [ + "error" + ], + "properties": { + "error feature": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002953", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "error": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002804", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + } + } + } + } + } + }, + "required": [ + "measurement identifier", + "measurement time", + "processed data aggregate document" + ] + }, + "minItems": 1 + } + } + } + } + } + ] + }, + "required": [ + "analyst" + ], + "minItems": 1 + } + }, + "required": [ + "data system document", + "electrophoresis document" + ] + } + ] + } + }, + "required": [ + "electrophoresis aggregate document" + ] + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/asm" + } + ], + "required": [ + "$asm.manifest" + ], + "$defs": { + "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/hierarchy.schema": { + "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/hierarchy.schema", + "title": "Common hierarchy schema defs.", + "$defs": { + "techniqueAggregateDocument": { + "properties": { + "device system document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002526", + "$asm.pattern": "aggregate datum", + "required": [ + "asset management identifier" + ], + "properties": { + "asset management identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001976", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "description": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000922", + "$asm.pattern": "any datum" + }, + "brand name": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001680", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "product manufacturer": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001258", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "device identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002018", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "model number": { + "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000017", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "equipment serial number": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001119", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "firmware version": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001259", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "device document": { + "type": "array", + "$asm.array-ordered": true, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "allOf": [ + { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002567", + "$asm.pattern": "aggregate datum", + "required": [ + "device type" + ], + "properties": { + "device identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002018", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "device type": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002568", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "model number": { + "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000017", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "product manufacturer": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001258", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "brand name": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001680", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "equipment serial number": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001119", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "firmware version": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001259", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + } + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + } + ] + }, + "minItems": 1 + } + } + }, + "processed data aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/processedDataAggregateDocument" + } + ] + }, + "calculated data aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/calculatedDataAggregateDocument" + } + ] + }, + "statistics aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/statisticsAggregateDocument" + } + ] + } + } + }, + "techniqueDocument": { + "properties": { + "measurement aggregate document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002374", + "$asm.pattern": "aggregate datum", + "properties": { + "measurement document": { + "type": "array", + "$asm.array-ordered": false, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002375", + "$asm.pattern": "aggregate datum", + "properties": { + "measurement time": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000952", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#dateTimeStamp", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tDateTimeStampValue" + }, + "measurement identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001121", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "device control aggregate document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002722", + "$asm.pattern": "aggregate datum", + "required": [ + "device control document" + ], + "properties": { + "device control document": { + "type": "array", + "$asm.array-ordered": true, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "allOf": [ + { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002723", + "$asm.pattern": "aggregate datum", + "properties": { + "device identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002018", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "device type": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002568", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "detection type": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002534", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "product manufacturer": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001258", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "brand name": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001680", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "equipment serial number": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001119", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "model number": { + "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000017", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "firmware version": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001259", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + }, + "required": [ + "device type" + ] + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + } + ] + }, + "minItems": 1 + } + } + }, + "sample document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002083", + "$asm.pattern": "aggregate datum", + "properties": { + "description": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000922", + "$asm.pattern": "any datum" + }, + "sample identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001118", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "batch identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001120", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "sample role type": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002242", + "$asm.pattern": "class datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tClass" + }, + { + "type": "string", + "enum": [ + "control sample role", + "standard sample role", + "validation sample role", + "experiment sample role", + "sample role", + "spiked sample role", + "blank role", + "unknown sample role", + "calibration sample role", + "unspiked sample role", + "specimen role", + "quality control sample role", + "reference sample role" + ], + "$asm.value-sub-class-of": "http://purl.allotrope.org/ontologies/role#AFRL_0000035" + } + ] + }, + "written name": { + "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000590", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + }, + "required": [ + "sample identifier" + ] + }, + "detection type": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002534", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "processed data aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/processedDataAggregateDocument" + } + ] + }, + "calculated data aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/calculatedDataAggregateDocument" + } + ] + }, + "statistics aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/statisticsAggregateDocument" + } + ] + } + }, + "required": [ + "sample document", + "device control aggregate document" + ] + }, + "minItems": 1 + }, + "diagnostic trace aggregate document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002705", + "$asm.pattern": "aggregate datum", + "properties": { + "diagnostic trace document": { + "type": "array", + "$asm.array-ordered": false, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002706", + "$asm.pattern": "aggregate datum", + "required": [ + "description" + ], + "properties": { + "description": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000922", + "$asm.pattern": "any datum" + } + }, + "patternProperties": { + "data cube$": { + "$asm.property-class": "http://purl.org/linked-data/cube#DataSet", + "$asm.pattern": "datacube", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema#/$defs/tDatacube" + } + ] + } + } + }, + "minItems": 0 + } + } + }, + "processed data aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/processedDataAggregateDocument" + } + ] + }, + "calculated data aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/calculatedDataAggregateDocument" + } + ] + }, + "statistics aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/statisticsAggregateDocument" + } + ] + } + }, + "required": [ + "measurement document" + ] + }, + "analyst": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001116", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "submitter": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002531", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + }, + "required": [ + "measurement aggregate document" + ] + }, + "processedDataAggregateDocument": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002658", + "$asm.pattern": "aggregate datum", + "required": [ + "processed data document" + ], + "properties": { + "processed data document": { + "type": "array", + "$asm.array-ordered": true, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "allOf": [ + { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002659", + "$asm.pattern": "aggregate datum", + "properties": { + "data processing document": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002655", + "$asm.pattern": "aggregate datum" + }, + "data source aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/dataSourceAggregateDocument" + } + ] + }, + "processed data identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002897", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + } + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + } + ] + }, + "minItems": 1 + } + } + }, + "calculatedDataAggregateDocument": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002889", + "$asm.pattern": "aggregate datum", + "required": [ + "calculated data document" + ], + "properties": { + "calculated data document": { + "type": "array", + "$asm.array-ordered": true, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "allOf": [ + { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002890", + "$asm.pattern": "aggregate datum", + "properties": { + "data source aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/dataSourceAggregateDocument" + } + ] + }, + "calculated data identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002893", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "calculated data name": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002891", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "calculation description": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002141", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "calculated result": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002892", + "$asm.pattern": "quantity datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + } + ] + } + }, + "required": [ + "calculated data name", + "calculated result" + ] + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + } + ] + }, + "minItems": 1 + } + } + }, + "dataSourceAggregateDocument": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002894", + "$asm.pattern": "aggregate datum", + "required": [ + "data source document" + ], + "properties": { + "data source document": { + "type": "array", + "$asm.array-ordered": true, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "allOf": [ + { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002895", + "$asm.pattern": "aggregate datum", + "properties": { + "data source identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002896", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + }, + "data source feature": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002898", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + } + }, + "required": [ + "data source identifier", + "data source feature" + ] + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + } + ] + }, + "minItems": 1 + } + } + }, + "statisticsAggregateDocument": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002697", + "$asm.pattern": "aggregate datum", + "properties": { + "statistics document": { + "type": "array", + "$asm.array-ordered": false, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002698", + "$asm.pattern": "aggregate datum", + "properties": { + "statistical feature": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002699", + "$asm.pattern": "class datum", + "allOf": [ + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tClass" + }, + { + "type": "string", + "enum": [ + "inner diameter", + "plate heater temperature", + "linear velocity", + "enthalpy of fusion", + "angular velocity", + "purity", + "intensity", + "protein attenuation coefficient", + "electron beam working distance", + "temperature", + "end height", + "relative humidity", + "saturation vapor pressure", + "heat flow", + "quality quantification facet", + "heat transfer coefficient", + "molar concentration", + "average total cell diameter", + "pH", + "foam height", + "relative weight loss on drying", + "dilution volume", + "flow ratio", + "electric conductance", + "sample temperature", + "container diameter", + "absorbance", + "sample thickness", + "humidity", + "Raman intensity", + "voltage", + "actual P/P0 result", + "polyol reservoir temperature", + "turbidity", + "enthalpy of sublimation", + "osmolality", + "ambient humidity", + "molar enthalpy of vaporization", + "total foam height", + "strain", + "thermal conductivity", + "coating gap height", + "measurement chamber free space volume", + "fracture energy", + "heat capacity", + "yield strain", + "incident radiation angle", + "mass fraction", + "liquid height", + "chromatography column length", + "sample width", + "molar enthalpy of sublimation", + "Raman wavenumber shift", + "relative response", + "length", + "velocity", + "electric charge", + "molar mass", + "image height", + "concentration", + "sample weight before drying", + "dilution factor", + "temperature rate", + "relative permittivity", + "transition enthalpy", + "total gas flow rate", + "gloss", + "water mass fraction", + "dielectric polarization", + "normalized foam height", + "peak onset temperature", + "electric current", + "angle", + "energy (datum)", + "abrasion weight", + "absolute water content", + "electric resistance", + "attenuation coefficient", + "molar enthalpy of fusion", + "water mass concentration", + "partial pressure", + "volume", + "position count", + "thermal conductance", + "dry sample weight", + "adsorbed volume at STP", + "force", + "birefringence", + "monolayer quantity", + "peak temperature", + "dry gas flow rate", + "gross weight", + "sample weight", + "image width", + "m/z", + "container height", + "flow rate", + "solvent reservoir temperature", + "isocyanate reservoir temperature", + "ambient pressure", + "eccentricity", + "mass", + "molar absorptivity", + "height", + "column inner diameter", + "heat seal length", + "specific surface area", + "reference material weight", + "thickness", + "tare weight", + "power", + "chromatography column particle size", + "saturated gas flow rate", + "well volume", + "degassed sample weight", + "voltage range", + "relative intensity", + "width", + "yield stress", + "total cell diameter", + "stress", + "relative pressure (BET)", + "break stress", + "mass concentration", + "chromatography column film thickness", + "average particle size", + "wavelength", + "heat capacity (dsc)", + "acquisition volume", + "collision energy", + "background corrected turbidity", + "mass change", + "chemical shift", + "titer", + "refractive index", + "enthalpy of vaporization", + "volume fraction", + "transmittance", + "electric conductivity", + "fill depth", + "Young modulus", + "total material height", + "specific rotation", + "qNMR purity result", + "size (datum)", + "break strain", + "specific enthalpy of vaporization", + "absolute intensity", + "BET C constant", + "plate well count", + "plate temperature", + "volume concentration", + "specific enthalpy of sublimation", + "enthalpy", + "area", + "peak load force", + "fluorescence", + "start height", + "polarity", + "angle of optical rotation", + "peak analyte amount", + "extrapolated moisture content", + "inlet gas pressure", + "hardness", + "molecular mass", + "specific enthalpy of fusion", + "electric impedance", + "hold-up volume", + "particle size", + "diameter", + "tablet thickness", + "pressure", + "weight loss", + "cell path length", + "glass transition temperature", + "specific heat capacity", + "wavenumber", + "reservoir temperature", + "electric resistivity", + "luminescence", + "compartment temperature", + "viscosity", + "exhaust gas flow rate", + "Raman interferogram intensity", + "ambient temperature", + "reflectance", + "detector view volume", + "stirring rate" + ], + "$asm.value-sub-class-of": "http://purl.allotrope.org/ontologies/result#AFR_0001583" + } + ] + } + }, + "required": [ + "statistical feature" + ] + }, + "minItems": 0 + } + } + } + } + }, + "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema": { + "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema", + "title": "Schema for leaf node values.", + "$defs": { + "asm": { + "properties": { + "$asm.manifest": { + "oneOf": [ + { + "type": "string", + "format": "iri" + }, + { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/manifest.schema" + } + ] + } + } + }, + "tQuantityValue": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "unit": { + "$ref": "#/$defs/tUnit" + }, + "has statistic datum role": { + "$ref": "#/$defs/tStatisticDatumRole" + }, + "@type": { + "$ref": "#/$defs/tClass" + } + }, + "$asm.type": "http://qudt.org/schema/qudt#QuantityValue", + "required": [ + "value", + "unit" + ] + }, + "tNumericValue": { + "anyOf": [ + { + "$ref": "#/$defs/tByteValue" + }, + { + "$ref": "#/$defs/tShortValue" + }, + { + "$ref": "#/$defs/tIntValue" + }, + { + "$ref": "#/$defs/tLongValue" + }, + { + "$ref": "#/$defs/tUnsignedByteValue" + }, + { + "$ref": "#/$defs/tUnsignedShortValue" + }, + { + "$ref": "#/$defs/tUnsignedIntValue" + }, + { + "$ref": "#/$defs/tUnsignedLongValue" + }, + { + "$ref": "#/$defs/tFloatValue" + }, + { + "$ref": "#/$defs/tDoubleValue" + }, + { + "$ref": "#/$defs/tDecimalValue" + }, + { + "$ref": "#/$defs/tIntegerValue" + } + ] + }, + "tOrderedValue": { + "oneOf": [ + { + "$ref": "#/$defs/tNumericValue" + }, + { + "$ref": "#/$defs/tStringValue" + }, + { + "$ref": "#/$defs/tDateTimeValue" + }, + { + "$ref": "#/$defs/tDateTimeStampValue" + }, + { + "$ref": "#/$defs/tDateValue" + }, + { + "$ref": "#/$defs/tTimeValue" + } + ] + }, + "tRangeValue": { + "type": "object", + "properties": { + "minInclusive": { + "$ref": "#/$defs/tOrderedValue" + }, + "minExclusive": { + "$ref": "#/$defs/tOrderedValue" + }, + "maxInclusive": { + "$ref": "#/$defs/tOrderedValue" + }, + "maxExclusive": { + "$ref": "#/$defs/tOrderedValue" + }, + "unit": { + "$ref": "#/$defs/tUnit" + } + }, + "dependencies": { + "minInclusive": { + "not": { + "required": [ + "minExclusive" + ] + } + }, + "minExclusive": { + "not": { + "required": [ + "min" + ] + } + }, + "maxInclusive": { + "not": { + "required": [ + "maxExclusive" + ] + } + }, + "maxExclusive": { + "not": { + "required": [ + "max" + ] + } + } + }, + "$asm.type": "http://purl.allotrope.org/ontologies/common#AFC_0000021" + }, + "tStatisticDatumRole": { + "description": "A statistic datum role.", + "$asm.lookup-property": "http://www.w3.org/2004/02/skos/core#prefLabel", + "$asm.type": "http://www.w3.org/2000/01/rdf-schema#Class", + "type": "string", + "enum": [ + "arithmetic mean role", + "median role", + "relative standard deviation role", + "skewness role", + "standard deviation role", + "variance role", + "maximum value role", + "minimum value role" + ], + "$asm.value-sub-class-of": "http://purl.allotrope.org/ontologies/role#AFRL_0000328" + }, + "tUnit": { + "description": "A unit is referenced by its QUDT symbol. It MUST be unique within the QUDT units defined in the vocabularies declared in the manifest.", + "type": "string", + "$asm.lookup-property": "http://purl.allotrope.org/ontology/qudt-ext/schema#symbol", + "$asm.type": "http://qudt.org/schema/qudt#Unit" + }, + "tBooleanValue": { + "description": "A boolean value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#boolean", + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "boolean" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tDecimalValue": { + "description": "A number value stored as an XSD decimal.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#decimal", + "oneOf": [ + { + "type": "number" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "number" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tDoubleValue": { + "description": "A number value stored as an XSD double.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#double", + "oneOf": [ + { + "type": "number" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "number" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tFloatValue": { + "description": "A number value stored as an XSD float.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#float", + "oneOf": [ + { + "type": "number" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "number" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tStringValue": { + "description": "A literal string in UTF-8 encoding.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "string" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tByteValue": { + "description": "A signed 8 bit integer value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#byte", + "oneOf": [ + { + "type": "integer", + "minimum": -128, + "maximum": 127 + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "integer", + "minimum": -128, + "maximum": 127 + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tShortValue": { + "description": "A signed 16 bit integer value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#short", + "oneOf": [ + { + "type": "integer", + "minimum": -32768, + "maximum": 32767 + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "integer", + "minimum": -32768, + "maximum": 32767 + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tIntValue": { + "description": "A signed 32 bit integer value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#int", + "oneOf": [ + { + "type": "integer", + "minimum": -2147483648, + "maximum": 2147483647 + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "integer", + "minimum": -2147483648, + "maximum": 2147483647 + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tLongValue": { + "description": "A signed 64 bit integer value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#long", + "oneOf": [ + { + "type": "integer", + "minimum": -9223372036854776000, + "maximum": 9223372036854776000 + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "integer", + "minimum": -9223372036854776000, + "maximum": 9223372036854776000 + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tUnsignedByteValue": { + "description": "An unsigned 8 bit integer value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#unsignedByte", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "integer", + "minimum": 0, + "maximum": 255 + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tUnsignedShortValue": { + "description": "An unsigned 16 bit integer value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#unsignedShort", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "integer", + "minimum": 0, + "maximum": 65535 + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tUnsignedIntValue": { + "description": "A signed 32 bit integer value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#unsignedInt", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tUnsignedLongValue": { + "description": "A signed 64 bit integer value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#unsignedLong", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 18446744073709552000 + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "integer", + "minimum": 0, + "maximum": 18446744073709552000 + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tIntegerValue": { + "description": "A arbitrary length integer value.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#integer", + "oneOf": [ + { + "type": "integer" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "integer" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tIRIValue": { + "description": "A literal IRI reference, not to be confused with a resource reference (tResource)", + "$asm.type": "http://www.w3.org/2001/XMLSchema#anyURI", + "oneOf": [ + { + "type": "string", + "format": "iri" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "string", + "format": "iri" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tDateTimeValue": { + "description": "All timestamps MUST be in ISO8601 date/time format.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#dateTime", + "oneOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tDateTimeStampValue": { + "description": "All timestamps MUST be in ISO8601 date/time format.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#dateTimeStamp", + "oneOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tDateValue": { + "description": "All timestamps MUST be in ISO8601 date format.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#date", + "oneOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "string", + "format": "date" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tTimeValue": { + "description": "All timestamps MUST be in ISO8601 time format.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#time", + "oneOf": [ + { + "type": "string", + "format": "time" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "string", + "format": "time" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tDurationValue": { + "description": "All durations MUST be in ISO8601 duration format.", + "$asm.type": "http://www.w3.org/2001/XMLSchema#duration", + "oneOf": [ + { + "type": "string", + "format": "duration" + }, + { + "type": "object", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + }, + "value": { + "type": "string", + "format": "duration" + } + }, + "required": [ + "@type", + "value" + ] + } + ] + }, + "tClass": { + "description": "A class reference is the SKOS preferred label of a class. This label MUST be unique within the transitive closure of the vocabulary referenced by the manifest.", + "type": "string", + "$asm.lookup-property": "http://www.w3.org/2004/02/skos/core#prefLabel", + "$asm.type": "http://www.w3.org/2000/01/rdf-schema#Class" + }, + "tObject": { + "description": "An JSON object with properties. This will be mapped to an RDF resource, which can be a blank node.", + "type": "object", + "$asm.type": "http://www.w3.org/2000/01/rdf-schema#Resource" + }, + "tArray": { + "description": "An JSON array. This will be mapped to a list, which can be a blank node.", + "type": "array", + "$asm.type": "http://purl.allotrope.org/ontologies/common#AFC_0000160" + }, + "tNamed": { + "description": "A reference to an arbitrary RDF resource identified by a SKOS preferred label. The label MUST be unique.", + "type": "string", + "$asm.lookup-property": "http://www.w3.org/2004/02/skos/core#prefLabel", + "$asm.type": "http://www.w3.org/2000/01/rdf-schema#Resource" + }, + "tResource": { + "description": "A reference to an arbitrary RDF resource identified by an IRI. The mapping to RDF will introduce a node reference instead of a literal IRI.", + "type": "string", + "format": "iri", + "$asm.type": "http://www.w3.org/2000/01/rdf-schema#Resource" + }, + "tReference": { + "description": "A reference to an object within an JSON document using JSON pointers.", + "type": "string", + "format": "uri-reference", + "$asm.type": "http://www.w3.org/2000/01/rdf-schema#Resource" + }, + "mixedItem": { + "description": "A schema for a polymorphic array item, which requires that each item has a @type declaration", + "properties": { + "@type": { + "$ref": "#/$defs/tClass" + } + }, + "required": [ + "@type" + ] + }, + "orderedItem": { + "description": "A schema for an array item, that is ordered in a not-natural way. This means that it MUST have an explicit @index property stating the position. The index value is a strict positive 32bit signed integer (excluding 0).", + "properties": { + "@index": { + "type": "integer", + "minimum": 1, + "maximum": 2147483647 + } + } + } + } + }, + "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema": { + "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema", + "$defs": { + "tDatacube": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "cube-structure": { + "$ref": "#/$defs/tDatacubeStructure" + }, + "data": { + "$ref": "#/$defs/tDatacubeData" + } + } + }, + "tDatacubeData": { + "allOf": [ + { + "$ref": "#/$defs/tDimensionData" + }, + { + "$ref": "#/$defs/tMeasureData" + } + ] + }, + "tDimensionData": { + "properties": { + "dimensions": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/$defs/tDimensionArray" + }, + { + "$ref": "#/$defs/tFunction" + } + ] + } + } + }, + "required": [ + "dimensions" + ] + }, + "tMeasureData": { + "oneOf": [ + { + "properties": { + "measures": { + "type": "array", + "items": { + "$ref": "#/$defs/tMeasureArray" + } + } + }, + "required": [ + "measures" + ] + }, + { + "properties": { + "points": { + "type": "array", + "items": { + "$ref": "#/$defs/tTupleData" + } + } + }, + "required": [ + "points" + ] + } + ] + }, + "tTupleData": { + "$comment": "heterogenous array of data used in point arrays", + "type": "array", + "items": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "tDimensionArray": { + "$comment": "homogenous array of data used in explicit dimension arrays", + "oneOf": [ + { + "$ref": "#/$defs/tNumberArray" + }, + { + "$ref": "#/$defs/tBooleanArray" + }, + { + "$ref": "#/$defs/tStringArray" + } + ] + }, + "tMeasureArray": { + "$comment": "homogenous array of data used in explicit measure arrays, may contain null values", + "oneOf": [ + { + "$ref": "#/$defs/tNumberOrNullArray" + }, + { + "$ref": "#/$defs/tBooleanOrNullArray" + }, + { + "$ref": "#/$defs/tStringOrNullArray" + } + ] + }, + "tNumberArray": { + "$comment": "homogenous array of numbers", + "type": "array", + "items": { + "type": "number" + } + }, + "tNumberOrNullArray": { + "$comment": "homogenous array of numbers, may contain null values", + "type": "array", + "items": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "tBooleanArray": { + "$comment": "homogenous array of booleans", + "type": "array", + "items": { + "type": "boolean" + } + }, + "tBooleanOrNullArray": { + "$comment": "homogenous array of booleans, may contain null values", + "type": "array", + "items": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "tStringArray": { + "$comment": "homogenous array of strings", + "type": "array", + "items": { + "type": "string" + } + }, + "tStringOrNullArray": { + "$comment": "homogenous array of strings, may contain null values", + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "tFunction": { + "type": "object", + "properties": { + "type": { + "enum": [ + "linear", + "logarithmic" + ], + "default": "linear" + }, + "start": { + "type": "number", + "default": 1 + }, + "length": { + "type": "number" + }, + "incr": { + "type": "number", + "default": 1 + } + } + }, + "tDatacubeStructure": { + "type": "object", + "properties": { + "dimensions": { + "type": "array", + "items": { + "$ref": "#/$defs/tDatacubeComponent" + }, + "unique": true + }, + "measures": { + "type": "array", + "items": { + "$ref": "#/$defs/tDatacubeComponent" + }, + "unique": true, + "minItems": 1 + } + }, + "required": [ + "dimensions", + "measures" + ] + }, + "tDatacubeComponent": { + "type": "object", + "properties": { + "@componentDatatype": { + "description": "Subset of XSD datatypes supported in simple models", + "default": "double", + "enum": [ + "double", + "float", + "decimal", + "integer", + "byte", + "int", + "short", + "long", + "string", + "boolean", + "dateTime" + ] + }, + "concept": { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tClass" + }, + "unit": { + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tUnit" + }, + "scale": { + "enum": [ + "nominal", + "ordinal", + "cardinal", + "interval", + "range" + ] + }, + "$asm.fill-value": { + "type": [ + "string", + "number", + "integer", + "boolean" + ] + } + }, + "required": [ + "@componentDatatype", + "concept" + ], + "allOf": [ + { + "$ref": "#/$defs/cFillValueIEEE" + }, + { + "$ref": "#/$defs/cFillValueDecimal" + }, + { + "$ref": "#/$defs/cFillValueBoolean" + }, + { + "$ref": "#/$defs/cFillValueString" + } + ] + }, + "cFillValueBoolean": { + "$comment": "constraint on fill values if component data type is boolean", + "if": { + "properties": { + "@componentDatatype": { + "const": "boolean" + } + } + }, + "then": { + "$asm.fill-value": { + "type": "boolean", + "default": false + } + } + }, + "cFillValueIEEE": { + "$comment": "constraint on fill values if component data type is any numeric type", + "if": { + "properties": { + "@componentDatatype": { + "pattern": "double|float" + } + } + }, + "then": { + "$asm.fill-value": { + "oneOf": [ + { + "type": "number" + }, + { + "const": "NaN" + }, + { + "const": "+Infinity" + }, + { + "const": "-Infinity" + } + ], + "default": 0 + } + } + }, + "cFillValueDecimal": { + "$comment": "constraint on fill values if component data type is any numeric type", + "if": { + "properties": { + "@componentDatatype": { + "pattern": "integer|decimal|long|int|short|byte" + } + } + }, + "then": { + "$asm.fill-value": { + "type": "number", + "default": 0 + } + } + }, + "cFillValueString": { + "$comment": "constraint on fill values if component data type is string", + "if": { + "properties": { + "@componentDatatype": { + "pattern": "string|dateTime|date" + } + } + }, + "then": { + "$asm.fill-value": { + "type": "string", + "default": "" + } + } + } + } + }, + "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema": { + "$id": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema", + "$comment": "Auto-generated from QUDT 1.1 and Allotrope Extensions for QUDT", + "$defs": { + "\"": { + "properties": { + "unit": { + "type": "string", + "const": "\"", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SecondAngle" + } + }, + "required": [ + "unit" + ] + }, + "#": { + "properties": { + "unit": { + "type": "string", + "const": "#", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Number" + } + }, + "required": [ + "unit" + ] + }, + "#/yr": { + "properties": { + "unit": { + "type": "string", + "const": "#/yr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NumberPerYear" + } + }, + "required": [ + "unit" + ] + }, + "%": { + "properties": { + "unit": { + "type": "string", + "const": "%", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Percent" + } + }, + "required": [ + "unit" + ] + }, + "'": { + "properties": { + "unit": { + "type": "string", + "const": "'", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MinuteAngle" + } + }, + "required": [ + "unit" + ] + }, + "(K^2) m/W": { + "properties": { + "unit": { + "type": "string", + "const": "(K^2) m/W", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareMeterKelvinPerWatt" + } + }, + "required": [ + "unit" + ] + }, + "(unitless)": { + "properties": { + "unit": { + "type": "string", + "const": "(unitless)", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Unitless" + } + }, + "required": [ + "unit" + ] + }, + "(°F h ft^2)/Btu": { + "properties": { + "unit": { + "type": "string", + "const": "(°F h ft^2)/Btu", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareFootHourDegreeFahrenheitPerBtu" + } + }, + "required": [ + "unit" + ] + }, + "1/cm": { + "properties": { + "unit": { + "type": "string", + "const": "1/cm", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#ReciprocalCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "10^-6/bar": { + "properties": { + "unit": { + "type": "string", + "const": "10^-6/bar", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#DimensionlessMicroPerBar" + } + }, + "required": [ + "unit" + ] + }, + "10^6 cells/mL": { + "properties": { + "unit": { + "type": "string", + "const": "10^6 cells/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MillionCellsPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "10^9.CFU": { + "properties": { + "unit": { + "type": "string", + "const": "10^9.CFU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#BillionCFU" + } + }, + "required": [ + "unit" + ] + }, + "2θ": { + "properties": { + "unit": { + "type": "string", + "const": "2θ", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#TwoTheta" + } + }, + "required": [ + "unit" + ] + }, + "A": { + "properties": { + "unit": { + "type": "string", + "const": "A", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Ampere" + } + }, + "required": [ + "unit" + ] + }, + "A J^-1": { + "properties": { + "unit": { + "type": "string", + "const": "A J^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AmperePerJoule" + } + }, + "required": [ + "unit" + ] + }, + "A h": { + "properties": { + "unit": { + "type": "string", + "const": "A h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AmpereHour" + } + }, + "required": [ + "unit" + ] + }, + "A/deg": { + "properties": { + "unit": { + "type": "string", + "const": "A/deg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AmperePerDegree" + } + }, + "required": [ + "unit" + ] + }, + "A/m": { + "properties": { + "unit": { + "type": "string", + "const": "A/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AmperePerMeter" + } + }, + "required": [ + "unit" + ] + }, + "A/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "A/m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AmperePerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "A/rad": { + "properties": { + "unit": { + "type": "string", + "const": "A/rad", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AmperePerRadian" + } + }, + "required": [ + "unit" + ] + }, + "AMU": { + "properties": { + "unit": { + "type": "string", + "const": "AMU", + "$asm.unit-iri": "http://qudt.org/vocab/unit#UnifiedAtomicMassUnit" + } + }, + "required": [ + "unit" + ] + }, + "AT": { + "properties": { + "unit": { + "type": "string", + "const": "AT", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TonAssay" + } + }, + "required": [ + "unit" + ] + }, + "AU": { + "properties": { + "unit": { + "type": "string", + "const": "AU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#AbsorbanceUnit" + } + }, + "required": [ + "unit" + ] + }, + "AU.s": { + "properties": { + "unit": { + "type": "string", + "const": "AU.s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#AbsorbanceUnitTimesSecond" + } + }, + "required": [ + "unit" + ] + }, + "At": { + "properties": { + "unit": { + "type": "string", + "const": "At", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AmpereTurn" + } + }, + "required": [ + "unit" + ] + }, + "At/in": { + "properties": { + "unit": { + "type": "string", + "const": "At/in", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AmpereTurnPerInch" + } + }, + "required": [ + "unit" + ] + }, + "At/m": { + "properties": { + "unit": { + "type": "string", + "const": "At/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AmpereTurnPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "B": { + "properties": { + "unit": { + "type": "string", + "const": "B", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Byte" + } + }, + "required": [ + "unit" + ] + }, + "BPM": { + "properties": { + "unit": { + "type": "string", + "const": "BPM", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HeartBeatsPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "Bf": { + "properties": { + "unit": { + "type": "string", + "const": "Bf", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BoardFoot" + } + }, + "required": [ + "unit" + ] + }, + "Bi": { + "properties": { + "unit": { + "type": "string", + "const": "Bi", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Biot" + } + }, + "required": [ + "unit" + ] + }, + "Bq": { + "properties": { + "unit": { + "type": "string", + "const": "Bq", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Becquerel" + } + }, + "required": [ + "unit" + ] + }, + "Bq/g": { + "properties": { + "unit": { + "type": "string", + "const": "Bq/g", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#BecquerelPerGram" + } + }, + "required": [ + "unit" + ] + }, + "Btu (it)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu (it)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BritishThermalUnitInternationalTable" + } + }, + "required": [ + "unit" + ] + }, + "Btu (th)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu (th)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BritishThermalUnitThermochemical" + } + }, + "required": [ + "unit" + ] + }, + "Btu ft": { + "properties": { + "unit": { + "type": "string", + "const": "Btu ft", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuFoot" + } + }, + "required": [ + "unit" + ] + }, + "Btu ft/(h ft^2 °F)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu ft/(h ft^2 °F)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuFootPerSquareFootHourDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "Btu in": { + "properties": { + "unit": { + "type": "string", + "const": "Btu in", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuInch" + } + }, + "required": [ + "unit" + ] + }, + "Btu in/(ft^2 s °F)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu in/(ft^2 s °F)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuInchPerSquareFootSecondDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "Btu in/(h ft^2 °F)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu in/(h ft^2 °F)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuInchPerSquareFootHourDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "Btu/(ft^2 s °F)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/(ft^2 s °F)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerSquareFootSecondDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "Btu/(h ft^2 °F)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/(h ft^2 °F)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerSquareFootHourDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "Btu/(h ft^2)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/(h ft^2)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerHourSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "Btu/(lb mol °F)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/(lb mol °F)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerPoundMoleDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "Btu/(lb mol)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/(lb mol)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerPoundMole" + } + }, + "required": [ + "unit" + ] + }, + "Btu/(lb °F)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/(lb °F)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerPoundDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "Btu/(lb °R)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/(lb °R)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerPoundDegreeRankine" + } + }, + "required": [ + "unit" + ] + }, + "Btu/(s ft^2)": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/(s ft^2)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerSecondSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "Btu/ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "Btu/h": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerHour" + } + }, + "required": [ + "unit" + ] + }, + "Btu/lb": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/lb", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerPound" + } + }, + "required": [ + "unit" + ] + }, + "Btu/s": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "Btu/°F": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/°F", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "Btu/°R": { + "properties": { + "unit": { + "type": "string", + "const": "Btu/°R", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BtuPerDegreeRankine" + } + }, + "required": [ + "unit" + ] + }, + "C": { + "properties": { + "unit": { + "type": "string", + "const": "C", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Coulomb" + } + }, + "required": [ + "unit" + ] + }, + "C m": { + "properties": { + "unit": { + "type": "string", + "const": "C m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CoulombMeter" + } + }, + "required": [ + "unit" + ] + }, + "C m^-2": { + "properties": { + "unit": { + "type": "string", + "const": "C m^-2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CoulombPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "C m^-3": { + "properties": { + "unit": { + "type": "string", + "const": "C m^-3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CoulombPerCubicMeter" + } + }, + "required": [ + "unit" + ] + }, + "C m^2": { + "properties": { + "unit": { + "type": "string", + "const": "C m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CoulombSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "C/kg": { + "properties": { + "unit": { + "type": "string", + "const": "C/kg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CoulombPerKilogram" + } + }, + "required": [ + "unit" + ] + }, + "C/m": { + "properties": { + "unit": { + "type": "string", + "const": "C/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CoulombPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "C/mol": { + "properties": { + "unit": { + "type": "string", + "const": "C/mol", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CoulombPerMole" + } + }, + "required": [ + "unit" + ] + }, + "CCID50/mL": { + "properties": { + "unit": { + "type": "string", + "const": "CCID50/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#CCID50PerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "CFU": { + "properties": { + "unit": { + "type": "string", + "const": "CFU", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ColonyFormingUnit" + } + }, + "required": [ + "unit" + ] + }, + "C^2 m^2 J^-1": { + "properties": { + "unit": { + "type": "string", + "const": "C^2 m^2 J^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareCoulombMeterPerJoule" + } + }, + "required": [ + "unit" + ] + }, + "C^3 m^3 J^-2": { + "properties": { + "unit": { + "type": "string", + "const": "C^3 m^3 J^-2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicCoulombMeterPerSquareJoule" + } + }, + "required": [ + "unit" + ] + }, + "C^4 m^4 J^-3": { + "properties": { + "unit": { + "type": "string", + "const": "C^4 m^4 J^-3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#QuarticCoulombMeterPerCubicEnergy" + } + }, + "required": [ + "unit" + ] + }, + "Cal": { + "properties": { + "unit": { + "type": "string", + "const": "Cal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CalorieNutritional" + } + }, + "required": [ + "unit" + ] + }, + "Ci": { + "properties": { + "unit": { + "type": "string", + "const": "Ci", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Curie" + } + }, + "required": [ + "unit" + ] + }, + "Counts": { + "properties": { + "unit": { + "type": "string", + "const": "Counts", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Counts" + } + }, + "required": [ + "unit" + ] + }, + "Counts.s": { + "properties": { + "unit": { + "type": "string", + "const": "Counts.s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#CountsTimesSecond" + } + }, + "required": [ + "unit" + ] + }, + "Counts/mL": { + "properties": { + "unit": { + "type": "string", + "const": "Counts/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#CountsPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "D": { + "properties": { + "unit": { + "type": "string", + "const": "D", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Debye" + } + }, + "required": [ + "unit" + ] + }, + "Da": { + "properties": { + "unit": { + "type": "string", + "const": "Da", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Dalton" + } + }, + "required": [ + "unit" + ] + }, + "E_h": { + "properties": { + "unit": { + "type": "string", + "const": "E_h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Hartree" + } + }, + "required": [ + "unit" + ] + }, + "F": { + "properties": { + "unit": { + "type": "string", + "const": "F", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Farad" + } + }, + "required": [ + "unit" + ] + }, + "F/m": { + "properties": { + "unit": { + "type": "string", + "const": "F/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FaradPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "FFU/mL": { + "properties": { + "unit": { + "type": "string", + "const": "FFU/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#FocusFormingUnitPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "Fd": { + "properties": { + "unit": { + "type": "string", + "const": "Fd", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Faraday" + } + }, + "required": [ + "unit" + ] + }, + "Fr": { + "properties": { + "unit": { + "type": "string", + "const": "Fr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Franklin" + } + }, + "required": [ + "unit" + ] + }, + "G": { + "properties": { + "unit": { + "type": "string", + "const": "G", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Gravity" + } + }, + "required": [ + "unit" + ] + }, + "GHz": { + "properties": { + "unit": { + "type": "string", + "const": "GHz", + "$asm.unit-iri": "http://qudt.org/vocab/unit#GigaHertz" + } + }, + "required": [ + "unit" + ] + }, + "GU": { + "properties": { + "unit": { + "type": "string", + "const": "GU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GlossUnit" + } + }, + "required": [ + "unit" + ] + }, + "Gal": { + "properties": { + "unit": { + "type": "string", + "const": "Gal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Gal" + } + }, + "required": [ + "unit" + ] + }, + "GeV": { + "properties": { + "unit": { + "type": "string", + "const": "GeV", + "$asm.unit-iri": "http://qudt.org/vocab/unit#GigaElectronVolt" + } + }, + "required": [ + "unit" + ] + }, + "GeV^-2": { + "properties": { + "unit": { + "type": "string", + "const": "GeV^-2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PerSquareGigaElectronVolt" + } + }, + "required": [ + "unit" + ] + }, + "Gi": { + "properties": { + "unit": { + "type": "string", + "const": "Gi", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Gilbert" + } + }, + "required": [ + "unit" + ] + }, + "Gs": { + "properties": { + "unit": { + "type": "string", + "const": "Gs", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Gauss" + } + }, + "required": [ + "unit" + ] + }, + "Gy": { + "properties": { + "unit": { + "type": "string", + "const": "Gy", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Gray" + } + }, + "required": [ + "unit" + ] + }, + "Gy/s": { + "properties": { + "unit": { + "type": "string", + "const": "Gy/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#GrayPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "H": { + "properties": { + "unit": { + "type": "string", + "const": "H", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Henry" + } + }, + "required": [ + "unit" + ] + }, + "H/m": { + "properties": { + "unit": { + "type": "string", + "const": "H/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HenryPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "HP": { + "properties": { + "unit": { + "type": "string", + "const": "HP", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Horsepower" + } + }, + "required": [ + "unit" + ] + }, + "Hz": { + "properties": { + "unit": { + "type": "string", + "const": "Hz", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Hertz" + } + }, + "required": [ + "unit" + ] + }, + "Hz.s": { + "properties": { + "unit": { + "type": "string", + "const": "Hz.s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#HertzTimesSecond" + } + }, + "required": [ + "unit" + ] + }, + "Hz/K": { + "properties": { + "unit": { + "type": "string", + "const": "Hz/K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HertzPerKelvin" + } + }, + "required": [ + "unit" + ] + }, + "Hz/T": { + "properties": { + "unit": { + "type": "string", + "const": "Hz/T", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HertzPerTesla" + } + }, + "required": [ + "unit" + ] + }, + "Hz/V": { + "properties": { + "unit": { + "type": "string", + "const": "Hz/V", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HertzPerVolt" + } + }, + "required": [ + "unit" + ] + }, + "IU": { + "properties": { + "unit": { + "type": "string", + "const": "IU", + "$asm.unit-iri": "http://qudt.org/vocab/unit#InternationalUnit" + } + }, + "required": [ + "unit" + ] + }, + "IU/L": { + "properties": { + "unit": { + "type": "string", + "const": "IU/L", + "$asm.unit-iri": "http://qudt.org/vocab/unit#InternationalUnitPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "J": { + "properties": { + "unit": { + "type": "string", + "const": "J", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Joule" + } + }, + "required": [ + "unit" + ] + }, + "J T^-2": { + "properties": { + "unit": { + "type": "string", + "const": "J T^-2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerSquareTesla" + } + }, + "required": [ + "unit" + ] + }, + "J m mol^-1": { + "properties": { + "unit": { + "type": "string", + "const": "J m mol^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JouleMeterPerMole" + } + }, + "required": [ + "unit" + ] + }, + "J mol^-1 K^-1": { + "properties": { + "unit": { + "type": "string", + "const": "J mol^-1 K^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerMoleKelvin" + } + }, + "required": [ + "unit" + ] + }, + "J s": { + "properties": { + "unit": { + "type": "string", + "const": "J s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JouleSecond" + } + }, + "required": [ + "unit" + ] + }, + "J s mol^-1": { + "properties": { + "unit": { + "type": "string", + "const": "J s mol^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JouleSecondPerMole" + } + }, + "required": [ + "unit" + ] + }, + "J/(g °C)": { + "properties": { + "unit": { + "type": "string", + "const": "J/(g °C)", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#JoulePerGramDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "J/(kg K Pa)": { + "properties": { + "unit": { + "type": "string", + "const": "J/(kg K Pa)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerKilogramKelvinPerPascal" + } + }, + "required": [ + "unit" + ] + }, + "J/(kg K m^3)": { + "properties": { + "unit": { + "type": "string", + "const": "J/(kg K m^3)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerKilogramKelvinPerCubicMeter" + } + }, + "required": [ + "unit" + ] + }, + "J/(kg K)": { + "properties": { + "unit": { + "type": "string", + "const": "J/(kg K)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerKilogramKelvin" + } + }, + "required": [ + "unit" + ] + }, + "J/(m^3 K)": { + "properties": { + "unit": { + "type": "string", + "const": "J/(m^3 K)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerCubicMeterKelvin" + } + }, + "required": [ + "unit" + ] + }, + "J/K": { + "properties": { + "unit": { + "type": "string", + "const": "J/K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerKelvin" + } + }, + "required": [ + "unit" + ] + }, + "J/T": { + "properties": { + "unit": { + "type": "string", + "const": "J/T", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerTesla" + } + }, + "required": [ + "unit" + ] + }, + "J/g": { + "properties": { + "unit": { + "type": "string", + "const": "J/g", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#JoulePerGram" + } + }, + "required": [ + "unit" + ] + }, + "J/kg": { + "properties": { + "unit": { + "type": "string", + "const": "J/kg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerKilogram" + } + }, + "required": [ + "unit" + ] + }, + "J/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "J/m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "J/m^3": { + "properties": { + "unit": { + "type": "string", + "const": "J/m^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerCubicMeter" + } + }, + "required": [ + "unit" + ] + }, + "J/mol": { + "properties": { + "unit": { + "type": "string", + "const": "J/mol", + "$asm.unit-iri": "http://qudt.org/vocab/unit#JoulePerMole" + } + }, + "required": [ + "unit" + ] + }, + "J/°C": { + "properties": { + "unit": { + "type": "string", + "const": "J/°C", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#JoulePerDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "K": { + "properties": { + "unit": { + "type": "string", + "const": "K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Kelvin" + } + }, + "required": [ + "unit" + ] + }, + "K-m/W": { + "properties": { + "unit": { + "type": "string", + "const": "K-m/W", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MeterKelvinPerWatt" + } + }, + "required": [ + "unit" + ] + }, + "K/T": { + "properties": { + "unit": { + "type": "string", + "const": "K/T", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KelvinPerTesla" + } + }, + "required": [ + "unit" + ] + }, + "K/W": { + "properties": { + "unit": { + "type": "string", + "const": "K/W", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KelvinPerWatt" + } + }, + "required": [ + "unit" + ] + }, + "K/h": { + "properties": { + "unit": { + "type": "string", + "const": "K/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KelvinPerHour" + } + }, + "required": [ + "unit" + ] + }, + "K/m": { + "properties": { + "unit": { + "type": "string", + "const": "K/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KelvinPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "K/s": { + "properties": { + "unit": { + "type": "string", + "const": "K/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KelvinPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "L": { + "properties": { + "unit": { + "type": "string", + "const": "L", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Liter" + } + }, + "required": [ + "unit" + ] + }, + "L/(g cm)": { + "properties": { + "unit": { + "type": "string", + "const": "L/(g cm)", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#LiterPerGramCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "L/kg": { + "properties": { + "unit": { + "type": "string", + "const": "L/kg", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#LiterPerKilogram" + } + }, + "required": [ + "unit" + ] + }, + "L/min": { + "properties": { + "unit": { + "type": "string", + "const": "L/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#LiterPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "L/s": { + "properties": { + "unit": { + "type": "string", + "const": "L/s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#LiterPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "LU": { + "properties": { + "unit": { + "type": "string", + "const": "LU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#LuminescenceUnits" + } + }, + "required": [ + "unit" + ] + }, + "Lmb": { + "properties": { + "unit": { + "type": "string", + "const": "Lmb", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Lambert" + } + }, + "required": [ + "unit" + ] + }, + "M": { + "properties": { + "unit": { + "type": "string", + "const": "M", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Molar" + } + }, + "required": [ + "unit" + ] + }, + "M$/Flight": { + "properties": { + "unit": { + "type": "string", + "const": "M$/Flight", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MillionDollarsPerFlight" + } + }, + "required": [ + "unit" + ] + }, + "M$/yr": { + "properties": { + "unit": { + "type": "string", + "const": "M$/yr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MillionDollarsPerYear" + } + }, + "required": [ + "unit" + ] + }, + "MHz": { + "properties": { + "unit": { + "type": "string", + "const": "MHz", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MegaHertz" + } + }, + "required": [ + "unit" + ] + }, + "MHz K^-1": { + "properties": { + "unit": { + "type": "string", + "const": "MHz K^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MegaHertzPerKelvin" + } + }, + "required": [ + "unit" + ] + }, + "MHz T^-1": { + "properties": { + "unit": { + "type": "string", + "const": "MHz T^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MegaHertzPerTesla" + } + }, + "required": [ + "unit" + ] + }, + "MPa": { + "properties": { + "unit": { + "type": "string", + "const": "MPa", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MegaPascal" + } + }, + "required": [ + "unit" + ] + }, + "MeV": { + "properties": { + "unit": { + "type": "string", + "const": "MeV", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MegaElectronVolt" + } + }, + "required": [ + "unit" + ] + }, + "MeV fm": { + "properties": { + "unit": { + "type": "string", + "const": "MeV fm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MegaElectronVoltFemtometer" + } + }, + "required": [ + "unit" + ] + }, + "MeV/c": { + "properties": { + "unit": { + "type": "string", + "const": "MeV/c", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MegaElectronVoltPerSpeedOfLight" + } + }, + "required": [ + "unit" + ] + }, + "MeV/cm": { + "properties": { + "unit": { + "type": "string", + "const": "MeV/cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MegaElectronVoltPerCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "Mx": { + "properties": { + "unit": { + "type": "string", + "const": "Mx", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Maxwell" + } + }, + "required": [ + "unit" + ] + }, + "N": { + "properties": { + "unit": { + "type": "string", + "const": "N", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Newton" + } + }, + "required": [ + "unit" + ] + }, + "N m": { + "properties": { + "unit": { + "type": "string", + "const": "N m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NewtonMeter" + } + }, + "required": [ + "unit" + ] + }, + "N/C": { + "properties": { + "unit": { + "type": "string", + "const": "N/C", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NewtonPerCoulomb" + } + }, + "required": [ + "unit" + ] + }, + "N/kg": { + "properties": { + "unit": { + "type": "string", + "const": "N/kg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NewtonPerKilogram" + } + }, + "required": [ + "unit" + ] + }, + "N/m": { + "properties": { + "unit": { + "type": "string", + "const": "N/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NewtonPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "N/mm^2": { + "properties": { + "unit": { + "type": "string", + "const": "N/mm^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NewtonPerSquareMillimeter" + } + }, + "required": [ + "unit" + ] + }, + "NTU": { + "properties": { + "unit": { + "type": "string", + "const": "NTU", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NephelometricTurbidityUnit" + } + }, + "required": [ + "unit" + ] + }, + "Nm/ct": { + "properties": { + "unit": { + "type": "string", + "const": "Nm/ct", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Carat" + } + }, + "required": [ + "unit" + ] + }, + "Oe": { + "properties": { + "unit": { + "type": "string", + "const": "Oe", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Oersted" + } + }, + "required": [ + "unit" + ] + }, + "Oe cm": { + "properties": { + "unit": { + "type": "string", + "const": "Oe cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OerstedCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "P": { + "properties": { + "unit": { + "type": "string", + "const": "P", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Poise" + } + }, + "required": [ + "unit" + ] + }, + "PFU": { + "properties": { + "unit": { + "type": "string", + "const": "PFU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PlaqueFormingUnit" + } + }, + "required": [ + "unit" + ] + }, + "Pa": { + "properties": { + "unit": { + "type": "string", + "const": "Pa", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Pascal" + } + }, + "required": [ + "unit" + ] + }, + "Pa s": { + "properties": { + "unit": { + "type": "string", + "const": "Pa s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PascalSecond" + } + }, + "required": [ + "unit" + ] + }, + "Pa/hr": { + "properties": { + "unit": { + "type": "string", + "const": "Pa/hr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PascalPerHour" + } + }, + "required": [ + "unit" + ] + }, + "Pa/s": { + "properties": { + "unit": { + "type": "string", + "const": "Pa/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PascalPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "Pm": { + "properties": { + "unit": { + "type": "string", + "const": "Pm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Pica" + } + }, + "required": [ + "unit" + ] + }, + "Q_p": { + "properties": { + "unit": { + "type": "string", + "const": "Q_p", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PlanckCharge" + } + }, + "required": [ + "unit" + ] + }, + "R": { + "properties": { + "unit": { + "type": "string", + "const": "R", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Roentgen" + } + }, + "required": [ + "unit" + ] + }, + "RFU": { + "properties": { + "unit": { + "type": "string", + "const": "RFU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#RelativeFluorescenceUnit" + } + }, + "required": [ + "unit" + ] + }, + "RIU": { + "properties": { + "unit": { + "type": "string", + "const": "RIU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#RefractiveIndexUnit" + } + }, + "required": [ + "unit" + ] + }, + "RLU": { + "properties": { + "unit": { + "type": "string", + "const": "RLU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#RelativeLightUnit" + } + }, + "required": [ + "unit" + ] + }, + "RT": { + "properties": { + "unit": { + "type": "string", + "const": "RT", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RegisterTon" + } + }, + "required": [ + "unit" + ] + }, + "S": { + "properties": { + "unit": { + "type": "string", + "const": "S", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Siemens" + } + }, + "required": [ + "unit" + ] + }, + "S/m": { + "properties": { + "unit": { + "type": "string", + "const": "S/m", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#SiemensPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "Sh": { + "properties": { + "unit": { + "type": "string", + "const": "Sh", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Shake" + } + }, + "required": [ + "unit" + ] + }, + "St": { + "properties": { + "unit": { + "type": "string", + "const": "St", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Stokes" + } + }, + "required": [ + "unit" + ] + }, + "Sv": { + "properties": { + "unit": { + "type": "string", + "const": "Sv", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Sievert" + } + }, + "required": [ + "unit" + ] + }, + "T": { + "properties": { + "unit": { + "type": "string", + "const": "T", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Tesla" + } + }, + "required": [ + "unit" + ] + }, + "U": { + "properties": { + "unit": { + "type": "string", + "const": "U", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#EnzymeUnit" + } + }, + "required": [ + "unit" + ] + }, + "U/nWb": { + "properties": { + "unit": { + "type": "string", + "const": "U/nWb", + "$asm.unit-iri": "http://qudt.org/vocab/unit#UnitPole" + } + }, + "required": [ + "unit" + ] + }, + "US gal": { + "properties": { + "unit": { + "type": "string", + "const": "US gal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#GallonUS" + } + }, + "required": [ + "unit" + ] + }, + "V": { + "properties": { + "unit": { + "type": "string", + "const": "V", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Volt" + } + }, + "required": [ + "unit" + ] + }, + "V m^-2": { + "properties": { + "unit": { + "type": "string", + "const": "V m^-2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#VoltPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "V/m": { + "properties": { + "unit": { + "type": "string", + "const": "V/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#VoltPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "V/s": { + "properties": { + "unit": { + "type": "string", + "const": "V/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#VoltPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "W": { + "properties": { + "unit": { + "type": "string", + "const": "W", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Watt" + } + }, + "required": [ + "unit" + ] + }, + "W h": { + "properties": { + "unit": { + "type": "string", + "const": "W h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Watthour" + } + }, + "required": [ + "unit" + ] + }, + "W m^-2 K^-4": { + "properties": { + "unit": { + "type": "string", + "const": "W m^-2 K^-4", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattPerSquareMeterQuarticKelvin" + } + }, + "required": [ + "unit" + ] + }, + "W m^2": { + "properties": { + "unit": { + "type": "string", + "const": "W m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "W m^2 sr^-1": { + "properties": { + "unit": { + "type": "string", + "const": "W m^2 sr^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattSquareMeterPerSteradian" + } + }, + "required": [ + "unit" + ] + }, + "W/(m K)": { + "properties": { + "unit": { + "type": "string", + "const": "W/(m K)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattPerMeterKelvin" + } + }, + "required": [ + "unit" + ] + }, + "W/(m^2 K)": { + "properties": { + "unit": { + "type": "string", + "const": "W/(m^2 K)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattPerSquareMeterKelvin" + } + }, + "required": [ + "unit" + ] + }, + "W/(m^2 sr)": { + "properties": { + "unit": { + "type": "string", + "const": "W/(m^2 sr)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattPerSquareMeterSteradian" + } + }, + "required": [ + "unit" + ] + }, + "W/K": { + "properties": { + "unit": { + "type": "string", + "const": "W/K", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#WattPerKelvin" + } + }, + "required": [ + "unit" + ] + }, + "W/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "W/cm^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "W/ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "W/ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattPerSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "W/g": { + "properties": { + "unit": { + "type": "string", + "const": "W/g", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#WattPerGram" + } + }, + "required": [ + "unit" + ] + }, + "W/in^2": { + "properties": { + "unit": { + "type": "string", + "const": "W/in^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattPerSquareInch" + } + }, + "required": [ + "unit" + ] + }, + "W/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "W/m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#WattPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "Wb": { + "properties": { + "unit": { + "type": "string", + "const": "Wb", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Weber" + } + }, + "required": [ + "unit" + ] + }, + "Z": { + "properties": { + "unit": { + "type": "string", + "const": "Z", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AtomicNumber" + } + }, + "required": [ + "unit" + ] + }, + "[S/m].L": { + "properties": { + "unit": { + "type": "string", + "const": "[S/m].L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#SiemensPerMeterTimesLiter" + } + }, + "required": [ + "unit" + ] + }, + "[S/m].s": { + "properties": { + "unit": { + "type": "string", + "const": "[S/m].s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#SiemensPerMeterTimesSecond" + } + }, + "required": [ + "unit" + ] + }, + "[sps]": { + "properties": { + "unit": { + "type": "string", + "const": "[sps]", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#SamplePerSecond" + } + }, + "required": [ + "unit" + ] + }, + "a": { + "properties": { + "unit": { + "type": "string", + "const": "a", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Are" + } + }, + "required": [ + "unit" + ] + }, + "aS": { + "properties": { + "unit": { + "type": "string", + "const": "aS", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Absiemen" + } + }, + "required": [ + "unit" + ] + }, + "abA": { + "properties": { + "unit": { + "type": "string", + "const": "abA", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Abampere" + } + }, + "required": [ + "unit" + ] + }, + "abC": { + "properties": { + "unit": { + "type": "string", + "const": "abC", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Abcoulomb" + } + }, + "required": [ + "unit" + ] + }, + "abC/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "abC/cm^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AbcoulombPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "abF": { + "properties": { + "unit": { + "type": "string", + "const": "abF", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Abfarad" + } + }, + "required": [ + "unit" + ] + }, + "abF/cm": { + "properties": { + "unit": { + "type": "string", + "const": "abF/cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AbfaradPerCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "abH": { + "properties": { + "unit": { + "type": "string", + "const": "abH", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Abhenry" + } + }, + "required": [ + "unit" + ] + }, + "abT": { + "properties": { + "unit": { + "type": "string", + "const": "abT", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Abtesla" + } + }, + "required": [ + "unit" + ] + }, + "abV": { + "properties": { + "unit": { + "type": "string", + "const": "abV", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Abvolt" + } + }, + "required": [ + "unit" + ] + }, + "abV cm": { + "properties": { + "unit": { + "type": "string", + "const": "abV cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AbvoltCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "abV-s": { + "properties": { + "unit": { + "type": "string", + "const": "abV-s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AbvoltSecond" + } + }, + "required": [ + "unit" + ] + }, + "abV/cm": { + "properties": { + "unit": { + "type": "string", + "const": "abV/cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AbvoltPerCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "abΩ": { + "properties": { + "unit": { + "type": "string", + "const": "abΩ", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Abohm" + } + }, + "required": [ + "unit" + ] + }, + "ac": { + "properties": { + "unit": { + "type": "string", + "const": "ac", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Acre" + } + }, + "required": [ + "unit" + ] + }, + "ac ft": { + "properties": { + "unit": { + "type": "string", + "const": "ac ft", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AcreFoot" + } + }, + "required": [ + "unit" + ] + }, + "amu": { + "properties": { + "unit": { + "type": "string", + "const": "amu", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AtomicMassUnit" + } + }, + "required": [ + "unit" + ] + }, + "arb'U": { + "properties": { + "unit": { + "type": "string", + "const": "arb'U", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#ArbitraryUnit" + } + }, + "required": [ + "unit" + ] + }, + "arb'U/V": { + "properties": { + "unit": { + "type": "string", + "const": "arb'U/V", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#ArbitraryUnitPerVolt" + } + }, + "required": [ + "unit" + ] + }, + "arcMin": { + "properties": { + "unit": { + "type": "string", + "const": "arcMin", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ArcMinute" + } + }, + "required": [ + "unit" + ] + }, + "arcSec": { + "properties": { + "unit": { + "type": "string", + "const": "arcSec", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ArcSecond" + } + }, + "required": [ + "unit" + ] + }, + "at": { + "properties": { + "unit": { + "type": "string", + "const": "at", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AtmosphereTechnical" + } + }, + "required": [ + "unit" + ] + }, + "atm": { + "properties": { + "unit": { + "type": "string", + "const": "atm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AtmosphereStandard" + } + }, + "required": [ + "unit" + ] + }, + "au": { + "properties": { + "unit": { + "type": "string", + "const": "au", + "$asm.unit-iri": "http://qudt.org/vocab/unit#AstronomicalUnit" + } + }, + "required": [ + "unit" + ] + }, + "b": { + "properties": { + "unit": { + "type": "string", + "const": "b", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Barn" + } + }, + "required": [ + "unit" + ] + }, + "ban": { + "properties": { + "unit": { + "type": "string", + "const": "ban", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Ban" + } + }, + "required": [ + "unit" + ] + }, + "bar": { + "properties": { + "unit": { + "type": "string", + "const": "bar", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Bar" + } + }, + "required": [ + "unit" + ] + }, + "bbl": { + "properties": { + "unit": { + "type": "string", + "const": "bbl", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Barrel" + } + }, + "required": [ + "unit" + ] + }, + "bit": { + "properties": { + "unit": { + "type": "string", + "const": "bit", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Bit" + } + }, + "required": [ + "unit" + ] + }, + "bps": { + "properties": { + "unit": { + "type": "string", + "const": "bps", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BitsPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "breaths/min": { + "properties": { + "unit": { + "type": "string", + "const": "breaths/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#BreathPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "bu": { + "properties": { + "unit": { + "type": "string", + "const": "bu", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Bushel" + } + }, + "required": [ + "unit" + ] + }, + "cP": { + "properties": { + "unit": { + "type": "string", + "const": "cP", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Centipoise" + } + }, + "required": [ + "unit" + ] + }, + "cSt": { + "properties": { + "unit": { + "type": "string", + "const": "cSt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Centistokes" + } + }, + "required": [ + "unit" + ] + }, + "cal": { + "properties": { + "unit": { + "type": "string", + "const": "cal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CalorieThermochemical" + } + }, + "required": [ + "unit" + ] + }, + "cal/(cm s °C)": { + "properties": { + "unit": { + "type": "string", + "const": "cal/(cm s °C)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerCentimeterSecondDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "cal/(g.s)": { + "properties": { + "unit": { + "type": "string", + "const": "cal/(g.s)", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#CaloriePerGramSecond" + } + }, + "required": [ + "unit" + ] + }, + "cal/s": { + "properties": { + "unit": { + "type": "string", + "const": "cal/s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#CaloriePerSecond" + } + }, + "required": [ + "unit" + ] + }, + "cd": { + "properties": { + "unit": { + "type": "string", + "const": "cd", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Candela" + } + }, + "required": [ + "unit" + ] + }, + "cd/in^2": { + "properties": { + "unit": { + "type": "string", + "const": "cd/in^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CandelaPerSquareInch" + } + }, + "required": [ + "unit" + ] + }, + "cd/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "cd/m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CandelaPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "cdl": { + "properties": { + "unit": { + "type": "string", + "const": "cdl", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Candle" + } + }, + "required": [ + "unit" + ] + }, + "cell": { + "properties": { + "unit": { + "type": "string", + "const": "cell", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Cell" + } + }, + "required": [ + "unit" + ] + }, + "ch": { + "properties": { + "unit": { + "type": "string", + "const": "ch", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Chain" + } + }, + "required": [ + "unit" + ] + }, + "clo": { + "properties": { + "unit": { + "type": "string", + "const": "clo", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Clo" + } + }, + "required": [ + "unit" + ] + }, + "cm": { + "properties": { + "unit": { + "type": "string", + "const": "cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Centimeter" + } + }, + "required": [ + "unit" + ] + }, + "cm s °C": { + "properties": { + "unit": { + "type": "string", + "const": "cm s °C", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CentimeterSecondDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "cm-degC": { + "properties": { + "unit": { + "type": "string", + "const": "cm-degC", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeCelsiusCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "cm/s": { + "properties": { + "unit": { + "type": "string", + "const": "cm/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CentimeterPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "cm/s^2": { + "properties": { + "unit": { + "type": "string", + "const": "cm/s^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CentimeterPerSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "cmH2O": { + "properties": { + "unit": { + "type": "string", + "const": "cmH2O", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CentimeterOfWater" + } + }, + "required": [ + "unit" + ] + }, + "cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "cm^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "cm^2 min": { + "properties": { + "unit": { + "type": "string", + "const": "cm^2 min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareCentimeterMinute" + } + }, + "required": [ + "unit" + ] + }, + "cm^2 s": { + "properties": { + "unit": { + "type": "string", + "const": "cm^2 s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareCentimeterSecond" + } + }, + "required": [ + "unit" + ] + }, + "cm^3": { + "properties": { + "unit": { + "type": "string", + "const": "cm^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "cm^3/g STP": { + "properties": { + "unit": { + "type": "string", + "const": "cm^3/g STP", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#CubicCentimeterPerGramAtSTP" + } + }, + "required": [ + "unit" + ] + }, + "cm^3/min": { + "properties": { + "unit": { + "type": "string", + "const": "cm^3/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#CubicCentimeterPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "cmil": { + "properties": { + "unit": { + "type": "string", + "const": "cmil", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CircularMil" + } + }, + "required": [ + "unit" + ] + }, + "cord": { + "properties": { + "unit": { + "type": "string", + "const": "cord", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Cord" + } + }, + "required": [ + "unit" + ] + }, + "cp": { + "properties": { + "unit": { + "type": "string", + "const": "cp", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Candlepower" + } + }, + "required": [ + "unit" + ] + }, + "cup": { + "properties": { + "unit": { + "type": "string", + "const": "cup", + "$asm.unit-iri": "http://qudt.org/vocab/unit#LiquidCupUS" + } + }, + "required": [ + "unit" + ] + }, + "d": { + "properties": { + "unit": { + "type": "string", + "const": "d", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Day" + } + }, + "required": [ + "unit" + ] + }, + "d (s)": { + "properties": { + "unit": { + "type": "string", + "const": "d (s)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DaySidereal" + } + }, + "required": [ + "unit" + ] + }, + "dB": { + "properties": { + "unit": { + "type": "string", + "const": "dB", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Decibel" + } + }, + "required": [ + "unit" + ] + }, + "dBc": { + "properties": { + "unit": { + "type": "string", + "const": "dBc", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DecibelCarrier" + } + }, + "required": [ + "unit" + ] + }, + "dBm": { + "properties": { + "unit": { + "type": "string", + "const": "dBm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DecibelReferredToOneMilliwatt" + } + }, + "required": [ + "unit" + ] + }, + "degC": { + "properties": { + "unit": { + "type": "string", + "const": "degC", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "deg^2": { + "properties": { + "unit": { + "type": "string", + "const": "deg^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareDegree" + } + }, + "required": [ + "unit" + ] + }, + "deg·mL·g−1·dm−1": { + "properties": { + "unit": { + "type": "string", + "const": "deg·mL·g−1·dm−1", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#DegreeTimesMilliliterPerGramTimesDecimeter" + } + }, + "required": [ + "unit" + ] + }, + "dm": { + "properties": { + "unit": { + "type": "string", + "const": "dm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Decimeter" + } + }, + "required": [ + "unit" + ] + }, + "dpt": { + "properties": { + "unit": { + "type": "string", + "const": "dpt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Diopter" + } + }, + "required": [ + "unit" + ] + }, + "drp": { + "properties": { + "unit": { + "type": "string", + "const": "drp", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Drop" + } + }, + "required": [ + "unit" + ] + }, + "dry_gal": { + "properties": { + "unit": { + "type": "string", + "const": "dry_gal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DryGallonUS" + } + }, + "required": [ + "unit" + ] + }, + "dry_pt": { + "properties": { + "unit": { + "type": "string", + "const": "dry_pt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DryPintUS" + } + }, + "required": [ + "unit" + ] + }, + "dry_qt": { + "properties": { + "unit": { + "type": "string", + "const": "dry_qt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DryQuartUS" + } + }, + "required": [ + "unit" + ] + }, + "dwt": { + "properties": { + "unit": { + "type": "string", + "const": "dwt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PennyWeight" + } + }, + "required": [ + "unit" + ] + }, + "dyn": { + "properties": { + "unit": { + "type": "string", + "const": "dyn", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Dyne" + } + }, + "required": [ + "unit" + ] + }, + "dyn cm": { + "properties": { + "unit": { + "type": "string", + "const": "dyn cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DyneCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "dyn/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "dyn/cm^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DynePerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "e": { + "properties": { + "unit": { + "type": "string", + "const": "e", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#E" + } + }, + "required": [ + "unit" + ] + }, + "eV": { + "properties": { + "unit": { + "type": "string", + "const": "eV", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ElectronVolt" + } + }, + "required": [ + "unit" + ] + }, + "eV s": { + "properties": { + "unit": { + "type": "string", + "const": "eV s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ElectronVoltSecond" + } + }, + "required": [ + "unit" + ] + }, + "eV/K": { + "properties": { + "unit": { + "type": "string", + "const": "eV/K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ElectronVoltPerKelvin" + } + }, + "required": [ + "unit" + ] + }, + "eV/T": { + "properties": { + "unit": { + "type": "string", + "const": "eV/T", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ElectronVoltPerTesla" + } + }, + "required": [ + "unit" + ] + }, + "erg": { + "properties": { + "unit": { + "type": "string", + "const": "erg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Erg" + } + }, + "required": [ + "unit" + ] + }, + "erg s": { + "properties": { + "unit": { + "type": "string", + "const": "erg s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ErgSecond" + } + }, + "required": [ + "unit" + ] + }, + "erg/(cm^2 s)": { + "properties": { + "unit": { + "type": "string", + "const": "erg/(cm^2 s)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ErgPerSquareCentimeterSecond" + } + }, + "required": [ + "unit" + ] + }, + "erg/cm^3": { + "properties": { + "unit": { + "type": "string", + "const": "erg/cm^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ErgPerCubicCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "erg/s": { + "properties": { + "unit": { + "type": "string", + "const": "erg/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ErgPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "fL": { + "properties": { + "unit": { + "type": "string", + "const": "fL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Femtoliter" + } + }, + "required": [ + "unit" + ] + }, + "fa": { + "properties": { + "unit": { + "type": "string", + "const": "fa", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FractionalArea" + } + }, + "required": [ + "unit" + ] + }, + "fath": { + "properties": { + "unit": { + "type": "string", + "const": "fath", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Fathom" + } + }, + "required": [ + "unit" + ] + }, + "fc": { + "properties": { + "unit": { + "type": "string", + "const": "fc", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootCandle" + } + }, + "required": [ + "unit" + ] + }, + "fermi": { + "properties": { + "unit": { + "type": "string", + "const": "fermi", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Fermi" + } + }, + "required": [ + "unit" + ] + }, + "fg": { + "properties": { + "unit": { + "type": "string", + "const": "fg", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Femtogram" + } + }, + "required": [ + "unit" + ] + }, + "fg/L": { + "properties": { + "unit": { + "type": "string", + "const": "fg/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#FemtogramPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "fg/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "fg/cm^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#FemtogramPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "fg/fL": { + "properties": { + "unit": { + "type": "string", + "const": "fg/fL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#FemtogramPerFemtoliter" + } + }, + "required": [ + "unit" + ] + }, + "fg/mL": { + "properties": { + "unit": { + "type": "string", + "const": "fg/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#FemtogramPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "fg/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "fg/m^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#FemtogramPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "fg/nL": { + "properties": { + "unit": { + "type": "string", + "const": "fg/nL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#FemtogramPerNanoliter" + } + }, + "required": [ + "unit" + ] + }, + "fg/pL": { + "properties": { + "unit": { + "type": "string", + "const": "fg/pL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#FemtogramPerPicoliter" + } + }, + "required": [ + "unit" + ] + }, + "fg/μL": { + "properties": { + "unit": { + "type": "string", + "const": "fg/μL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#FemtogramPerMicroliter" + } + }, + "required": [ + "unit" + ] + }, + "flight": { + "properties": { + "unit": { + "type": "string", + "const": "flight", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Flight" + } + }, + "required": [ + "unit" + ] + }, + "fm": { + "properties": { + "unit": { + "type": "string", + "const": "fm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Femtometer" + } + }, + "required": [ + "unit" + ] + }, + "fmol": { + "properties": { + "unit": { + "type": "string", + "const": "fmol", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Femtomole" + } + }, + "required": [ + "unit" + ] + }, + "fmol/L": { + "properties": { + "unit": { + "type": "string", + "const": "fmol/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Femtomolar" + } + }, + "required": [ + "unit" + ] + }, + "fps": { + "properties": { + "unit": { + "type": "string", + "const": "fps", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FramePerSecond" + } + }, + "required": [ + "unit" + ] + }, + "ft": { + "properties": { + "unit": { + "type": "string", + "const": "ft", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Foot" + } + }, + "required": [ + "unit" + ] + }, + "ft L": { + "properties": { + "unit": { + "type": "string", + "const": "ft L", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootLambert" + } + }, + "required": [ + "unit" + ] + }, + "ft lbf": { + "properties": { + "unit": { + "type": "string", + "const": "ft lbf", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPoundForce" + } + }, + "required": [ + "unit" + ] + }, + "ft lbf/(ft^2 s)": { + "properties": { + "unit": { + "type": "string", + "const": "ft lbf/(ft^2 s)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPoundForcePerSquareFootSecond" + } + }, + "required": [ + "unit" + ] + }, + "ft lbf/ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "ft lbf/ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPoundForcePerSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "ft lbf/h": { + "properties": { + "unit": { + "type": "string", + "const": "ft lbf/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPoundForcePerHour" + } + }, + "required": [ + "unit" + ] + }, + "ft lbf/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "ft lbf/m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPoundForcePerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "ft lbf/min": { + "properties": { + "unit": { + "type": "string", + "const": "ft lbf/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPoundForcePerMinute" + } + }, + "required": [ + "unit" + ] + }, + "ft lbf/s": { + "properties": { + "unit": { + "type": "string", + "const": "ft lbf/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPoundForcePerSecond" + } + }, + "required": [ + "unit" + ] + }, + "ft-pdl": { + "properties": { + "unit": { + "type": "string", + "const": "ft-pdl", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPoundal" + } + }, + "required": [ + "unit" + ] + }, + "ft/h": { + "properties": { + "unit": { + "type": "string", + "const": "ft/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPerHour" + } + }, + "required": [ + "unit" + ] + }, + "ft/min": { + "properties": { + "unit": { + "type": "string", + "const": "ft/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "ft/s": { + "properties": { + "unit": { + "type": "string", + "const": "ft/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "ft/s^2": { + "properties": { + "unit": { + "type": "string", + "const": "ft/s^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPerSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "ftH2O": { + "properties": { + "unit": { + "type": "string", + "const": "ftH2O", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootOfWater" + } + }, + "required": [ + "unit" + ] + }, + "ftUS": { + "properties": { + "unit": { + "type": "string", + "const": "ftUS", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootUSSurvey" + } + }, + "required": [ + "unit" + ] + }, + "ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "ft^2 h °F": { + "properties": { + "unit": { + "type": "string", + "const": "ft^2 h °F", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareFootHourDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "ft^2 s °F": { + "properties": { + "unit": { + "type": "string", + "const": "ft^2 s °F", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareFootSecondDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "ft^2 °F": { + "properties": { + "unit": { + "type": "string", + "const": "ft^2 °F", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareFootDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "ft^2/(Btu in)": { + "properties": { + "unit": { + "type": "string", + "const": "ft^2/(Btu in)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareFootPerBtuInch" + } + }, + "required": [ + "unit" + ] + }, + "ft^2/h": { + "properties": { + "unit": { + "type": "string", + "const": "ft^2/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareFootPerHour" + } + }, + "required": [ + "unit" + ] + }, + "ft^2/s": { + "properties": { + "unit": { + "type": "string", + "const": "ft^2/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareFootPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "ft^3": { + "properties": { + "unit": { + "type": "string", + "const": "ft^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicFoot" + } + }, + "required": [ + "unit" + ] + }, + "ft^3/min": { + "properties": { + "unit": { + "type": "string", + "const": "ft^3/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicFootPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "ft^3/s": { + "properties": { + "unit": { + "type": "string", + "const": "ft^3/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicFootPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "fur": { + "properties": { + "unit": { + "type": "string", + "const": "fur", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Furlong" + } + }, + "required": [ + "unit" + ] + }, + "g": { + "properties": { + "unit": { + "type": "string", + "const": "g", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Gram" + } + }, + "required": [ + "unit" + ] + }, + "g °C": { + "properties": { + "unit": { + "type": "string", + "const": "g °C", + "$asm.unit-iri": "http://qudt.org/vocab/unit#GramDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "g/L": { + "properties": { + "unit": { + "type": "string", + "const": "g/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "g/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "g/cm^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "g/cm^3": { + "properties": { + "unit": { + "type": "string", + "const": "g/cm^3", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerCubicCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "g/fL": { + "properties": { + "unit": { + "type": "string", + "const": "g/fL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerFemtoliter" + } + }, + "required": [ + "unit" + ] + }, + "g/mL": { + "properties": { + "unit": { + "type": "string", + "const": "g/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "g/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "g/m^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "g/min": { + "properties": { + "unit": { + "type": "string", + "const": "g/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramsPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "g/mol": { + "properties": { + "unit": { + "type": "string", + "const": "g/mol", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerMole" + } + }, + "required": [ + "unit" + ] + }, + "g/nL": { + "properties": { + "unit": { + "type": "string", + "const": "g/nL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerNanoliter" + } + }, + "required": [ + "unit" + ] + }, + "g/pL": { + "properties": { + "unit": { + "type": "string", + "const": "g/pL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerPicoliter" + } + }, + "required": [ + "unit" + ] + }, + "g/μL": { + "properties": { + "unit": { + "type": "string", + "const": "g/μL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#GramPerMicroliter" + } + }, + "required": [ + "unit" + ] + }, + "gal/d": { + "properties": { + "unit": { + "type": "string", + "const": "gal/d", + "$asm.unit-iri": "http://qudt.org/vocab/unit#GallonUSPerDay" + } + }, + "required": [ + "unit" + ] + }, + "gal/min": { + "properties": { + "unit": { + "type": "string", + "const": "gal/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#GallonUSPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "gamma": { + "properties": { + "unit": { + "type": "string", + "const": "gamma", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Gamma" + } + }, + "required": [ + "unit" + ] + }, + "gon": { + "properties": { + "unit": { + "type": "string", + "const": "gon", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Gon" + } + }, + "required": [ + "unit" + ] + }, + "gr": { + "properties": { + "unit": { + "type": "string", + "const": "gr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Grain" + } + }, + "required": [ + "unit" + ] + }, + "gr/gal": { + "properties": { + "unit": { + "type": "string", + "const": "gr/gal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#GrainPerGallon" + } + }, + "required": [ + "unit" + ] + }, + "grad": { + "properties": { + "unit": { + "type": "string", + "const": "grad", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Grad" + } + }, + "required": [ + "unit" + ] + }, + "grd": { + "properties": { + "unit": { + "type": "string", + "const": "grd", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Grade" + } + }, + "required": [ + "unit" + ] + }, + "h": { + "properties": { + "unit": { + "type": "string", + "const": "h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Hour" + } + }, + "required": [ + "unit" + ] + }, + "h ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "h ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HourSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "ha": { + "properties": { + "unit": { + "type": "string", + "const": "ha", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Hectare" + } + }, + "required": [ + "unit" + ] + }, + "hp/H2O": { + "properties": { + "unit": { + "type": "string", + "const": "hp/H2O", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HorsepowerWater" + } + }, + "required": [ + "unit" + ] + }, + "hp/V": { + "properties": { + "unit": { + "type": "string", + "const": "hp/V", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HorsepowerElectric" + } + }, + "required": [ + "unit" + ] + }, + "hp/boiler": { + "properties": { + "unit": { + "type": "string", + "const": "hp/boiler", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HorsepowerBoiler" + } + }, + "required": [ + "unit" + ] + }, + "hp/m": { + "properties": { + "unit": { + "type": "string", + "const": "hp/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HorsepowerMetric" + } + }, + "required": [ + "unit" + ] + }, + "hr": { + "properties": { + "unit": { + "type": "string", + "const": "hr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HourSidereal" + } + }, + "required": [ + "unit" + ] + }, + "imp gal": { + "properties": { + "unit": { + "type": "string", + "const": "imp gal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#GallonImperial" + } + }, + "required": [ + "unit" + ] + }, + "in": { + "properties": { + "unit": { + "type": "string", + "const": "in", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Inch" + } + }, + "required": [ + "unit" + ] + }, + "in lbf": { + "properties": { + "unit": { + "type": "string", + "const": "in lbf", + "$asm.unit-iri": "http://qudt.org/vocab/unit#InchPoundForce" + } + }, + "required": [ + "unit" + ] + }, + "in/s^2": { + "properties": { + "unit": { + "type": "string", + "const": "in/s^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#InchPerSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "inAq": { + "properties": { + "unit": { + "type": "string", + "const": "inAq", + "$asm.unit-iri": "http://qudt.org/vocab/unit#InchOfWater" + } + }, + "required": [ + "unit" + ] + }, + "inHg": { + "properties": { + "unit": { + "type": "string", + "const": "inHg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#InchOfMercury" + } + }, + "required": [ + "unit" + ] + }, + "in^2": { + "properties": { + "unit": { + "type": "string", + "const": "in^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareInch" + } + }, + "required": [ + "unit" + ] + }, + "in^3": { + "properties": { + "unit": { + "type": "string", + "const": "in^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicInch" + } + }, + "required": [ + "unit" + ] + }, + "in^3/min": { + "properties": { + "unit": { + "type": "string", + "const": "in^3/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicInchPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "kHz": { + "properties": { + "unit": { + "type": "string", + "const": "kHz", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KiloHertz" + } + }, + "required": [ + "unit" + ] + }, + "kJ/(mol K)": { + "properties": { + "unit": { + "type": "string", + "const": "kJ/(mol K)", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#KiloJoulePerMoleKelvin" + } + }, + "required": [ + "unit" + ] + }, + "kPa": { + "properties": { + "unit": { + "type": "string", + "const": "kPa", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KiloPascal" + } + }, + "required": [ + "unit" + ] + }, + "kPaA": { + "properties": { + "unit": { + "type": "string", + "const": "kPaA", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KiloPascalAbsolute" + } + }, + "required": [ + "unit" + ] + }, + "kV": { + "properties": { + "unit": { + "type": "string", + "const": "kV", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#KiloVolt" + } + }, + "required": [ + "unit" + ] + }, + "kW": { + "properties": { + "unit": { + "type": "string", + "const": "kW", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Kilowatt" + } + }, + "required": [ + "unit" + ] + }, + "kW h": { + "properties": { + "unit": { + "type": "string", + "const": "kW h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Kilowatthour" + } + }, + "required": [ + "unit" + ] + }, + "kat": { + "properties": { + "unit": { + "type": "string", + "const": "kat", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Katal" + } + }, + "required": [ + "unit" + ] + }, + "kbps": { + "properties": { + "unit": { + "type": "string", + "const": "kbps", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilobitsPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "kcal": { + "properties": { + "unit": { + "type": "string", + "const": "kcal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Kilocalorie" + } + }, + "required": [ + "unit" + ] + }, + "kcal/(cm^2 min)": { + "properties": { + "unit": { + "type": "string", + "const": "kcal/(cm^2 min)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerSquareCentimeterMinute" + } + }, + "required": [ + "unit" + ] + }, + "kcal/(cm^2 s)": { + "properties": { + "unit": { + "type": "string", + "const": "kcal/(cm^2 s)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerSquareCentimeterSecond" + } + }, + "required": [ + "unit" + ] + }, + "kcal/(g °C)": { + "properties": { + "unit": { + "type": "string", + "const": "kcal/(g °C)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerGramDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "kcal/(mol °C)": { + "properties": { + "unit": { + "type": "string", + "const": "kcal/(mol °C)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerMoleDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "kcal/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "kcal/cm^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "kcal/g": { + "properties": { + "unit": { + "type": "string", + "const": "kcal/g", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerGram" + } + }, + "required": [ + "unit" + ] + }, + "kcal/min": { + "properties": { + "unit": { + "type": "string", + "const": "kcal/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerMinute" + } + }, + "required": [ + "unit" + ] + }, + "kcal/mol": { + "properties": { + "unit": { + "type": "string", + "const": "kcal/mol", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerMole" + } + }, + "required": [ + "unit" + ] + }, + "kcal/s": { + "properties": { + "unit": { + "type": "string", + "const": "kcal/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilocaloriePerSecond" + } + }, + "required": [ + "unit" + ] + }, + "keV": { + "properties": { + "unit": { + "type": "string", + "const": "keV", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KiloElectronVolt" + } + }, + "required": [ + "unit" + ] + }, + "keV/μm": { + "properties": { + "unit": { + "type": "string", + "const": "keV/μm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KiloElectronVoltPerMicrometer" + } + }, + "required": [ + "unit" + ] + }, + "kg": { + "properties": { + "unit": { + "type": "string", + "const": "kg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Kilogram" + } + }, + "required": [ + "unit" + ] + }, + "kg K": { + "properties": { + "unit": { + "type": "string", + "const": "kg K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramKelvin" + } + }, + "required": [ + "unit" + ] + }, + "kg m s^-1": { + "properties": { + "unit": { + "type": "string", + "const": "kg m s^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramMeterPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "kg m^2": { + "properties": { + "unit": { + "type": "string", + "const": "kg m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramMeterSquared" + } + }, + "required": [ + "unit" + ] + }, + "kg mol^-1": { + "properties": { + "unit": { + "type": "string", + "const": "kg mol^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramPerMole" + } + }, + "required": [ + "unit" + ] + }, + "kg s^2": { + "properties": { + "unit": { + "type": "string", + "const": "kg s^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "kg/L": { + "properties": { + "unit": { + "type": "string", + "const": "kg/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#KilogramPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "kg/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "kg/cm^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#KilogramPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "kg/fL": { + "properties": { + "unit": { + "type": "string", + "const": "kg/fL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#KilogramPerFemtoliter" + } + }, + "required": [ + "unit" + ] + }, + "kg/h": { + "properties": { + "unit": { + "type": "string", + "const": "kg/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramPerHour" + } + }, + "required": [ + "unit" + ] + }, + "kg/m": { + "properties": { + "unit": { + "type": "string", + "const": "kg/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "kg/mL": { + "properties": { + "unit": { + "type": "string", + "const": "kg/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#KilogramPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "kg/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "kg/m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "kg/m^3": { + "properties": { + "unit": { + "type": "string", + "const": "kg/m^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramPerCubicMeter" + } + }, + "required": [ + "unit" + ] + }, + "kg/nL": { + "properties": { + "unit": { + "type": "string", + "const": "kg/nL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#KilogramPerNanoliter" + } + }, + "required": [ + "unit" + ] + }, + "kg/pL": { + "properties": { + "unit": { + "type": "string", + "const": "kg/pL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#KilogramPerPicoliter" + } + }, + "required": [ + "unit" + ] + }, + "kg/s": { + "properties": { + "unit": { + "type": "string", + "const": "kg/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "kg/μL": { + "properties": { + "unit": { + "type": "string", + "const": "kg/μL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#KilogramPerMicroliter" + } + }, + "required": [ + "unit" + ] + }, + "kgf": { + "properties": { + "unit": { + "type": "string", + "const": "kgf", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramForce" + } + }, + "required": [ + "unit" + ] + }, + "kgf m": { + "properties": { + "unit": { + "type": "string", + "const": "kgf m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramForceMeter" + } + }, + "required": [ + "unit" + ] + }, + "kgf/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "kgf/cm^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilogramForcePerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "kip": { + "properties": { + "unit": { + "type": "string", + "const": "kip", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Kip" + } + }, + "required": [ + "unit" + ] + }, + "kip/in^2": { + "properties": { + "unit": { + "type": "string", + "const": "kip/in^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KipPerSquareInch" + } + }, + "required": [ + "unit" + ] + }, + "km": { + "properties": { + "unit": { + "type": "string", + "const": "km", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Kilometer" + } + }, + "required": [ + "unit" + ] + }, + "km/h": { + "properties": { + "unit": { + "type": "string", + "const": "km/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilometerPerHour" + } + }, + "required": [ + "unit" + ] + }, + "km/s": { + "properties": { + "unit": { + "type": "string", + "const": "km/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KilometerPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "km^3/s^2": { + "properties": { + "unit": { + "type": "string", + "const": "km^3/s^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicKilometerPerSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "kn": { + "properties": { + "unit": { + "type": "string", + "const": "kn", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Knot" + } + }, + "required": [ + "unit" + ] + }, + "kp": { + "properties": { + "unit": { + "type": "string", + "const": "kp", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KiloPond" + } + }, + "required": [ + "unit" + ] + }, + "kt/s": { + "properties": { + "unit": { + "type": "string", + "const": "kt/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#KnotPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "l_P": { + "properties": { + "unit": { + "type": "string", + "const": "l_P", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PlanckLength" + } + }, + "required": [ + "unit" + ] + }, + "lb mol": { + "properties": { + "unit": { + "type": "string", + "const": "lb mol", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundMole" + } + }, + "required": [ + "unit" + ] + }, + "lb mol °F": { + "properties": { + "unit": { + "type": "string", + "const": "lb mol °F", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundMoleDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "lb-degF": { + "properties": { + "unit": { + "type": "string", + "const": "lb-degF", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundDegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "lb-degR": { + "properties": { + "unit": { + "type": "string", + "const": "lb-degR", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundDegreeRankine" + } + }, + "required": [ + "unit" + ] + }, + "lb/(ft-hr)": { + "properties": { + "unit": { + "type": "string", + "const": "lb/(ft-hr)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerFootHour" + } + }, + "required": [ + "unit" + ] + }, + "lb/(ft-s)": { + "properties": { + "unit": { + "type": "string", + "const": "lb/(ft-s)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerFootSecond" + } + }, + "required": [ + "unit" + ] + }, + "lb/ft": { + "properties": { + "unit": { + "type": "string", + "const": "lb/ft", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerFoot" + } + }, + "required": [ + "unit" + ] + }, + "lb/ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "lb/ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "lb/ft^3": { + "properties": { + "unit": { + "type": "string", + "const": "lb/ft^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerCubicFoot" + } + }, + "required": [ + "unit" + ] + }, + "lb/gal": { + "properties": { + "unit": { + "type": "string", + "const": "lb/gal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerGallon" + } + }, + "required": [ + "unit" + ] + }, + "lb/hr": { + "properties": { + "unit": { + "type": "string", + "const": "lb/hr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerHour" + } + }, + "required": [ + "unit" + ] + }, + "lb/in": { + "properties": { + "unit": { + "type": "string", + "const": "lb/in", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerInch" + } + }, + "required": [ + "unit" + ] + }, + "lb/in^3": { + "properties": { + "unit": { + "type": "string", + "const": "lb/in^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerCubicInch" + } + }, + "required": [ + "unit" + ] + }, + "lb/min": { + "properties": { + "unit": { + "type": "string", + "const": "lb/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "lb/yd^3": { + "properties": { + "unit": { + "type": "string", + "const": "lb/yd^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerCubicYard" + } + }, + "required": [ + "unit" + ] + }, + "lb_av": { + "properties": { + "unit": { + "type": "string", + "const": "lb_av", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#AvoirdupoisPound" + } + }, + "required": [ + "unit" + ] + }, + "lbf": { + "properties": { + "unit": { + "type": "string", + "const": "lbf", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForce" + } + }, + "required": [ + "unit" + ] + }, + "lbf / in^2-s": { + "properties": { + "unit": { + "type": "string", + "const": "lbf / in^2-s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForcePerSquareInchSecond" + } + }, + "required": [ + "unit" + ] + }, + "lbf-ft": { + "properties": { + "unit": { + "type": "string", + "const": "lbf-ft", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForceFoot" + } + }, + "required": [ + "unit" + ] + }, + "lbf-in": { + "properties": { + "unit": { + "type": "string", + "const": "lbf-in", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForceInch" + } + }, + "required": [ + "unit" + ] + }, + "lbf-s/ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "lbf-s/ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForceSecondPerSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "lbf-s/in^2": { + "properties": { + "unit": { + "type": "string", + "const": "lbf-s/in^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForceSecondPerSquareInch" + } + }, + "required": [ + "unit" + ] + }, + "lbf/ft": { + "properties": { + "unit": { + "type": "string", + "const": "lbf/ft", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForcePerFoot" + } + }, + "required": [ + "unit" + ] + }, + "lbf/ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "lbf/ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForcePerSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "lbf/in": { + "properties": { + "unit": { + "type": "string", + "const": "lbf/in", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForcePerInch" + } + }, + "required": [ + "unit" + ] + }, + "lbf/lb": { + "properties": { + "unit": { + "type": "string", + "const": "lbf/lb", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForcePerPound" + } + }, + "required": [ + "unit" + ] + }, + "lbf/s": { + "properties": { + "unit": { + "type": "string", + "const": "lbf/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#FootPoundForceSecond" + } + }, + "required": [ + "unit" + ] + }, + "lbm": { + "properties": { + "unit": { + "type": "string", + "const": "lbm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundMass" + } + }, + "required": [ + "unit" + ] + }, + "lbm (tr)": { + "properties": { + "unit": { + "type": "string", + "const": "lbm (tr)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundTroy" + } + }, + "required": [ + "unit" + ] + }, + "lbm/m^3": { + "properties": { + "unit": { + "type": "string", + "const": "lbm/m^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundPerCubicMeter" + } + }, + "required": [ + "unit" + ] + }, + "lcwt": { + "properties": { + "unit": { + "type": "string", + "const": "lcwt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HundredWeightLong" + } + }, + "required": [ + "unit" + ] + }, + "lm": { + "properties": { + "unit": { + "type": "string", + "const": "lm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Lumen" + } + }, + "required": [ + "unit" + ] + }, + "lx": { + "properties": { + "unit": { + "type": "string", + "const": "lx", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Lux" + } + }, + "required": [ + "unit" + ] + }, + "ly": { + "properties": { + "unit": { + "type": "string", + "const": "ly", + "$asm.unit-iri": "http://qudt.org/vocab/unit#LightYear" + } + }, + "required": [ + "unit" + ] + }, + "m": { + "properties": { + "unit": { + "type": "string", + "const": "m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Meter" + } + }, + "required": [ + "unit" + ] + }, + "m K": { + "properties": { + "unit": { + "type": "string", + "const": "m K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MeterKelvin" + } + }, + "required": [ + "unit" + ] + }, + "m T": { + "properties": { + "unit": { + "type": "string", + "const": "m T", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TeslaMeter" + } + }, + "required": [ + "unit" + ] + }, + "m V": { + "properties": { + "unit": { + "type": "string", + "const": "m V", + "$asm.unit-iri": "http://qudt.org/vocab/unit#VoltMeter" + } + }, + "required": [ + "unit" + ] + }, + "m h^-1": { + "properties": { + "unit": { + "type": "string", + "const": "m h^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MeterPerHour" + } + }, + "required": [ + "unit" + ] + }, + "m min^-1": { + "properties": { + "unit": { + "type": "string", + "const": "m min^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MeterPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "m s^-1": { + "properties": { + "unit": { + "type": "string", + "const": "m s^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MeterPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "m s^-2": { + "properties": { + "unit": { + "type": "string", + "const": "m s^-2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MeterPerSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "m-kg": { + "properties": { + "unit": { + "type": "string", + "const": "m-kg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MeterKilogram" + } + }, + "required": [ + "unit" + ] + }, + "m/F": { + "properties": { + "unit": { + "type": "string", + "const": "m/F", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MeterPerFarad" + } + }, + "required": [ + "unit" + ] + }, + "m/K": { + "properties": { + "unit": { + "type": "string", + "const": "m/K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MeterPerKelvin" + } + }, + "required": [ + "unit" + ] + }, + "m/z": { + "properties": { + "unit": { + "type": "string", + "const": "m/z", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MassPerCharge" + } + }, + "required": [ + "unit" + ] + }, + "mA": { + "properties": { + "unit": { + "type": "string", + "const": "mA", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliAmpere" + } + }, + "required": [ + "unit" + ] + }, + "mAU": { + "properties": { + "unit": { + "type": "string", + "const": "mAU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliAbsorbanceUnit" + } + }, + "required": [ + "unit" + ] + }, + "mAU.L": { + "properties": { + "unit": { + "type": "string", + "const": "mAU.L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliAbsorbanceUnitTimesLiter" + } + }, + "required": [ + "unit" + ] + }, + "mAU.mL": { + "properties": { + "unit": { + "type": "string", + "const": "mAU.mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliAbsorbanceUnitTimesMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "mAU.min": { + "properties": { + "unit": { + "type": "string", + "const": "mAU.min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliAbsorbanceUnitTimesMinute" + } + }, + "required": [ + "unit" + ] + }, + "mAU.s": { + "properties": { + "unit": { + "type": "string", + "const": "mAU.s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliAbsorbanceUnitTimesSecond" + } + }, + "required": [ + "unit" + ] + }, + "mArbU": { + "properties": { + "unit": { + "type": "string", + "const": "mArbU", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliArbitraryUnit" + } + }, + "required": [ + "unit" + ] + }, + "mF/m": { + "properties": { + "unit": { + "type": "string", + "const": "mF/m", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroFaradPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "mF/m kHz": { + "properties": { + "unit": { + "type": "string", + "const": "mF/m kHz", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroFaradPerMeterKiloHertz" + } + }, + "required": [ + "unit" + ] + }, + "mG": { + "properties": { + "unit": { + "type": "string", + "const": "mG", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Milligravity" + } + }, + "required": [ + "unit" + ] + }, + "mH": { + "properties": { + "unit": { + "type": "string", + "const": "mH", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MilliHenry" + } + }, + "required": [ + "unit" + ] + }, + "mL": { + "properties": { + "unit": { + "type": "string", + "const": "mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Milliliter" + } + }, + "required": [ + "unit" + ] + }, + "mL/L": { + "properties": { + "unit": { + "type": "string", + "const": "mL/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliliterPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "mL/kg": { + "properties": { + "unit": { + "type": "string", + "const": "mL/kg", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliliterPerKilogram" + } + }, + "required": [ + "unit" + ] + }, + "mL/min": { + "properties": { + "unit": { + "type": "string", + "const": "mL/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliliterPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "mL/min^2": { + "properties": { + "unit": { + "type": "string", + "const": "mL/min^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliliterPerMinuteSquared" + } + }, + "required": [ + "unit" + ] + }, + "mL/s": { + "properties": { + "unit": { + "type": "string", + "const": "mL/s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliliterPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "mL/s^2": { + "properties": { + "unit": { + "type": "string", + "const": "mL/s^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliliterPerSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "mM": { + "properties": { + "unit": { + "type": "string", + "const": "mM", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Millimolar" + } + }, + "required": [ + "unit" + ] + }, + "mS/cm": { + "properties": { + "unit": { + "type": "string", + "const": "mS/cm", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MillisiemenPerCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "mT": { + "properties": { + "unit": { + "type": "string", + "const": "mT", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MetricTon" + } + }, + "required": [ + "unit" + ] + }, + "mV": { + "properties": { + "unit": { + "type": "string", + "const": "mV", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Millivolt" + } + }, + "required": [ + "unit" + ] + }, + "mV.L": { + "properties": { + "unit": { + "type": "string", + "const": "mV.L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MillivoltTimesLiter" + } + }, + "required": [ + "unit" + ] + }, + "mV.s": { + "properties": { + "unit": { + "type": "string", + "const": "mV.s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MillivoltTimesSecond" + } + }, + "required": [ + "unit" + ] + }, + "mW": { + "properties": { + "unit": { + "type": "string", + "const": "mW", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliWatt" + } + }, + "required": [ + "unit" + ] + }, + "mW/g": { + "properties": { + "unit": { + "type": "string", + "const": "mW/g", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliWattPerGram" + } + }, + "required": [ + "unit" + ] + }, + "m^-1": { + "properties": { + "unit": { + "type": "string", + "const": "m^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PerMeter" + } + }, + "required": [ + "unit" + ] + }, + "m^-1 K^-1": { + "properties": { + "unit": { + "type": "string", + "const": "m^-1 K^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PerMeterKelvin" + } + }, + "required": [ + "unit" + ] + }, + "m^-1 T^-1": { + "properties": { + "unit": { + "type": "string", + "const": "m^-1 T^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PerTeslaMeter" + } + }, + "required": [ + "unit" + ] + }, + "m^-3": { + "properties": { + "unit": { + "type": "string", + "const": "m^-3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PerCubicMeter" + } + }, + "required": [ + "unit" + ] + }, + "m^2": { + "properties": { + "unit": { + "type": "string", + "const": "m^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "m^2 K": { + "properties": { + "unit": { + "type": "string", + "const": "m^2 K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareMeterKelvin" + } + }, + "required": [ + "unit" + ] + }, + "m^2 sr": { + "properties": { + "unit": { + "type": "string", + "const": "m^2 sr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareMeterSteradian" + } + }, + "required": [ + "unit" + ] + }, + "m^2/K": { + "properties": { + "unit": { + "type": "string", + "const": "m^2/K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareMeterPerKelvin" + } + }, + "required": [ + "unit" + ] + }, + "m^2/g": { + "properties": { + "unit": { + "type": "string", + "const": "m^2/g", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#SquareMetersPerGram" + } + }, + "required": [ + "unit" + ] + }, + "m^2/s": { + "properties": { + "unit": { + "type": "string", + "const": "m^2/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareMeterPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "m^3": { + "properties": { + "unit": { + "type": "string", + "const": "m^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMeter" + } + }, + "required": [ + "unit" + ] + }, + "m^3 kg^-1 s^-2": { + "properties": { + "unit": { + "type": "string", + "const": "m^3 kg^-1 s^-2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMeterPerKilogramSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "m^3 mol^-1": { + "properties": { + "unit": { + "type": "string", + "const": "m^3 mol^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMeterPerMole" + } + }, + "required": [ + "unit" + ] + }, + "m^3/K": { + "properties": { + "unit": { + "type": "string", + "const": "m^3/K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMeterPerKelvin" + } + }, + "required": [ + "unit" + ] + }, + "m^3/h": { + "properties": { + "unit": { + "type": "string", + "const": "m^3/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMeterPerHour" + } + }, + "required": [ + "unit" + ] + }, + "m^3/kg": { + "properties": { + "unit": { + "type": "string", + "const": "m^3/kg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMeterPerKilogram" + } + }, + "required": [ + "unit" + ] + }, + "m^3/s": { + "properties": { + "unit": { + "type": "string", + "const": "m^3/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMeterPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "m^3/s^2": { + "properties": { + "unit": { + "type": "string", + "const": "m^3/s^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMeterPerSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "m_P": { + "properties": { + "unit": { + "type": "string", + "const": "m_P", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PlanckMass" + } + }, + "required": [ + "unit" + ] + }, + "mbar": { + "properties": { + "unit": { + "type": "string", + "const": "mbar", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Millibar" + } + }, + "required": [ + "unit" + ] + }, + "mbps": { + "properties": { + "unit": { + "type": "string", + "const": "mbps", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MegabitsPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "mcal/(mol °C)": { + "properties": { + "unit": { + "type": "string", + "const": "mcal/(mol °C)", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliCaloriePerMoleDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "mcal/min": { + "properties": { + "unit": { + "type": "string", + "const": "mcal/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliCaloriePerMinute" + } + }, + "required": [ + "unit" + ] + }, + "mcal/s": { + "properties": { + "unit": { + "type": "string", + "const": "mcal/s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliCaloriePerSecond" + } + }, + "required": [ + "unit" + ] + }, + "mg": { + "properties": { + "unit": { + "type": "string", + "const": "mg", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Milligram" + } + }, + "required": [ + "unit" + ] + }, + "mg/L": { + "properties": { + "unit": { + "type": "string", + "const": "mg/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "mg/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "mg/cm^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "mg/dL": { + "properties": { + "unit": { + "type": "string", + "const": "mg/dL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerDeciliter" + } + }, + "required": [ + "unit" + ] + }, + "mg/fL": { + "properties": { + "unit": { + "type": "string", + "const": "mg/fL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerFemtoliter" + } + }, + "required": [ + "unit" + ] + }, + "mg/kg": { + "properties": { + "unit": { + "type": "string", + "const": "mg/kg", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerKilogram" + } + }, + "required": [ + "unit" + ] + }, + "mg/mL": { + "properties": { + "unit": { + "type": "string", + "const": "mg/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "mg/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "mg/m^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "mg/min": { + "properties": { + "unit": { + "type": "string", + "const": "mg/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "mg/nL": { + "properties": { + "unit": { + "type": "string", + "const": "mg/nL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerNanoliter" + } + }, + "required": [ + "unit" + ] + }, + "mg/pL": { + "properties": { + "unit": { + "type": "string", + "const": "mg/pL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerPicoliter" + } + }, + "required": [ + "unit" + ] + }, + "mg/s": { + "properties": { + "unit": { + "type": "string", + "const": "mg/s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "mg/μL": { + "properties": { + "unit": { + "type": "string", + "const": "mg/μL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilligramPerMicroliter" + } + }, + "required": [ + "unit" + ] + }, + "mho": { + "properties": { + "unit": { + "type": "string", + "const": "mho", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Mho" + } + }, + "required": [ + "unit" + ] + }, + "mi": { + "properties": { + "unit": { + "type": "string", + "const": "mi", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MileInternational" + } + }, + "required": [ + "unit" + ] + }, + "mi/hr": { + "properties": { + "unit": { + "type": "string", + "const": "mi/hr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MilePerHour" + } + }, + "required": [ + "unit" + ] + }, + "mi/min": { + "properties": { + "unit": { + "type": "string", + "const": "mi/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MilePerMinute" + } + }, + "required": [ + "unit" + ] + }, + "miUS": { + "properties": { + "unit": { + "type": "string", + "const": "miUS", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MileUSStatute" + } + }, + "required": [ + "unit" + ] + }, + "mi^2": { + "properties": { + "unit": { + "type": "string", + "const": "mi^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareMile" + } + }, + "required": [ + "unit" + ] + }, + "mi^3": { + "properties": { + "unit": { + "type": "string", + "const": "mi^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMile" + } + }, + "required": [ + "unit" + ] + }, + "microF": { + "properties": { + "unit": { + "type": "string", + "const": "microF", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MicroFarad" + } + }, + "required": [ + "unit" + ] + }, + "mil": { + "properties": { + "unit": { + "type": "string", + "const": "mil", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MilAngle" + } + }, + "required": [ + "unit" + ] + }, + "mil (l)": { + "properties": { + "unit": { + "type": "string", + "const": "mil (l)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MilLength" + } + }, + "required": [ + "unit" + ] + }, + "min": { + "properties": { + "unit": { + "type": "string", + "const": "min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MinuteTime" + } + }, + "required": [ + "unit" + ] + }, + "min (s)": { + "properties": { + "unit": { + "type": "string", + "const": "min (s)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MinuteSidereal" + } + }, + "required": [ + "unit" + ] + }, + "min^-1": { + "properties": { + "unit": { + "type": "string", + "const": "min^-1", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PerMinute" + } + }, + "required": [ + "unit" + ] + }, + "mm": { + "properties": { + "unit": { + "type": "string", + "const": "mm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Millimeter" + } + }, + "required": [ + "unit" + ] + }, + "mm/min": { + "properties": { + "unit": { + "type": "string", + "const": "mm/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MillimeterPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "mm/s": { + "properties": { + "unit": { + "type": "string", + "const": "mm/s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MillimeterPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "mmHg": { + "properties": { + "unit": { + "type": "string", + "const": "mmHg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MillimeterOfMercury" + } + }, + "required": [ + "unit" + ] + }, + "mmHg/min": { + "properties": { + "unit": { + "type": "string", + "const": "mmHg/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MillimeterOfMercuryPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "mmHgA": { + "properties": { + "unit": { + "type": "string", + "const": "mmHgA", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MillimeterOfMercuryAbsolute" + } + }, + "required": [ + "unit" + ] + }, + "mm^3": { + "properties": { + "unit": { + "type": "string", + "const": "mm^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicMillimeter" + } + }, + "required": [ + "unit" + ] + }, + "mmol": { + "properties": { + "unit": { + "type": "string", + "const": "mmol", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Millimole" + } + }, + "required": [ + "unit" + ] + }, + "mmol/L": { + "properties": { + "unit": { + "type": "string", + "const": "mmol/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MillimolePerLiter" + } + }, + "required": [ + "unit" + ] + }, + "mmol/mL": { + "properties": { + "unit": { + "type": "string", + "const": "mmol/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MillimolePerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "mol": { + "properties": { + "unit": { + "type": "string", + "const": "mol", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Mole" + } + }, + "required": [ + "unit" + ] + }, + "mol K": { + "properties": { + "unit": { + "type": "string", + "const": "mol K", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MoleKelvin" + } + }, + "required": [ + "unit" + ] + }, + "mol-degC": { + "properties": { + "unit": { + "type": "string", + "const": "mol-degC", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MoleDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "mol/L": { + "properties": { + "unit": { + "type": "string", + "const": "mol/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MolePerLiter" + } + }, + "required": [ + "unit" + ] + }, + "mol/dm^3": { + "properties": { + "unit": { + "type": "string", + "const": "mol/dm^3", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MolePerCubicDecimeter" + } + }, + "required": [ + "unit" + ] + }, + "mol/kg": { + "properties": { + "unit": { + "type": "string", + "const": "mol/kg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MolePerKilogram" + } + }, + "required": [ + "unit" + ] + }, + "mol/m^3": { + "properties": { + "unit": { + "type": "string", + "const": "mol/m^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MolePerCubicMeter" + } + }, + "required": [ + "unit" + ] + }, + "mol^-1": { + "properties": { + "unit": { + "type": "string", + "const": "mol^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PerMole" + } + }, + "required": [ + "unit" + ] + }, + "mosm/kg": { + "properties": { + "unit": { + "type": "string", + "const": "mosm/kg", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliOsmolesPerKilogram" + } + }, + "required": [ + "unit" + ] + }, + "ms": { + "properties": { + "unit": { + "type": "string", + "const": "ms", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MilliSecond" + } + }, + "required": [ + "unit" + ] + }, + "mtorr": { + "properties": { + "unit": { + "type": "string", + "const": "mtorr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MilliTorr" + } + }, + "required": [ + "unit" + ] + }, + "n mile": { + "properties": { + "unit": { + "type": "string", + "const": "n mile", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NauticalMile" + } + }, + "required": [ + "unit" + ] + }, + "nA": { + "properties": { + "unit": { + "type": "string", + "const": "nA", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanoAmpere" + } + }, + "required": [ + "unit" + ] + }, + "nC": { + "properties": { + "unit": { + "type": "string", + "const": "nC", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanoCoulomb" + } + }, + "required": [ + "unit" + ] + }, + "nC.L": { + "properties": { + "unit": { + "type": "string", + "const": "nC.L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanoCoulombTimesLiter" + } + }, + "required": [ + "unit" + ] + }, + "nC.s": { + "properties": { + "unit": { + "type": "string", + "const": "nC.s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanoCoulombTimesSecond" + } + }, + "required": [ + "unit" + ] + }, + "nF": { + "properties": { + "unit": { + "type": "string", + "const": "nF", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NanoFarad" + } + }, + "required": [ + "unit" + ] + }, + "nL": { + "properties": { + "unit": { + "type": "string", + "const": "nL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Nanoliter" + } + }, + "required": [ + "unit" + ] + }, + "nat": { + "properties": { + "unit": { + "type": "string", + "const": "nat", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Nat" + } + }, + "required": [ + "unit" + ] + }, + "ng": { + "properties": { + "unit": { + "type": "string", + "const": "ng", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Nanogram" + } + }, + "required": [ + "unit" + ] + }, + "ng/L": { + "properties": { + "unit": { + "type": "string", + "const": "ng/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanogramPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "ng/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "ng/cm^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanogramPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "ng/fL": { + "properties": { + "unit": { + "type": "string", + "const": "ng/fL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanogramPerFemtoliter" + } + }, + "required": [ + "unit" + ] + }, + "ng/mL": { + "properties": { + "unit": { + "type": "string", + "const": "ng/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanogramPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "ng/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "ng/m^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanogramPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "ng/nL": { + "properties": { + "unit": { + "type": "string", + "const": "ng/nL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanogramPerNanoliter" + } + }, + "required": [ + "unit" + ] + }, + "ng/pL": { + "properties": { + "unit": { + "type": "string", + "const": "ng/pL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanogramPerPicoliter" + } + }, + "required": [ + "unit" + ] + }, + "ng/μL": { + "properties": { + "unit": { + "type": "string", + "const": "ng/μL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#NanogramPerMicroliter" + } + }, + "required": [ + "unit" + ] + }, + "nm": { + "properties": { + "unit": { + "type": "string", + "const": "nm", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Nanometer" + } + }, + "required": [ + "unit" + ] + }, + "nmi/hr": { + "properties": { + "unit": { + "type": "string", + "const": "nmi/hr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NauticalMilePerHour" + } + }, + "required": [ + "unit" + ] + }, + "nmi/min": { + "properties": { + "unit": { + "type": "string", + "const": "nmi/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#NauticalMilePerMinute" + } + }, + "required": [ + "unit" + ] + }, + "nmol": { + "properties": { + "unit": { + "type": "string", + "const": "nmol", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Nanomole" + } + }, + "required": [ + "unit" + ] + }, + "nmol/dm^3": { + "properties": { + "unit": { + "type": "string", + "const": "nmol/dm^3", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Nanomolar" + } + }, + "required": [ + "unit" + ] + }, + "osm/L": { + "properties": { + "unit": { + "type": "string", + "const": "osm/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#OsmolesPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "oz": { + "properties": { + "unit": { + "type": "string", + "const": "oz", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OunceImperial" + } + }, + "required": [ + "unit" + ] + }, + "oz (tr)": { + "properties": { + "unit": { + "type": "string", + "const": "oz (tr)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OunceTroy" + } + }, + "required": [ + "unit" + ] + }, + "oz fl": { + "properties": { + "unit": { + "type": "string", + "const": "oz fl", + "$asm.unit-iri": "http://qudt.org/vocab/unit#LiquidOunceUS" + } + }, + "required": [ + "unit" + ] + }, + "oz/ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "oz/ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OuncePerSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "oz/gal": { + "properties": { + "unit": { + "type": "string", + "const": "oz/gal", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OuncePerGallon" + } + }, + "required": [ + "unit" + ] + }, + "oz/in^3": { + "properties": { + "unit": { + "type": "string", + "const": "oz/in^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OuncePerCubicInch" + } + }, + "required": [ + "unit" + ] + }, + "oz/yd^2": { + "properties": { + "unit": { + "type": "string", + "const": "oz/yd^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OuncePerSquareYard" + } + }, + "required": [ + "unit" + ] + }, + "ozf": { + "properties": { + "unit": { + "type": "string", + "const": "ozf", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OunceForce" + } + }, + "required": [ + "unit" + ] + }, + "ozf in": { + "properties": { + "unit": { + "type": "string", + "const": "ozf in", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OunceForceInch" + } + }, + "required": [ + "unit" + ] + }, + "ozm": { + "properties": { + "unit": { + "type": "string", + "const": "ozm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#OunceMass" + } + }, + "required": [ + "unit" + ] + }, + "pA": { + "properties": { + "unit": { + "type": "string", + "const": "pA", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicoAmpere" + } + }, + "required": [ + "unit" + ] + }, + "pA.L": { + "properties": { + "unit": { + "type": "string", + "const": "pA.L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicoAmpereTimesLiter" + } + }, + "required": [ + "unit" + ] + }, + "pA.min": { + "properties": { + "unit": { + "type": "string", + "const": "pA.min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicoAmperesTimesMinute" + } + }, + "required": [ + "unit" + ] + }, + "pA.s": { + "properties": { + "unit": { + "type": "string", + "const": "pA.s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicoAmpereTimesSecond" + } + }, + "required": [ + "unit" + ] + }, + "pF": { + "properties": { + "unit": { + "type": "string", + "const": "pF", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PicoFarad" + } + }, + "required": [ + "unit" + ] + }, + "pH": { + "properties": { + "unit": { + "type": "string", + "const": "pH", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PH" + } + }, + "required": [ + "unit" + ] + }, + "pL": { + "properties": { + "unit": { + "type": "string", + "const": "pL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Picoliter" + } + }, + "required": [ + "unit" + ] + }, + "pc": { + "properties": { + "unit": { + "type": "string", + "const": "pc", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Parsec" + } + }, + "required": [ + "unit" + ] + }, + "pdl": { + "properties": { + "unit": { + "type": "string", + "const": "pdl", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Poundal" + } + }, + "required": [ + "unit" + ] + }, + "pdl/ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "pdl/ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundalPerSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "person": { + "properties": { + "unit": { + "type": "string", + "const": "person", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Person" + } + }, + "required": [ + "unit" + ] + }, + "pg": { + "properties": { + "unit": { + "type": "string", + "const": "pg", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Picogram" + } + }, + "required": [ + "unit" + ] + }, + "pg/L": { + "properties": { + "unit": { + "type": "string", + "const": "pg/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicogramPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "pg/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "pg/cm^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicogramPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "pg/fL": { + "properties": { + "unit": { + "type": "string", + "const": "pg/fL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicogramPerFemtoliter" + } + }, + "required": [ + "unit" + ] + }, + "pg/mL": { + "properties": { + "unit": { + "type": "string", + "const": "pg/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicogramPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "pg/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "pg/m^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicogramPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "pg/nL": { + "properties": { + "unit": { + "type": "string", + "const": "pg/nL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicogramPerNanoliter" + } + }, + "required": [ + "unit" + ] + }, + "pg/pL": { + "properties": { + "unit": { + "type": "string", + "const": "pg/pL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicogramPerPicoliter" + } + }, + "required": [ + "unit" + ] + }, + "pg/μL": { + "properties": { + "unit": { + "type": "string", + "const": "pg/μL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PicogramPerMicroliter" + } + }, + "required": [ + "unit" + ] + }, + "ph": { + "properties": { + "unit": { + "type": "string", + "const": "ph", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Phot" + } + }, + "required": [ + "unit" + ] + }, + "pi": { + "properties": { + "unit": { + "type": "string", + "const": "pi", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PintImperial" + } + }, + "required": [ + "unit" + ] + }, + "pixel": { + "properties": { + "unit": { + "type": "string", + "const": "pixel", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Pixel" + } + }, + "required": [ + "unit" + ] + }, + "pixel/mm": { + "properties": { + "unit": { + "type": "string", + "const": "pixel/mm", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PixelPerMillimeter" + } + }, + "required": [ + "unit" + ] + }, + "pk": { + "properties": { + "unit": { + "type": "string", + "const": "pk", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Peck" + } + }, + "required": [ + "unit" + ] + }, + "plates/m": { + "properties": { + "unit": { + "type": "string", + "const": "plates/m", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PlatesPerMeter" + } + }, + "required": [ + "unit" + ] + }, + "pm": { + "properties": { + "unit": { + "type": "string", + "const": "pm", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Picometer" + } + }, + "required": [ + "unit" + ] + }, + "pmol": { + "properties": { + "unit": { + "type": "string", + "const": "pmol", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Picomole" + } + }, + "required": [ + "unit" + ] + }, + "pmol/dm^3": { + "properties": { + "unit": { + "type": "string", + "const": "pmol/dm^3", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Picomolar" + } + }, + "required": [ + "unit" + ] + }, + "pnt": { + "properties": { + "unit": { + "type": "string", + "const": "pnt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Point" + } + }, + "required": [ + "unit" + ] + }, + "ppb": { + "properties": { + "unit": { + "type": "string", + "const": "ppb", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PartsPerBillion" + } + }, + "required": [ + "unit" + ] + }, + "ppm": { + "properties": { + "unit": { + "type": "string", + "const": "ppm", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#PartsPerMillion" + } + }, + "required": [ + "unit" + ] + }, + "psi": { + "properties": { + "unit": { + "type": "string", + "const": "psi", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PoundForcePerSquareInch" + } + }, + "required": [ + "unit" + ] + }, + "pt": { + "properties": { + "unit": { + "type": "string", + "const": "pt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#LiquidPintUS" + } + }, + "required": [ + "unit" + ] + }, + "qt": { + "properties": { + "unit": { + "type": "string", + "const": "qt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#LiquidQuartUS" + } + }, + "required": [ + "unit" + ] + }, + "quad": { + "properties": { + "unit": { + "type": "string", + "const": "quad", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Quad" + } + }, + "required": [ + "unit" + ] + }, + "r": { + "properties": { + "unit": { + "type": "string", + "const": "r", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Radian" + } + }, + "required": [ + "unit" + ] + }, + "rad": { + "properties": { + "unit": { + "type": "string", + "const": "rad", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Rad" + } + }, + "required": [ + "unit" + ] + }, + "rad/h": { + "properties": { + "unit": { + "type": "string", + "const": "rad/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RadianPerHour" + } + }, + "required": [ + "unit" + ] + }, + "rad/m": { + "properties": { + "unit": { + "type": "string", + "const": "rad/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RadianPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "rad/s": { + "properties": { + "unit": { + "type": "string", + "const": "rad/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RadianPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "rad/s^2": { + "properties": { + "unit": { + "type": "string", + "const": "rad/s^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RadianPerSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "rd": { + "properties": { + "unit": { + "type": "string", + "const": "rd", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Rod" + } + }, + "required": [ + "unit" + ] + }, + "rem": { + "properties": { + "unit": { + "type": "string", + "const": "rem", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Rem" + } + }, + "required": [ + "unit" + ] + }, + "rev": { + "properties": { + "unit": { + "type": "string", + "const": "rev", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Revolution" + } + }, + "required": [ + "unit" + ] + }, + "rev/h": { + "properties": { + "unit": { + "type": "string", + "const": "rev/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RevolutionPerHour" + } + }, + "required": [ + "unit" + ] + }, + "rev/min": { + "properties": { + "unit": { + "type": "string", + "const": "rev/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RevolutionPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "rev/s": { + "properties": { + "unit": { + "type": "string", + "const": "rev/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RevolutionPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "s": { + "properties": { + "unit": { + "type": "string", + "const": "s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SecondTime" + } + }, + "required": [ + "unit" + ] + }, + "s T": { + "properties": { + "unit": { + "type": "string", + "const": "s T", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TeslaSecond" + } + }, + "required": [ + "unit" + ] + }, + "s ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "s ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SecondSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "s^-1": { + "properties": { + "unit": { + "type": "string", + "const": "s^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PerSecond" + } + }, + "required": [ + "unit" + ] + }, + "s^-1 T^-1": { + "properties": { + "unit": { + "type": "string", + "const": "s^-1 T^-1", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PerTeslaSecond" + } + }, + "required": [ + "unit" + ] + }, + "s^2": { + "properties": { + "unit": { + "type": "string", + "const": "s^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SecondTimeSquared" + } + }, + "required": [ + "unit" + ] + }, + "sb": { + "properties": { + "unit": { + "type": "string", + "const": "sb", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Stilb" + } + }, + "required": [ + "unit" + ] + }, + "scwt": { + "properties": { + "unit": { + "type": "string", + "const": "scwt", + "$asm.unit-iri": "http://qudt.org/vocab/unit#HundredWeightShort" + } + }, + "required": [ + "unit" + ] + }, + "slug": { + "properties": { + "unit": { + "type": "string", + "const": "slug", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Slug" + } + }, + "required": [ + "unit" + ] + }, + "slug/(ft s)": { + "properties": { + "unit": { + "type": "string", + "const": "slug/(ft s)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SlugPerFootSecond" + } + }, + "required": [ + "unit" + ] + }, + "slug/ft": { + "properties": { + "unit": { + "type": "string", + "const": "slug/ft", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SlugPerFoot" + } + }, + "required": [ + "unit" + ] + }, + "slug/ft^2": { + "properties": { + "unit": { + "type": "string", + "const": "slug/ft^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SlugPerSquareFoot" + } + }, + "required": [ + "unit" + ] + }, + "slug/ft^3": { + "properties": { + "unit": { + "type": "string", + "const": "slug/ft^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SlugPerCubicFoot" + } + }, + "required": [ + "unit" + ] + }, + "slug/s": { + "properties": { + "unit": { + "type": "string", + "const": "slug/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SlugPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "sr": { + "properties": { + "unit": { + "type": "string", + "const": "sr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Steradian" + } + }, + "required": [ + "unit" + ] + }, + "st": { + "properties": { + "unit": { + "type": "string", + "const": "st", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Stere" + } + }, + "required": [ + "unit" + ] + }, + "statA": { + "properties": { + "unit": { + "type": "string", + "const": "statA", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Statampere" + } + }, + "required": [ + "unit" + ] + }, + "statC": { + "properties": { + "unit": { + "type": "string", + "const": "statC", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Statcoulomb" + } + }, + "required": [ + "unit" + ] + }, + "statC/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "statC/cm^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#StatcoulombPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "statC/mol": { + "properties": { + "unit": { + "type": "string", + "const": "statC/mol", + "$asm.unit-iri": "http://qudt.org/vocab/unit#StatcoulombPerMole" + } + }, + "required": [ + "unit" + ] + }, + "statF": { + "properties": { + "unit": { + "type": "string", + "const": "statF", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Statfarad" + } + }, + "required": [ + "unit" + ] + }, + "statH": { + "properties": { + "unit": { + "type": "string", + "const": "statH", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Stathenry" + } + }, + "required": [ + "unit" + ] + }, + "statH/cm": { + "properties": { + "unit": { + "type": "string", + "const": "statH/cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#StathenryPerCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "statS": { + "properties": { + "unit": { + "type": "string", + "const": "statS", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Statmho" + } + }, + "required": [ + "unit" + ] + }, + "statV": { + "properties": { + "unit": { + "type": "string", + "const": "statV", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Statvolt" + } + }, + "required": [ + "unit" + ] + }, + "statV cm": { + "properties": { + "unit": { + "type": "string", + "const": "statV cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#StatvoltCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "statV/cm": { + "properties": { + "unit": { + "type": "string", + "const": "statV/cm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#StatvoltPerCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "statΩ": { + "properties": { + "unit": { + "type": "string", + "const": "statΩ", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Statohm" + } + }, + "required": [ + "unit" + ] + }, + "t/fg": { + "properties": { + "unit": { + "type": "string", + "const": "t/fg", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TonOfRefrigeration" + } + }, + "required": [ + "unit" + ] + }, + "t/lbf": { + "properties": { + "unit": { + "type": "string", + "const": "t/lbf", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TonEnergy" + } + }, + "required": [ + "unit" + ] + }, + "t_P": { + "properties": { + "unit": { + "type": "string", + "const": "t_P", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PlanckTime" + } + }, + "required": [ + "unit" + ] + }, + "tbsp": { + "properties": { + "unit": { + "type": "string", + "const": "tbsp", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Tablespoon" + } + }, + "required": [ + "unit" + ] + }, + "tex": { + "properties": { + "unit": { + "type": "string", + "const": "tex", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Tex" + } + }, + "required": [ + "unit" + ] + }, + "therm (EC)": { + "properties": { + "unit": { + "type": "string", + "const": "therm (EC)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ThermEEC" + } + }, + "required": [ + "unit" + ] + }, + "therm (US)": { + "properties": { + "unit": { + "type": "string", + "const": "therm (US)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#ThermUS" + } + }, + "required": [ + "unit" + ] + }, + "toe": { + "properties": { + "unit": { + "type": "string", + "const": "toe", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TonOfOilEquivalent" + } + }, + "required": [ + "unit" + ] + }, + "ton (l)": { + "properties": { + "unit": { + "type": "string", + "const": "ton (l)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TonLong" + } + }, + "required": [ + "unit" + ] + }, + "ton (s)": { + "properties": { + "unit": { + "type": "string", + "const": "ton (s)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TonShort" + } + }, + "required": [ + "unit" + ] + }, + "ton/h": { + "properties": { + "unit": { + "type": "string", + "const": "ton/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TonShortPerHour" + } + }, + "required": [ + "unit" + ] + }, + "ton/yd": { + "properties": { + "unit": { + "type": "string", + "const": "ton/yd", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TonShortPerCubicYard" + } + }, + "required": [ + "unit" + ] + }, + "ton/yd^3": { + "properties": { + "unit": { + "type": "string", + "const": "ton/yd^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#TonLongPerCubicYard" + } + }, + "required": [ + "unit" + ] + }, + "torr": { + "properties": { + "unit": { + "type": "string", + "const": "torr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Torr" + } + }, + "required": [ + "unit" + ] + }, + "tsp": { + "properties": { + "unit": { + "type": "string", + "const": "tsp", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Teaspoon" + } + }, + "required": [ + "unit" + ] + }, + "u": { + "properties": { + "unit": { + "type": "string", + "const": "u", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Dalton2" + } + }, + "required": [ + "unit" + ] + }, + "unitless": { + "properties": { + "unit": { + "type": "string", + "const": "unitless", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Unitless" + } + }, + "required": [ + "unit" + ] + }, + "yd": { + "properties": { + "unit": { + "type": "string", + "const": "yd", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Yard" + } + }, + "required": [ + "unit" + ] + }, + "yd^2": { + "properties": { + "unit": { + "type": "string", + "const": "yd^2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#SquareYard" + } + }, + "required": [ + "unit" + ] + }, + "yd^3": { + "properties": { + "unit": { + "type": "string", + "const": "yd^3", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicYard" + } + }, + "required": [ + "unit" + ] + }, + "yd^3/min": { + "properties": { + "unit": { + "type": "string", + "const": "yd^3/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#CubicYardPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "yr": { + "properties": { + "unit": { + "type": "string", + "const": "yr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Year365Day" + } + }, + "required": [ + "unit" + ] + }, + "yr (s)": { + "properties": { + "unit": { + "type": "string", + "const": "yr (s)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#YearSidereal" + } + }, + "required": [ + "unit" + ] + }, + "yr (t)": { + "properties": { + "unit": { + "type": "string", + "const": "yr (t)", + "$asm.unit-iri": "http://qudt.org/vocab/unit#YearTropical" + } + }, + "required": [ + "unit" + ] + }, + "°": { + "properties": { + "unit": { + "type": "string", + "const": "°", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeAngle" + } + }, + "required": [ + "unit" + ] + }, + "° s^-2": { + "properties": { + "unit": { + "type": "string", + "const": "° s^-2", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreePerSecondSquared" + } + }, + "required": [ + "unit" + ] + }, + "°/h": { + "properties": { + "unit": { + "type": "string", + "const": "°/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreePerHour" + } + }, + "required": [ + "unit" + ] + }, + "°/min": { + "properties": { + "unit": { + "type": "string", + "const": "°/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreePerMinute" + } + }, + "required": [ + "unit" + ] + }, + "°/s": { + "properties": { + "unit": { + "type": "string", + "const": "°/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreePerSecond" + } + }, + "required": [ + "unit" + ] + }, + "°C": { + "properties": { + "unit": { + "type": "string", + "const": "°C", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeCentigrade" + } + }, + "required": [ + "unit" + ] + }, + "°C/h": { + "properties": { + "unit": { + "type": "string", + "const": "°C/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeCelsiusPerHour" + } + }, + "required": [ + "unit" + ] + }, + "°C/min": { + "properties": { + "unit": { + "type": "string", + "const": "°C/min", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeCelsiusPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "°C/s": { + "properties": { + "unit": { + "type": "string", + "const": "°C/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeCelsiusPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "°F": { + "properties": { + "unit": { + "type": "string", + "const": "°F", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeFahrenheit" + } + }, + "required": [ + "unit" + ] + }, + "°F h": { + "properties": { + "unit": { + "type": "string", + "const": "°F h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeFahrenheitHour" + } + }, + "required": [ + "unit" + ] + }, + "°F h/Btu": { + "properties": { + "unit": { + "type": "string", + "const": "°F h/Btu", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeFahrenheitHourPerBtu" + } + }, + "required": [ + "unit" + ] + }, + "°F/h": { + "properties": { + "unit": { + "type": "string", + "const": "°F/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeFahrenheitPerHour" + } + }, + "required": [ + "unit" + ] + }, + "°F/m": { + "properties": { + "unit": { + "type": "string", + "const": "°F/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeFahrenheitPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "°F/s": { + "properties": { + "unit": { + "type": "string", + "const": "°F/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeFahrenheitPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "°R": { + "properties": { + "unit": { + "type": "string", + "const": "°R", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeRankine" + } + }, + "required": [ + "unit" + ] + }, + "°R/h": { + "properties": { + "unit": { + "type": "string", + "const": "°R/h", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeRankinePerHour" + } + }, + "required": [ + "unit" + ] + }, + "°R/m": { + "properties": { + "unit": { + "type": "string", + "const": "°R/m", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeRankinePerMinute" + } + }, + "required": [ + "unit" + ] + }, + "°R/s": { + "properties": { + "unit": { + "type": "string", + "const": "°R/s", + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeRankinePerSecond" + } + }, + "required": [ + "unit" + ] + }, + "μG": { + "properties": { + "unit": { + "type": "string", + "const": "μG", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Microgravity" + } + }, + "required": [ + "unit" + ] + }, + "μH": { + "properties": { + "unit": { + "type": "string", + "const": "μH", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MicroHenry" + } + }, + "required": [ + "unit" + ] + }, + "μL/min": { + "properties": { + "unit": { + "type": "string", + "const": "μL/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroliterPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "μL/s": { + "properties": { + "unit": { + "type": "string", + "const": "μL/s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroliterPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "μV": { + "properties": { + "unit": { + "type": "string", + "const": "μV", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Microvolt" + } + }, + "required": [ + "unit" + ] + }, + "μW": { + "properties": { + "unit": { + "type": "string", + "const": "μW", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroWatt" + } + }, + "required": [ + "unit" + ] + }, + "μW/g": { + "properties": { + "unit": { + "type": "string", + "const": "μW/g", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroWattPerGram" + } + }, + "required": [ + "unit" + ] + }, + "μcal/°C": { + "properties": { + "unit": { + "type": "string", + "const": "μcal/°C", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroCaloriePerDegreeCelsius" + } + }, + "required": [ + "unit" + ] + }, + "μin": { + "properties": { + "unit": { + "type": "string", + "const": "μin", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MicroInch" + } + }, + "required": [ + "unit" + ] + }, + "μm": { + "properties": { + "unit": { + "type": "string", + "const": "μm", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Micrometer" + } + }, + "required": [ + "unit" + ] + }, + "μs": { + "properties": { + "unit": { + "type": "string", + "const": "μs", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MicroSecond" + } + }, + "required": [ + "unit" + ] + }, + "μtorr": { + "properties": { + "unit": { + "type": "string", + "const": "μtorr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#MicroTorr" + } + }, + "required": [ + "unit" + ] + }, + "Å": { + "properties": { + "unit": { + "type": "string", + "const": "Å", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Angstrom" + } + }, + "required": [ + "unit" + ] + }, + "Å^2": { + "properties": { + "unit": { + "type": "string", + "const": "Å^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#SquareAngstrom" + } + }, + "required": [ + "unit" + ] + }, + "Θ_P": { + "properties": { + "unit": { + "type": "string", + "const": "Θ_P", + "$asm.unit-iri": "http://qudt.org/vocab/unit#PlanckTemperature" + } + }, + "required": [ + "unit" + ] + }, + "Ω": { + "properties": { + "unit": { + "type": "string", + "const": "Ω", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Ohm" + } + }, + "required": [ + "unit" + ] + }, + "Ω m": { + "properties": { + "unit": { + "type": "string", + "const": "Ω m", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#OhmMeter" + } + }, + "required": [ + "unit" + ] + }, + "εr": { + "properties": { + "unit": { + "type": "string", + "const": "εr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RelativePermittivity" + } + }, + "required": [ + "unit" + ] + }, + "μL": { + "properties": { + "unit": { + "type": "string", + "const": "μL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Microliter" + } + }, + "required": [ + "unit" + ] + }, + "μM": { + "properties": { + "unit": { + "type": "string", + "const": "μM", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Micromolar" + } + }, + "required": [ + "unit" + ] + }, + "μS/cm": { + "properties": { + "unit": { + "type": "string", + "const": "μS/cm", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroSiemensPerCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "μV.s": { + "properties": { + "unit": { + "type": "string", + "const": "μV.s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroVoltTimesSecond" + } + }, + "required": [ + "unit" + ] + }, + "μg": { + "properties": { + "unit": { + "type": "string", + "const": "μg", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Microgram" + } + }, + "required": [ + "unit" + ] + }, + "μg/L": { + "properties": { + "unit": { + "type": "string", + "const": "μg/L", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicrogramPerLiter" + } + }, + "required": [ + "unit" + ] + }, + "μg/cm^2": { + "properties": { + "unit": { + "type": "string", + "const": "μg/cm^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicrogramPerSquareCentimeter" + } + }, + "required": [ + "unit" + ] + }, + "μg/fL": { + "properties": { + "unit": { + "type": "string", + "const": "μg/fL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicrogramPerFemtoliter" + } + }, + "required": [ + "unit" + ] + }, + "μg/mL": { + "properties": { + "unit": { + "type": "string", + "const": "μg/mL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicrogramPerMilliliter" + } + }, + "required": [ + "unit" + ] + }, + "μg/m^2": { + "properties": { + "unit": { + "type": "string", + "const": "μg/m^2", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicrogramPerSquareMeter" + } + }, + "required": [ + "unit" + ] + }, + "μg/min": { + "properties": { + "unit": { + "type": "string", + "const": "μg/min", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicrogramPerMinute" + } + }, + "required": [ + "unit" + ] + }, + "μg/nL": { + "properties": { + "unit": { + "type": "string", + "const": "μg/nL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicrogramPerNanoliter" + } + }, + "required": [ + "unit" + ] + }, + "μg/pL": { + "properties": { + "unit": { + "type": "string", + "const": "μg/pL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicrogramPerPicoliter" + } + }, + "required": [ + "unit" + ] + }, + "μg/μL": { + "properties": { + "unit": { + "type": "string", + "const": "μg/μL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicrogramPerMicroliter" + } + }, + "required": [ + "unit" + ] + }, + "μmol": { + "properties": { + "unit": { + "type": "string", + "const": "μmol", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Micromole" + } + }, + "required": [ + "unit" + ] + }, + "μr": { + "properties": { + "unit": { + "type": "string", + "const": "μr", + "$asm.unit-iri": "http://qudt.org/vocab/unit#RelativePermeability" + } + }, + "required": [ + "unit" + ] + }, + "€": { + "properties": { + "unit": { + "type": "string", + "const": "€", + "$asm.unit-iri": "http://qudt.org/vocab/unit#Euro" + } + }, + "required": [ + "unit" + ] + } + } + }, + "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/manifest.schema": { + "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/manifest.schema", + "title": "Schema for manifests.", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri", + "minItems": 1, + "maxItems": 1 + }, + "@type": { + "type": "string", + "format": "uri", + "minItems": 1, + "maxItems": 1 + }, + "vocabulary": { + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "minItems": 1 + }, + "shapes": { + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "minItems": 1 + }, + "json-schemas": { + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "minItems": 1 + } + }, + "required": [ + "vocabulary", + "json-schemas" + ] + } + } +} diff --git a/src/allotropy/allotrope/schemas/shared/definitions/custom.json b/src/allotropy/allotrope/schemas/shared/definitions/custom.json index 064a37f5f..b65f6d95c 100644 --- a/src/allotropy/allotrope/schemas/shared/definitions/custom.json +++ b/src/allotropy/allotrope/schemas/shared/definitions/custom.json @@ -179,6 +179,26 @@ } ] }, + "tQuantityValueKiloDalton": { + "allOf": [ + { + "$ref": "#/$defs/tQuantityValue" + }, + { + "$ref": "#/$defs/KiloDalton" + } + ] + }, + "tNullableQuantityValueKiloDalton": { + "allOf": [ + { + "$ref": "#/$defs/tNullableQuantityValue" + }, + { + "$ref": "#/$defs/KiloDalton" + } + ] + }, "tQuantityValueMicrogramPerMicroliter": { "allOf": [ { diff --git a/src/allotropy/allotrope/schemas/shared/definitions/units.json b/src/allotropy/allotrope/schemas/shared/definitions/units.json index 637a28eeb..7317b31d8 100644 --- a/src/allotropy/allotrope/schemas/shared/definitions/units.json +++ b/src/allotropy/allotrope/schemas/shared/definitions/units.json @@ -76,7 +76,7 @@ "unit": { "type": "string", "const": "degC", - "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#DegreeCelsius" + "$asm.unit-iri": "http://qudt.org/vocab/unit#DegreeCelsius" } }, "required": [ @@ -107,6 +107,18 @@ "unit" ] }, + "KiloDalton": { + "properties": { + "unit": { + "type": "string", + "const": "kDa", + "$asm.unit-iri": "TODO" + } + }, + "required": [ + "unit" + ] + }, "MicrogramPerMicroliter": { "properties": { "unit": { @@ -376,7 +388,7 @@ "unit": { "type": "string", "const": "#", - "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Number" + "$asm.unit-iri": "http://qudt.org/vocab/unit#Number" } }, "required": [ From 1a5e3a3587e2ef56fe509b4816f9522ba9ad1479 Mon Sep 17 00:00:00 2001 From: Nathan Stender Date: Wed, 12 Jun 2024 06:56:06 -0700 Subject: [PATCH 4/8] chore: Fix typo in an error and allow `chore:` to skip CHANGELOG (#463) --- .github/workflows/test.yml | 2 +- .../appbio_quantstudio_designandanalysis_structure.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d1736b6b8..fcc5e385d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,5 +47,5 @@ jobs: steps: - uses: actions/checkout@v3 - name: Check CHANGELOG - if: ${{ !startsWith(github.event.pull_request.title, 'internal:') }} + if: ${{ !startsWith(github.event.pull_request.title, 'internal:') && !startsWith(github.event.pull_request.title, 'chore:') }} run: ./scripts/check_changelog diff --git a/src/allotropy/parsers/appbio_quantstudio_designandanalysis/appbio_quantstudio_designandanalysis_structure.py b/src/allotropy/parsers/appbio_quantstudio_designandanalysis/appbio_quantstudio_designandanalysis_structure.py index 945c23474..8d33b04a7 100644 --- a/src/allotropy/parsers/appbio_quantstudio_designandanalysis/appbio_quantstudio_designandanalysis_structure.py +++ b/src/allotropy/parsers/appbio_quantstudio_designandanalysis/appbio_quantstudio_designandanalysis_structure.py @@ -661,5 +661,5 @@ def get_experiment_type(contents: DesignQuantstudioContents) -> ExperimentType: ): return ExperimentType.presence_absence_qPCR_experiment - error = "Unable to infer expermient type" + error = "Unable to infer experiment type" raise AllotropeConversionError(error) From 99ec0aa9e635e45fb8d4d18d19c2d9a737a4e06b Mon Sep 17 00:00:00 2001 From: Sebastian Lopez Date: Thu, 13 Jun 2024 13:28:24 -0500 Subject: [PATCH 5/8] internal: use new 2024/03 core schemas in electrophoresis (#464) --- .../benchling/_2024/_06/electrophoresis.py | 67 +- .../2024/06/electrophoresis.schema.json | 906 ++++++++++-------- 2 files changed, 542 insertions(+), 431 deletions(-) diff --git a/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/electrophoresis.py b/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/electrophoresis.py index e6c8d93e7..24f9935ff 100644 --- a/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/electrophoresis.py +++ b/src/allotropy/allotrope/models/adm/electrophoresis/benchling/_2024/_06/electrophoresis.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: electrophoresis.schema.json -# timestamp: 2024-06-06T23:49:05+00:00 +# timestamp: 2024-06-13T15:59:35+00:00 from __future__ import annotations @@ -39,7 +39,7 @@ class DiagnosticTraceAggregateDocument: @dataclass(kw_only=True) -class AdmCoreREC202309ManifestSchema: +class AdmCoreREC202403ManifestSchema: vocabulary: list[str] json_schemas: list[str] field_id: str | None = None @@ -64,6 +64,17 @@ class DataSourceAggregateDocument: data_source_document: list[DataSourceDocumentItem] +@dataclass(kw_only=True) +class ErrorDocumentItem: + error: TStringValue + error_feature: TStringValue | None = None + + +@dataclass(kw_only=True) +class ErrorAggregateDocument: + error_document: list[ErrorDocumentItem] | None = None + + @dataclass(kw_only=True) class ProcessedDataDocumentItem1(OrderedItem): data_processing_document: dict[str, Any] | None = None @@ -86,6 +97,15 @@ class StatisticsAggregateDocument: statistics_document: list[StatisticsDocumentItem] | None = None +@dataclass(kw_only=True) +class TIntegerValue1: + field_type: TClass + value: int + + +TIntegerValue = int | TIntegerValue1 + + @dataclass(kw_only=True) class TQuantityValueModel: value: float @@ -108,7 +128,7 @@ class DeviceDocumentItem: @dataclass(kw_only=True) class DeviceSystemDocument: - asset_management_identifier: TStringValue + asset_management_identifier: TStringValue | None = None description: Any | None = None brand_name: TStringValue | None = None product_manufacturer: TStringValue | None = None @@ -215,28 +235,6 @@ class DataRegionAggregateDocument: data_region_document: list[DataRegionDocumentItem] -@dataclass(kw_only=True) -class ImageDocumentItem: - experimental_data_identifier: TStringValue | None = None - field_index: int | None = None - - -@dataclass(kw_only=True) -class ImageAggregateDocument: - image_document: list[ImageDocumentItem] - - -@dataclass(kw_only=True) -class ErrorDocumentItem: - error: TStringValue - error_feature: TStringValue | None = None - - -@dataclass(kw_only=True) -class ErrorAggregateDocument: - error_document: list[ErrorDocumentItem] | None = None - - @dataclass(kw_only=True) class CalculatedDataDocumentItem: calculated_data_name: TStringValue @@ -252,6 +250,17 @@ class CalculatedDataAggregateDocument: calculated_data_document: list[CalculatedDataDocumentItem] +@dataclass(kw_only=True) +class ImageDocumentItem: + index: TIntegerValue | None = None + experimental_data_identifier: TStringValue | None = None + + +@dataclass(kw_only=True) +class ImageAggregateDocument: + image_document: list[ImageDocumentItem] | None = None + + @dataclass(kw_only=True) class ProcessedDataDocumentItem: peak_list: PeakList @@ -278,10 +287,10 @@ class MeasurementDocumentItem: detection_type: TStringValue | None = None calculated_data_aggregate_document: CalculatedDataAggregateDocument | None = None statistics_aggregate_document: StatisticsAggregateDocument | None = None - compartment_temperature: TQuantityValueDegreeCelsius | None = None - electropherogram_data_cube: TDatacube | None = None image_aggregate_document: ImageAggregateDocument | None = None error_aggregate_document: ErrorAggregateDocument | None = None + compartment_temperature: TQuantityValueDegreeCelsius | None = None + electropherogram_data_cube: TDatacube | None = None @dataclass(kw_only=True) @@ -291,6 +300,8 @@ class MeasurementAggregateDocument: processed_data_aggregate_document: ProcessedDataAggregateDocument | None = None calculated_data_aggregate_document: CalculatedDataAggregateDocument | None = None statistics_aggregate_document: StatisticsAggregateDocument | None = None + image_aggregate_document: ImageAggregateDocument | None = None + error_aggregate_document: ErrorAggregateDocument | None = None @dataclass(kw_only=True) @@ -317,4 +328,4 @@ class ElectrophoresisAggregateDocument: @dataclass(kw_only=True) class Model: electrophoresis_aggregate_document: ElectrophoresisAggregateDocument - field_asm_manifest: AdmCoreREC202309ManifestSchema | str + field_asm_manifest: AdmCoreREC202403ManifestSchema | str diff --git a/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/electrophoresis.schema.json b/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/electrophoresis.schema.json index 5474267e9..b696ff17c 100644 --- a/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/electrophoresis.schema.json +++ b/src/allotropy/allotrope/schemas/adm/electrophoresis/BENCHLING/2024/06/electrophoresis.schema.json @@ -7,7 +7,7 @@ "electrophoresis aggregate document": { "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/hierarchy.schema#/$defs/techniqueAggregateDocument" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/hierarchy.schema#/$defs/techniqueAggregateDocument" }, { "type": "object", @@ -23,43 +23,43 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002772", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "file name": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001926", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "UNC path": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001906", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "software name": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002802", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "software version": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001700", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "ASM converter name": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002748", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "ASM converter version": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002749", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } } }, @@ -68,7 +68,7 @@ "items": { "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/hierarchy.schema#/$defs/techniqueDocument" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/hierarchy.schema#/$defs/techniqueDocument" }, { "type": "object", @@ -78,25 +78,25 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001978", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "method version": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002837", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "experimental data identifier": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001977", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "experiment type": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002229", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "measurement aggregate document": { "type": "object", @@ -113,10 +113,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/degC" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/degC" } ] }, @@ -133,10 +133,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/nm" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/nm" } ] }, @@ -145,10 +145,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/nm" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/nm" } ] }, @@ -157,10 +157,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/nm" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/nm" } ] }, @@ -169,10 +169,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/nm" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/nm" } ] } @@ -188,7 +188,7 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002844", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } } }, @@ -197,7 +197,7 @@ "$asm.pattern": "datacube", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema#/$defs/tDatacube" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/cube.schema#/$defs/tDatacube" }, { "properties": { @@ -266,43 +266,6 @@ } ] }, - "image aggregate document": { - "type": "object", - "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002869", - "$asm.pattern": "aggregate datum", - "required": [ - "image document" - ], - "properties": { - "image document": { - "type": "array", - "$asm.array-ordered": false, - "$asm.array-mixed": false, - "$asm.pattern": "indexed datum", - "required": [ - "experimental data identifier" - ], - "items": { - "type": "object", - "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002225", - "$asm.pattern": "aggregate datum", - "properties": { - "experimental data identifier": { - "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001977", - "$asm.pattern": "value datum", - "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" - }, - "@index": { - "type": "integer", - "minimum": 1, - "maximum": 2147483647 - } - } - } - } - } - }, "processed data aggregate document": { "type": "object", "properties": { @@ -315,7 +278,7 @@ "$asm.pattern": "datacube", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema#/$defs/tDatacube" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/cube.schema#/$defs/tDatacube" }, { "properties": { @@ -418,34 +381,34 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001164", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "peak name": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001167", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "written name": { "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000590", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "peak height": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000948", "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { "oneOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/RFU" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/RFU" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/mAU" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/mAU" } ] } @@ -456,15 +419,15 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { "oneOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/s" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/#" }, { "$ref": "#/$custom/tQuantityValueKiloDalton" @@ -478,15 +441,15 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { "oneOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/s" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/#" }, { "$ref": "#/$custom/tQuantityValueKiloDalton" @@ -500,15 +463,15 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { "oneOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/s" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/#" }, { "$ref": "#/$custom/tQuantityValueKiloDalton" @@ -522,15 +485,15 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { "oneOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/s" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/#" }, { "$ref": "#/$custom/tQuantityValueKiloDalton" @@ -544,10 +507,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/(unitless)" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/(unitless)" } ] }, @@ -556,10 +519,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/%" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/%" } ] }, @@ -568,10 +531,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/%" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/%" } ] }, @@ -579,7 +542,7 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002017", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } }, "required": [ @@ -587,7 +550,7 @@ ] }, { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/orderedItem" } ] }, @@ -617,34 +580,34 @@ "$asm.property-class": "TODO", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "region name": { "$asm.property-class": "TODO", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "written name": { "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000590", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "region start": { "$asm.property-class": "TODO", "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { "oneOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/s" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/#" }, { "$ref": "#/$custom/tQuantityValueKiloDalton" @@ -658,15 +621,15 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { "oneOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/s" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/s" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/#" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/#" }, { "$ref": "#/$custom/tQuantityValueKiloDalton" @@ -680,10 +643,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/(unitless)" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/(unitless)" } ] }, @@ -692,10 +655,10 @@ "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" }, { - "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema#/$defs/%" + "$ref": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema#/$defs/%" } ] }, @@ -703,7 +666,7 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002017", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } }, "required": [ @@ -723,44 +686,9 @@ } } }, - "required":[ + "required": [ "processed data document" ] - }, - "error aggregate document": { - "type": "object", - "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002951", - "$asm.pattern": "aggregate datum", - "properties": { - "error document": { - "type": "array", - "$asm.array-ordered": false, - "$asm.array-mixed": false, - "$asm.pattern": "indexed datum", - "items": { - "type": "object", - "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002952", - "$asm.pattern": "aggregate datum", - "required": [ - "error" - ], - "properties": { - "error feature": { - "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002953", - "$asm.pattern": "value datum", - "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" - }, - "error": { - "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002804", - "$asm.pattern": "value datum", - "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" - } - } - } - } - } } }, "required": [ @@ -796,15 +724,15 @@ ] }, { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/asm" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/asm" } ], "required": [ "$asm.manifest" ], "$defs": { - "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/hierarchy.schema": { - "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/hierarchy.schema", + "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/hierarchy.schema": { + "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/hierarchy.schema", "title": "Common hierarchy schema defs.", "$defs": { "techniqueAggregateDocument": { @@ -813,15 +741,12 @@ "type": "object", "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002526", "$asm.pattern": "aggregate datum", - "required": [ - "asset management identifier" - ], "properties": { "asset management identifier": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001976", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "description": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000922", @@ -831,37 +756,37 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001680", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "product manufacturer": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001258", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "device identifier": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002018", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "model number": { "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000017", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "equipment serial number": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001119", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "firmware version": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001259", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "device document": { "type": "array", @@ -882,48 +807,48 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002018", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "device type": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002568", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "model number": { "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000017", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "product manufacturer": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001258", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "brand name": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001680", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "equipment serial number": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001119", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "firmware version": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001259", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } } }, { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/orderedItem" } ] }, @@ -975,13 +900,13 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000952", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#dateTimeStamp", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tDateTimeStampValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tDateTimeStampValue" }, "measurement identifier": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001121", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "device control aggregate document": { "type": "object", @@ -1007,49 +932,49 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002018", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "device type": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002568", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "detection type": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002534", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "product manufacturer": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001258", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "brand name": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001680", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "equipment serial number": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001119", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "model number": { "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000017", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "firmware version": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001259", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } }, "required": [ @@ -1057,7 +982,7 @@ ] }, { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/orderedItem" } ] }, @@ -1078,20 +1003,20 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001118", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "batch identifier": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001120", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "sample role type": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002242", "$asm.pattern": "class datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tClass" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tClass" }, { "type": "string", @@ -1118,7 +1043,7 @@ "$asm.property-class": "http://purl.obolibrary.org/obo/IAO_0000590", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } }, "required": [ @@ -1129,7 +1054,7 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002534", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "processed data aggregate document": { "allOf": [ @@ -1151,6 +1076,20 @@ "$ref": "#/$defs/statisticsAggregateDocument" } ] + }, + "image aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/imageAggregateDocument" + } + ] + }, + "error aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/errorAggregateDocument" + } + ] } }, "required": [ @@ -1189,7 +1128,7 @@ "$asm.pattern": "datacube", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema#/$defs/tDatacube" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/cube.schema#/$defs/tDatacube" } ] } @@ -1219,6 +1158,20 @@ "$ref": "#/$defs/statisticsAggregateDocument" } ] + }, + "image aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/imageAggregateDocument" + } + ] + }, + "error aggregate document": { + "allOf": [ + { + "$ref": "#/$defs/errorAggregateDocument" + } + ] } }, "required": [ @@ -1229,13 +1182,13 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001116", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "submitter": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002531", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } }, "required": [ @@ -1278,12 +1231,12 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002897", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } } }, { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/orderedItem" } ] }, @@ -1322,26 +1275,26 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002893", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "calculated data name": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002891", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "calculation description": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002141", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "calculated result": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002892", "$asm.pattern": "quantity datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tQuantityValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tQuantityValue" } ] } @@ -1352,7 +1305,7 @@ ] }, { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/orderedItem" } ] }, @@ -1384,13 +1337,13 @@ "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002896", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" }, "data source feature": { "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002898", "$asm.pattern": "value datum", "$asm.type": "http://www.w3.org/2001/XMLSchema#string", - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tStringValue" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" } }, "required": [ @@ -1399,7 +1352,7 @@ ] }, { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/orderedItem" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/orderedItem" } ] }, @@ -1427,199 +1380,215 @@ "$asm.pattern": "class datum", "allOf": [ { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tClass" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tClass" }, { "type": "string", "enum": [ - "inner diameter", - "plate heater temperature", - "linear velocity", - "enthalpy of fusion", + "BET C constant", + "Raman intensity", + "Raman interferogram intensity", + "Raman wavenumber shift", + "Young modulus", + "abrasion weight", + "absolute intensity", + "absolute water content", + "absorbance", + "acquisition volume", + "actual P/P0 result", + "adsorbed volume at STP", + "ambient humidity", + "ambient pressure", + "ambient temperature", + "amount of substance", + "angle", + "angle of optical rotation", "angular velocity", - "purity", - "intensity", - "protein attenuation coefficient", - "electron beam working distance", - "temperature", - "end height", - "relative humidity", - "saturation vapor pressure", - "heat flow", - "quality quantification facet", - "heat transfer coefficient", - "molar concentration", + "area", + "attenuation coefficient", + "average dead cell diameter (cell counter)", + "average particle size", + "average total cell circularity", "average total cell diameter", - "pH", - "foam height", - "relative weight loss on drying", + "average viable cell circularity", + "background corrected turbidity", + "birefringence", + "break strain", + "break stress", + "cell path length", + "chemical shift", + "chromatography column film thickness", + "chromatography column length", + "chromatography column particle size", + "circularity", + "coating gap height", + "collision energy", + "column inner diameter", + "compartment temperature", + "concentration", + "container diameter", + "container height", + "degassed sample weight", + "detector view volume", + "diameter", + "dielectric polarization", + "dilution factor", "dilution volume", - "flow ratio", + "dispensed volume", + "dry gas flow rate", + "dry sample weight", + "eccentricity", + "electric charge", "electric conductance", - "sample temperature", - "container diameter", - "absorbance", - "sample thickness", - "humidity", - "Raman intensity", - "voltage", - "actual P/P0 result", - "polyol reservoir temperature", - "turbidity", + "electric conductivity", + "electric current", + "electric impedance", + "electric resistance", + "electric resistivity", + "electron beam working distance", + "end height", + "energy (datum)", + "enthalpy", + "enthalpy of fusion", "enthalpy of sublimation", - "osmolality", - "ambient humidity", - "molar enthalpy of vaporization", - "total foam height", - "strain", - "thermal conductivity", - "coating gap height", - "measurement chamber free space volume", + "enthalpy of vaporization", + "exhaust gas flow rate", + "extrapolated moisture content", + "fill depth", + "flow rate", + "flow ratio", + "fluorescence", + "foam height", + "force", "fracture energy", + "glass transition temperature", + "gloss", + "gross weight", + "hardness", "heat capacity", - "yield strain", + "heat capacity (dsc)", + "heat flow", + "heat seal length", + "heat transfer coefficient", + "height", + "hold-up volume", + "humidity", + "image height", + "image width", "incident radiation angle", - "mass fraction", + "inlet gas pressure", + "inner diameter", + "intensity", + "isocyanate reservoir temperature", + "length", + "linear velocity", "liquid height", - "chromatography column length", - "sample width", + "luminescence", + "m/z", + "mass", + "mass attenuation coefficient", + "mass change", + "mass concentration", + "mass fraction", + "measurement chamber free space volume", + "molar attenuation coefficient", + "molar concentration", + "molar enthalpy of fusion", "molar enthalpy of sublimation", - "Raman wavenumber shift", - "relative response", - "length", - "velocity", - "electric charge", + "molar enthalpy of vaporization", "molar mass", - "image height", - "concentration", - "sample weight before drying", - "dilution factor", - "temperature rate", - "relative permittivity", - "transition enthalpy", - "total gas flow rate", - "gloss", - "water mass fraction", - "dielectric polarization", + "molecular mass", + "monolayer quantity", "normalized foam height", - "peak onset temperature", - "electric current", - "angle", - "energy (datum)", - "abrasion weight", - "absolute water content", - "electric resistance", - "attenuation coefficient", - "molar enthalpy of fusion", - "water mass concentration", + "number concentration", + "osmolality", + "pCO2", + "pCO2 (bga)", + "pH", + "pO2", + "pO2 (bga)", "partial pressure", - "volume", - "position count", - "thermal conductance", - "dry sample weight", - "adsorbed volume at STP", - "force", - "birefringence", - "monolayer quantity", + "particle size", + "peak analyte amount", + "peak load force", + "peak onset temperature", "peak temperature", - "dry gas flow rate", - "gross weight", - "sample weight", - "image width", - "m/z", - "container height", - "flow rate", - "solvent reservoir temperature", - "isocyanate reservoir temperature", - "ambient pressure", - "eccentricity", - "mass", - "molar absorptivity", - "height", - "column inner diameter", - "heat seal length", - "specific surface area", - "reference material weight", - "thickness", - "tare weight", + "plate heater temperature", + "plate temperature", + "plate well count", + "polarity", + "polyol reservoir temperature", + "position count", "power", - "chromatography column particle size", - "saturated gas flow rate", - "well volume", - "degassed sample weight", - "voltage range", + "pressure", + "probe volume", + "protein attenuation coefficient", + "purity", + "qNMR purity result", + "reference material weight", + "reflectance", + "refractive index", + "relative humidity", "relative intensity", - "width", - "yield stress", - "total cell diameter", - "stress", + "relative permittivity", "relative pressure (BET)", - "break stress", - "mass concentration", - "chromatography column film thickness", - "average particle size", - "wavelength", - "heat capacity (dsc)", - "acquisition volume", - "collision energy", - "background corrected turbidity", - "mass change", - "chemical shift", - "titer", - "refractive index", - "enthalpy of vaporization", - "volume fraction", - "transmittance", - "electric conductivity", - "fill depth", - "Young modulus", - "total material height", - "specific rotation", - "qNMR purity result", + "relative response", + "relative weight loss on drying", + "reservoir temperature", + "rotational speed", + "sample temperature", + "sample thickness", + "sample weight", + "sample weight before drying", + "sample width", + "saturated gas flow rate", + "saturation vapor pressure", + "seal initiation temperature", "size (datum)", - "break strain", - "specific enthalpy of vaporization", - "absolute intensity", - "BET C constant", - "plate well count", - "plate temperature", - "volume concentration", + "solvent reservoir temperature", + "specific enthalpy of fusion", "specific enthalpy of sublimation", - "enthalpy", - "area", - "peak load force", - "fluorescence", + "specific enthalpy of vaporization", + "specific heat capacity", + "specific rotation", + "specific surface area", "start height", - "polarity", - "angle of optical rotation", - "peak analyte amount", - "extrapolated moisture content", - "inlet gas pressure", - "hardness", - "molecular mass", - "specific enthalpy of fusion", - "electric impedance", - "hold-up volume", - "particle size", - "diameter", + "stirring rate", + "strain", + "stress", "tablet thickness", - "pressure", - "weight loss", - "cell path length", - "glass transition temperature", - "specific heat capacity", - "wavenumber", - "reservoir temperature", - "electric resistivity", - "luminescence", - "compartment temperature", + "tare weight", + "temperature", + "temperature rate", + "thermal conductance", + "thermal conductivity", + "thickness", + "titer", + "torque", + "total cell diameter", + "total foam height", + "total gas flow rate", + "total material height", + "transition enthalpy", + "transmittance", + "turbidity", + "velocity", "viscosity", - "exhaust gas flow rate", - "Raman interferogram intensity", - "ambient temperature", - "reflectance", - "detector view volume", - "stirring rate" + "void volume", + "voltage", + "voltage range", + "volume", + "volume concentration", + "volume fraction", + "water mass concentration", + "water mass fraction", + "wavelength", + "wavenumber", + "weight loss", + "well volume", + "width", + "yield strain", + "yield stress" ], "$asm.value-sub-class-of": "http://purl.allotrope.org/ontologies/result#AFR_0001583" } @@ -1633,11 +1602,80 @@ "minItems": 0 } } + }, + "imageAggregateDocument": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002869", + "$asm.pattern": "aggregate datum", + "properties": { + "image document": { + "type": "array", + "$asm.array-ordered": false, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002225", + "$asm.pattern": "aggregate datum", + "properties": { + "index": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0000928", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#integer", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tIntegerValue" + }, + "experimental data identifier": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0001977", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" + } + } + }, + "minItems": 0 + } + } + }, + "errorAggregateDocument": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002951", + "$asm.pattern": "aggregate datum", + "properties": { + "error document": { + "type": "array", + "$asm.array-ordered": false, + "$asm.array-mixed": false, + "$asm.pattern": "indexed datum", + "items": { + "type": "object", + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002952", + "$asm.pattern": "aggregate datum", + "properties": { + "error feature": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002953", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#integer", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" + }, + "error": { + "$asm.property-class": "http://purl.allotrope.org/ontologies/result#AFR_0002804", + "$asm.pattern": "value datum", + "$asm.type": "http://www.w3.org/2001/XMLSchema#string", + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tStringValue" + } + }, + "required": [ + "error" + ] + }, + "minItems": 0 + } + } } } }, - "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema": { - "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema", + "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema": { + "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema", "title": "Schema for leaf node values.", "$defs": { "asm": { @@ -1649,7 +1687,7 @@ "format": "iri" }, { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/manifest.schema" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/manifest.schema" } ] } @@ -1803,7 +1841,9 @@ "standard deviation role", "variance role", "maximum value role", - "minimum value role" + "minimum value role", + "initial value role", + "final value role" ], "$asm.value-sub-class-of": "http://purl.allotrope.org/ontologies/role#AFRL_0000328" }, @@ -2023,8 +2063,8 @@ "oneOf": [ { "type": "integer", - "minimum": -9223372036854776000, - "maximum": 9223372036854776000 + "minimum": -9223372036854775808, + "maximum": 9223372036854775807 }, { "type": "object", @@ -2034,8 +2074,8 @@ }, "value": { "type": "integer", - "minimum": -9223372036854776000, - "maximum": 9223372036854776000 + "minimum": -9223372036854775808, + "maximum": 9223372036854775807 } }, "required": [ @@ -2136,7 +2176,7 @@ { "type": "integer", "minimum": 0, - "maximum": 18446744073709552000 + "maximum": 18446744073709551615 }, { "type": "object", @@ -2147,7 +2187,7 @@ "value": { "type": "integer", "minimum": 0, - "maximum": 18446744073709552000 + "maximum": 18446744073709551615 } }, "required": [ @@ -2394,8 +2434,8 @@ } } }, - "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema": { - "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/cube.schema", + "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/cube.schema": { + "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/cube.schema", "$defs": { "tDatacube": { "type": "object", @@ -2613,14 +2653,14 @@ "items": { "$ref": "#/$defs/tDatacubeComponent" }, - "unique": true + "uniqueItems": true }, "measures": { "type": "array", "items": { "$ref": "#/$defs/tDatacubeComponent" }, - "unique": true, + "uniqueItems": true, "minItems": 1 } }, @@ -2650,10 +2690,10 @@ ] }, "concept": { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tClass" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tClass" }, "unit": { - "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/core.schema#/$defs/tUnit" + "$ref": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/core.schema#/$defs/tUnit" }, "scale": { "enum": [ @@ -2733,7 +2773,7 @@ "const": "-Infinity" } ], - "default": 0 + "default": 0.0 } } }, @@ -2771,8 +2811,8 @@ } } }, - "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema": { - "$id": "http://purl.allotrope.org/json-schemas/qudt/REC/2023/09/units.schema", + "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema": { + "$id": "http://purl.allotrope.org/json-schemas/qudt/REC/2024/03/units.schema", "$comment": "Auto-generated from QUDT 1.1 and Allotrope Extensions for QUDT", "$defs": { "\"": { @@ -3639,6 +3679,30 @@ "unit" ] }, + "Counts/s": { + "properties": { + "unit": { + "type": "string", + "const": "Counts/s", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#CountsPerSecond" + } + }, + "required": [ + "unit" + ] + }, + "Counts/μL": { + "properties": { + "unit": { + "type": "string", + "const": "Counts/μL", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#CountsPerMicroliter" + } + }, + "required": [ + "unit" + ] + }, "D": { "properties": { "unit": { @@ -5823,6 +5887,30 @@ "unit" ] }, + "cm^2/g": { + "properties": { + "unit": { + "type": "string", + "const": "cm^2/g", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#SquareCentimetersPerGram" + } + }, + "required": [ + "unit" + ] + }, + "cm^2/mol": { + "properties": { + "unit": { + "type": "string", + "const": "cm^2/mol", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#SquareCentimetersPerMole" + } + }, + "required": [ + "unit" + ] + }, "cm^3": { "properties": { "unit": { @@ -7491,11 +7579,11 @@ "unit" ] }, - "keV/μm": { + "keV/µm": { "properties": { "unit": { "type": "string", - "const": "keV/μm", + "const": "keV/µm", "$asm.unit-iri": "http://qudt.org/vocab/unit#KiloElectronVoltPerMicrometer" } }, @@ -9591,6 +9679,18 @@ "unit" ] }, + "m°": { + "properties": { + "unit": { + "type": "string", + "const": "m°", + "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MilliDegreeAngle" + } + }, + "required": [ + "unit" + ] + }, "n mile": { "properties": { "unit": { @@ -11415,11 +11515,11 @@ "unit" ] }, - "μG": { + "µG": { "properties": { "unit": { "type": "string", - "const": "μG", + "const": "µG", "$asm.unit-iri": "http://qudt.org/vocab/unit#Microgravity" } }, @@ -11427,11 +11527,11 @@ "unit" ] }, - "μH": { + "µH": { "properties": { "unit": { "type": "string", - "const": "μH", + "const": "µH", "$asm.unit-iri": "http://qudt.org/vocab/unit#MicroHenry" } }, @@ -11439,11 +11539,11 @@ "unit" ] }, - "μL/min": { + "µL/min": { "properties": { "unit": { "type": "string", - "const": "μL/min", + "const": "µL/min", "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroliterPerMinute" } }, @@ -11451,11 +11551,11 @@ "unit" ] }, - "μL/s": { + "µL/s": { "properties": { "unit": { "type": "string", - "const": "μL/s", + "const": "µL/s", "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroliterPerSecond" } }, @@ -11463,11 +11563,11 @@ "unit" ] }, - "μV": { + "µV": { "properties": { "unit": { "type": "string", - "const": "μV", + "const": "µV", "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#Microvolt" } }, @@ -11475,11 +11575,11 @@ "unit" ] }, - "μW": { + "µW": { "properties": { "unit": { "type": "string", - "const": "μW", + "const": "µW", "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroWatt" } }, @@ -11487,11 +11587,11 @@ "unit" ] }, - "μW/g": { + "µW/g": { "properties": { "unit": { "type": "string", - "const": "μW/g", + "const": "µW/g", "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroWattPerGram" } }, @@ -11499,11 +11599,11 @@ "unit" ] }, - "μcal/°C": { + "µcal/°C": { "properties": { "unit": { "type": "string", - "const": "μcal/°C", + "const": "µcal/°C", "$asm.unit-iri": "http://purl.allotrope.org/ontology/qudt-ext/unit#MicroCaloriePerDegreeCelsius" } }, @@ -11511,11 +11611,11 @@ "unit" ] }, - "μin": { + "µin": { "properties": { "unit": { "type": "string", - "const": "μin", + "const": "µin", "$asm.unit-iri": "http://qudt.org/vocab/unit#MicroInch" } }, @@ -11523,11 +11623,11 @@ "unit" ] }, - "μm": { + "µm": { "properties": { "unit": { "type": "string", - "const": "μm", + "const": "µm", "$asm.unit-iri": "http://qudt.org/vocab/unit#Micrometer" } }, @@ -11535,11 +11635,11 @@ "unit" ] }, - "μs": { + "µs": { "properties": { "unit": { "type": "string", - "const": "μs", + "const": "µs", "$asm.unit-iri": "http://qudt.org/vocab/unit#MicroSecond" } }, @@ -11547,11 +11647,11 @@ "unit" ] }, - "μtorr": { + "µtorr": { "properties": { "unit": { "type": "string", - "const": "μtorr", + "const": "µtorr", "$asm.unit-iri": "http://qudt.org/vocab/unit#MicroTorr" } }, @@ -11837,8 +11937,8 @@ } } }, - "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/manifest.schema": { - "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2023/09/manifest.schema", + "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/manifest.schema": { + "$id": "http://purl.allotrope.org/json-schemas/adm/core/REC/2024/03/manifest.schema", "title": "Schema for manifests.", "type": "object", "properties": { From 53bb5382f0a36a6cdb24f2ba3150e0fc779b508c Mon Sep 17 00:00:00 2001 From: Ben Wolfe <82657751+bwolfe-benchling@users.noreply.github.com> Date: Thu, 13 Jun 2024 15:46:33 -0400 Subject: [PATCH 6/8] feat:vi-cell xr txt file support (#454) Signed-off-by: Ben Wolfe <82657751+bwolfe-benchling@users.noreply.github.com> Co-authored-by: Joe Negri <104152759+LimulusPolyphemus@users.noreply.github.com> --- CHANGELOG.md | 1 + .../beckman_vi_cell_xr/vi_cell_xr_parser.py | 10 +- .../vi_cell_xr_txt_reader.py | 115 ++++++++++++++++++ ...Vi-Cell-XR_example07_instrumentOutput.json | 81 ++++++++++++ ..._Vi-Cell-XR_example07_instrumentOutput.txt | 66 ++++++++++ ...Vi-Cell-XR_example08_instrumentOutput.json | 81 ++++++++++++ ..._Vi-Cell-XR_example08_instrumentOutput.txt | 66 ++++++++++ .../vi_cell_xr_parser_test.py | 5 +- 8 files changed, 422 insertions(+), 3 deletions(-) create mode 100644 src/allotropy/parsers/beckman_vi_cell_xr/vi_cell_xr_txt_reader.py create mode 100644 tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example07_instrumentOutput.json create mode 100644 tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example07_instrumentOutput.txt create mode 100644 tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example08_instrumentOutput.json create mode 100644 tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example08_instrumentOutput.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 7af8b174c..bcbe9cf2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added +- Added support for parsing Vi-Cell XR txt files - Add Electrophoresis BENCHLING/2024/06 schema. - Added github enforcement that CHANGELOG.md is updated - Added test files Agilent TapeStation Analysis diff --git a/src/allotropy/parsers/beckman_vi_cell_xr/vi_cell_xr_parser.py b/src/allotropy/parsers/beckman_vi_cell_xr/vi_cell_xr_parser.py index 664f5e3c3..e72e2aca2 100644 --- a/src/allotropy/parsers/beckman_vi_cell_xr/vi_cell_xr_parser.py +++ b/src/allotropy/parsers/beckman_vi_cell_xr/vi_cell_xr_parser.py @@ -2,7 +2,7 @@ from enum import Enum import tempfile -from typing import Any +from typing import Any, Union import zipfile import pandas as pd @@ -40,6 +40,7 @@ XrVersion, ) from allotropy.parsers.beckman_vi_cell_xr.vi_cell_xr_reader import ViCellXRReader +from allotropy.parsers.beckman_vi_cell_xr.vi_cell_xr_txt_reader import ViCellXRTXTReader from allotropy.parsers.release_state import ReleaseState from allotropy.parsers.utils.uuids import random_uuid_str from allotropy.parsers.vendor_parser import VendorParser @@ -105,7 +106,12 @@ def to_allotrope(self, named_file_contents: NamedFileContents) -> Model: if filename.endswith("xlsx"): contents = remove_style_xml_file(contents) - reader = ViCellXRReader(contents) + + reader: Union[ViCellXRTXTReader, ViCellXRReader] + if filename.endswith("txt"): + reader = ViCellXRTXTReader(named_file_contents) + else: + reader = ViCellXRReader(contents) return Model( field_asm_manifest="http://purl.allotrope.org/manifests/cell-counting/BENCHLING/2023/11/cell-counting.manifest", diff --git a/src/allotropy/parsers/beckman_vi_cell_xr/vi_cell_xr_txt_reader.py b/src/allotropy/parsers/beckman_vi_cell_xr/vi_cell_xr_txt_reader.py new file mode 100644 index 000000000..d25c9b3ae --- /dev/null +++ b/src/allotropy/parsers/beckman_vi_cell_xr/vi_cell_xr_txt_reader.py @@ -0,0 +1,115 @@ +from __future__ import annotations + +from io import StringIO +import re +from typing import Any + +import pandas as pd + +from allotropy.named_file_contents import NamedFileContents +from allotropy.parsers.beckman_vi_cell_xr.constants import ( + DATE_HEADER, + DEFAULT_VERSION, + MODEL_RE, + XrVersion, +) +from allotropy.parsers.lines_reader import read_to_lines + +HEADINGS_TO_PARSER_HEADINGS = { + "Dilution": "Dilution factor", + "Total cells / ml (x 10^6)": "Total cells/ml (x10^6)", + "Total cells": "Total cells", + "Average diameter (microns)": "Avg. diam. (microns)", + "Viable cells": "Viable cells", + "Average circularity": "Avg. circ.", + "Viability (%)": "Viability (%)", + "Total viable cells / ml (x 10^6)": "Viable cells/ml (x10^6)", + "Sample ID": "Sample ID", + "Cell type": "Cell type", +} + +NUMERIC_COLUMNS = [ + "Dilution factor", + "Total cells/ml (x10^6)", + "Total cells", + "Avg. diam. (microns)", + "Viable cells", + "Avg. circ.", + "Viability (%)", + "Viable cells/ml (x10^6)", +] + + +class ViCellXRTXTReader: + def __init__(self, contents: NamedFileContents) -> None: + self.lines = read_to_lines(contents) + self.file_info = self._get_file_info() + self.file_version = self._get_file_version() + self.data = self._read_data() + + def _read_data(self) -> pd.DataFrame: + # generate long, single column dataframe + file_data = pd.DataFrame(data=StringIO("\n".join(self.lines))) + + # strip whitespace + file_data[0] = file_data[0].str.strip() + + # drop empty cells + file_data = file_data.replace("", None).dropna(axis=0, how="all") + + # split on colon surrounded by any amount of space, limited to one split to avoid destroying datetimes + file_data = file_data[file_data.columns[0]].str.split( + r"\s*:\s*", n=1, expand=True + ) + + # pivot the long data of a single sample to a df that is 1 wide row + file_data["Pivot Index"] = 1 + file_data = file_data.pivot(index="Pivot Index", columns=0) + + date_header = DATE_HEADER[self.file_version] + + # rename the columns to match the existing parser that was based on xls(x) files + names = [] + for name in [x[1] for x in file_data.columns]: + if name == "RunDate": + newname = date_header + elif name in HEADINGS_TO_PARSER_HEADINGS: + newname = HEADINGS_TO_PARSER_HEADINGS[name] + else: + newname = name + names.append(newname) + + file_data.columns = pd.Index(names) + + # convert numeric columns to numeric types + file_data[NUMERIC_COLUMNS] = file_data[NUMERIC_COLUMNS].astype(float) + + # Do the datetime conversion and remove all rows that fail to pass as datetime + # This fixes an issue where some files have a hidden invalid first row + file_data[date_header] = pd.to_datetime( + file_data[date_header].astype(str), + format="%d %b %Y %I:%M:%S %p", + errors="coerce", + ) + + return file_data + + def _get_file_info(self) -> pd.Series[Any]: + data = self.lines + + info: pd.Series[Any] = pd.Series( + [data[0], data[3], data[8]], + copy=False, + index=["model", "filepath", "serial"], + ) + return info + + def _get_file_version(self) -> XrVersion: + match = re.match(MODEL_RE, self.file_info["model"], flags=re.IGNORECASE) + try: + version = match.groupdict()["version"] # type: ignore[union-attr] + except AttributeError: + return DEFAULT_VERSION + # TODO: raise exception for unsupported versions + version = ".".join(version.split(".")[0:2]) + return XrVersion(version) diff --git a/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example07_instrumentOutput.json b/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example07_instrumentOutput.json new file mode 100644 index 000000000..116b2c9e9 --- /dev/null +++ b/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example07_instrumentOutput.json @@ -0,0 +1,81 @@ +{ + "$asm.manifest": "http://purl.allotrope.org/manifests/cell-counting/BENCHLING/2023/11/cell-counting.manifest", + "cell counting aggregate document": { + "cell counting document": [ + { + "measurement aggregate document": { + "measurement document": [ + { + "measurement time": "2023-09-29T05:21:32+00:00", + "measurement identifier": "BECKMAN_VI_CELL_XR_TEST_ID_0", + "device control aggregate document": { + "device control document": [ + { + "device type": "brightfield imager (cell counter)", + "detection type": "brightfield" + } + ] + }, + "sample document": { + "sample identifier": "CLB001" + }, + "processed data aggregate document": { + "processed data document": [ + { + "viability (cell counter)": { + "value": 97.0, + "unit": "%" + }, + "viable cell density (cell counter)": { + "value": 87.4, + "unit": "10^6 cells/mL" + }, + "data processing document": { + "cell type processing method": "CHO", + "cell density dilution factor": { + "value": 20.0, + "unit": "(unitless)" + } + }, + "total cell density (cell counter)": { + "value": 90.2, + "unit": "10^6 cells/mL" + }, + "average total cell diameter": { + "value": 17.3, + "unit": "μm" + }, + "total cell count": { + "value": 4263.0, + "unit": "cell" + }, + "viable cell count": { + "value": 4133.0, + "unit": "cell" + }, + "average total cell circularity": { + "value": 0.861, + "unit": "(unitless)" + } + } + ] + } + } + ] + }, + "analyst": "Vi-Cell XR" + } + ], + "device system document": { + "model number": "Vi-Cell XR", + "equipment serial number": "AW123456789" + }, + "data system document": { + "file name": "Beckman_Vi-Cell-XR_example07_instrumentOutput.txt", + "software name": "Vi-Cell XR", + "software version": "2.06", + "ASM converter name": "allotropy", + "ASM converter version": "0.1.33" + } + } +} diff --git a/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example07_instrumentOutput.txt b/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example07_instrumentOutput.txt new file mode 100644 index 000000000..e42ab7ae8 --- /dev/null +++ b/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example07_instrumentOutput.txt @@ -0,0 +1,66 @@ +Vi-CELL XR 2.06.3 + +Sample ID : CLB001 +File name : CLB001.txt +Time : +LogDate : 29 Sep 2023 5:21:06 AM +RunDate : 29 Sep 2023 5:21:32 AM +FileDate : 29 Sep 2023 5:23:31 AM +Unit S/N : AW123456789 +User : +Analysis version : 2.42 + +Results: +Images : 50 +Saved images : 50 +Total cells : 4263 +Viable cells : 4133 +Nonviable cells : 130 +Viability (%) : 97.0 +Total cells / ml (x 10^6) : 90.2 +Total viable cells / ml (x 10^6) : 87.4 +Average diameter (microns) : 17.3 +Average circularity : 0.861 +Average cells / image : 85.3 +Total diameter sum : 73801 +Total circularity sum : 2105.0 +Background intensity sum : 10068 + +Settings: +Cell type : CHO +Cell brightness (%) : 86 +Viable cell spot brightness (%) : 85 +Minimum diameter (microns) : 10.0 +Maximum diameter (microns) : 35.0 +Viable spot area : 11.0 +Minimum circularity : 0.300 +Frames : 50 +Dilution : 20.00 +Cell sharpness : 53 +Aspirate cycles : 1 +Trypan blue mixing cycles : 3 +Internal Dilution : 2.400 +Decluster degree : 8 +Number of bins : 125 +Microns/pixel ratio : 0.6889 +Field of view (microns) : 831 x 611 +Sample depth (microns) : 89.4 +Probe volume (ml x 10^-6) : 45.392 +Image size : 1280 x 960 +Comment : + +SizeData : 3,9,17,17,25,29,22,29,34,33,49,62,60,69,64,64,61,74,83,89,73,85,85,77,72,77,80,89,84,80,88,82,71,95,96,78,79,70,76,100,64,86,84,82,81,82,85,75,78,86,71,69,55,49,58,27,44,44,44,34,39,26,24,27,19,19,21,22,20,15,15,13,7,6,12,12,11,9,8,7,2,10,9,4,7,8,6,3,6,8,3,7,5,4,2,0,3,3,0,0,4,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0 +ViableSizeData : 2,6,14,13,24,23,21,28,33,30,44,61,57,65,62,59,60,70,79,85,70,84,82,74,69,75,78,88,82,76,86,81,69,93,94,76,76,69,73,98,62,85,83,82,80,80,85,74,78,86,69,68,53,49,57,26,43,43,44,34,39,25,22,24,19,18,20,21,20,15,15,13,6,6,11,12,11,9,8,7,2,10,9,4,7,8,6,3,6,8,3,7,5,4,2,0,3,3,0,0,4,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0 +CircData : 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,1,1,5,5,11,8,7,1,7,4,3,5,1,0,2,2,1,1,2,1,2,0,1,0,0,1,1,2,3,1,0,2,1,2,2,1,0,0,2,0,2,1,1,4,5,2,5,5,8,5,9,10,20,14,25,32,52,62,77,52,226,235,228,279,219,203,158,137,94,82,45,31,14,8,1 +ViableCircData : 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,1,1,5,5,11,7,6,1,6,4,3,5,1,0,2,1,1,1,1,1,1,0,1,0,0,1,1,1,2,1,0,2,1,0,1,0,0,0,1,0,1,0,0,1,2,1,3,1,4,5,7,9,18,13,25,31,51,56,75,52,223,234,226,274,214,200,157,137,93,81,44,31,14,8,1 +ViabilityData : 100.000,98.734,97.647,97.727,98.734,94.048,97.248,95.960,97.222,97.590,95.652,97.753,91.304,96.512,92.222,98.824,100.000,98.889,95.745,97.802,97.727,98.611,97.647,97.753,93.590,92.308,98.810,97.727,100.000,96.552,97.015,95.604,97.468,98.824,96.842,95.699,98.810,98.305,100.000,95.876,93.506,100.000,95.294,95.000,96.875,95.745,95.455,98.592,94.898,99.065 +CountData : 89,79,85,88,79,84,109,99,72,83,92,89,69,86,90,85,72,90,94,91,88,72,85,89,78,91,84,88,70,87,67,91,79,85,95,93,84,59,60,97,77,100,85,80,96,94,88,71,98,107 +ViableCellsData : 89,78,83,86,78,79,106,95,70,81,88,87,63,83,83,84,72,89,90,89,86,71,83,87,73,84,83,86,70,84,65,87,77,84,92,89,83,58,60,93,72,100,81,76,93,90,84,70,93,106 +TotalPerMlData : 94.1134,83.5389,89.8836,93.0560,83.5389,88.8261,115.2625,104.6879,76.1367,87.7687,97.2858,94.1134,72.9643,90.9410,95.1709,89.8836,76.1367,95.1709,99.4007,96.2283,93.0560,76.1367,89.8836,94.1134,82.4814,96.2283,88.8261,93.0560,74.0218,91.9985,70.8494,96.2283,83.5389,89.8836,100.4581,98.3432,88.8261,62.3898,63.4472,102.5730,81.4240,105.7454,89.8836,84.5963,101.5156,99.4007,93.0560,75.0792,103.6305,113.1476 +ViablePerMlData : 94.1134,82.4814,87.7687,90.9410,82.4814,83.5389,112.0901,100.4581,74.0218,85.6538,93.0560,91.9985,66.6196,87.7687,87.7687,88.8261,76.1367,94.1134,95.1709,94.1134,90.9410,75.0792,87.7687,91.9985,77.1941,88.8261,87.7687,90.9410,74.0218,88.8261,68.7345,91.9985,81.4240,88.8261,97.2858,94.1134,87.7687,61.3323,63.4472,98.3432,76.1367,105.7454,85.6538,80.3665,98.3432,95.1709,88.8261,74.0218,98.3432,112.0901 +AvgDiamData : 17.52,18.04,17.35,17.20,17.43,16.87,17.38,16.90,17.29,16.81,17.61,17.94,16.90,16.74,17.93,17.33,16.77,17.26,17.14,17.44,17.65,17.94,17.83,16.42,17.70,17.47,17.15,17.34,17.20,16.49,17.82,17.63,18.37,17.13,17.84,16.85,17.87,19.95,16.33,17.47,17.66,17.83,16.81,16.83,17.15,17.69,16.67,16.00,16.36,16.92 +AvgCircData : 0.87,0.83,0.87,0.87,0.85,0.86,0.84,0.87,0.85,0.83,0.87,0.85,0.86,0.86,0.86,0.87,0.88,0.82,0.87,0.87,0.87,0.85,0.85,0.85,0.86,0.83,0.88,0.85,0.87,0.87,0.86,0.87,0.77,0.84,0.87,0.90,0.88,0.63,0.88,0.88,0.88,0.84,0.88,0.88,0.87,0.89,0.89,0.88,0.88,0.89 +BackgroundData : 206.0000,199.0000,200.0000,199.0000,198.0000,201.0000,199.0000,196.0000,196.0000,192.0000,195.0000,192.0000,196.0000,191.0000,191.0000,190.0000,189.0000,188.0000,193.0000,189.0000,205.0000,204.0000,207.0000,205.0000,205.0000,204.0000,206.0000,206.0000,202.0000,207.0000,206.0000,204.0000,205.0000,203.0000,202.0000,206.0000,203.0000,204.0000,204.0000,206.0000,204.0000,206.0000,208.0000,210.0000,208.0000,208.0000,205.0000,207.0000,210.0000,208.0000 +ClusterSizeData : 21267,3984,830,238,64,18,12,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +ImageDirectory : ..\..\images\CLB001\ +ImageBaseName : CLB001 diff --git a/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example08_instrumentOutput.json b/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example08_instrumentOutput.json new file mode 100644 index 000000000..e8742baed --- /dev/null +++ b/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example08_instrumentOutput.json @@ -0,0 +1,81 @@ +{ + "$asm.manifest": "http://purl.allotrope.org/manifests/cell-counting/BENCHLING/2023/11/cell-counting.manifest", + "cell counting aggregate document": { + "cell counting document": [ + { + "measurement aggregate document": { + "measurement document": [ + { + "measurement time": "2024-05-18T13:10:16+00:00", + "measurement identifier": "BECKMAN_VI_CELL_XR_TEST_ID_0", + "device control aggregate document": { + "device control document": [ + { + "device type": "brightfield imager (cell counter)", + "detection type": "brightfield" + } + ] + }, + "sample document": { + "sample identifier": "CL001" + }, + "processed data aggregate document": { + "processed data document": [ + { + "viability (cell counter)": { + "value": 85.1, + "unit": "%" + }, + "viable cell density (cell counter)": { + "value": 19.3, + "unit": "10^6 cells/mL" + }, + "data processing document": { + "cell type processing method": "CHO", + "cell density dilution factor": { + "value": 10.0, + "unit": "(unitless)" + } + }, + "total cell density (cell counter)": { + "value": 22.6, + "unit": "10^6 cells/mL" + }, + "average total cell diameter": { + "value": 15.5, + "unit": "μm" + }, + "total cell count": { + "value": 1960.0, + "unit": "cell" + }, + "viable cell count": { + "value": 1667.0, + "unit": "cell" + }, + "average total cell circularity": { + "value": 0.808, + "unit": "(unitless)" + } + } + ] + } + } + ] + }, + "analyst": "Vi-Cell XR" + } + ], + "device system document": { + "model number": "Vi-Cell XR", + "equipment serial number": "AW123456789" + }, + "data system document": { + "file name": "Beckman_Vi-Cell-XR_example08_instrumentOutput.txt", + "software name": "Vi-Cell XR", + "software version": "2.06", + "ASM converter name": "allotropy", + "ASM converter version": "0.1.33" + } + } +} diff --git a/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example08_instrumentOutput.txt b/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example08_instrumentOutput.txt new file mode 100644 index 000000000..bcefd363a --- /dev/null +++ b/tests/parsers/beckman_vi_cell_xr/testdata/v2.06/Beckman_Vi-Cell-XR_example08_instrumentOutput.txt @@ -0,0 +1,66 @@ +Vi-CELL XR 2.06.3 + +Sample ID : CL001 +File name : CL001.txt +Time : +LogDate : 18 May 2024 1:09:21 PM +RunDate : 18 May 2024 1:10:16 PM +FileDate : 18 May 2024 1:12:05 PM +Unit S/N : AW123456789 +User : +Analysis version : 2.42 + +Results: +Images : 50 +Saved images : 50 +Total cells : 1960 +Viable cells : 1667 +Nonviable cells : 293 +Viability (%) : 85.1 +Total cells / ml (x 10^6) : 22.6 +Total viable cells / ml (x 10^6) : 19.3 +Average diameter (microns) : 15.5 +Average circularity : 0.808 +Average cells / image : 39.2 +Total diameter sum : 30362 +Total circularity sum : 1023.8 +Background intensity sum : 10105 + +Settings: +Cell type : CHO +Cell brightness (%) : 85 +Viable cell spot brightness (%) : 75 +Minimum diameter (microns) : 6.00 +Maximum diameter (microns) : 50.0 +Viable spot area : 5.00 +Minimum circularity : 0.000 +Frames : 50 +Dilution : 10.00 +Cell sharpness : 100 +Aspirate cycles : 1 +Trypan blue mixing cycles : 3 +Internal Dilution : 2.560 +Decluster degree : 8 +Number of bins : 140 +Microns/pixel ratio : 0.6889 +Field of view (microns) : 831 x 611 +Sample depth (microns) : 87.3 +Probe volume (ml x 10^-6) : 44.326 +Image size : 1280 x 960 +Comment : + +SizeData : 4,9,9,7,7,15,20,18,13,22,24,24,29,28,34,38,28,35,52,34,47,49,45,57,60,61,61,60,60,72,48,50,37,43,37,32,55,46,51,58,44,40,42,35,41,51,32,33,15,20,24,16,8,16,9,10,3,4,7,6,5,6,4,1,1,2,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +ViableSizeData : 1,4,5,3,5,10,5,11,10,12,13,14,18,16,21,21,17,24,39,28,38,37,38,43,52,51,53,51,57,66,43,47,34,41,35,30,52,46,49,55,43,39,41,34,41,49,32,32,15,20,23,15,8,16,9,10,3,4,7,6,5,6,4,1,1,2,0,1,1,0,1,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +CircData : 0,0,1,0,3,1,0,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,8,4,8,6,5,13,6,6,4,3,5,4,3,2,3,7,2,5,7,3,4,5,8,5,7,4,2,5,3,1,2,1,2,7,3,1,4,5,2,1,5,6,2,6,5,17,7,9,9,10,17,6,22,26,41,39,45,80,74,76,88,83,78,62,72,54,47,45,23,11,9,0 +ViableCircData : 0,0,0,0,2,1,0,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,8,4,8,6,4,13,5,5,4,3,4,4,3,2,1,6,0,4,6,3,2,4,5,4,6,4,2,4,2,0,2,0,1,4,2,1,1,4,1,1,1,4,0,1,4,11,3,4,3,5,13,4,14,18,32,29,33,60,67,66,69,65,63,56,59,47,37,36,19,5,9,0 +ViabilityData : 87.500,91.176,86.667,77.143,79.545,86.842,83.333,89.655,77.273,76.316,85.185,80.488,89.130,87.097,90.909,85.000,81.395,93.617,78.947,85.455,91.176,87.755,84.444,86.486,81.395,79.245,68.182,85.714,93.939,94.286,79.487,79.545,88.889,89.189,87.805,79.412,75.000,84.444,97.143,83.721,83.333,94.286,82.222,81.818,86.111,84.000,96.970,95.000,84.211,75.862 +CountData : 32,34,45,35,44,38,36,29,44,38,27,41,46,31,33,40,43,47,38,55,34,49,45,37,43,53,22,42,33,35,39,44,45,37,41,34,36,45,35,43,42,35,45,44,36,50,33,40,38,29 +ViableCellsData : 28,31,39,27,35,33,30,26,34,29,23,33,41,27,30,34,35,44,30,47,31,43,38,32,35,42,15,36,31,33,31,35,40,33,36,27,27,38,34,36,35,33,37,36,31,42,32,38,32,22 +TotalPerMlData : 18.4813,19.6364,25.9894,20.2140,25.4118,21.9466,20.7915,16.7487,25.4118,21.9466,15.5936,23.6792,26.5669,17.9038,19.0589,23.1017,24.8343,27.1445,21.9466,31.7648,19.6364,28.2996,25.9894,21.3690,24.8343,30.6097,12.7059,24.2568,19.0589,20.2140,22.5241,25.4118,25.9894,21.3690,23.6792,19.6364,20.7915,25.9894,20.2140,24.8343,24.2568,20.2140,25.9894,25.4118,20.7915,28.8771,19.0589,23.1017,21.9466,16.7487 +ViablePerMlData : 16.1712,17.9038,22.5241,15.5936,20.2140,19.0589,17.3263,15.0161,19.6364,16.7487,13.2835,19.0589,23.6792,15.5936,17.3263,19.6364,20.2140,25.4118,17.3263,27.1445,17.9038,24.8343,21.9466,18.4813,20.2140,24.2568,8.6631,20.7915,17.9038,19.0589,17.9038,20.2140,23.1017,19.0589,20.7915,15.5936,15.5936,21.9466,19.6364,20.7915,20.2140,19.0589,21.3690,20.7915,17.9038,24.2568,18.4813,21.9466,18.4813,12.7059 +AvgDiamData : 15.22,15.63,15.74,14.92,15.89,15.13,14.76,15.75,14.87,15.00,14.60,15.67,15.67,15.69,16.18,15.55,16.55,15.91,16.04,15.36,15.34,15.56,14.70,15.25,15.72,14.95,15.23,15.00,16.18,17.01,15.15,14.44,16.40,16.04,15.15,15.21,14.61,14.09,16.91,15.54,15.25,15.93,15.58,14.96,14.68,15.27,17.05,17.40,15.29,15.03 +AvgCircData : 0.79,0.85,0.79,0.76,0.76,0.82,0.88,0.86,0.84,0.81,0.79,0.80,0.87,0.86,0.82,0.74,0.79,0.83,0.84,0.75,0.76,0.80,0.81,0.82,0.81,0.82,0.83,0.85,0.79,0.87,0.84,0.78,0.80,0.77,0.81,0.85,0.81,0.74,0.81,0.77,0.78,0.82,0.84,0.83,0.78,0.84,0.88,0.78,0.73,0.81 +BackgroundData : 204.0000,205.0000,204.0000,201.0000,199.0000,199.0000,199.0000,197.0000,197.0000,196.0000,195.0000,197.0000,196.0000,196.0000,195.0000,195.0000,195.0000,195.0000,194.0000,194.0000,207.0000,206.0000,206.0000,209.0000,206.0000,207.0000,205.0000,204.0000,204.0000,204.0000,204.0000,206.0000,203.0000,204.0000,205.0000,206.0000,204.0000,205.0000,204.0000,206.0000,205.0000,208.0000,205.0000,206.0000,203.0000,205.0000,203.0000,204.0000,205.0000,203.0000 +ClusterSizeData : 243604,46168,12001,4200,1765,713,327,132,47,32,12,6,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +ImageDirectory : ..\..\images\CLB001\ +ImageBaseName : CLB001 diff --git a/tests/parsers/beckman_vi_cell_xr/vi_cell_xr_parser_test.py b/tests/parsers/beckman_vi_cell_xr/vi_cell_xr_parser_test.py index 0a347247a..4d5994cf0 100644 --- a/tests/parsers/beckman_vi_cell_xr/vi_cell_xr_parser_test.py +++ b/tests/parsers/beckman_vi_cell_xr/vi_cell_xr_parser_test.py @@ -1,3 +1,4 @@ +from pathlib import Path import re import pytest @@ -12,6 +13,8 @@ "v2.06/Beckman_Vi-Cell-XR_example04_instrumentOutput.xlsx", "v2.06/Beckman_Vi-Cell-XR_example05_instrumentOutput.xlsx", "v2.06/Beckman_Vi-Cell-XR_example06_instrumentOutput.xlsx", + "v2.06/Beckman_Vi-Cell-XR_example07_instrumentOutput.txt", + "v2.06/Beckman_Vi-Cell-XR_example08_instrumentOutput.txt", "v2.06/Beckman_Vi-Cell-XR_no_total_cells.xlsx", "v2.06/Beckman_Vi-Cell-XR_hiddenRow.xlsx", "v2.06/style_fill_error.xlsx", @@ -23,7 +26,7 @@ @pytest.mark.parametrize("output_file", OUTPUT_FILES) def test_parse_vi_cell_xr_to_asm_expected_contents(output_file: str) -> None: test_filepath = f"tests/parsers/beckman_vi_cell_xr/testdata/{output_file}" - target_filename = output_file.replace(".xlsx", ".json").replace(".xls", ".json") + target_filename = Path(output_file).with_suffix(".json") expected_filepath = f"tests/parsers/beckman_vi_cell_xr/testdata/{target_filename}" allotrope_dict = from_file(test_filepath, VENDOR_TYPE) From 334613540c2c9912d5c6fbd2de9f77a28a886666 Mon Sep 17 00:00:00 2001 From: james-leinas <157071641+james-leinas@users.noreply.github.com> Date: Fri, 14 Jun 2024 10:02:07 -0700 Subject: [PATCH 7/8] Add Mabtech Apex Adapter (#435) Add Mabtech Apex adapter support --------- Signed-off-by: james-leinas <157071641+james-leinas@users.noreply.github.com> --- CHANGELOG.md | 4 + README.md | 1 + src/allotropy/parser_factory.py | 3 + .../parsers/mabtech_apex/__init__.py | 0 .../mabtech_apex/mabtech_apex_contents.py | 38 + .../mabtech_apex/mabtech_apex_parser.py | 153 ++ .../mabtech_apex/mabtech_apex_structure.py | 113 ++ tests/parser_factory_test.py | 2 + tests/parsers/mabtech_apex/__init__.py | 0 .../mabtech_apex_to_allotrope_test.py | 19 + .../mabtech_apex_example_single_plate.json | 1748 +++++++++++++++++ .../mabtech_apex_example_single_plate.xlsx | Bin 0 -> 42465 bytes 12 files changed, 2081 insertions(+) create mode 100644 src/allotropy/parsers/mabtech_apex/__init__.py create mode 100644 src/allotropy/parsers/mabtech_apex/mabtech_apex_contents.py create mode 100644 src/allotropy/parsers/mabtech_apex/mabtech_apex_parser.py create mode 100644 src/allotropy/parsers/mabtech_apex/mabtech_apex_structure.py create mode 100644 tests/parsers/mabtech_apex/__init__.py create mode 100644 tests/parsers/mabtech_apex/mabtech_apex_to_allotrope_test.py create mode 100644 tests/parsers/mabtech_apex/testdata/mabtech_apex_example_single_plate.json create mode 100644 tests/parsers/mabtech_apex/testdata/mabtech_apex_example_single_plate.xlsx diff --git a/CHANGELOG.md b/CHANGELOG.md index bcbe9cf2c..b854f7924 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,8 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added +<<<<<<< mabtech_apex +- Add Mabtech Apex adapter +======= - Added support for parsing Vi-Cell XR txt files - Add Electrophoresis BENCHLING/2024/06 schema. +>>>>>>> main - Added github enforcement that CHANGELOG.md is updated - Added test files Agilent TapeStation Analysis diff --git a/README.md b/README.md index 9309447d7..4e5b3a3be 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ We currently have parser support for the following instruments (* asterisk indic - ChemoMetec Nucleoview - CTL ImmunoSpot - Luminex xPONENT + - *Mabtech Apex - Methodical Mind - Molecular Devices SoftMax Pro - NovaBio Flex2 diff --git a/src/allotropy/parser_factory.py b/src/allotropy/parser_factory.py index 749007560..f19d8bc25 100644 --- a/src/allotropy/parser_factory.py +++ b/src/allotropy/parser_factory.py @@ -30,6 +30,7 @@ from allotropy.parsers.luminex_xponent.luminex_xponent_parser import ( LuminexXponentParser, ) +from allotropy.parsers.mabtech_apex.mabtech_apex_parser import MabtechApexParser from allotropy.parsers.methodical_mind.methodical_mind_parser import ( MethodicalMindParser, ) @@ -68,6 +69,7 @@ class Vendor(Enum): CTL_IMMUNOSPOT = "CTL_IMMUNOSPOT" EXAMPLE_WEYLAND_YUTANI = "EXAMPLE_WEYLAND_YUTANI" LUMINEX_XPONENT = "LUMINEX_XPONENT" + MABTECH_APEX = "MABTECH_APEX" METHODICAL_MIND = "METHODICAL_MIND" MOLDEV_SOFTMAX_PRO = "MOLDEV_SOFTMAX_PRO" NOVABIO_FLEX2 = "NOVABIO_FLEX2" @@ -105,6 +107,7 @@ def get_parser(self, default_timezone: tzinfo | None = None) -> VendorParser: Vendor.CTL_IMMUNOSPOT: CtlImmunospotParser, Vendor.EXAMPLE_WEYLAND_YUTANI: ExampleWeylandYutaniParser, Vendor.LUMINEX_XPONENT: LuminexXponentParser, + Vendor.MABTECH_APEX: MabtechApexParser, Vendor.METHODICAL_MIND: MethodicalMindParser, Vendor.MOLDEV_SOFTMAX_PRO: SoftmaxproParser, Vendor.NOVABIO_FLEX2: NovaBioFlexParser, diff --git a/src/allotropy/parsers/mabtech_apex/__init__.py b/src/allotropy/parsers/mabtech_apex/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/allotropy/parsers/mabtech_apex/mabtech_apex_contents.py b/src/allotropy/parsers/mabtech_apex/mabtech_apex_contents.py new file mode 100644 index 000000000..4052392ea --- /dev/null +++ b/src/allotropy/parsers/mabtech_apex/mabtech_apex_contents.py @@ -0,0 +1,38 @@ +from __future__ import annotations + +import numpy as np +import pandas as pd + +from allotropy.parsers.utils.values import assert_not_none + + +class MabtechApexContents: + def __init__(self, raw_contents: dict[str, pd.DataFrame]) -> None: + contents = { + str(name): df.replace(np.nan, None) for name, df in raw_contents.items() + } + + self.plate_info = self._get_plate_info(contents) + self.data = self._get_data(contents) + + def _get_plate_info(self, contents: dict[str, pd.DataFrame]) -> pd.Series[str]: + sheet = assert_not_none( + contents.get("Plate Information"), + msg="Unable to find 'Plate Information' sheet.", + ).dropna(axis=1, how="all") + + data = {} + for _, * (title, value, *_) in sheet.itertuples(): + if title is None: + break + data[str(title)] = None if value is None else str(value) + + plate_info = pd.Series(data) + return plate_info + + def _get_data(self, contents: dict[str, pd.DataFrame]) -> pd.DataFrame: + sheet = assert_not_none( + contents.get("Plate Database"), msg="Unable to find 'Plate Database' sheet." + ) + + return sheet.dropna(axis=1, how="all") diff --git a/src/allotropy/parsers/mabtech_apex/mabtech_apex_parser.py b/src/allotropy/parsers/mabtech_apex/mabtech_apex_parser.py new file mode 100644 index 000000000..922c5dc46 --- /dev/null +++ b/src/allotropy/parsers/mabtech_apex/mabtech_apex_parser.py @@ -0,0 +1,153 @@ +import pandas as pd + +from allotropy.allotrope.models.adm.plate_reader.benchling._2023._09.plate_reader import ( + ContainerType, + DataSystemDocument, + DeviceSystemDocument, + ImageFeatureAggregateDocument, + ImageFeatureDocumentItem, + MeasurementAggregateDocument, + Model, + OpticalImagingDeviceControlAggregateDocument, + OpticalImagingDeviceControlDocumentItem, + OpticalImagingMeasurementDocumentItems, + PlateReaderAggregateDocument, + PlateReaderDocumentItem, + ProcessedDataAggregateDocument, + ProcessedDataDocumentItem, + SampleDocument, +) +from allotropy.allotrope.models.shared.definitions.custom import ( + TQuantityValueMilliSecond, + TQuantityValueNumber, + TQuantityValueUnitless, +) +from allotropy.constants import ASM_CONVERTER_NAME, ASM_CONVERTER_VERSION +from allotropy.named_file_contents import NamedFileContents +from allotropy.parsers.mabtech_apex.mabtech_apex_contents import MabtechApexContents +from allotropy.parsers.mabtech_apex.mabtech_apex_structure import ( + PlateInformation, + Well, + WellList, +) +from allotropy.parsers.release_state import ReleaseState +from allotropy.parsers.utils.uuids import random_uuid_str +from allotropy.parsers.vendor_parser import VendorParser + + +class MabtechApexParser(VendorParser): + @property + def display_name(self) -> str: + return "Mabtech Apex" + + @property + def release_state(self) -> ReleaseState: + return ReleaseState.CANDIDATE_RELEASE + + def to_allotrope(self, named_file_contents: NamedFileContents) -> Model: + raw_contents = pd.read_excel(named_file_contents.contents, sheet_name=None) + contents = MabtechApexContents(raw_contents) + data = PlateInformation.create(contents) + wells = WellList.create(contents) + return self._get_model(data, wells, named_file_contents.original_file_name) + + def _get_model( + self, data: PlateInformation, wells: WellList, file_name: str + ) -> Model: + return Model( + plate_reader_aggregate_document=PlateReaderAggregateDocument( + device_system_document=DeviceSystemDocument( + device_identifier="N/A", + model_number=data.model_number, + equipment_serial_number=data.equipment_serial_number, + ), + data_system_document=DataSystemDocument( + file_name=file_name, + UNC_path=data.unc_path, + software_name="Apex", + software_version=data.software_version, + ASM_converter_name=ASM_CONVERTER_NAME, + ASM_converter_version=ASM_CONVERTER_VERSION, + ), + plate_reader_document=[ + PlateReaderDocumentItem( + analyst=data.analyst, + measurement_aggregate_document=self.get_measurement_aggregate_document( + well + ), + ) + for well in wells + ], + ), + field_asm_manifest="http://purl.allotrope.org/manifests/plate-reader/BENCHLING/2023/09/plate-reader.manifest", + ) + + def get_measurement_aggregate_document( + self, well: Well + ) -> MeasurementAggregateDocument: + return MeasurementAggregateDocument( + container_type=ContainerType.well_plate, + plate_well_count=TQuantityValueNumber(value=float(96)), + measurement_time=self._get_date_time(well.measurement_time), + measurement_document=[self.get_measurement_document_item(well)], + ) + + def get_measurement_document_item( + self, well: Well + ) -> OpticalImagingMeasurementDocumentItems: + return OpticalImagingMeasurementDocumentItems( + measurement_identifier=random_uuid_str(), + sample_document=self.get_sample_document(well), + device_control_aggregate_document=OpticalImagingDeviceControlAggregateDocument( + device_control_document=[ + self.get_device_control_document_item(well), + ] + ), + processed_data_aggregate_document=ProcessedDataAggregateDocument( + processed_data_document=[ + self.get_processed_data_document(well), + ] + ), + ) + + def get_sample_document(self, well: Well) -> SampleDocument: + return SampleDocument( + sample_identifier=well.sample_identifier, + location_identifier=well.location_identifier, + well_plate_identifier=well.well_plate_identifier, + ) + + def get_device_control_document_item( + self, well: Well + ) -> OpticalImagingDeviceControlDocumentItem: + return OpticalImagingDeviceControlDocumentItem( + device_type="imager", + detection_type="optical-imaging", + exposure_duration_setting=( + None + if well.exposure_duration_setting is None + else TQuantityValueMilliSecond(value=well.exposure_duration_setting) + ), + illumination_setting=( + None + if well.illumination_setting is None + else TQuantityValueUnitless(value=well.illumination_setting) + ), + ) + + def get_processed_data_document(self, well: Well) -> ProcessedDataDocumentItem: + return ProcessedDataDocumentItem( + processed_data_identifier=random_uuid_str(), + image_feature_aggregate_document=ImageFeatureAggregateDocument( + image_feature_document=[ + ImageFeatureDocumentItem( + image_feature_identifier=random_uuid_str(), + image_feature_name=next(iter(image_feature.keys())), + image_feature_result=TQuantityValueUnitless( + value=image_feature[next(iter(image_feature.keys()))] + ), + ) + for image_feature in well.image_features + ] + ), + ) diff --git a/src/allotropy/parsers/mabtech_apex/mabtech_apex_structure.py b/src/allotropy/parsers/mabtech_apex/mabtech_apex_structure.py new file mode 100644 index 000000000..0a64bbda8 --- /dev/null +++ b/src/allotropy/parsers/mabtech_apex/mabtech_apex_structure.py @@ -0,0 +1,113 @@ +from __future__ import annotations + +from collections.abc import Iterator +from dataclasses import dataclass +import re + +import pandas as pd + +from allotropy.allotrope.models.shared.definitions.definitions import InvalidJsonFloat +from allotropy.parsers.mabtech_apex.mabtech_apex_contents import MabtechApexContents +from allotropy.parsers.utils.values import ( + assert_not_none, + try_float_from_series_or_nan, + try_float_from_series_or_none, + try_str_from_series, + try_str_from_series_or_none, +) + +IMAGE_FEATURES = [ + "Spot Forming Units (SFU)", + "Average Relative Spot Volume (RSV)", + "Sum of Spot Volume (RSV)", +] + + +@dataclass(frozen=True) +class PlateInformation: + unc_path: str | None + analyst: str | None + software_version: str | None + model_number: str + equipment_serial_number: str | None + + @staticmethod + def create(contents: MabtechApexContents) -> PlateInformation: + plateinformation = contents.plate_info + machine_id = assert_not_none( + re.match( + "([A-Z]+[a-z]+) ([0-9]+)", + try_str_from_series(plateinformation, key="Machine ID:"), + ), + msg="Unable to interpret Machine ID", + ) + + return PlateInformation( + unc_path=try_str_from_series_or_none(plateinformation, key="Path:"), + analyst=try_str_from_series_or_none(plateinformation, key="Saved By:"), + software_version=try_str_from_series_or_none( + plateinformation, key="Software Version:" + ), + model_number=machine_id.group(1), + equipment_serial_number=machine_id.group(2), + ) + + +@dataclass(frozen=True) +class Well: + measurement_time: str + sample_identifier: str + location_identifier: str + well_plate_identifier: str | None + exposure_duration_setting: float | None + illumination_setting: float | None + image_features: list[dict[str, float | InvalidJsonFloat]] + + @staticmethod + def create(plate_data: pd.Series[str]) -> Well | None: + # if Read Date is not present in file, return None, no measurement for given Well + if try_str_from_series_or_none(plate_data, "Read Date") is None: + return None + + location_id = try_str_from_series(plate_data, "Well") + + well_plate = try_str_from_series_or_none(plate_data, "Plate") + + image_feature_list = [] + for feature in IMAGE_FEATURES: + image_dict = { + str(feature): try_float_from_series_or_nan(plate_data, feature) + } + image_feature_list.append(image_dict) + + return Well( + measurement_time=try_str_from_series(plate_data, "Read Date"), + location_identifier=location_id, + well_plate_identifier=well_plate, + sample_identifier=f"{well_plate}_{location_id}", + exposure_duration_setting=try_float_from_series_or_none( + plate_data, "Exposure" + ), + illumination_setting=try_float_from_series_or_none( + plate_data, "Preset Intensity" + ), + image_features=image_feature_list, + ) + + +@dataclass(frozen=True) +class WellList: + wells: list[Well] + + def __iter__(self) -> Iterator[Well]: + return iter(self.wells) + + @staticmethod + def create(contents: MabtechApexContents) -> WellList: + plate_data = contents.data + well_list = [] + for _, well_data in plate_data.iterrows(): + well = Well.create(well_data) + if well is not None: + well_list.append(well) + return WellList(wells=well_list) diff --git a/tests/parser_factory_test.py b/tests/parser_factory_test.py index da2bbcfab..ed2b660e5 100644 --- a/tests/parser_factory_test.py +++ b/tests/parser_factory_test.py @@ -8,6 +8,8 @@ Vendor.EXAMPLE_WEYLAND_YUTANI, # We want to collect more test cases for this parser before marking as ready. Vendor.QIACUITY_DPCR, + # We want to collect more test cases for this parser before marking as ready. + Vendor.MABTECH_APEX, } diff --git a/tests/parsers/mabtech_apex/__init__.py b/tests/parsers/mabtech_apex/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/parsers/mabtech_apex/mabtech_apex_to_allotrope_test.py b/tests/parsers/mabtech_apex/mabtech_apex_to_allotrope_test.py new file mode 100644 index 000000000..11900da28 --- /dev/null +++ b/tests/parsers/mabtech_apex/mabtech_apex_to_allotrope_test.py @@ -0,0 +1,19 @@ +import pytest + +from allotropy.parser_factory import Vendor +from allotropy.testing.utils import from_file, validate_contents + +VENDOR_TYPE = Vendor.MABTECH_APEX + + +@pytest.mark.mabtech +@pytest.mark.parametrize( + "output_file", + ["mabtech_apex_example_single_plate"], +) +def test_parse_mabtech_apex_to_asm_contents(output_file: str) -> None: + test_filepath = f"tests/parsers/mabtech_apex/testdata/{output_file}.xlsx" + expected_filepath = test_filepath.replace(".xlsx", ".json") + allotrope_dict = from_file(test_filepath, VENDOR_TYPE) + + validate_contents(allotrope_dict, expected_filepath) diff --git a/tests/parsers/mabtech_apex/testdata/mabtech_apex_example_single_plate.json b/tests/parsers/mabtech_apex/testdata/mabtech_apex_example_single_plate.json new file mode 100644 index 000000000..b72e2eea3 --- /dev/null +++ b/tests/parsers/mabtech_apex/testdata/mabtech_apex_example_single_plate.json @@ -0,0 +1,1748 @@ +{ + "$asm.manifest": "http://purl.allotrope.org/manifests/plate-reader/BENCHLING/2023/09/plate-reader.manifest", + "plate reader aggregate document": { + "plate reader document": [ + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:35+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_0", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_B1", + "location identifier": "B1", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_1", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_2", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 2.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_3", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 386.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_4", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 772.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:39+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_5", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_B2", + "location identifier": "B2", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_6", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_7", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 3.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_8", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 790.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_9", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 2372.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:40+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_10", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_B3", + "location identifier": "B3", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_11", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_12", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 1256.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_13", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 1233.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_14", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 1549855.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:45+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_15", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_B4", + "location identifier": "B4", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_16", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_17", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 1206.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_18", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 1294.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_19", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 1560641.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:46+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_20", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_B5", + "location identifier": "B5", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_21", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_22", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 382.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_23", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 655.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_24", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 250340.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:50+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_25", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_B6", + "location identifier": "B6", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_26", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_27", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 369.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_28", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 690.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_29", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 254896.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:36+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_30", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_C1", + "location identifier": "C1", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_31", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_32", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 7.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_33", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 1183.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_34", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 8285.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:38+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_35", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_C2", + "location identifier": "C2", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_36", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_37", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 8.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_38", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 1337.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_39", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 10696.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:41+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_40", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_C3", + "location identifier": "C3", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_41", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_42", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 1406.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_43", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 1274.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_44", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 1791268.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:44+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_45", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_C4", + "location identifier": "C4", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_46", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_47", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 1394.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_48", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 1348.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_49", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 1879934.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:46+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_50", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_C5", + "location identifier": "C5", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_51", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_52", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 864.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_53", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 1003.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_54", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 866855.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:49+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_55", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_C6", + "location identifier": "C6", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_56", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_57", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 927.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_58", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 994.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_59", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 921827.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:37+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_60", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_D1", + "location identifier": "D1", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_61", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_62", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_63", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_64", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:37+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_65", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_D2", + "location identifier": "D2", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_66", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_67", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_68", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_69", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:42+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_70", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_D3", + "location identifier": "D3", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_71", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_72", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 1226.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_73", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 1500.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_74", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 1839186.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:43+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_75", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_D4", + "location identifier": "D4", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_76", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_77", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 1190.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_78", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 1469.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_79", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 1748345.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:47+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_80", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_D5", + "location identifier": "D5", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_81", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_82", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 1179.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_83", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 958.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_84", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 1129846.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:48+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_85", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_D6", + "location identifier": "D6", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_86", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_87", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 1111.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_88", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 959.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_89", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 1066341.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:52+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_90", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_H7", + "location identifier": "H7", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_91", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_92", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_93", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_94", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:53+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_95", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_H8", + "location identifier": "H8", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_96", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_97", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_98", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_99", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:53+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_100", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_H9", + "location identifier": "H9", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_101", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_102", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_103", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_104", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:54+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_105", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_H10", + "location identifier": "H10", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_106", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_107", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_108", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_109", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:55+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_110", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_H11", + "location identifier": "H11", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_111", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_112", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_113", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_114", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + }, + { + "measurement aggregate document": { + "measurement time": "2024-01-29T09:06:56+00:00", + "plate well count": { + "value": 96.0, + "unit": "#" + }, + "measurement document": [ + { + "measurement identifier": "MABTECH_APEX_TEST_ID_115", + "device control aggregate document": { + "device control document": [ + { + "device type": "imager", + "detection type": "optical-imaging", + "exposure duration setting": { + "value": 13400.0, + "unit": "ms" + }, + "illumination setting": { + "value": 400.0, + "unit": "(unitless)" + } + } + ] + }, + "sample document": { + "sample identifier": "mabtech_apex_example1_H12", + "location identifier": "H12", + "well plate identifier": "mabtech_apex_example1" + }, + "processed data aggregate document": { + "processed data document": [ + { + "processed data identifier": "MABTECH_APEX_TEST_ID_116", + "image feature aggregate document": { + "image feature document": [ + { + "image feature identifier": "MABTECH_APEX_TEST_ID_117", + "image feature name": "Spot Forming Units (SFU)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_118", + "image feature name": "Average Relative Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + }, + { + "image feature identifier": "MABTECH_APEX_TEST_ID_119", + "image feature name": "Sum of Spot Volume (RSV)", + "image feature result": { + "value": 0.0, + "unit": "(unitless)" + } + } + ] + } + } + ] + } + } + ], + "container type": "well plate" + }, + "analyst": "Admin" + } + ], + "device system document": { + "device identifier": "N/A", + "model number": "Iris", + "equipment serial number": "0" + }, + "data system document": { + "file name": "mabtech_apex_example_single_plate.xlsx", + "UNC path": "mabtech_apex_example_path", + "software name": "Apex", + "software version": "1.1.58.127", + "ASM converter name": "allotropy", + "ASM converter version": "0.1.30" + } + } +} diff --git a/tests/parsers/mabtech_apex/testdata/mabtech_apex_example_single_plate.xlsx b/tests/parsers/mabtech_apex/testdata/mabtech_apex_example_single_plate.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..881d1f0c22a81baf72735fe385b4509438f951cd GIT binary patch literal 42465 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 Date: Tue, 18 Jun 2024 09:04:25 -0400 Subject: [PATCH 8/8] chore: Fix changelog merge mistake (#467) --- CHANGELOG.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b854f7924..c2a6250ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,12 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added -<<<<<<< mabtech_apex - Add Mabtech Apex adapter -======= - Added support for parsing Vi-Cell XR txt files - Add Electrophoresis BENCHLING/2024/06 schema. ->>>>>>> main - Added github enforcement that CHANGELOG.md is updated - Added test files Agilent TapeStation Analysis