diff --git a/Makefile b/Makefile index 6765eddbf9..73f22d89a5 100644 --- a/Makefile +++ b/Makefile @@ -150,7 +150,7 @@ test-schema: -d tmp $(SOURCE_SCHEMA_PATH) test-python: - $(RUN) python -m unittest discover + $(RUN) pytest $(RUN) python -m doctest nmdc_schema/nmdc_data.py $(RUN) python -m doctest nmdc_schema/id_helpers.py $(RUN) python -m doctest src/scripts/make_typecode_to_class_map.py diff --git a/assets/yq-for-mixs_subset_modified.txt b/assets/yq-for-mixs_subset_modified.txt index 6e812a923d..b71ec4296d 100644 --- a/assets/yq-for-mixs_subset_modified.txt +++ b/assets/yq-for-mixs_subset_modified.txt @@ -551,6 +551,8 @@ make: *** [Makefile:102: gen-project] Error 1 '.slots.occup_samp.annotations.storage_units = {"tag": "storage_units", "value": "1"}' '.slots.freq_clean.annotations.storage_units = {"tag": "storage_units", "value": "1/d"}' '.slots.freq_cook.annotations.storage_units = {"tag": "storage_units", "value": "1/d"}' +'.slots.exp_pipe.annotations.storage_units = {"tag": "storage_units", "value": "1"}' +'.slots.occup_density_samp.annotations.storage_units = {"tag": "storage_units", "value": "1/[sft_i]"}' # Units alignment excuses for problematic MIxS specifications '.slots.efficiency_percent.annotations.units_alignment_excuse = {"tag": "units_alignment_excuse", "value": "mixs_inconsistent"}' @@ -560,8 +562,6 @@ make: *** [Makefile:102: gen-project] Error 1 '.slots.api.annotations.units_alignment_excuse = {"tag": "units_alignment_excuse", "value": "non_ucum_unit"}' # Units alignment excuses for MIxS slots with zero occurrences in production data -'.slots.exp_pipe.annotations.units_alignment_excuse = {"tag": "units_alignment_excuse", "value": "pending_analysis"}' -'.slots.occup_density_samp.annotations.units_alignment_excuse = {"tag": "units_alignment_excuse", "value": "pending_analysis"}' '.slots.soil_text_measure.annotations.units_alignment_excuse = {"tag": "units_alignment_excuse", "value": "pending_analysis"}' # Complex measurement slots that combine numeric and text data diff --git a/pyproject.toml b/pyproject.toml index 1837828e57..a15d0a3de6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -148,15 +148,13 @@ schema-pattern-linting = "src.scripts.schema_pattern_linting:main" schema-view-relation-graph = "src.scripts.schema_view_relation_graph:cli" scrutinize-elements = "src.scripts.scrutinize_elements:process_schema_elements" slot-range-type-reporter = "src.scripts.slot_range_type_reporter:cli" -# Units analysis CLI tools (consolidated in units/ directory) -units-schema-extract = "units.scripts.schema_extract_preferred_units:main" -units-schema-convert = "units.scripts.schema_convert_to_ucum:main" -units-schema-generate = "units.scripts.schema_generate_yq_commands:main" -units-testdata-extract = "units.scripts.testdata_extract_quantity_values:main" -units-testdata-check = "units.scripts.testdata_check_has_unit:main" -units-ucum-validate = "units.scripts.ucum_validate_units:main" -units-mongodb-analyze = "units.scripts.mongodb_analyze_units:main" -units-schema-extract-slot-unit-pairs = "units.scripts.schema_expand_storage_units:main" +# Units analysis uses yq queries in units/Makefile (Python scripts removed) + +[tool.pytest.ini_options] +# Only run tests in tests/ directory to match original unittest discover behavior +# (excludes MongoDB integration tests and other tests outside tests/) +# Module independence is checked by check_schema_self_containment.py instead +testpaths = ["tests"] [tool.deptry] extend_exclude = [ diff --git a/src/data/valid/Biosample-possibly-exhaustive.yaml b/src/data/valid/Biosample-possibly-exhaustive.yaml index 2a4dbeb6fd..dbff0e7a31 100644 --- a/src/data/valid/Biosample-possibly-exhaustive.yaml +++ b/src/data/valid/Biosample-possibly-exhaustive.yaml @@ -476,7 +476,7 @@ exp_duct: exp_pipe: type: nmdc:QuantityValue has_raw_value: xxx - has_unit: m2 + has_unit: '1' experimental_factor: type: nmdc:ControlledTermValue has_raw_value: unconstrained text, unlike the MIxS environmental triad @@ -864,7 +864,7 @@ number_resident: occup_density_samp: # Float type: nmdc:QuantityValue has_raw_value: xxx - has_unit: '1' + has_unit: '1/[sft_i]' occup_document: estimate occup_samp: type: nmdc:QuantityValue diff --git a/src/data/valid/Database-interleaved.yaml b/src/data/valid/Database-interleaved.yaml index e983027153..ef85c8c978 100644 --- a/src/data/valid/Database-interleaved.yaml +++ b/src/data/valid/Database-interleaved.yaml @@ -1904,7 +1904,7 @@ biosample_set: exp_pipe: type: nmdc:QuantityValue has_raw_value: xxx - has_unit: m2 + has_unit: '1' experimental_factor: type: nmdc:ControlledTermValue has_raw_value: unconstrained text, unlike the MIxS environmental triad @@ -2292,7 +2292,7 @@ biosample_set: occup_density_samp: # Float type: nmdc:QuantityValue has_raw_value: xxx - has_unit: '1' + has_unit: '1/[sft_i]' occup_document: estimate occup_samp: type: nmdc:QuantityValue diff --git a/src/schema/attribute_values.yaml b/src/schema/attribute_values.yaml index 54b2a96a9f..667f2e9a11 100644 --- a/src/schema/attribute_values.yaml +++ b/src/schema/attribute_values.yaml @@ -770,6 +770,12 @@ enums: - per day - daily frequency description: The Unified Code for Units of Measure (UCUM) representation of per day (frequency). + "1/[sft_i]": + title: per square foot + aliases: + - per square foot + - occupants per square foot + description: The Unified Code for Units of Measure (UCUM) representation of per square foot. "kHz": aliases: - kHz diff --git a/src/schema/core.yaml b/src/schema/core.yaml index bb7f4d6d3e..d1e2d0a457 100644 --- a/src/schema/core.yaml +++ b/src/schema/core.yaml @@ -1524,10 +1524,11 @@ slots: range: SubstanceRoleEnum description: The role of a substance in a process concentration: + abstract: true range: QuantityValue description: The concentration of a substance used in a process - annotations: - units_alignment_excuse: pending_analysis + comments: + - Union of child units from source_concentration and final_concentration is %|mmol/L|umol/L|mg/L|g/L source_concentration: is_a: concentration description: When solutions A (containing substance X) and B are combined together, this slot captures the concentration of X in solution A diff --git a/src/schema/mixs.yaml b/src/schema/mixs.yaml index a3172384b7..f5e9a115e6 100644 --- a/src/schema/mixs.yaml +++ b/src/schema/mixs.yaml @@ -3955,9 +3955,9 @@ slots: occurrence: tag: occurrence value: '1' - units_alignment_excuse: - tag: units_alignment_excuse - value: pending_analysis + storage_units: + tag: storage_units + value: "1" description: The number of exposed pipes in the room title: exposed pipes examples: @@ -6334,7 +6334,7 @@ slots: occurrence: tag: occurrence value: m - description: Structured miscellaneous property assertions for this Biosample. Use when a value cannot cleanly fit an existing, policy-governed slot. + description: Structured miscellaneous property assertions. Use when a value cannot cleanly fit an existing, policy-governed slot. title: miscellaneous parameter examples: - value: Bicarbonate ion concentration;2075 micromole per kilogram @@ -6579,9 +6579,9 @@ slots: occurrence: tag: occurrence value: '1' - units_alignment_excuse: - tag: units_alignment_excuse - value: pending_analysis + storage_units: + tag: storage_units + value: 1/[sft_i] description: Average number of occupants at time of sampling per square footage title: occupant density at sampling examples: diff --git a/src/schema/nmdc.yaml b/src/schema/nmdc.yaml index 31d3d9481f..413610db8e 100644 --- a/src/schema/nmdc.yaml +++ b/src/schema/nmdc.yaml @@ -1037,9 +1037,9 @@ enums: slots: biomaterial_purity: + abstract: true range: QuantityValue - annotations: - units_alignment_excuse: pending_analysis + description: A measure of the purity of a biomaterial sample generates_calibration: range: CalibrationInformation diff --git a/tests/test_units_alignment.py b/tests/test_units_alignment.py index 80bcf0a563..ad0f6183c9 100644 --- a/tests/test_units_alignment.py +++ b/tests/test_units_alignment.py @@ -18,37 +18,52 @@ class TestUnitsAlignment(unittest.TestCase): def test_quantityvalue_slots_have_storage_units_or_excuse(self): """Test that ALL QuantityValue slots have either storage_units or units_alignment_excuse. - - Expanded constraint: All QuantityValue slots must have storage_units OR units_alignment_excuse. + + Expanded constraint: All concrete QuantityValue slots must have storage_units OR units_alignment_excuse. This ensures complete coverage of unit constraints for data validation. - + + Abstract slots MUST NOT have storage_units or units_alignment_excuse since they are not + directly instantiated - only their concrete children are used in actual data. + Consumer behavior: units_alignment_excuse means "skip storage_units validation for documented reason". """ schema_view = SchemaView(SCHEMA_FILE) problematic_slots = [] - + abstract_slots_with_annotations = [] + for slot_name in schema_view.all_slots(): slot = schema_view.get_slot(slot_name) if not slot: continue - + # Check if slot has QuantityValue range if slot.range != 'QuantityValue': continue - + annotations = slot.annotations or {} has_storage_units = 'storage_units' in annotations has_units_excuse = 'units_alignment_excuse' in annotations - - # All QuantityValue slots must have either storage_units or excuse + + # Abstract slots MUST NOT have storage_units or units_alignment_excuse + if slot.abstract: + if has_storage_units or has_units_excuse: + abstract_slots_with_annotations.append(slot_name) + continue + + # All concrete QuantityValue slots must have either storage_units or excuse if not has_storage_units and not has_units_excuse: problematic_slots.append(slot_name) - + # Sort for consistent output problematic_slots.sort() - + abstract_slots_with_annotations.sort() + + self.assertEqual([], abstract_slots_with_annotations, + msg=f"Found {len(abstract_slots_with_annotations)} abstract QuantityValue slots with storage_units or units_alignment_excuse annotations. " + f"Abstract slots should not have these annotations.") + self.assertEqual([], problematic_slots, - msg=f"Found {len(problematic_slots)} QuantityValue slots missing both storage_units and units_alignment_excuse annotations") + msg=f"Found {len(problematic_slots)} concrete QuantityValue slots missing both storage_units and units_alignment_excuse annotations") def test_units_alignment_excuse_values_are_valid(self): """Test that units_alignment_excuse annotations use approved excuse values.""" diff --git a/units/Makefile b/units/Makefile index 456d0ff333..ae7cd5798e 100644 --- a/units/Makefile +++ b/units/Makefile @@ -15,32 +15,27 @@ clean: # Clean and rebuild everything rebuild: clean all -# Extract preferred_unit annotations from schema (fast: ~1-2 seconds) -output/schema_preferred_units.tsv: ../nmdc_schema/nmdc_materialized_patterns.yaml - @mkdir -p output - poetry run units-schema-extract --schema-file $< --output $@ - -# Convert preferred units to UCUM notation (fast: ~1-2 seconds) -output/schema_ucum_input.tsv output/schema_ucum_detailed.tsv: output/schema_preferred_units.tsv - poetry run units-schema-convert --input $< --output output/schema_ucum_input.tsv --detailed output/schema_ucum_detailed.tsv - -# Generate yq commands for storage_units annotations (fast: ~1-2 seconds) -output/yq_commands_single_unit.txt output/yq_commands_multi_unit.txt: output/schema_ucum_input.tsv - poetry run units-schema-generate --input $< --output-dir output +# Removed misleading preferred_unit analysis targets (schema_extract, schema_convert, schema_generate) +# These reported "problem units" that were already addressed by storage_units annotations +# See: https://github.com/microbiomedata/nmdc-schema/issues/2687 # Production data validation (uses MongoDB YAML dump) -# ⚠️ SLOWEST TARGET: Processes 32,000+ QuantityValue instances from GB-sized MongoDB dump +# ⚠️ UNIMPLEMENTED: Script units-production-validate does not exist +# TODO: Create units/scripts/production_validate.py and add entry point to pyproject.toml +# Expected implementation: Processes 32,000+ QuantityValue instances from GB-sized MongoDB dump # Expected time: Minutes to hours depending on dump size +# # Set SCHEMA_FILE to control which schema version to validate against: # ENV=dev (default): ../nmdc_schema/nmdc_materialized_patterns.yaml (current development schema) # ENV=prod: ../local/nmdc_schema_last_release.yaml (latest release schema) SCHEMA_FILE ?= $(if $(filter prod,$(ENV)),../local/nmdc_schema_last_release.yaml,../nmdc_schema/nmdc_materialized_patterns.yaml) -slow-outputs/production_validation_results.tsv: ../local/mongo_via_api_as_unvalidated_nmdc_database.yaml - @mkdir -p slow-outputs - poetry run units-production-validate --input $< --output $@ --schema-file $(SCHEMA_FILE) - @echo "Note: Requires MongoDB dump from: make local/mongo_via_api_as_unvalidated_nmdc_database.yaml" +# DISABLED - missing script units-production-validate +# slow-outputs/production_validation_results.tsv: ../local/mongo_via_api_as_unvalidated_nmdc_database.yaml +# @mkdir -p slow-outputs +# poetry run units-production-validate --input $< --output $@ --schema-file $(SCHEMA_FILE) +# @echo "Note: Requires MongoDB dump from: make local/mongo_via_api_as_unvalidated_nmdc_database.yaml" # Report slots with units excuses (very fast: <1 second) @@ -53,32 +48,14 @@ output/user_friendly_units.tsv: $(SCHEMA_FILE) @mkdir -p output yq eval '.enums.UnitEnum.permissible_values | to_entries | map(select(.value | has("title"))) | .[] | .key + " " + .value.title' $< > $@ -# Extract slot-to-storage-unit pairs (expands pipe-separated values) -output/schema_storage_units_expanded.tsv: $(SCHEMA_FILE) - poetry run units-schema-extract-slot-unit-pairs --schema-file $< --output $@ - -# Legacy MongoDB workflow (requires external production data) (moderate: ~30 seconds) -output/mongodb_analysis_results.csv: semi-static-inputs/mongodb-slots-to-units.csv - @mkdir -p output - poetry run units-mongodb-analyze --input $< --output $@ - -# Legacy MongoDB unit validation analysis (uses production SPARQL query results) -# Note: Analyzes semi-static-inputs/mongodb-slots-to-units.csv from production RDF/SPARQL queries - - -# Python script targets - newly consolidated units analysis tools -# Validate UCUM compliance of units from test data (moderate: ~10-30 seconds) -output/ucum_validation_results.csv: output/testdata_quantity_values.tsv - poetry run units-ucum-validate --input $< --output $@ - -# Check QuantityValue has_unit completeness (very fast: ~1-2 seconds) -output/testdata_has_unit_check.tsv: ../src/data/valid/Biosample-possibly-exhaustive.yaml - poetry run units-testdata-check --file-path $< --output $@ - -# Extract QuantityValue structures from test data (very fast: ~1-2 seconds) -output/testdata_quantity_values.tsv: ../src/data/valid/Biosample-possibly-exhaustive.yaml - @mkdir -p output - poetry run units-testdata-extract --input $< --output $@ +# All Python script targets removed - they produced outputs with no consumers +# Deleted scripts: +# - testdata_extract_quantity_values.py (orphaned after UCUM validator removal) +# - testdata_check_has_unit.py (better tested with pytest) +# - mongodb_analyze_units.py (stale data, no consumers) +# - schema_expand_storage_units.py (no consumers) +# +# For UCUM validation, use: pytest tests/test_has_unit_enum.py (uses ucumvert) # yq query targets from STORAGE_UNITS_STATUS.md analysis (all fast: 1-3 seconds each) @@ -105,8 +82,8 @@ output/schema_qv_storage_counts.tsv: $(SCHEMA_FILE) @echo "qv_slots_without_storage_units $$(yq '.slots | to_entries | map(select(.value.range == "QuantityValue")) | .[] | .key + " | " + (.value.annotations.storage_units.value // "MISSING")' $< | grep -c "MISSING")" >> $@ @echo "qv_slots_total $$(yq '.slots | to_entries | map(select(.value.range == "QuantityValue")) | length' $<)" >> $@ -# Fast target - comprehensive analysis pipeline -fast: output/schema_preferred_units.tsv output/schema_ucum_input.tsv output/schema_ucum_detailed.tsv output/yq_commands_single_unit.txt output/yq_commands_multi_unit.txt output/testdata_quantity_values.tsv output/ucum_validation_results.csv output/schema_qv_with_storage.txt output/schema_qv_without_storage.txt output/schema_qv_complete_table.txt output/schema_qv_storage_counts.tsv output/testdata_has_unit_check.tsv output/schema_units_excuses.tsv output/user_friendly_units.tsv output/schema_storage_units_expanded.tsv +# Fast target - comprehensive analysis pipeline (yq queries only) +fast: output/schema_qv_with_storage.txt output/schema_qv_without_storage.txt output/schema_qv_complete_table.txt output/schema_qv_storage_counts.tsv output/schema_units_excuses.tsv output/user_friendly_units.tsv # Clean all output files (preserves slow-outputs/ directory) clean-fast: @@ -120,11 +97,8 @@ help: @echo "" @echo "Key Targets:" @echo " all - Alias for fast (comprehensive analysis)" - @echo " fast - Comprehensive analysis except slow production validation" + @echo " fast - All fast targets (schema + testdata analysis)" @echo " clean - Remove all generated files" @echo " clean-fast - Clean output/ (preserves slow-outputs/)" @echo "" - @echo "Slow Targets:" - @echo " slow-outputs/production_validation_results.tsv - Production data validation" - @echo "" - @echo "Environment: ENV=dev|prod (controls schema version for production validation)" \ No newline at end of file + @echo "Note: MongoDB production validation target is currently disabled (missing script)" \ No newline at end of file diff --git a/units/output/schema_preferred_units.tsv b/units/output/schema_preferred_units.tsv deleted file mode 100644 index 0ee63b7176..0000000000 --- a/units/output/schema_preferred_units.tsv +++ /dev/null @@ -1,226 +0,0 @@ -slot_name context class_name preferred_unit description range examples -abs_air_humidity global gram per gram, kilogram per kilogram, kilogram, pound Actual mass of water vapor - mh20 - present in the air water vapor mixture QuantityValue 9 gram per gram -agrochem_addition global gram, mole per liter, milligram per liter Addition of fertilizers, pesticides, etc. - amount and time of applications TextValue roundup;5 milligram per liter;2018-06-21 -air_PM_concen global micrograms per cubic meter Concentration of substances that remain suspended in the air, and comprise mixtures of organic and inorganic substances (PM10 and PM2.5); can report multiple PM's by entering numeric values preceded by name of PM TextValue PM2.5;10 microgram per cubic meter -air_temp global degree Celsius Temperature of the air at the time of sampling QuantityValue 20 degree Celsius -air_temp_regm global meter Information about treatment involving an exposure to varying temperatures; should include the temperature, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include different temperature regimens TextValue 25 degree Celsius;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -al_sat global percentage Aluminum saturation (esp. For tropical soils) QuantityValue -alkalinity global milliequivalent per liter, milligram per liter Alkalinity, the ability of a solution to neutralize acids to the equivalence point of carbonate or bicarbonate QuantityValue 50 milligram per liter -alkyl_diethers global mole per liter Concentration of alkyl diethers QuantityValue 0.005 mole per liter -aminopept_act global mole per liter per hour Measurement of aminopeptidase activity QuantityValue 0.269 mole per liter per hour -ammonium global micromole per liter, milligram per liter, parts per million Concentration of ammonium in the sample QuantityValue 1.5 milligram per liter -ammonium_nitrogen global mg/kg Concentration of ammonium nitrogen in the sample QuantityValue 2.3 mg/kg -amount_light global lux, lumens per square meter The unit of illuminance and luminous emittance, measuring luminous flux per unit area QuantityValue -annual_precpt global millimeter The average of all annual precipitation values known, or an estimated equivalent value derived by such methods as regional indexes or Isohyetal maps. QuantityValue -annual_temp global degree Celsius Mean annual temperature QuantityValue 12.5 degree Celsius -antibiotic_regm global milligram Information about treatment involving antibiotic administration; should include the name of antibiotic, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple antibiotic regimens TextValue penicillin;5 milligram;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -api global degrees API API gravity is a measure of how heavy or light a petroleum liquid is compared to water (source: https://en.wikipedia.org/wiki/API_gravity) (e.g. 31.1¬∞ API) QuantityValue -aromatics_pc global percent Saturate, Aromatic, Resin and Asphaltene¬†(SARA) is an analysis method that divides¬†crude oil¬†components according to their polarizability and polarity. There are three main methods to obtain SARA results. The most popular one is known as the Iatroscan TLC-FID and is referred to as IP-143 (source: https://en.wikipedia.org/wiki/Saturate,_aromatic,_resin_and_asphaltene) TextValue -asphaltenes_pc global percent Saturate, Aromatic, Resin and Asphaltene¬†(SARA) is an analysis method that divides¬†crude oil¬†components according to their polarizability and polarity. There are three main methods to obtain SARA results. The most popular one is known as the Iatroscan TLC-FID and is referred to as IP-143 (source: https://en.wikipedia.org/wiki/Saturate,_aromatic,_resin_and_asphaltene) TextValue -avg_dew_point global degree Celsius The average of dew point measures taken at the beginning of every hour over a 24 hour period on the sampling day QuantityValue 25.5 degree Celsius -avg_temp global degree Celsius The average of temperatures taken at the beginning of every hour over a 24 hour period on the sampling day QuantityValue 12.5 degree Celsius -bac_prod global milligram per cubic meter per day Bacterial production in the water column measured by isotope uptake QuantityValue 5 milligram per cubic meter per day -bac_resp global milligram per cubic meter per day, micromole oxygen per liter per hour Measurement of bacterial respiration in the water column QuantityValue 300 micromole oxygen per liter per hour -bacteria_carb_prod global nanogram per hour Measurement of bacterial carbon production QuantityValue 2.53 microgram per liter per hour -barometric_press global millibar Force per unit area exerted against a surface by the weight of air above that surface QuantityValue 5 millibar -benzene global milligram per liter, parts per million Concentration of benzene in the sample QuantityValue -biochem_oxygen_dem global milligram per liter Amount of dissolved oxygen needed by aerobic biological organisms in a body of water to break down organic material present in a given water sample at certain temperature over a specific time period QuantityValue -biocide_admin_method global milligram per liter Method of biocide administration (dose, frequency, duration, time elapsed between last biociding and sampling) (e.g. 150 mg/l; weekly; 4 hr; 3 days) TextValue -biomass global ton, kilogram, gram Amount of biomass; should include the name for the part of biomass measured, e.g. Microbial, total. Can include multiple measurements TextValue total;20 gram -bishomohopanol global microgram per liter, microgram per gram Concentration of bishomohopanol QuantityValue 14 microgram per liter -blood_press_diast global millimeter mercury Resting diastolic blood pressure, measured as mm mercury QuantityValue -blood_press_syst global millimeter mercury Resting systolic blood pressure, measured as mm mercury QuantityValue -bromide global parts per million Concentration of bromide QuantityValue 0.05 parts per million -built_struc_age global year The age of the built structure since construction QuantityValue 15 -calcium global milligram per liter, micromole per liter, parts per million Concentration of calcium in the sample QuantityValue 0.2 micromole per liter -carb_dioxide global micromole per liter, parts per million Carbon dioxide (gas) amount or concentration at the time of sampling QuantityValue 410 parts per million -carb_monoxide global micromole per liter, parts per million Carbon monoxide (gas) amount or concentration at the time of sampling QuantityValue 0.1 parts per million -ceil_area global square meter The area of the ceiling space within the room QuantityValue 25 square meter -ceil_thermal_mass global joule per degree Celsius The ability of the ceiling to provide inertia against temperature fluctuations. Generally this means concrete that is exposed. A metal deck that supports a concrete slab will act thermally as long as it is exposed to room air flow QuantityValue -chem_mutagen global milligram per liter Treatment involving use of mutagens; should include the name of mutagen, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple mutagen regimens TextValue nitrous acid;0.5 milligram per liter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -chem_oxygen_dem global milligram per liter A measure of the capacity of water to consume oxygen during the decomposition of organic matter and the oxidation of inorganic chemicals such as ammonia and nitrite QuantityValue -chem_treat_method global milligram per liter Method of chemical administration(dose, frequency, duration, time elapsed between administration and sampling) (e.g. 50 mg/l; twice a week; 1 hr; 0 days) string -chloride global milligram per liter, parts per million Concentration of chloride in the sample QuantityValue 5000 milligram per liter -chlorophyll global milligram per cubic meter, microgram per liter Concentration of chlorophyll QuantityValue 5 milligram per cubic meter -conduc global milliSiemens per centimeter Electrical conductivity of water QuantityValue 10 milliSiemens per centimeter -density global gram per cubic meter, gram per cubic centimeter Density of the sample, which is its mass per unit volume (aka volumetric mass density) QuantityValue 1000 kilogram per cubic meter -dew_point global degree Celsius The temperature to which a given parcel of humid air must be cooled, at constant barometric pressure, for water vapor to condense into water. QuantityValue 22 degree Celsius -diether_lipids global nanogram per liter Concentration of diether lipids; can include multiple types of diether lipids TextValue 0.2 nanogram per liter -diss_carb_dioxide global micromole per liter, milligram per liter Concentration of dissolved carbon dioxide in the sample or liquid portion of the sample QuantityValue 5 milligram per liter -diss_hydrogen global micromole per liter Concentration of dissolved hydrogen QuantityValue 0.3 micromole per liter -diss_inorg_carb global microgram per liter, milligram per liter, parts per million Dissolved inorganic carbon concentration in the sample, typically measured after filtering the sample using a 0.45 micrometer filter QuantityValue 2059 micromole per kilogram -diss_inorg_nitro global microgram per liter, micromole per liter Concentration of dissolved inorganic nitrogen QuantityValue 761 micromole per liter -diss_inorg_phosp global microgram per liter, milligram per liter, parts per million Concentration of dissolved inorganic phosphorus in the sample QuantityValue 56.5 micromole per liter -diss_iron global milligram per liter Concentration of dissolved iron in the sample QuantityValue -diss_org_carb global micromole per liter, milligram per liter Concentration of dissolved organic carbon in the sample, liquid portion of the sample, or aqueous phase of the fluid QuantityValue 197 micromole per liter -diss_org_nitro global microgram per liter, milligram per liter Dissolved organic nitrogen concentration measured as; total dissolved nitrogen - NH4 - NO3 - NO2 QuantityValue 0.05 micromole per liter -diss_oxygen global micromole per kilogram, milligram per liter Concentration of dissolved oxygen QuantityValue 175 micromole per kilogram -diss_oxygen_fluid global micromole per kilogram, milligram per liter Concentration of dissolved oxygen in the oil field produced fluids as it contributes to oxgen-corrosion and microbial activity (e.g. Mic). QuantityValue -door_size global square meter The size of the door QuantityValue 2.5 square meter -down_par global microEinstein per square meter per second, microEinstein per square centimeter per second Visible waveband radiance and irradiance measurements in the water column QuantityValue 28.71 microEinstein per square meter per second -efficiency_percent global micromole per liter Percentage of volatile solids removed from the anaerobic digestor QuantityValue -emulsions global gram per liter Amount or concentration of substances such as paints, adhesives, mayonnaise, hair colorants, emulsified oils, etc.; can include multiple emulsion types TextValue -ethylbenzene global milligram per liter, parts per million Concentration of ethylbenzene in the sample QuantityValue -exp_duct global square meter The amount of exposed ductwork in the room QuantityValue -fertilizer_regm global gram, mole per liter, milligram per liter Information about treatment involving the use of fertilizers; should include the name of fertilizer, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple fertilizer regimens TextValue urea;0.6 milligram per liter;R2/2018-05-11:T14:30/2018-05-11T19:30/P1H30M -floor_age global years, weeks, days The time period since installment of the carpet or flooring QuantityValue -floor_area global square meter The area of the floor space within the room QuantityValue -floor_thermal_mass global joule per degree Celsius The ability of the floor to provide inertia against temperature fluctuations QuantityValue -fluor global milligram chlorophyll a per cubic meter, volts Raw or converted fluorescence of water QuantityValue 2.5 volts -fungicide_regm global gram, mole per liter, milligram per liter Information about treatment involving use of fungicides; should include the name of fungicide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple fungicide regimens TextValue bifonazole;1 mole per liter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -gaseous_environment global micromole per liter Use of conditions with differing gaseous environments; should include the name of gaseous compound, amount administered, treatment duration, interval and total experimental duration; can include multiple gaseous environment regimens TextValue nitric oxide;0.5 micromole per liter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -gaseous_substances global micromole per liter Amount or concentration of substances such as hydrogen sulfide, carbon dioxide, methane, etc.; can include multiple substances TextValue -glucosidase_act global mol per liter per hour Measurement of glucosidase activity QuantityValue 5 mol per liter per hour -gravity global meter per square second, g Information about treatment involving use of gravity factor to study various types of responses in presence, absence or modified levels of gravity; treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple treatments TextValue 12 g;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -growth_hormone_regm global gram, mole per liter, milligram per liter Information about treatment involving use of growth hormones; should include the name of growth hormone, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple growth hormone regimens TextValue abscisic acid;0.5 milligram per liter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -hcr_fw_salinity global milligram per liter Original formation water salinity (prior to secondary recovery e.g. Waterflooding) expressed as TDS QuantityValue -hcr_pressure global atmosphere, kilopascal Original pressure of the hydrocarbon resource TextValue -hcr_temp global degree Celsius Original temperature of the hydrocarbon resource TextValue 150-295 degree Celsius -heavy_metals global microgram per gram Heavy metals present in the sequenced sample and their concentrations. For multiple heavy metals and concentrations, add multiple copies of this field. TextValue mercury;0.09 micrograms per gram -height_carper_fiber global centimeter The average carpet fiber height in the indoor environment QuantityValue -herbicide_regm global gram, mole per liter, milligram per liter Information about treatment involving use of herbicides; information about treatment involving use of growth hormones; should include the name of herbicide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens TextValue atrazine;10 milligram per liter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -host_age global year, day, hour Age of host at the time of sampling; relevant scale depends on species and study, e.g. Could be seconds for amoebae or centuries for trees QuantityValue 10 days -host_body_temp global degree Celsius Core body temperature of the host when sample was collected QuantityValue 15 degree Celsius -host_dry_mass global kilogram, gram Measurement of dry mass QuantityValue 500 gram -host_height global centimeter, millimeter, meter The height of subject QuantityValue 0.1 meter -host_length global centimeter, millimeter, meter The length of subject QuantityValue 1 meter -host_tot_mass global kilogram, gram Total mass of the host at collection, the unit depends on host QuantityValue 2500 gram -host_wet_mass global kilogram, gram Measurement of wet mass QuantityValue 1500 gram -humidity global gram per cubic meter Amount of water vapour in the air, at the time of sampling QuantityValue 25 gram per cubic meter -humidity_regm global gram per cubic meter Information about treatment involving an exposure to varying degree of humidity; information about treatment involving use of growth hormones; should include amount of humidity administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens TextValue 25 gram per cubic meter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -indust_eff_percent global percentage Percentage of industrial effluents received by wastewater treatment plant QuantityValue -inorg_particles global mole per liter, milligram per liter Concentration of particles such as sand, grit, metal particles, ceramics, etc.; can include multiple particles TextValue -inside_lux global kilowatt per square metre The recorded value at sampling time (power density) QuantityValue -iwf global percent Proportion of the produced fluids derived from injected water at the time of sampling. (e.g. 87%) QuantityValue -lbc_thirty global ppm CaCO3/pH lime buffer capacity, determined after 30 minute incubation QuantityValue 543 mg/kg -lbceq global ppm CaCO3/pH lime buffer capacity, determined at equilibrium after 5 day incubation QuantityValue 1575 mg/kg -light_intensity global lux Measurement of light intensity QuantityValue 0.3 lux -light_regm global lux; micrometer, nanometer, angstrom Information about treatment(s) involving exposure to light, including both light intensity and quality. TextValue incandescant light;10 lux;450 nanometer -magnesium global mole per liter, milligram per liter, parts per million, micromole per kilogram Concentration of magnesium in the sample QuantityValue 52.8 micromole per kilogram -manganese global mg/kg (ppm) Concentration of manganese in the sample QuantityValue 24.7 mg/kg -mean_frict_vel global meter per second Measurement of mean friction velocity QuantityValue 0.5 meter per second -mean_peak_frict_vel global meter per second Measurement of mean peak friction velocity QuantityValue 1 meter per second -methane global micromole per liter, parts per billion, parts per million Methane (gas) amount or concentration at the time of sampling QuantityValue 1800 parts per billion -microbial_biomass global ton, kilogram, gram per kilogram soil The part of the organic matter in the soil that constitutes living microorganisms smaller than 5-10 micrometer. If you keep this, you would need to have correction factors used for conversion to the final units QuantityValue -mineral_nutr_regm global gram, mole per liter, milligram per liter Information about treatment involving the use of mineral supplements; should include the name of mineral nutrient, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple mineral nutrient regimens TextValue potassium;15 gram;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -n_alkanes global micromole per liter Concentration of n-alkanes; can include multiple n-alkanes TextValue n-hexadecane;100 milligram per liter -nitrate global micromole per liter, milligram per liter, parts per million Concentration of nitrate in the sample QuantityValue 65 micromole per liter -nitrate_nitrogen global mg/kg Concentration of nitrate nitrogen in the sample QuantityValue 0.29 mg/kg -nitrite global micromole per liter, milligram per liter, parts per million Concentration of nitrite in the sample QuantityValue 0.5 micromole per liter -nitrite_nitrogen global mg/kg Concentration of nitrite nitrogen in the sample QuantityValue 1.2 mg/kg -nitro global micromole per liter Concentration of nitrogen (total) QuantityValue 4.2 micromole per liter -non_min_nutr_regm global gram, mole per liter, milligram per liter Information about treatment involving the exposure of plant to non-mineral nutrient such as oxygen, hydrogen or carbon; should include the name of non-mineral nutrient, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple non-mineral nutrient regimens string carbon dioxide;10 mole per liter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -org_carb global micromole per liter Concentration of organic carbon QuantityValue 1.5 microgram per liter -org_count_qpcr_info global number of cells per gram (or ml or cm^2) If qpcr was used for the cell count, the target gene name, the primer sequence and the cycling conditions should also be provided. (Example: 16S rrna; FWD:ACGTAGCTATGACGT REV:GTGCTAGTCGAGTAC; initial denaturation:90C_5min; denaturation:90C_2min; annealing:52C_30 sec; elongation:72C_30 sec; 90 C for 1 min; final elongation:72C_5min; 30 cycles) string -org_matter global microgram per liter Concentration of organic matter QuantityValue 1.75 milligram per cubic meter -org_nitro global microgram per liter Concentration of organic nitrogen QuantityValue 4 micromole per liter -org_particles global gram per liter Concentration of particles such as faeces, hairs, food, vomit, paper fibers, plant material, humus, etc. TextValue -organism_count global number of cells per cubic meter, number of cells per milliliter, number of cells per cubic centimeter Total cell count of any organism (or group of organisms) per gram, volume or area of sample, should include name of organism followed by count. The method that was used for the enumeration (e.g. qPCR, atp, mpn, etc.) Should also be provided. (example: total prokaryotes; 3.5e7 cells per ml; qpcr) QuantityValue total prokaryotes;3.5e7 cells per milliliter;qPCR -owc_tvdss global meter Depth of the original oil water contact (OWC) zone (average) (m TVDSS) QuantityValue -oxygen global milligram per liter, parts per million Oxygen (gas) amount or concentration at the time of sampling QuantityValue 600 parts per million -part_org_carb global microgram per liter Concentration of particulate organic carbon QuantityValue 1.92 micromole per liter -part_org_nitro global microgram per liter, micromole per liter Concentration of particulate organic nitrogen QuantityValue 0.3 micromole per liter -particle_class global micrometer Particles are classified, based on their size, into six general categories:clay, silt, sand, gravel, cobbles, and boulders; should include amount of particle preceded by the name of the particle type; can include multiple values TextValue -permeability global mD Measure of the ability of a hydrocarbon resource to allow fluids to pass through it. (Additional information: https://en.wikipedia.org/wiki/Permeability_(earth_sciences)) TextValue -pesticide_regm global gram, mole per liter, milligram per liter Information about treatment involving use of insecticides; should include the name of pesticide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple pesticide regimens TextValue pyrethrum;0.6 milligram per liter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -petroleum_hydrocarb global micromole per liter Concentration of petroleum hydrocarbon QuantityValue 0.05 micromole per liter -phaeopigments global milligram per cubic meter Concentration of phaeopigments; can include multiple phaeopigments TextValue 2.5 milligram per cubic meter -phosphate global micromole per liter Concentration of phosphate QuantityValue 0.7 micromole per liter -phosplipid_fatt_acid global mole per gram, mole per liter Concentration of phospholipid fatty acids; can include multiple values TextValue 2.98 milligram per liter -photon_flux global number of photons per second per unit area Measurement of photon flux QuantityValue 3.926 micromole photons per second per square meter -pollutants global gram, mole per liter, milligram per liter, microgram per cubic meter Pollutant types and, amount or concentrations measured at the time of sampling; can report multiple pollutants by entering numeric values preceded by name of pollutant TextValue lead;0.15 microgram per cubic meter -porosity global percentage Porosity of deposited sediment is volume of voids divided by the total volume of sample TextValue -potassium global milligram per liter, parts per million Concentration of potassium in the sample QuantityValue 463 milligram per liter -pour_point global degree Celsius Temperature at which a liquid becomes semi solid and loses its flow characteristics. In crude oil a high¬†pour point¬†is generally associated with a high paraffin content, typically found in crude deriving from a larger proportion of plant material. (soure: https://en.wikipedia.org/wiki/pour_point) QuantityValue -pressure global atmosphere Pressure to which the sample is subject to, in atmospheres QuantityValue 50 atmosphere -primary_prod global milligram per cubic meter per day, gram per square meter per day Measurement of primary production, generally measured as isotope uptake QuantityValue 100 milligram per cubic meter per day -prod_rate global cubic meter per day Oil and/or gas production rates per well (e.g. 524 m3 / day) QuantityValue -radiation_regm global rad, gray Information about treatment involving exposure of plant or a plant part to a particular radiation regimen; should include the radiation type, amount or intensity administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple radiation regimens TextValue gamma radiation;60 gray;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -rainfall_regm global millimeter Information about treatment involving an exposure to a given amount of rainfall, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens TextValue 15 millimeter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -redox_potential global millivolt Redox potential, measured relative to a hydrogen cell, indicating oxidation or reduction potential QuantityValue 300 millivolt -rel_air_humidity global percentage Partial vapor and air pressure, density of the vapor and air, or by the actual mass of the vapor and air QuantityValue 80% -rel_humidity_out global gram of air, kilogram of air The recorded outside relative humidity value at the time of sampling QuantityValue 12 per kilogram of air -resins_pc global percent Saturate, Aromatic, Resin and Asphaltene¬†(SARA) is an analysis method that divides¬†crude oil¬†components according to their polarizability and polarity. There are three main methods to obtain SARA results. The most popular one is known as the Iatroscan TLC-FID and is referred to as IP-143 (source: https://en.wikipedia.org/wiki/Saturate,_aromatic,_resin_and_asphaltene) TextValue -room_air_exch_rate global liter per hour The rate at which outside air replaces indoor air in a given space QuantityValue -room_dim global meter The length, width and height of sampling room TextValue -room_door_dist global meter Distance between doors (meters) in the hallway between the sampling room and adjacent rooms TextValue -room_net_area global square feet, square meter The net floor area of sampling room. Net area excludes wall thicknesses TextValue -room_vol global cubic feet, cubic meter Volume of sampling room TextValue -root_med_carbon global milligram per liter Source of organic carbon in the culture rooting medium; e.g. sucrose. TextValue sucrose -root_med_macronutr global milligram per liter Measurement of the culture rooting medium macronutrients (N,P, K, Ca, Mg, S); e.g. KH2PO4 (170¬†mg/L). TextValue KH2PO4;170¬†milligram per liter -root_med_micronutr global milligram per liter Measurement of the culture rooting medium micronutrients (Fe, Mn, Zn, B, Cu, Mo); e.g. H3BO3 (6.2¬†mg/L). TextValue H3BO3;6.2¬†milligram per liter -root_med_regl global milligram per liter Growth regulators in the culture rooting medium such as cytokinins, auxins, gybberellins, abscisic acid; e.g. 0.5¬†mg/L NAA. TextValue abscisic acid;0.75 milligram per liter -root_med_suppl global milligram per liter Organic supplements of the culture rooting medium, such as vitamins, amino acids, organic acids, antibiotics activated charcoal; e.g. nicotinic acid (0.5¬†mg/L). TextValue nicotinic acid;0.5 milligram per liter -salinity global practical salinity unit, percentage The total concentration of all dissolved salts in a liquid or solid sample. While salinity can be measured by a complete chemical analysis, this method is difficult and time consuming. More often, it is instead derived from the conductivity measurement. This is known as practical salinity. These derivations compare the specific conductance of the sample to a salinity standard such as seawater. QuantityValue 25 practical salinity unit -salt_regm global gram, microgram, mole per liter, gram per liter Information about treatment involving use of salts as supplement to liquid and soil growth media; should include the name of salt, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple salt regimens TextValue NaCl;5 gram per liter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -samp_loc_corr_rate global millimeter per year Metal corrosion rate is the speed of metal deterioration due to environmental conditions. As environmental conditions change corrosion rates change accordingly. Therefore, long term corrosion rates are generally more informative than short term rates and for that reason they are preferred during reporting. In the case of suspected MIC, corrosion rate measurements at the time of sampling might provide insights into the involvement of certain microbial community members in MIC as well as potential microbial interplays TextValue -samp_md global meter "In non deviated well, measured depth is equal to the true vertical depth, TVD (TVD=TVDSS plus the reference or datum it refers to). In deviated wells, the MD is the length of trajectory of the borehole measured from the same reference or datum. Common datums used are ground level (GL), drilling rig floor (DF), rotary table (RT), kelly bushing (KB) and mean sea level (MSL). If ""other"" is specified, please propose entry in ""additional info"" field" QuantityValue 1534 meter;MSL -samp_preserv global milliliter Preservative added to the sample (e.g. Rnalater, alcohol, formaldehyde, etc.). Where appropriate include volume added (e.g. Rnalater; 2 ml) TextValue -samp_size global millliter, gram, milligram, liter The total amount or size (volume (ml), mass (g) or area (m2) ) of sample collected. QuantityValue 5 liter -samp_store_temp global degree Celsius Temperature at which sample was stored, e.g. -80 degree Celsius QuantityValue -80 degree Celsius -samp_time_out global hour The recent and long term history of outside sampling TextValue -samp_transport_cond global days;degree Celsius Sample transport duration (in days or hrs) and temperature the sample was exposed to (e.g. 5.5 days; 20 ¬∞C) TextValue 5 days;-20 degree Celsius -samp_tvdss global meter Depth of the sample i.e. The vertical distance between the sea level and the sampled position in the subsurface. Depth can be reported as an interval for subsurface samples e.g. 1325.75-1362.25 m TextValue -samp_vol_we_dna_ext global millliter, gram, milligram, square centimeter Volume (ml) or mass (g) of total collected sample processed for DNA extraction. Note: total sample collected should be entered under the term Sample Size (MIXS:0000001). QuantityValue 1500 milliliter -saturates_pc global percent Saturate, Aromatic, Resin and Asphaltene¬†(SARA) is an analysis method that divides¬†crude oil¬†components according to their polarizability and polarity. There are three main methods to obtain SARA results. The most popular one is known as the Iatroscan TLC-FID and is referred to as IP-143 (source: https://en.wikipedia.org/wiki/Saturate,_aromatic,_resin_and_asphaltene) TextValue -season_precpt global millimeter The average of all seasonal precipitation values known, or an estimated equivalent value derived by such methods as regional indexes or Isohyetal maps. QuantityValue -season_temp global degree Celsius Mean seasonal temperature QuantityValue 18 degree Celsius -silicate global micromole per liter Concentration of silicate QuantityValue 0.05 micromole per liter -size_frac_low global micrometer Refers to the mesh/pore size used to pre-filter/pre-sort the sample. Materials larger than the size threshold are excluded from the sample QuantityValue 0.2 micrometer -size_frac_up global micrometer Refers to the mesh/pore size used to retain the sample. Materials smaller than the size threshold are excluded from the sample QuantityValue 20 micrometer -slope_aspect global degree The direction a slope faces. While looking down a slope use a compass to record the direction you are facing (direction or degrees); e.g., nw or 315 degrees. This measure provides an indication of sun and wind exposure that will influence soil temperature and evapotranspiration. QuantityValue -slope_gradient global percentage Commonly called 'slope'. The angle between ground surface and a horizontal line (in percent). This is the direction that overland water would flow. This measure is usually taken with a hand level meter or clinometer QuantityValue -sludge_retent_time global hours The time activated sludge remains in reactor QuantityValue -sodium global milligram per liter, parts per million Sodium concentration in the sample QuantityValue 10.5 milligram per liter -solar_irradiance global kilowatts per square meter per day, ergs per square centimeter per second The amount of solar energy that arrives at a specific area of a surface during a specific time interval QuantityValue 1.36 kilowatts per square meter per day -soluble_inorg_mat global gram, microgram, mole per liter, gram per liter, parts per million Concentration of substances such as ammonia, road-salt, sea-salt, cyanide, hydrogen sulfide, thiocyanates, thiosulfates, etc. TextValue -soluble_org_mat global gram, microgram, mole per liter, gram per liter, parts per million Concentration of substances such as urea, fruit sugars, soluble proteins, drugs, pharmaceuticals, etc. TextValue -soluble_react_phosp global micromole per liter, milligram per liter, parts per million Concentration of soluble reactive phosphorus QuantityValue 0.1 milligram per liter -specific_humidity global gram of air, kilogram of air The mass of water vapour in a unit mass of moist air, usually expressed as grams of vapour per kilogram of air, or, in air conditioning, as grains per pound. QuantityValue 15 per kilogram of air -sulfate global micromole per liter, milligram per liter, parts per million Concentration of sulfate in the sample QuantityValue 5 micromole per liter -sulfate_fw global milligram per liter Original sulfate concentration in the hydrocarbon resource QuantityValue -sulfide global micromole per liter, milligram per liter, parts per million Concentration of sulfide in the sample QuantityValue 2 micromole per liter -surf_humidity global percentage Surfaces: water activity as a function of air and material moisture QuantityValue 10% -surf_moisture global parts per million, gram per cubic meter, gram per square meter Water held on a surface QuantityValue 0.01 gram per square meter -surf_temp global degree Celsius Temperature of the surface at the time of sampling QuantityValue 15 degree Celsius -suspend_part_matter global milligram per liter Concentration of suspended particulate matter QuantityValue 0.5 milligram per liter -suspend_solids global gram, microgram, milligram per liter, mole per liter, gram per liter, part per million Concentration of substances including a wide variety of material, such as silt, decaying plant and animal matter; can include multiple substances TextValue -tan global milligram per liter Total Acid Number¬†(TAN) is a measurement of acidity that is determined by the amount of¬†potassium hydroxide¬†in milligrams that is needed to neutralize the acids in one gram of oil.¬†It is an important quality measurement of¬†crude oil. (source: https://en.wikipedia.org/wiki/Total_acid_number) QuantityValue -temp global degree Celsius Temperature of the sample at the time of sampling. QuantityValue 25 degree Celsius -temp_out global degree Celsius The recorded temperature value at sampling time outside QuantityValue 5 degree Celsius -toluene global milligram per liter, parts per million Concentration of toluene in the sample QuantityValue -tot_carb global microgram per liter Total carbon content QuantityValue -tot_depth_water_col global meter Measurement of total depth of water column QuantityValue 500 meter -tot_diss_nitro global microgram per liter Total dissolved nitrogen concentration, reported as nitrogen, measured by: total dissolved nitrogen = NH4 + NO3NO2 + dissolved organic nitrogen QuantityValue 40 microgram per liter -tot_inorg_nitro global microgram per liter Total inorganic nitrogen content QuantityValue 40 microgram per liter -tot_iron global milligram per liter, milligram per kilogram Concentration of total iron in the sample QuantityValue -tot_nitro global microgram per liter, micromole per liter, milligram per liter Total nitrogen concentration of water samples, calculated by: total nitrogen = total dissolved nitrogen + particulate nitrogen. Can also be measured without filtering, reported as nitrogen QuantityValue 50 micromole per liter -tot_nitro_content global microgram per liter, micromole per liter, milligram per liter Total nitrogen content of the sample QuantityValue -tot_org_carb global gram Carbon per kilogram sample material Definition for soil: total organic carbon content of the soil, definition otherwise: total organic carbon content QuantityValue -tot_part_carb global microgram per liter, micromole per liter Total particulate carbon content QuantityValue 35 micromole per liter -tot_phosp global micromole per liter, milligram per liter, parts per million Total phosphorus concentration in the sample, calculated by: total phosphorus = total dissolved phosphorus + particulate phosphorus QuantityValue 0.03 milligram per liter -tot_phosphate global microgram per liter, micromole per liter Total amount or concentration of phosphate QuantityValue -tot_sulfur global milligram per liter, parts per million Concentration of total sulfur in the sample QuantityValue -turbidity global formazin turbidity unit, formazin nephelometric units Measure of the amount of cloudiness or haziness in water caused by individual particles QuantityValue 0.3 nephelometric turbidity units -tvdss_of_hcr_press global meter True vertical depth subsea (TVDSS) of the hydrocarbon resource where the original pressure was measured (e.g. 1578 m). QuantityValue -tvdss_of_hcr_temp global meter True vertical depth subsea (TVDSS) of the hydrocarbon resource where the original temperature was measured (e.g. 1345 m). QuantityValue -ventilation_rate global cubic meter per minute, liters per second Ventilation rate of the system in the sampled premises QuantityValue 750 cubic meter per minute -vfa global milligram per liter, parts per million Concentration of Volatile Fatty Acids in the sample QuantityValue -vfa_fw global milligram per liter Original volatile fatty acid concentration in the hydrocarbon resource QuantityValue -viscosity global cP at degree Celsius A measure of oil's resistance¬†to gradual deformation by¬†shear stress¬†or¬†tensile stress (e.g. 3.5 cp; 100 ¬∞C) TextValue -volatile_org_comp global microgram per cubic meter, parts per million, nanogram per liter Concentration of carbon-based chemicals that easily evaporate at room temperature; can report multiple volatile organic compounds by entering numeric values preceded by name of compound TextValue formaldehyde;500 nanogram per liter -wall_area global square meter The total area of the sampled room's walls QuantityValue -wall_height global centimeter The average height of the walls in the sampled room QuantityValue -wall_thermal_mass global joule per degree Celsius The ability of the wall to provide inertia against temperature fluctuations. Generally this means concrete or concrete block that is either exposed or covered only with paint QuantityValue -water_content class_usage Biosample gram per gram or cubic centimeter per cubic centimeter string 0.75 g water/g dry soil; 75% water holding capacity; 1.1 g fresh weight/ dry weight; 10% water filled pore space -water_content global gram per gram or cubic centimeter per cubic centimeter Water content measurement string -water_current global cubic meter per second, knots Measurement of magnitude and direction of flow within a fluid QuantityValue 10 cubic meter per second -water_cut global percent Current amount of water (%) in a produced fluid stream; or the average of the combined streams QuantityValue -water_feat_size global square meter The size of the water feature QuantityValue -water_prod_rate global cubic meter per day Water production rates per well (e.g. 987 m3 / day) QuantityValue -water_temp_regm global degree Celsius Information about treatment involving an exposure to water with varying degree of temperature, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens TextValue 15 degree Celsius;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -watering_regm global milliliter, liter Information about treatment involving an exposure to watering frequencies, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens TextValue 1 liter;R2/2018-05-11T14:30/2018-05-11T19:30/P1H30M -wind_speed global meter per second, kilometer per hour Speed of wind measured at the time of sampling QuantityValue 21 kilometer per hour -window_size global inch, meter The window's length and width TextValue -xylene global milligram per liter, parts per million Concentration of xylene in the sample QuantityValue -zinc global mg/kg (ppm) Concentration of zinc in the sample QuantityValue 2.5 mg/kg diff --git a/units/output/schema_qv_complete_table.txt b/units/output/schema_qv_complete_table.txt index 86d526736e..4d8e1fd13e 100644 --- a/units/output/schema_qv_complete_table.txt +++ b/units/output/schema_qv_complete_table.txt @@ -43,9 +43,9 @@ depth | m dew_point | Cel diss_carb_dioxide | mg/L|umol/L diss_hydrogen | umol/L -diss_inorg_carb | [ppm]|mg/L|ug/L +diss_inorg_carb | [ppm]|mg/L|ug/L|umol/kg diss_inorg_nitro | ug/L|umol/L|mg/L -diss_inorg_phosp | [ppm]|mg/L|ug/L +diss_inorg_phosp | [ppm]|mg/L|ug/L|umol/L diss_iron | mg/L diss_org_carb | mg/L|umol/L|ug/L diss_org_nitro | mg/L|ug/L @@ -57,12 +57,12 @@ duration | h|min efficiency_percent | MISSING ethylbenzene | [ppm]|mg/L exp_duct | m2 -exp_pipe | MISSING +exp_pipe | 1 filter_pore_size | MISSING floor_age | a|d|wk floor_area | m2 floor_thermal_mass | J/K -fluor | mg/m3 +fluor | mg/m3|V freq_clean | 1/d freq_cook | 1/d glucosidase_act | mol/L/h @@ -100,9 +100,9 @@ nitro | umol/L|% number_pets | 1 number_plants | 1 number_resident | 1 -occup_density_samp | MISSING +occup_density_samp | 1/[sft_i] occup_samp | 1 -org_carb | umol/L|% +org_carb | umol/L|%|mg/L org_matter | ug/L org_nitro | ug/L organism_count | 1 diff --git a/units/output/schema_qv_storage_counts.tsv b/units/output/schema_qv_storage_counts.tsv index f6a9e0962a..0908786e06 100644 --- a/units/output/schema_qv_storage_counts.tsv +++ b/units/output/schema_qv_storage_counts.tsv @@ -1,4 +1,4 @@ metric count -qv_slots_with_storage_units 170 -qv_slots_without_storage_units 18 +qv_slots_with_storage_units 172 +qv_slots_without_storage_units 16 qv_slots_total 188 diff --git a/units/output/schema_qv_with_storage.txt b/units/output/schema_qv_with_storage.txt index 9ecb6af616..8e6da7c332 100644 --- a/units/output/schema_qv_with_storage.txt +++ b/units/output/schema_qv_with_storage.txt @@ -62,6 +62,7 @@ door_size down_par ethylbenzene exp_duct +exp_pipe floor_age floor_area floor_thermal_mass @@ -93,6 +94,7 @@ nitro number_pets number_plants number_resident +occup_density_samp occup_samp org_carb org_matter diff --git a/units/output/schema_qv_without_storage.txt b/units/output/schema_qv_without_storage.txt index e02f222cd5..fba6b45048 100644 --- a/units/output/schema_qv_without_storage.txt +++ b/units/output/schema_qv_without_storage.txt @@ -8,10 +8,8 @@ bulk_elect_conductivity | MISSING concentration | MISSING api | MISSING efficiency_percent | MISSING -exp_pipe | MISSING inside_lux | MISSING microbial_biomass | MISSING -occup_density_samp | MISSING rel_humidity_out | MISSING soil_text_measure | MISSING specific_humidity | MISSING diff --git a/units/output/schema_storage_units_expanded.tsv b/units/output/schema_storage_units_expanded.tsv deleted file mode 100644 index f81463a3d1..0000000000 --- a/units/output/schema_storage_units_expanded.tsv +++ /dev/null @@ -1,287 +0,0 @@ -slot storage_unit -input_mass g -subsurface_depth m -zinc [ppm] -zinc mg/kg -zinc mg/L -manganese [ppm] -manganese mg/kg -manganese mg/L -ammonium_nitrogen [ppm] -ammonium_nitrogen mg/kg -ammonium_nitrogen mg/L -nitrate_nitrogen [ppm] -nitrate_nitrogen mg/kg -nitrate_nitrogen mg/L -nitrite_nitrogen [ppm] -nitrite_nitrogen mg/kg -nitrite_nitrogen mg/L -lbc_thirty [ppm] -lbceq [ppm] -mass g -duration h -duration min -temperature Cel -volume mL -volume uL -abs_air_humidity [lb_av] -abs_air_humidity g/g -abs_air_humidity kg -abs_air_humidity kg/kg -air_temp Cel -al_sat % -alkalinity meq/L -alkalinity mg/L -alkyl_diethers mol/L -alt m -aminopept_act mol/L/h -ammonium [ppm] -ammonium mg/L -ammonium umol/L -amount_light lm/m2 -amount_light lx -annual_precpt mm -annual_temp Cel -avg_dew_point Cel -avg_temp Cel -bac_prod mg/m3/d -bac_resp mg/m3/d -bac_resp umol/L/h -bacteria_carb_prod ng/h -barometric_press mbar -benzene [ppm] -benzene mg/L -biochem_oxygen_dem mg/L -bishomohopanol ug/L -bishomohopanol ug/g -blood_press_diast mm[Hg] -blood_press_syst mm[Hg] -bromide [ppm] -built_struc_age a -calcium [ppm] -calcium mg/L -calcium umol/L -calcium mg/kg -carb_dioxide [ppm] -carb_dioxide umol/L -carb_monoxide [ppm] -carb_monoxide umol/L -carb_nitro_ratio 1 -ceil_area m2 -ceil_thermal_mass J/K -chem_oxygen_dem mg/L -chloride [ppm] -chloride mg/L -chlorophyll mg/m3 -chlorophyll ug/L -conduc mS/cm -conduc uS/cm -density g/cm3 -density g/m3 -density kg/m3 -depth m -dew_point Cel -diss_carb_dioxide mg/L -diss_carb_dioxide umol/L -diss_hydrogen umol/L -diss_inorg_carb [ppm] -diss_inorg_carb mg/L -diss_inorg_carb ug/L -diss_inorg_nitro ug/L -diss_inorg_nitro umol/L -diss_inorg_nitro mg/L -diss_inorg_phosp [ppm] -diss_inorg_phosp mg/L -diss_inorg_phosp ug/L -diss_iron mg/L -diss_org_carb mg/L -diss_org_carb umol/L -diss_org_carb ug/L -diss_org_nitro mg/L -diss_org_nitro ug/L -diss_oxygen mg/L -diss_oxygen umol/kg -diss_oxygen umol/L -diss_oxygen_fluid mg/L -diss_oxygen_fluid umol/kg -door_size m2 -down_par umol/m2/s -ethylbenzene [ppm] -ethylbenzene mg/L -exp_duct m2 -floor_age a -floor_age d -floor_age wk -floor_area m2 -floor_thermal_mass J/K -fluor mg/m3 -freq_clean 1/d -freq_cook 1/d -glucosidase_act mol/L/h -hcr_fw_salinity mg/L -height_carper_fiber cm -host_age a -host_age d -host_age h -host_body_temp Cel -host_dry_mass g -host_dry_mass kg -host_height cm -host_height m -host_height mm -host_length cm -host_length m -host_length mm -host_tot_mass g -host_tot_mass kg -host_wet_mass g -host_wet_mass kg -humidity g/m3 -humidity % -indust_eff_percent % -iwf % -light_intensity lx -magnesium [ppm] -magnesium mg/L -magnesium mol/L -magnesium umol/kg -magnesium mg/kg -max_occup 1 -mean_frict_vel m/s -mean_peak_frict_vel m/s -methane [ppb] -methane [ppm] -methane umol/L -nitrate [ppm] -nitrate mg/L -nitrate umol/L -nitrite [ppm] -nitrite mg/L -nitrite umol/L -nitro umol/L -nitro % -number_pets 1 -number_plants 1 -number_resident 1 -occup_samp 1 -org_carb umol/L -org_carb % -org_matter ug/L -org_nitro ug/L -organism_count 1 -owc_tvdss m -oxygen [ppm] -oxygen mg/L -part_org_carb ug/L -part_org_carb mg/L -part_org_nitro ug/L -part_org_nitro umol/L -part_org_nitro mg/L -petroleum_hydrocarb umol/L -phosphate umol/L -photon_flux umol/m2/s -potassium [ppm] -potassium mg/L -potassium mg/kg -pour_point Cel -pressure atm -primary_prod g/m2/d -primary_prod mg/m3/d -prod_rate m3/d -redox_potential mV -rel_air_humidity % -room_air_exch_rate L/h -room_occup 1 -root_med_ph [pH] -salinity % -salinity mg/L -samp_md m -samp_size L -samp_size g -samp_size mL -samp_size mg -samp_store_temp Cel -samp_vol_we_dna_ext cm2 -samp_vol_we_dna_ext g -samp_vol_we_dna_ext mL -samp_vol_we_dna_ext mg -season_precpt mm -season_temp Cel -silicate umol/L -size_frac_low um -size_frac_up um -slope_aspect deg -slope_gradient % -sludge_retent_time h -sodium [ppm] -sodium mg/L -solar_irradiance kW/m2/d -solar_irradiance erg/cm2/s -soluble_react_phosp [ppm] -soluble_react_phosp mg/L -soluble_react_phosp umol/L -soluble_react_phosp ug/L -sulfate [ppm] -sulfate mg/L -sulfate umol/L -sulfate_fw mg/L -sulfide [ppm] -sulfide mg/L -sulfide umol/L -surf_humidity % -surf_moisture [ppm] -surf_moisture g/m2 -surf_moisture g/m3 -surf_temp Cel -suspend_part_matter mg/L -tan mg/L -temp Cel -temp_out Cel -toluene [ppm] -toluene mg/L -tot_carb ug/L -tot_carb % -tot_depth_water_col m -tot_diss_nitro ug/L -tot_diss_nitro umol/L -tot_inorg_nitro ug/L -tot_iron mg/L -tot_iron mg/kg -tot_nitro mg/L -tot_nitro ug/L -tot_nitro umol/L -tot_nitro % -tot_nitro_content mg/L -tot_nitro_content ug/L -tot_nitro_content umol/L -tot_nitro_content % -tot_org_carb mg/L -tot_part_carb ug/L -tot_part_carb umol/L -tot_phosp [ppm] -tot_phosp mg/L -tot_phosp umol/L -tot_phosphate ug/L -tot_phosphate umol/L -tot_sulfur [ppm] -tot_sulfur mg/L -turbidity [NTU] -turbidity [FNU] -tvdss_of_hcr_press m -ventilation_rate L/s -ventilation_rate m3/min -vfa [ppm] -vfa mg/L -vfa_fw mg/L -wall_area m2 -wall_height cm -wall_thermal_mass J/K -water_current [kn_i] -water_current m3/s -water_cut % -water_feat_size m2 -water_prod_rate m3/d -wind_speed km/h -wind_speed m/s -xylene [ppm] -xylene mg/L diff --git a/units/output/schema_ucum_detailed.tsv b/units/output/schema_ucum_detailed.tsv deleted file mode 100644 index 74460eca62..0000000000 --- a/units/output/schema_ucum_detailed.tsv +++ /dev/null @@ -1,370 +0,0 @@ -slot ucum_notation problem original_preferred_unit individual_unit context class_name description -abs_air_humidity gram per gram 1 gram per gram, kilogram per kilogram, kilogram, pound gram per gram global Actual mass of water vapor - mh20 - present in the air water vapor mixture -abs_air_humidity kilogram per kilogram 1 gram per gram, kilogram per kilogram, kilogram, pound kilogram per kilogram global Actual mass of water vapor - mh20 - present in the air water vapor mixture -abs_air_humidity kg 0 gram per gram, kilogram per kilogram, kilogram, pound kilogram global Actual mass of water vapor - mh20 - present in the air water vapor mixture -abs_air_humidity pound 1 gram per gram, kilogram per kilogram, kilogram, pound pound global Actual mass of water vapor - mh20 - present in the air water vapor mixture -agrochem_addition g 0 gram, mole per liter, milligram per liter gram global Addition of fertilizers, pesticides, etc. - amount and time of applications -agrochem_addition mol/L 0 gram, mole per liter, milligram per liter mole per liter global Addition of fertilizers, pesticides, etc. - amount and time of applications -agrochem_addition milligram per liter 1 gram, mole per liter, milligram per liter milligram per liter global Addition of fertilizers, pesticides, etc. - amount and time of applications -air_PM_concen micrograms per cubic meter 1 micrograms per cubic meter micrograms per cubic meter global Concentration of substances that remain suspended in the air, and comprise mixtures of organic and inorganic substances (PM10 and PM2.5); can report multiple PM's by entering numeric values preceded by name of PM -air_temp Cel 0 degree Celsius degree Celsius global Temperature of the air at the time of sampling -air_temp_regm m 0 meter meter global Information about treatment involving an exposure to varying temperatures; should include the temperature, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include different temperature regimens -al_sat % 0 percentage percentage global Aluminum saturation (esp. For tropical soils) -alkalinity milliequivalent per liter 1 milliequivalent per liter, milligram per liter milliequivalent per liter global Alkalinity, the ability of a solution to neutralize acids to the equivalence point of carbonate or bicarbonate -alkalinity milligram per liter 1 milliequivalent per liter, milligram per liter milligram per liter global Alkalinity, the ability of a solution to neutralize acids to the equivalence point of carbonate or bicarbonate -alkyl_diethers mol/L 0 mole per liter mole per liter global Concentration of alkyl diethers -aminopept_act mole per liter per hour 1 mole per liter per hour mole per liter per hour global Measurement of aminopeptidase activity -ammonium micromole per liter 1 micromole per liter, milligram per liter, parts per million micromole per liter global Concentration of ammonium in the sample -ammonium milligram per liter 1 micromole per liter, milligram per liter, parts per million milligram per liter global Concentration of ammonium in the sample -ammonium parts per million 1 micromole per liter, milligram per liter, parts per million parts per million global Concentration of ammonium in the sample -ammonium_nitrogen mg/kg 1 mg/kg mg/kg global Concentration of ammonium nitrogen in the sample -amount_light lux 1 lux, lumens per square meter lux global The unit of illuminance and luminous emittance, measuring luminous flux per unit area -amount_light lumens per square meter 1 lux, lumens per square meter lumens per square meter global The unit of illuminance and luminous emittance, measuring luminous flux per unit area -annual_precpt mm 0 millimeter millimeter global The average of all annual precipitation values known, or an estimated equivalent value derived by such methods as regional indexes or Isohyetal maps. -annual_temp Cel 0 degree Celsius degree Celsius global Mean annual temperature -antibiotic_regm mg 0 milligram milligram global Information about treatment involving antibiotic administration; should include the name of antibiotic, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple antibiotic regimens -api degrees API 1 degrees API degrees API global API gravity is a measure of how heavy or light a petroleum liquid is compared to water (source: https://en.wikipedia.org/wiki/API_gravity) (e.g. 31.1¬∞ API) -aromatics_pc % 0 percent percent global Saturate, Aromatic, Resin and Asphaltene¬†(SARA) is an analysis method that divides¬†crude oil¬†components according to their polarizability and polarity. There are three main methods to obtain SARA results. The most popular one is known as the Iatroscan TLC-FID and is referred to as IP-143 (source: https://en.wikipedia.org/wiki/Saturate,_aromatic,_resin_and_asphaltene) -asphaltenes_pc % 0 percent percent global Saturate, Aromatic, Resin and Asphaltene¬†(SARA) is an analysis method that divides¬†crude oil¬†components according to their polarizability and polarity. There are three main methods to obtain SARA results. The most popular one is known as the Iatroscan TLC-FID and is referred to as IP-143 (source: https://en.wikipedia.org/wiki/Saturate,_aromatic,_resin_and_asphaltene) -avg_dew_point Cel 0 degree Celsius degree Celsius global The average of dew point measures taken at the beginning of every hour over a 24 hour period on the sampling day -avg_temp Cel 0 degree Celsius degree Celsius global The average of temperatures taken at the beginning of every hour over a 24 hour period on the sampling day -bac_prod milligram per cubic meter per day 1 milligram per cubic meter per day milligram per cubic meter per day global Bacterial production in the water column measured by isotope uptake -bac_resp milligram per cubic meter per day 1 milligram per cubic meter per day, micromole oxygen per liter per hour milligram per cubic meter per day global Measurement of bacterial respiration in the water column -bac_resp micromole oxygen per liter per hour 1 milligram per cubic meter per day, micromole oxygen per liter per hour micromole oxygen per liter per hour global Measurement of bacterial respiration in the water column -bacteria_carb_prod ng/h 0 nanogram per hour nanogram per hour global Measurement of bacterial carbon production -barometric_press mbar 0 millibar millibar global Force per unit area exerted against a surface by the weight of air above that surface -benzene milligram per liter 1 milligram per liter, parts per million milligram per liter global Concentration of benzene in the sample -benzene parts per million 1 milligram per liter, parts per million parts per million global Concentration of benzene in the sample -biochem_oxygen_dem milligram per liter 1 milligram per liter milligram per liter global Amount of dissolved oxygen needed by aerobic biological organisms in a body of water to break down organic material present in a given water sample at certain temperature over a specific time period -biocide_admin_method milligram per liter 1 milligram per liter milligram per liter global Method of biocide administration (dose, frequency, duration, time elapsed between last biociding and sampling) (e.g. 150 mg/l; weekly; 4 hr; 3 days) -biomass ton 1 ton, kilogram, gram ton global Amount of biomass; should include the name for the part of biomass measured, e.g. Microbial, total. Can include multiple measurements -biomass kg 0 ton, kilogram, gram kilogram global Amount of biomass; should include the name for the part of biomass measured, e.g. Microbial, total. Can include multiple measurements -biomass g 0 ton, kilogram, gram gram global Amount of biomass; should include the name for the part of biomass measured, e.g. Microbial, total. Can include multiple measurements -bishomohopanol microgram per liter 1 microgram per liter, microgram per gram microgram per liter global Concentration of bishomohopanol -bishomohopanol microgram per gram 1 microgram per liter, microgram per gram microgram per gram global Concentration of bishomohopanol -blood_press_diast millimeter mercury 1 millimeter mercury millimeter mercury global Resting diastolic blood pressure, measured as mm mercury -blood_press_syst millimeter mercury 1 millimeter mercury millimeter mercury global Resting systolic blood pressure, measured as mm mercury -bromide parts per million 1 parts per million parts per million global Concentration of bromide -built_struc_age a 0 year year global The age of the built structure since construction -calcium milligram per liter 1 milligram per liter, micromole per liter, parts per million milligram per liter global Concentration of calcium in the sample -calcium micromole per liter 1 milligram per liter, micromole per liter, parts per million micromole per liter global Concentration of calcium in the sample -calcium parts per million 1 milligram per liter, micromole per liter, parts per million parts per million global Concentration of calcium in the sample -carb_dioxide micromole per liter 1 micromole per liter, parts per million micromole per liter global Carbon dioxide (gas) amount or concentration at the time of sampling -carb_dioxide parts per million 1 micromole per liter, parts per million parts per million global Carbon dioxide (gas) amount or concentration at the time of sampling -carb_monoxide micromole per liter 1 micromole per liter, parts per million micromole per liter global Carbon monoxide (gas) amount or concentration at the time of sampling -carb_monoxide parts per million 1 micromole per liter, parts per million parts per million global Carbon monoxide (gas) amount or concentration at the time of sampling -ceil_area m2 0 square meter square meter global The area of the ceiling space within the room -ceil_thermal_mass joule per degree Celsius 1 joule per degree Celsius joule per degree Celsius global The ability of the ceiling to provide inertia against temperature fluctuations. Generally this means concrete that is exposed. A metal deck that supports a concrete slab will act thermally as long as it is exposed to room air flow -chem_mutagen milligram per liter 1 milligram per liter milligram per liter global Treatment involving use of mutagens; should include the name of mutagen, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple mutagen regimens -chem_oxygen_dem milligram per liter 1 milligram per liter milligram per liter global A measure of the capacity of water to consume oxygen during the decomposition of organic matter and the oxidation of inorganic chemicals such as ammonia and nitrite -chem_treat_method milligram per liter 1 milligram per liter milligram per liter global Method of chemical administration(dose, frequency, duration, time elapsed between administration and sampling) (e.g. 50 mg/l; twice a week; 1 hr; 0 days) -chloride milligram per liter 1 milligram per liter, parts per million milligram per liter global Concentration of chloride in the sample -chloride parts per million 1 milligram per liter, parts per million parts per million global Concentration of chloride in the sample -chlorophyll milligram per cubic meter 1 milligram per cubic meter, microgram per liter milligram per cubic meter global Concentration of chlorophyll -chlorophyll microgram per liter 1 milligram per cubic meter, microgram per liter microgram per liter global Concentration of chlorophyll -conduc milliSiemens per centimeter 1 milliSiemens per centimeter milliSiemens per centimeter global Electrical conductivity of water -density g/m3 0 gram per cubic meter, gram per cubic centimeter gram per cubic meter global Density of the sample, which is its mass per unit volume (aka volumetric mass density) -density g/cm3 0 gram per cubic meter, gram per cubic centimeter gram per cubic centimeter global Density of the sample, which is its mass per unit volume (aka volumetric mass density) -dew_point Cel 0 degree Celsius degree Celsius global The temperature to which a given parcel of humid air must be cooled, at constant barometric pressure, for water vapor to condense into water. -diether_lipids ng/L 0 nanogram per liter nanogram per liter global Concentration of diether lipids; can include multiple types of diether lipids -diss_carb_dioxide micromole per liter 1 micromole per liter, milligram per liter micromole per liter global Concentration of dissolved carbon dioxide in the sample or liquid portion of the sample -diss_carb_dioxide milligram per liter 1 micromole per liter, milligram per liter milligram per liter global Concentration of dissolved carbon dioxide in the sample or liquid portion of the sample -diss_hydrogen micromole per liter 1 micromole per liter micromole per liter global Concentration of dissolved hydrogen -diss_inorg_carb microgram per liter 1 microgram per liter, milligram per liter, parts per million microgram per liter global Dissolved inorganic carbon concentration in the sample, typically measured after filtering the sample using a 0.45 micrometer filter -diss_inorg_carb milligram per liter 1 microgram per liter, milligram per liter, parts per million milligram per liter global Dissolved inorganic carbon concentration in the sample, typically measured after filtering the sample using a 0.45 micrometer filter -diss_inorg_carb parts per million 1 microgram per liter, milligram per liter, parts per million parts per million global Dissolved inorganic carbon concentration in the sample, typically measured after filtering the sample using a 0.45 micrometer filter -diss_inorg_nitro microgram per liter 1 microgram per liter, micromole per liter microgram per liter global Concentration of dissolved inorganic nitrogen -diss_inorg_nitro micromole per liter 1 microgram per liter, micromole per liter micromole per liter global Concentration of dissolved inorganic nitrogen -diss_inorg_phosp microgram per liter 1 microgram per liter, milligram per liter, parts per million microgram per liter global Concentration of dissolved inorganic phosphorus in the sample -diss_inorg_phosp milligram per liter 1 microgram per liter, milligram per liter, parts per million milligram per liter global Concentration of dissolved inorganic phosphorus in the sample -diss_inorg_phosp parts per million 1 microgram per liter, milligram per liter, parts per million parts per million global Concentration of dissolved inorganic phosphorus in the sample -diss_iron milligram per liter 1 milligram per liter milligram per liter global Concentration of dissolved iron in the sample -diss_org_carb micromole per liter 1 micromole per liter, milligram per liter micromole per liter global Concentration of dissolved organic carbon in the sample, liquid portion of the sample, or aqueous phase of the fluid -diss_org_carb milligram per liter 1 micromole per liter, milligram per liter milligram per liter global Concentration of dissolved organic carbon in the sample, liquid portion of the sample, or aqueous phase of the fluid -diss_org_nitro microgram per liter 1 microgram per liter, milligram per liter microgram per liter global Dissolved organic nitrogen concentration measured as; total dissolved nitrogen - NH4 - NO3 - NO2 -diss_org_nitro milligram per liter 1 microgram per liter, milligram per liter milligram per liter global Dissolved organic nitrogen concentration measured as; total dissolved nitrogen - NH4 - NO3 - NO2 -diss_oxygen micromole per kilogram 1 micromole per kilogram, milligram per liter micromole per kilogram global Concentration of dissolved oxygen -diss_oxygen milligram per liter 1 micromole per kilogram, milligram per liter milligram per liter global Concentration of dissolved oxygen -diss_oxygen_fluid micromole per kilogram 1 micromole per kilogram, milligram per liter micromole per kilogram global Concentration of dissolved oxygen in the oil field produced fluids as it contributes to oxgen-corrosion and microbial activity (e.g. Mic). -diss_oxygen_fluid milligram per liter 1 micromole per kilogram, milligram per liter milligram per liter global Concentration of dissolved oxygen in the oil field produced fluids as it contributes to oxgen-corrosion and microbial activity (e.g. Mic). -door_size m2 0 square meter square meter global The size of the door -down_par microEinstein per square meter per second 1 microEinstein per square meter per second, microEinstein per square centimeter per second microEinstein per square meter per second global Visible waveband radiance and irradiance measurements in the water column -down_par microEinstein per square centimeter per second 1 microEinstein per square meter per second, microEinstein per square centimeter per second microEinstein per square centimeter per second global Visible waveband radiance and irradiance measurements in the water column -efficiency_percent micromole per liter 1 micromole per liter micromole per liter global Percentage of volatile solids removed from the anaerobic digestor -emulsions g/L 0 gram per liter gram per liter global Amount or concentration of substances such as paints, adhesives, mayonnaise, hair colorants, emulsified oils, etc.; can include multiple emulsion types -ethylbenzene milligram per liter 1 milligram per liter, parts per million milligram per liter global Concentration of ethylbenzene in the sample -ethylbenzene parts per million 1 milligram per liter, parts per million parts per million global Concentration of ethylbenzene in the sample -exp_duct m2 0 square meter square meter global The amount of exposed ductwork in the room -fertilizer_regm g 0 gram, mole per liter, milligram per liter gram global Information about treatment involving the use of fertilizers; should include the name of fertilizer, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple fertilizer regimens -fertilizer_regm mol/L 0 gram, mole per liter, milligram per liter mole per liter global Information about treatment involving the use of fertilizers; should include the name of fertilizer, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple fertilizer regimens -fertilizer_regm milligram per liter 1 gram, mole per liter, milligram per liter milligram per liter global Information about treatment involving the use of fertilizers; should include the name of fertilizer, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple fertilizer regimens -floor_age years 1 years, weeks, days years global The time period since installment of the carpet or flooring -floor_age weeks 1 years, weeks, days weeks global The time period since installment of the carpet or flooring -floor_age days 1 years, weeks, days days global The time period since installment of the carpet or flooring -floor_area m2 0 square meter square meter global The area of the floor space within the room -floor_thermal_mass joule per degree Celsius 1 joule per degree Celsius joule per degree Celsius global The ability of the floor to provide inertia against temperature fluctuations -fluor milligram chlorophyll a per cubic meter 1 milligram chlorophyll a per cubic meter, volts milligram chlorophyll a per cubic meter global Raw or converted fluorescence of water -fluor volts 1 milligram chlorophyll a per cubic meter, volts volts global Raw or converted fluorescence of water -fungicide_regm g 0 gram, mole per liter, milligram per liter gram global Information about treatment involving use of fungicides; should include the name of fungicide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple fungicide regimens -fungicide_regm mol/L 0 gram, mole per liter, milligram per liter mole per liter global Information about treatment involving use of fungicides; should include the name of fungicide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple fungicide regimens -fungicide_regm milligram per liter 1 gram, mole per liter, milligram per liter milligram per liter global Information about treatment involving use of fungicides; should include the name of fungicide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple fungicide regimens -gaseous_environment micromole per liter 1 micromole per liter micromole per liter global Use of conditions with differing gaseous environments; should include the name of gaseous compound, amount administered, treatment duration, interval and total experimental duration; can include multiple gaseous environment regimens -gaseous_substances micromole per liter 1 micromole per liter micromole per liter global Amount or concentration of substances such as hydrogen sulfide, carbon dioxide, methane, etc.; can include multiple substances -glucosidase_act mol per liter per hour 1 mol per liter per hour mol per liter per hour global Measurement of glucosidase activity -gravity meter per square second 1 meter per square second, g meter per square second global Information about treatment involving use of gravity factor to study various types of responses in presence, absence or modified levels of gravity; treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple treatments -gravity g 1 meter per square second, g g global Information about treatment involving use of gravity factor to study various types of responses in presence, absence or modified levels of gravity; treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple treatments -growth_hormone_regm g 0 gram, mole per liter, milligram per liter gram global Information about treatment involving use of growth hormones; should include the name of growth hormone, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple growth hormone regimens -growth_hormone_regm mol/L 0 gram, mole per liter, milligram per liter mole per liter global Information about treatment involving use of growth hormones; should include the name of growth hormone, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple growth hormone regimens -growth_hormone_regm milligram per liter 1 gram, mole per liter, milligram per liter milligram per liter global Information about treatment involving use of growth hormones; should include the name of growth hormone, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple growth hormone regimens -hcr_fw_salinity milligram per liter 1 milligram per liter milligram per liter global Original formation water salinity (prior to secondary recovery e.g. Waterflooding) expressed as TDS -hcr_pressure atm 0 atmosphere, kilopascal atmosphere global Original pressure of the hydrocarbon resource -hcr_pressure kilopascal 1 atmosphere, kilopascal kilopascal global Original pressure of the hydrocarbon resource -hcr_temp Cel 0 degree Celsius degree Celsius global Original temperature of the hydrocarbon resource -heavy_metals microgram per gram 1 microgram per gram microgram per gram global Heavy metals present in the sequenced sample and their concentrations. For multiple heavy metals and concentrations, add multiple copies of this field. -height_carper_fiber cm 0 centimeter centimeter global The average carpet fiber height in the indoor environment -herbicide_regm g 0 gram, mole per liter, milligram per liter gram global Information about treatment involving use of herbicides; information about treatment involving use of growth hormones; should include the name of herbicide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens -herbicide_regm mol/L 0 gram, mole per liter, milligram per liter mole per liter global Information about treatment involving use of herbicides; information about treatment involving use of growth hormones; should include the name of herbicide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens -herbicide_regm milligram per liter 1 gram, mole per liter, milligram per liter milligram per liter global Information about treatment involving use of herbicides; information about treatment involving use of growth hormones; should include the name of herbicide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens -host_age a 0 year, day, hour year global Age of host at the time of sampling; relevant scale depends on species and study, e.g. Could be seconds for amoebae or centuries for trees -host_age d 0 year, day, hour day global Age of host at the time of sampling; relevant scale depends on species and study, e.g. Could be seconds for amoebae or centuries for trees -host_age h 0 year, day, hour hour global Age of host at the time of sampling; relevant scale depends on species and study, e.g. Could be seconds for amoebae or centuries for trees -host_body_temp Cel 0 degree Celsius degree Celsius global Core body temperature of the host when sample was collected -host_dry_mass kg 0 kilogram, gram kilogram global Measurement of dry mass -host_dry_mass g 0 kilogram, gram gram global Measurement of dry mass -host_height cm 0 centimeter, millimeter, meter centimeter global The height of subject -host_height mm 0 centimeter, millimeter, meter millimeter global The height of subject -host_height m 0 centimeter, millimeter, meter meter global The height of subject -host_length cm 0 centimeter, millimeter, meter centimeter global The length of subject -host_length mm 0 centimeter, millimeter, meter millimeter global The length of subject -host_length m 0 centimeter, millimeter, meter meter global The length of subject -host_tot_mass kg 0 kilogram, gram kilogram global Total mass of the host at collection, the unit depends on host -host_tot_mass g 0 kilogram, gram gram global Total mass of the host at collection, the unit depends on host -host_wet_mass kg 0 kilogram, gram kilogram global Measurement of wet mass -host_wet_mass g 0 kilogram, gram gram global Measurement of wet mass -humidity g/m3 0 gram per cubic meter gram per cubic meter global Amount of water vapour in the air, at the time of sampling -humidity_regm g/m3 0 gram per cubic meter gram per cubic meter global Information about treatment involving an exposure to varying degree of humidity; information about treatment involving use of growth hormones; should include amount of humidity administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens -indust_eff_percent % 0 percentage percentage global Percentage of industrial effluents received by wastewater treatment plant -inorg_particles mol/L 0 mole per liter, milligram per liter mole per liter global Concentration of particles such as sand, grit, metal particles, ceramics, etc.; can include multiple particles -inorg_particles milligram per liter 1 mole per liter, milligram per liter milligram per liter global Concentration of particles such as sand, grit, metal particles, ceramics, etc.; can include multiple particles -inside_lux kilowatt per square metre 1 kilowatt per square metre kilowatt per square metre global The recorded value at sampling time (power density) -iwf % 0 percent percent global Proportion of the produced fluids derived from injected water at the time of sampling. (e.g. 87%) -lbc_thirty ppm CaCO3/pH 1 ppm CaCO3/pH ppm CaCO3/pH global lime buffer capacity, determined after 30 minute incubation -lbceq ppm CaCO3/pH 1 ppm CaCO3/pH ppm CaCO3/pH global lime buffer capacity, determined at equilibrium after 5 day incubation -light_intensity lux 1 lux lux global Measurement of light intensity -light_regm lux; micrometer 1 lux; micrometer, nanometer, angstrom lux; micrometer global Information about treatment(s) involving exposure to light, including both light intensity and quality. -light_regm nanometer 1 lux; micrometer, nanometer, angstrom nanometer global Information about treatment(s) involving exposure to light, including both light intensity and quality. -light_regm angstrom 1 lux; micrometer, nanometer, angstrom angstrom global Information about treatment(s) involving exposure to light, including both light intensity and quality. -magnesium mol/L 0 mole per liter, milligram per liter, parts per million, micromole per kilogram mole per liter global Concentration of magnesium in the sample -magnesium milligram per liter 1 mole per liter, milligram per liter, parts per million, micromole per kilogram milligram per liter global Concentration of magnesium in the sample -magnesium parts per million 1 mole per liter, milligram per liter, parts per million, micromole per kilogram parts per million global Concentration of magnesium in the sample -magnesium micromole per kilogram 1 mole per liter, milligram per liter, parts per million, micromole per kilogram micromole per kilogram global Concentration of magnesium in the sample -manganese mg/kg (ppm) 1 mg/kg (ppm) mg/kg (ppm) global Concentration of manganese in the sample -mean_frict_vel m/s 0 meter per second meter per second global Measurement of mean friction velocity -mean_peak_frict_vel m/s 0 meter per second meter per second global Measurement of mean peak friction velocity -methane micromole per liter 1 micromole per liter, parts per billion, parts per million micromole per liter global Methane (gas) amount or concentration at the time of sampling -methane parts per billion 1 micromole per liter, parts per billion, parts per million parts per billion global Methane (gas) amount or concentration at the time of sampling -methane parts per million 1 micromole per liter, parts per billion, parts per million parts per million global Methane (gas) amount or concentration at the time of sampling -microbial_biomass ton 1 ton, kilogram, gram per kilogram soil ton global The part of the organic matter in the soil that constitutes living microorganisms smaller than 5-10 micrometer. If you keep this, you would need to have correction factors used for conversion to the final units -microbial_biomass kg 0 ton, kilogram, gram per kilogram soil kilogram global The part of the organic matter in the soil that constitutes living microorganisms smaller than 5-10 micrometer. If you keep this, you would need to have correction factors used for conversion to the final units -microbial_biomass gram per kilogram soil 1 ton, kilogram, gram per kilogram soil gram per kilogram soil global The part of the organic matter in the soil that constitutes living microorganisms smaller than 5-10 micrometer. If you keep this, you would need to have correction factors used for conversion to the final units -mineral_nutr_regm g 0 gram, mole per liter, milligram per liter gram global Information about treatment involving the use of mineral supplements; should include the name of mineral nutrient, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple mineral nutrient regimens -mineral_nutr_regm mol/L 0 gram, mole per liter, milligram per liter mole per liter global Information about treatment involving the use of mineral supplements; should include the name of mineral nutrient, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple mineral nutrient regimens -mineral_nutr_regm milligram per liter 1 gram, mole per liter, milligram per liter milligram per liter global Information about treatment involving the use of mineral supplements; should include the name of mineral nutrient, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple mineral nutrient regimens -n_alkanes micromole per liter 1 micromole per liter micromole per liter global Concentration of n-alkanes; can include multiple n-alkanes -nitrate micromole per liter 1 micromole per liter, milligram per liter, parts per million micromole per liter global Concentration of nitrate in the sample -nitrate milligram per liter 1 micromole per liter, milligram per liter, parts per million milligram per liter global Concentration of nitrate in the sample -nitrate parts per million 1 micromole per liter, milligram per liter, parts per million parts per million global Concentration of nitrate in the sample -nitrate_nitrogen mg/kg 1 mg/kg mg/kg global Concentration of nitrate nitrogen in the sample -nitrite micromole per liter 1 micromole per liter, milligram per liter, parts per million micromole per liter global Concentration of nitrite in the sample -nitrite milligram per liter 1 micromole per liter, milligram per liter, parts per million milligram per liter global Concentration of nitrite in the sample -nitrite parts per million 1 micromole per liter, milligram per liter, parts per million parts per million global Concentration of nitrite in the sample -nitrite_nitrogen mg/kg 1 mg/kg mg/kg global Concentration of nitrite nitrogen in the sample -nitro micromole per liter 1 micromole per liter micromole per liter global Concentration of nitrogen (total) -non_min_nutr_regm g 0 gram, mole per liter, milligram per liter gram global Information about treatment involving the exposure of plant to non-mineral nutrient such as oxygen, hydrogen or carbon; should include the name of non-mineral nutrient, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple non-mineral nutrient regimens -non_min_nutr_regm mol/L 0 gram, mole per liter, milligram per liter mole per liter global Information about treatment involving the exposure of plant to non-mineral nutrient such as oxygen, hydrogen or carbon; should include the name of non-mineral nutrient, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple non-mineral nutrient regimens -non_min_nutr_regm milligram per liter 1 gram, mole per liter, milligram per liter milligram per liter global Information about treatment involving the exposure of plant to non-mineral nutrient such as oxygen, hydrogen or carbon; should include the name of non-mineral nutrient, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple non-mineral nutrient regimens -org_carb micromole per liter 1 micromole per liter micromole per liter global Concentration of organic carbon -org_count_qpcr_info number of cells per gram (or ml or cm^2) 1 number of cells per gram (or ml or cm^2) number of cells per gram (or ml or cm^2) global If qpcr was used for the cell count, the target gene name, the primer sequence and the cycling conditions should also be provided. (Example: 16S rrna; FWD:ACGTAGCTATGACGT REV:GTGCTAGTCGAGTAC; initial denaturation:90C_5min; denaturation:90C_2min; annealing:52C_30 sec; elongation:72C_30 sec; 90 C for 1 min; final elongation:72C_5min; 30 cycles) -org_matter microgram per liter 1 microgram per liter microgram per liter global Concentration of organic matter -org_nitro microgram per liter 1 microgram per liter microgram per liter global Concentration of organic nitrogen -org_particles g/L 0 gram per liter gram per liter global Concentration of particles such as faeces, hairs, food, vomit, paper fibers, plant material, humus, etc. -organism_count number of cells per cubic meter 1 number of cells per cubic meter, number of cells per milliliter, number of cells per cubic centimeter number of cells per cubic meter global Total cell count of any organism (or group of organisms) per gram, volume or area of sample, should include name of organism followed by count. The method that was used for the enumeration (e.g. qPCR, atp, mpn, etc.) Should also be provided. (example: total prokaryotes; 3.5e7 cells per ml; qpcr) -organism_count number of cells per milliliter 1 number of cells per cubic meter, number of cells per milliliter, number of cells per cubic centimeter number of cells per milliliter global Total cell count of any organism (or group of organisms) per gram, volume or area of sample, should include name of organism followed by count. The method that was used for the enumeration (e.g. qPCR, atp, mpn, etc.) Should also be provided. (example: total prokaryotes; 3.5e7 cells per ml; qpcr) -organism_count number of cells per cubic centimeter 1 number of cells per cubic meter, number of cells per milliliter, number of cells per cubic centimeter number of cells per cubic centimeter global Total cell count of any organism (or group of organisms) per gram, volume or area of sample, should include name of organism followed by count. The method that was used for the enumeration (e.g. qPCR, atp, mpn, etc.) Should also be provided. (example: total prokaryotes; 3.5e7 cells per ml; qpcr) -owc_tvdss m 0 meter meter global Depth of the original oil water contact (OWC) zone (average) (m TVDSS) -oxygen milligram per liter 1 milligram per liter, parts per million milligram per liter global Oxygen (gas) amount or concentration at the time of sampling -oxygen parts per million 1 milligram per liter, parts per million parts per million global Oxygen (gas) amount or concentration at the time of sampling -part_org_carb microgram per liter 1 microgram per liter microgram per liter global Concentration of particulate organic carbon -part_org_nitro microgram per liter 1 microgram per liter, micromole per liter microgram per liter global Concentration of particulate organic nitrogen -part_org_nitro micromole per liter 1 microgram per liter, micromole per liter micromole per liter global Concentration of particulate organic nitrogen -particle_class micrometer 1 micrometer micrometer global Particles are classified, based on their size, into six general categories:clay, silt, sand, gravel, cobbles, and boulders; should include amount of particle preceded by the name of the particle type; can include multiple values -permeability mD 1 mD mD global Measure of the ability of a hydrocarbon resource to allow fluids to pass through it. (Additional information: https://en.wikipedia.org/wiki/Permeability_(earth_sciences)) -pesticide_regm g 0 gram, mole per liter, milligram per liter gram global Information about treatment involving use of insecticides; should include the name of pesticide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple pesticide regimens -pesticide_regm mol/L 0 gram, mole per liter, milligram per liter mole per liter global Information about treatment involving use of insecticides; should include the name of pesticide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple pesticide regimens -pesticide_regm milligram per liter 1 gram, mole per liter, milligram per liter milligram per liter global Information about treatment involving use of insecticides; should include the name of pesticide, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple pesticide regimens -petroleum_hydrocarb micromole per liter 1 micromole per liter micromole per liter global Concentration of petroleum hydrocarbon -phaeopigments milligram per cubic meter 1 milligram per cubic meter milligram per cubic meter global Concentration of phaeopigments; can include multiple phaeopigments -phosphate micromole per liter 1 micromole per liter micromole per liter global Concentration of phosphate -phosplipid_fatt_acid mole per gram 1 mole per gram, mole per liter mole per gram global Concentration of phospholipid fatty acids; can include multiple values -phosplipid_fatt_acid mol/L 0 mole per gram, mole per liter mole per liter global Concentration of phospholipid fatty acids; can include multiple values -photon_flux number of photons per second per unit area 1 number of photons per second per unit area number of photons per second per unit area global Measurement of photon flux -pollutants g 0 gram, mole per liter, milligram per liter, microgram per cubic meter gram global Pollutant types and, amount or concentrations measured at the time of sampling; can report multiple pollutants by entering numeric values preceded by name of pollutant -pollutants mol/L 0 gram, mole per liter, milligram per liter, microgram per cubic meter mole per liter global Pollutant types and, amount or concentrations measured at the time of sampling; can report multiple pollutants by entering numeric values preceded by name of pollutant -pollutants milligram per liter 1 gram, mole per liter, milligram per liter, microgram per cubic meter milligram per liter global Pollutant types and, amount or concentrations measured at the time of sampling; can report multiple pollutants by entering numeric values preceded by name of pollutant -pollutants microgram per cubic meter 1 gram, mole per liter, milligram per liter, microgram per cubic meter microgram per cubic meter global Pollutant types and, amount or concentrations measured at the time of sampling; can report multiple pollutants by entering numeric values preceded by name of pollutant -porosity % 0 percentage percentage global Porosity of deposited sediment is volume of voids divided by the total volume of sample -potassium milligram per liter 1 milligram per liter, parts per million milligram per liter global Concentration of potassium in the sample -potassium parts per million 1 milligram per liter, parts per million parts per million global Concentration of potassium in the sample -pour_point Cel 0 degree Celsius degree Celsius global Temperature at which a liquid becomes semi solid and loses its flow characteristics. In crude oil a high¬†pour point¬†is generally associated with a high paraffin content, typically found in crude deriving from a larger proportion of plant material. (soure: https://en.wikipedia.org/wiki/pour_point) -pressure atm 0 atmosphere atmosphere global Pressure to which the sample is subject to, in atmospheres -primary_prod milligram per cubic meter per day 1 milligram per cubic meter per day, gram per square meter per day milligram per cubic meter per day global Measurement of primary production, generally measured as isotope uptake -primary_prod gram per square meter per day 1 milligram per cubic meter per day, gram per square meter per day gram per square meter per day global Measurement of primary production, generally measured as isotope uptake -prod_rate m3/d 0 cubic meter per day cubic meter per day global Oil and/or gas production rates per well (e.g. 524 m3 / day) -radiation_regm rad 0 rad, gray rad global Information about treatment involving exposure of plant or a plant part to a particular radiation regimen; should include the radiation type, amount or intensity administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple radiation regimens -radiation_regm Gy 0 rad, gray gray global Information about treatment involving exposure of plant or a plant part to a particular radiation regimen; should include the radiation type, amount or intensity administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple radiation regimens -rainfall_regm mm 0 millimeter millimeter global Information about treatment involving an exposure to a given amount of rainfall, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens -redox_potential mV 0 millivolt millivolt global Redox potential, measured relative to a hydrogen cell, indicating oxidation or reduction potential -rel_air_humidity % 0 percentage percentage global Partial vapor and air pressure, density of the vapor and air, or by the actual mass of the vapor and air -rel_humidity_out gram of air 1 gram of air, kilogram of air gram of air global The recorded outside relative humidity value at the time of sampling -rel_humidity_out kilogram of air 1 gram of air, kilogram of air kilogram of air global The recorded outside relative humidity value at the time of sampling -resins_pc % 0 percent percent global Saturate, Aromatic, Resin and Asphaltene¬†(SARA) is an analysis method that divides¬†crude oil¬†components according to their polarizability and polarity. There are three main methods to obtain SARA results. The most popular one is known as the Iatroscan TLC-FID and is referred to as IP-143 (source: https://en.wikipedia.org/wiki/Saturate,_aromatic,_resin_and_asphaltene) -room_air_exch_rate L/h 0 liter per hour liter per hour global The rate at which outside air replaces indoor air in a given space -room_dim m 0 meter meter global The length, width and height of sampling room -room_door_dist m 0 meter meter global Distance between doors (meters) in the hallway between the sampling room and adjacent rooms -room_net_area square feet 1 square feet, square meter square feet global The net floor area of sampling room. Net area excludes wall thicknesses -room_net_area m2 0 square feet, square meter square meter global The net floor area of sampling room. Net area excludes wall thicknesses -room_vol cubic feet 1 cubic feet, cubic meter cubic feet global Volume of sampling room -room_vol m3 0 cubic feet, cubic meter cubic meter global Volume of sampling room -root_med_carbon milligram per liter 1 milligram per liter milligram per liter global Source of organic carbon in the culture rooting medium; e.g. sucrose. -root_med_macronutr milligram per liter 1 milligram per liter milligram per liter global Measurement of the culture rooting medium macronutrients (N,P, K, Ca, Mg, S); e.g. KH2PO4 (170¬†mg/L). -root_med_micronutr milligram per liter 1 milligram per liter milligram per liter global Measurement of the culture rooting medium micronutrients (Fe, Mn, Zn, B, Cu, Mo); e.g. H3BO3 (6.2¬†mg/L). -root_med_regl milligram per liter 1 milligram per liter milligram per liter global Growth regulators in the culture rooting medium such as cytokinins, auxins, gybberellins, abscisic acid; e.g. 0.5¬†mg/L NAA. -root_med_suppl milligram per liter 1 milligram per liter milligram per liter global Organic supplements of the culture rooting medium, such as vitamins, amino acids, organic acids, antibiotics activated charcoal; e.g. nicotinic acid (0.5¬†mg/L). -salinity psu 0 practical salinity unit, percentage practical salinity unit global The total concentration of all dissolved salts in a liquid or solid sample. While salinity can be measured by a complete chemical analysis, this method is difficult and time consuming. More often, it is instead derived from the conductivity measurement. This is known as practical salinity. These derivations compare the specific conductance of the sample to a salinity standard such as seawater. -salinity % 0 practical salinity unit, percentage percentage global The total concentration of all dissolved salts in a liquid or solid sample. While salinity can be measured by a complete chemical analysis, this method is difficult and time consuming. More often, it is instead derived from the conductivity measurement. This is known as practical salinity. These derivations compare the specific conductance of the sample to a salinity standard such as seawater. -salt_regm g 0 gram, microgram, mole per liter, gram per liter gram global Information about treatment involving use of salts as supplement to liquid and soil growth media; should include the name of salt, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple salt regimens -salt_regm ug 0 gram, microgram, mole per liter, gram per liter microgram global Information about treatment involving use of salts as supplement to liquid and soil growth media; should include the name of salt, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple salt regimens -salt_regm mol/L 0 gram, microgram, mole per liter, gram per liter mole per liter global Information about treatment involving use of salts as supplement to liquid and soil growth media; should include the name of salt, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple salt regimens -salt_regm g/L 0 gram, microgram, mole per liter, gram per liter gram per liter global Information about treatment involving use of salts as supplement to liquid and soil growth media; should include the name of salt, amount administered, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple salt regimens -samp_loc_corr_rate millimeter per year 1 millimeter per year millimeter per year global Metal corrosion rate is the speed of metal deterioration due to environmental conditions. As environmental conditions change corrosion rates change accordingly. Therefore, long term corrosion rates are generally more informative than short term rates and for that reason they are preferred during reporting. In the case of suspected MIC, corrosion rate measurements at the time of sampling might provide insights into the involvement of certain microbial community members in MIC as well as potential microbial interplays -samp_md m 0 meter meter global "In non deviated well, measured depth is equal to the true vertical depth, TVD (TVD=TVDSS plus the reference or datum it refers to). In deviated wells, the MD is the length of trajectory of the borehole measured from the same reference or datum. Common datums used are ground level (GL), drilling rig floor (DF), rotary table (RT), kelly bushing (KB) and mean sea level (MSL). If ""other"" is specified, please propose entry in ""additional info"" field" -samp_preserv mL 0 milliliter milliliter global Preservative added to the sample (e.g. Rnalater, alcohol, formaldehyde, etc.). Where appropriate include volume added (e.g. Rnalater; 2 ml) -samp_size millliter 1 millliter, gram, milligram, liter millliter global The total amount or size (volume (ml), mass (g) or area (m2) ) of sample collected. -samp_size g 0 millliter, gram, milligram, liter gram global The total amount or size (volume (ml), mass (g) or area (m2) ) of sample collected. -samp_size mg 0 millliter, gram, milligram, liter milligram global The total amount or size (volume (ml), mass (g) or area (m2) ) of sample collected. -samp_size L 0 millliter, gram, milligram, liter liter global The total amount or size (volume (ml), mass (g) or area (m2) ) of sample collected. -samp_store_temp Cel 0 degree Celsius degree Celsius global Temperature at which sample was stored, e.g. -80 degree Celsius -samp_time_out h 0 hour hour global The recent and long term history of outside sampling -samp_transport_cond days;degree Celsius 1 days;degree Celsius days;degree Celsius global Sample transport duration (in days or hrs) and temperature the sample was exposed to (e.g. 5.5 days; 20 ¬∞C) -samp_tvdss m 0 meter meter global Depth of the sample i.e. The vertical distance between the sea level and the sampled position in the subsurface. Depth can be reported as an interval for subsurface samples e.g. 1325.75-1362.25 m -samp_vol_we_dna_ext millliter 1 millliter, gram, milligram, square centimeter millliter global Volume (ml) or mass (g) of total collected sample processed for DNA extraction. Note: total sample collected should be entered under the term Sample Size (MIXS:0000001). -samp_vol_we_dna_ext g 0 millliter, gram, milligram, square centimeter gram global Volume (ml) or mass (g) of total collected sample processed for DNA extraction. Note: total sample collected should be entered under the term Sample Size (MIXS:0000001). -samp_vol_we_dna_ext mg 0 millliter, gram, milligram, square centimeter milligram global Volume (ml) or mass (g) of total collected sample processed for DNA extraction. Note: total sample collected should be entered under the term Sample Size (MIXS:0000001). -samp_vol_we_dna_ext cm2 0 millliter, gram, milligram, square centimeter square centimeter global Volume (ml) or mass (g) of total collected sample processed for DNA extraction. Note: total sample collected should be entered under the term Sample Size (MIXS:0000001). -saturates_pc % 0 percent percent global Saturate, Aromatic, Resin and Asphaltene¬†(SARA) is an analysis method that divides¬†crude oil¬†components according to their polarizability and polarity. There are three main methods to obtain SARA results. The most popular one is known as the Iatroscan TLC-FID and is referred to as IP-143 (source: https://en.wikipedia.org/wiki/Saturate,_aromatic,_resin_and_asphaltene) -season_precpt mm 0 millimeter millimeter global The average of all seasonal precipitation values known, or an estimated equivalent value derived by such methods as regional indexes or Isohyetal maps. -season_temp Cel 0 degree Celsius degree Celsius global Mean seasonal temperature -silicate micromole per liter 1 micromole per liter micromole per liter global Concentration of silicate -size_frac_low micrometer 1 micrometer micrometer global Refers to the mesh/pore size used to pre-filter/pre-sort the sample. Materials larger than the size threshold are excluded from the sample -size_frac_up micrometer 1 micrometer micrometer global Refers to the mesh/pore size used to retain the sample. Materials smaller than the size threshold are excluded from the sample -slope_aspect degree 1 degree degree global The direction a slope faces. While looking down a slope use a compass to record the direction you are facing (direction or degrees); e.g., nw or 315 degrees. This measure provides an indication of sun and wind exposure that will influence soil temperature and evapotranspiration. -slope_gradient % 0 percentage percentage global Commonly called 'slope'. The angle between ground surface and a horizontal line (in percent). This is the direction that overland water would flow. This measure is usually taken with a hand level meter or clinometer -sludge_retent_time hours 1 hours hours global The time activated sludge remains in reactor -sodium milligram per liter 1 milligram per liter, parts per million milligram per liter global Sodium concentration in the sample -sodium parts per million 1 milligram per liter, parts per million parts per million global Sodium concentration in the sample -solar_irradiance kilowatts per square meter per day 1 kilowatts per square meter per day, ergs per square centimeter per second kilowatts per square meter per day global The amount of solar energy that arrives at a specific area of a surface during a specific time interval -solar_irradiance ergs per square centimeter per second 1 kilowatts per square meter per day, ergs per square centimeter per second ergs per square centimeter per second global The amount of solar energy that arrives at a specific area of a surface during a specific time interval -soluble_inorg_mat g 0 gram, microgram, mole per liter, gram per liter, parts per million gram global Concentration of substances such as ammonia, road-salt, sea-salt, cyanide, hydrogen sulfide, thiocyanates, thiosulfates, etc. -soluble_inorg_mat ug 0 gram, microgram, mole per liter, gram per liter, parts per million microgram global Concentration of substances such as ammonia, road-salt, sea-salt, cyanide, hydrogen sulfide, thiocyanates, thiosulfates, etc. -soluble_inorg_mat mol/L 0 gram, microgram, mole per liter, gram per liter, parts per million mole per liter global Concentration of substances such as ammonia, road-salt, sea-salt, cyanide, hydrogen sulfide, thiocyanates, thiosulfates, etc. -soluble_inorg_mat g/L 0 gram, microgram, mole per liter, gram per liter, parts per million gram per liter global Concentration of substances such as ammonia, road-salt, sea-salt, cyanide, hydrogen sulfide, thiocyanates, thiosulfates, etc. -soluble_inorg_mat parts per million 1 gram, microgram, mole per liter, gram per liter, parts per million parts per million global Concentration of substances such as ammonia, road-salt, sea-salt, cyanide, hydrogen sulfide, thiocyanates, thiosulfates, etc. -soluble_org_mat g 0 gram, microgram, mole per liter, gram per liter, parts per million gram global Concentration of substances such as urea, fruit sugars, soluble proteins, drugs, pharmaceuticals, etc. -soluble_org_mat ug 0 gram, microgram, mole per liter, gram per liter, parts per million microgram global Concentration of substances such as urea, fruit sugars, soluble proteins, drugs, pharmaceuticals, etc. -soluble_org_mat mol/L 0 gram, microgram, mole per liter, gram per liter, parts per million mole per liter global Concentration of substances such as urea, fruit sugars, soluble proteins, drugs, pharmaceuticals, etc. -soluble_org_mat g/L 0 gram, microgram, mole per liter, gram per liter, parts per million gram per liter global Concentration of substances such as urea, fruit sugars, soluble proteins, drugs, pharmaceuticals, etc. -soluble_org_mat parts per million 1 gram, microgram, mole per liter, gram per liter, parts per million parts per million global Concentration of substances such as urea, fruit sugars, soluble proteins, drugs, pharmaceuticals, etc. -soluble_react_phosp micromole per liter 1 micromole per liter, milligram per liter, parts per million micromole per liter global Concentration of soluble reactive phosphorus -soluble_react_phosp milligram per liter 1 micromole per liter, milligram per liter, parts per million milligram per liter global Concentration of soluble reactive phosphorus -soluble_react_phosp parts per million 1 micromole per liter, milligram per liter, parts per million parts per million global Concentration of soluble reactive phosphorus -specific_humidity gram of air 1 gram of air, kilogram of air gram of air global The mass of water vapour in a unit mass of moist air, usually expressed as grams of vapour per kilogram of air, or, in air conditioning, as grains per pound. -specific_humidity kilogram of air 1 gram of air, kilogram of air kilogram of air global The mass of water vapour in a unit mass of moist air, usually expressed as grams of vapour per kilogram of air, or, in air conditioning, as grains per pound. -sulfate micromole per liter 1 micromole per liter, milligram per liter, parts per million micromole per liter global Concentration of sulfate in the sample -sulfate milligram per liter 1 micromole per liter, milligram per liter, parts per million milligram per liter global Concentration of sulfate in the sample -sulfate parts per million 1 micromole per liter, milligram per liter, parts per million parts per million global Concentration of sulfate in the sample -sulfate_fw milligram per liter 1 milligram per liter milligram per liter global Original sulfate concentration in the hydrocarbon resource -sulfide micromole per liter 1 micromole per liter, milligram per liter, parts per million micromole per liter global Concentration of sulfide in the sample -sulfide milligram per liter 1 micromole per liter, milligram per liter, parts per million milligram per liter global Concentration of sulfide in the sample -sulfide parts per million 1 micromole per liter, milligram per liter, parts per million parts per million global Concentration of sulfide in the sample -surf_humidity % 0 percentage percentage global Surfaces: water activity as a function of air and material moisture -surf_moisture parts per million 1 parts per million, gram per cubic meter, gram per square meter parts per million global Water held on a surface -surf_moisture g/m3 0 parts per million, gram per cubic meter, gram per square meter gram per cubic meter global Water held on a surface -surf_moisture gram per square meter 1 parts per million, gram per cubic meter, gram per square meter gram per square meter global Water held on a surface -surf_temp Cel 0 degree Celsius degree Celsius global Temperature of the surface at the time of sampling -suspend_part_matter milligram per liter 1 milligram per liter milligram per liter global Concentration of suspended particulate matter -suspend_solids g 0 gram, microgram, milligram per liter, mole per liter, gram per liter, part per million gram global Concentration of substances including a wide variety of material, such as silt, decaying plant and animal matter; can include multiple substances -suspend_solids ug 0 gram, microgram, milligram per liter, mole per liter, gram per liter, part per million microgram global Concentration of substances including a wide variety of material, such as silt, decaying plant and animal matter; can include multiple substances -suspend_solids milligram per liter 1 gram, microgram, milligram per liter, mole per liter, gram per liter, part per million milligram per liter global Concentration of substances including a wide variety of material, such as silt, decaying plant and animal matter; can include multiple substances -suspend_solids mol/L 0 gram, microgram, milligram per liter, mole per liter, gram per liter, part per million mole per liter global Concentration of substances including a wide variety of material, such as silt, decaying plant and animal matter; can include multiple substances -suspend_solids g/L 0 gram, microgram, milligram per liter, mole per liter, gram per liter, part per million gram per liter global Concentration of substances including a wide variety of material, such as silt, decaying plant and animal matter; can include multiple substances -suspend_solids part per million 1 gram, microgram, milligram per liter, mole per liter, gram per liter, part per million part per million global Concentration of substances including a wide variety of material, such as silt, decaying plant and animal matter; can include multiple substances -tan milligram per liter 1 milligram per liter milligram per liter global Total Acid Number¬†(TAN) is a measurement of acidity that is determined by the amount of¬†potassium hydroxide¬†in milligrams that is needed to neutralize the acids in one gram of oil.¬†It is an important quality measurement of¬†crude oil. (source: https://en.wikipedia.org/wiki/Total_acid_number) -temp Cel 0 degree Celsius degree Celsius global Temperature of the sample at the time of sampling. -temp_out Cel 0 degree Celsius degree Celsius global The recorded temperature value at sampling time outside -toluene milligram per liter 1 milligram per liter, parts per million milligram per liter global Concentration of toluene in the sample -toluene parts per million 1 milligram per liter, parts per million parts per million global Concentration of toluene in the sample -tot_carb microgram per liter 1 microgram per liter microgram per liter global Total carbon content -tot_depth_water_col m 0 meter meter global Measurement of total depth of water column -tot_diss_nitro microgram per liter 1 microgram per liter microgram per liter global Total dissolved nitrogen concentration, reported as nitrogen, measured by: total dissolved nitrogen = NH4 + NO3NO2 + dissolved organic nitrogen -tot_inorg_nitro microgram per liter 1 microgram per liter microgram per liter global Total inorganic nitrogen content -tot_iron milligram per liter 1 milligram per liter, milligram per kilogram milligram per liter global Concentration of total iron in the sample -tot_iron milligram per kilogram 1 milligram per liter, milligram per kilogram milligram per kilogram global Concentration of total iron in the sample -tot_nitro microgram per liter 1 microgram per liter, micromole per liter, milligram per liter microgram per liter global Total nitrogen concentration of water samples, calculated by: total nitrogen = total dissolved nitrogen + particulate nitrogen. Can also be measured without filtering, reported as nitrogen -tot_nitro micromole per liter 1 microgram per liter, micromole per liter, milligram per liter micromole per liter global Total nitrogen concentration of water samples, calculated by: total nitrogen = total dissolved nitrogen + particulate nitrogen. Can also be measured without filtering, reported as nitrogen -tot_nitro milligram per liter 1 microgram per liter, micromole per liter, milligram per liter milligram per liter global Total nitrogen concentration of water samples, calculated by: total nitrogen = total dissolved nitrogen + particulate nitrogen. Can also be measured without filtering, reported as nitrogen -tot_nitro_content microgram per liter 1 microgram per liter, micromole per liter, milligram per liter microgram per liter global Total nitrogen content of the sample -tot_nitro_content micromole per liter 1 microgram per liter, micromole per liter, milligram per liter micromole per liter global Total nitrogen content of the sample -tot_nitro_content milligram per liter 1 microgram per liter, micromole per liter, milligram per liter milligram per liter global Total nitrogen content of the sample -tot_org_carb gram Carbon per kilogram sample material 1 gram Carbon per kilogram sample material gram Carbon per kilogram sample material global Definition for soil: total organic carbon content of the soil, definition otherwise: total organic carbon content -tot_part_carb microgram per liter 1 microgram per liter, micromole per liter microgram per liter global Total particulate carbon content -tot_part_carb micromole per liter 1 microgram per liter, micromole per liter micromole per liter global Total particulate carbon content -tot_phosp micromole per liter 1 micromole per liter, milligram per liter, parts per million micromole per liter global Total phosphorus concentration in the sample, calculated by: total phosphorus = total dissolved phosphorus + particulate phosphorus -tot_phosp milligram per liter 1 micromole per liter, milligram per liter, parts per million milligram per liter global Total phosphorus concentration in the sample, calculated by: total phosphorus = total dissolved phosphorus + particulate phosphorus -tot_phosp parts per million 1 micromole per liter, milligram per liter, parts per million parts per million global Total phosphorus concentration in the sample, calculated by: total phosphorus = total dissolved phosphorus + particulate phosphorus -tot_phosphate microgram per liter 1 microgram per liter, micromole per liter microgram per liter global Total amount or concentration of phosphate -tot_phosphate micromole per liter 1 microgram per liter, micromole per liter micromole per liter global Total amount or concentration of phosphate -tot_sulfur milligram per liter 1 milligram per liter, parts per million milligram per liter global Concentration of total sulfur in the sample -tot_sulfur parts per million 1 milligram per liter, parts per million parts per million global Concentration of total sulfur in the sample -turbidity formazin turbidity unit 1 formazin turbidity unit, formazin nephelometric units formazin turbidity unit global Measure of the amount of cloudiness or haziness in water caused by individual particles -turbidity formazin nephelometric units 1 formazin turbidity unit, formazin nephelometric units formazin nephelometric units global Measure of the amount of cloudiness or haziness in water caused by individual particles -tvdss_of_hcr_press m 0 meter meter global True vertical depth subsea (TVDSS) of the hydrocarbon resource where the original pressure was measured (e.g. 1578 m). -tvdss_of_hcr_temp m 0 meter meter global True vertical depth subsea (TVDSS) of the hydrocarbon resource where the original temperature was measured (e.g. 1345 m). -ventilation_rate cubic meter per minute 1 cubic meter per minute, liters per second cubic meter per minute global Ventilation rate of the system in the sampled premises -ventilation_rate liters per second 1 cubic meter per minute, liters per second liters per second global Ventilation rate of the system in the sampled premises -vfa milligram per liter 1 milligram per liter, parts per million milligram per liter global Concentration of Volatile Fatty Acids in the sample -vfa parts per million 1 milligram per liter, parts per million parts per million global Concentration of Volatile Fatty Acids in the sample -vfa_fw milligram per liter 1 milligram per liter milligram per liter global Original volatile fatty acid concentration in the hydrocarbon resource -viscosity cP at degree Celsius 1 cP at degree Celsius cP at degree Celsius global A measure of oil's resistance¬†to gradual deformation by¬†shear stress¬†or¬†tensile stress (e.g. 3.5 cp; 100 ¬∞C) -volatile_org_comp microgram per cubic meter 1 microgram per cubic meter, parts per million, nanogram per liter microgram per cubic meter global Concentration of carbon-based chemicals that easily evaporate at room temperature; can report multiple volatile organic compounds by entering numeric values preceded by name of compound -volatile_org_comp parts per million 1 microgram per cubic meter, parts per million, nanogram per liter parts per million global Concentration of carbon-based chemicals that easily evaporate at room temperature; can report multiple volatile organic compounds by entering numeric values preceded by name of compound -volatile_org_comp ng/L 0 microgram per cubic meter, parts per million, nanogram per liter nanogram per liter global Concentration of carbon-based chemicals that easily evaporate at room temperature; can report multiple volatile organic compounds by entering numeric values preceded by name of compound -wall_area m2 0 square meter square meter global The total area of the sampled room's walls -wall_height cm 0 centimeter centimeter global The average height of the walls in the sampled room -wall_thermal_mass joule per degree Celsius 1 joule per degree Celsius joule per degree Celsius global The ability of the wall to provide inertia against temperature fluctuations. Generally this means concrete or concrete block that is either exposed or covered only with paint -water_content gram per gram or cubic centimeter per cubic centimeter 1 gram per gram or cubic centimeter per cubic centimeter gram per gram or cubic centimeter per cubic centimeter class_usage Biosample -water_content gram per gram or cubic centimeter per cubic centimeter 1 gram per gram or cubic centimeter per cubic centimeter gram per gram or cubic centimeter per cubic centimeter global Water content measurement -water_current m3/s 0 cubic meter per second, knots cubic meter per second global Measurement of magnitude and direction of flow within a fluid -water_current knots 1 cubic meter per second, knots knots global Measurement of magnitude and direction of flow within a fluid -water_cut % 0 percent percent global Current amount of water (%) in a produced fluid stream; or the average of the combined streams -water_feat_size m2 0 square meter square meter global The size of the water feature -water_prod_rate m3/d 0 cubic meter per day cubic meter per day global Water production rates per well (e.g. 987 m3 / day) -water_temp_regm Cel 0 degree Celsius degree Celsius global Information about treatment involving an exposure to water with varying degree of temperature, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens -watering_regm mL 0 milliliter, liter milliliter global Information about treatment involving an exposure to watering frequencies, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens -watering_regm L 0 milliliter, liter liter global Information about treatment involving an exposure to watering frequencies, treatment regimen including how many times the treatment was repeated, how long each treatment lasted, and the start and end time of the entire treatment; can include multiple regimens -wind_speed m/s 0 meter per second, kilometer per hour meter per second global Speed of wind measured at the time of sampling -wind_speed km/h 0 meter per second, kilometer per hour kilometer per hour global Speed of wind measured at the time of sampling -window_size inch 1 inch, meter inch global The window's length and width -window_size m 0 inch, meter meter global The window's length and width -xylene milligram per liter 1 milligram per liter, parts per million milligram per liter global Concentration of xylene in the sample -xylene parts per million 1 milligram per liter, parts per million parts per million global Concentration of xylene in the sample -zinc mg/kg (ppm) 1 mg/kg (ppm) mg/kg (ppm) global Concentration of zinc in the sample diff --git a/units/output/schema_ucum_input.tsv b/units/output/schema_ucum_input.tsv deleted file mode 100644 index 311f5437ae..0000000000 --- a/units/output/schema_ucum_input.tsv +++ /dev/null @@ -1,370 +0,0 @@ -slot ucum_notation problem -abs_air_humidity gram per gram 1 -abs_air_humidity kilogram per kilogram 1 -abs_air_humidity kg 0 -abs_air_humidity pound 1 -agrochem_addition g 0 -agrochem_addition mol/L 0 -agrochem_addition milligram per liter 1 -air_PM_concen micrograms per cubic meter 1 -air_temp Cel 0 -air_temp_regm m 0 -al_sat % 0 -alkalinity milliequivalent per liter 1 -alkalinity milligram per liter 1 -alkyl_diethers mol/L 0 -aminopept_act mole per liter per hour 1 -ammonium micromole per liter 1 -ammonium milligram per liter 1 -ammonium parts per million 1 -ammonium_nitrogen mg/kg 1 -amount_light lux 1 -amount_light lumens per square meter 1 -annual_precpt mm 0 -annual_temp Cel 0 -antibiotic_regm mg 0 -api degrees API 1 -aromatics_pc % 0 -asphaltenes_pc % 0 -avg_dew_point Cel 0 -avg_temp Cel 0 -bac_prod milligram per cubic meter per day 1 -bac_resp milligram per cubic meter per day 1 -bac_resp micromole oxygen per liter per hour 1 -bacteria_carb_prod ng/h 0 -barometric_press mbar 0 -benzene milligram per liter 1 -benzene parts per million 1 -biochem_oxygen_dem milligram per liter 1 -biocide_admin_method milligram per liter 1 -biomass ton 1 -biomass kg 0 -biomass g 0 -bishomohopanol microgram per liter 1 -bishomohopanol microgram per gram 1 -blood_press_diast millimeter mercury 1 -blood_press_syst millimeter mercury 1 -bromide parts per million 1 -built_struc_age a 0 -calcium milligram per liter 1 -calcium micromole per liter 1 -calcium parts per million 1 -carb_dioxide micromole per liter 1 -carb_dioxide parts per million 1 -carb_monoxide micromole per liter 1 -carb_monoxide parts per million 1 -ceil_area m2 0 -ceil_thermal_mass joule per degree Celsius 1 -chem_mutagen milligram per liter 1 -chem_oxygen_dem milligram per liter 1 -chem_treat_method milligram per liter 1 -chloride milligram per liter 1 -chloride parts per million 1 -chlorophyll milligram per cubic meter 1 -chlorophyll microgram per liter 1 -conduc milliSiemens per centimeter 1 -density g/m3 0 -density g/cm3 0 -dew_point Cel 0 -diether_lipids ng/L 0 -diss_carb_dioxide micromole per liter 1 -diss_carb_dioxide milligram per liter 1 -diss_hydrogen micromole per liter 1 -diss_inorg_carb microgram per liter 1 -diss_inorg_carb milligram per liter 1 -diss_inorg_carb parts per million 1 -diss_inorg_nitro microgram per liter 1 -diss_inorg_nitro micromole per liter 1 -diss_inorg_phosp microgram per liter 1 -diss_inorg_phosp milligram per liter 1 -diss_inorg_phosp parts per million 1 -diss_iron milligram per liter 1 -diss_org_carb micromole per liter 1 -diss_org_carb milligram per liter 1 -diss_org_nitro microgram per liter 1 -diss_org_nitro milligram per liter 1 -diss_oxygen micromole per kilogram 1 -diss_oxygen milligram per liter 1 -diss_oxygen_fluid micromole per kilogram 1 -diss_oxygen_fluid milligram per liter 1 -door_size m2 0 -down_par microEinstein per square meter per second 1 -down_par microEinstein per square centimeter per second 1 -efficiency_percent micromole per liter 1 -emulsions g/L 0 -ethylbenzene milligram per liter 1 -ethylbenzene parts per million 1 -exp_duct m2 0 -fertilizer_regm g 0 -fertilizer_regm mol/L 0 -fertilizer_regm milligram per liter 1 -floor_age years 1 -floor_age weeks 1 -floor_age days 1 -floor_area m2 0 -floor_thermal_mass joule per degree Celsius 1 -fluor milligram chlorophyll a per cubic meter 1 -fluor volts 1 -fungicide_regm g 0 -fungicide_regm mol/L 0 -fungicide_regm milligram per liter 1 -gaseous_environment micromole per liter 1 -gaseous_substances micromole per liter 1 -glucosidase_act mol per liter per hour 1 -gravity meter per square second 1 -gravity g 1 -growth_hormone_regm g 0 -growth_hormone_regm mol/L 0 -growth_hormone_regm milligram per liter 1 -hcr_fw_salinity milligram per liter 1 -hcr_pressure atm 0 -hcr_pressure kilopascal 1 -hcr_temp Cel 0 -heavy_metals microgram per gram 1 -height_carper_fiber cm 0 -herbicide_regm g 0 -herbicide_regm mol/L 0 -herbicide_regm milligram per liter 1 -host_age a 0 -host_age d 0 -host_age h 0 -host_body_temp Cel 0 -host_dry_mass kg 0 -host_dry_mass g 0 -host_height cm 0 -host_height mm 0 -host_height m 0 -host_length cm 0 -host_length mm 0 -host_length m 0 -host_tot_mass kg 0 -host_tot_mass g 0 -host_wet_mass kg 0 -host_wet_mass g 0 -humidity g/m3 0 -humidity_regm g/m3 0 -indust_eff_percent % 0 -inorg_particles mol/L 0 -inorg_particles milligram per liter 1 -inside_lux kilowatt per square metre 1 -iwf % 0 -lbc_thirty ppm CaCO3/pH 1 -lbceq ppm CaCO3/pH 1 -light_intensity lux 1 -light_regm lux; micrometer 1 -light_regm nanometer 1 -light_regm angstrom 1 -magnesium mol/L 0 -magnesium milligram per liter 1 -magnesium parts per million 1 -magnesium micromole per kilogram 1 -manganese mg/kg (ppm) 1 -mean_frict_vel m/s 0 -mean_peak_frict_vel m/s 0 -methane micromole per liter 1 -methane parts per billion 1 -methane parts per million 1 -microbial_biomass ton 1 -microbial_biomass kg 0 -microbial_biomass gram per kilogram soil 1 -mineral_nutr_regm g 0 -mineral_nutr_regm mol/L 0 -mineral_nutr_regm milligram per liter 1 -n_alkanes micromole per liter 1 -nitrate micromole per liter 1 -nitrate milligram per liter 1 -nitrate parts per million 1 -nitrate_nitrogen mg/kg 1 -nitrite micromole per liter 1 -nitrite milligram per liter 1 -nitrite parts per million 1 -nitrite_nitrogen mg/kg 1 -nitro micromole per liter 1 -non_min_nutr_regm g 0 -non_min_nutr_regm mol/L 0 -non_min_nutr_regm milligram per liter 1 -org_carb micromole per liter 1 -org_count_qpcr_info number of cells per gram (or ml or cm^2) 1 -org_matter microgram per liter 1 -org_nitro microgram per liter 1 -org_particles g/L 0 -organism_count number of cells per cubic meter 1 -organism_count number of cells per milliliter 1 -organism_count number of cells per cubic centimeter 1 -owc_tvdss m 0 -oxygen milligram per liter 1 -oxygen parts per million 1 -part_org_carb microgram per liter 1 -part_org_nitro microgram per liter 1 -part_org_nitro micromole per liter 1 -particle_class micrometer 1 -permeability mD 1 -pesticide_regm g 0 -pesticide_regm mol/L 0 -pesticide_regm milligram per liter 1 -petroleum_hydrocarb micromole per liter 1 -phaeopigments milligram per cubic meter 1 -phosphate micromole per liter 1 -phosplipid_fatt_acid mole per gram 1 -phosplipid_fatt_acid mol/L 0 -photon_flux number of photons per second per unit area 1 -pollutants g 0 -pollutants mol/L 0 -pollutants milligram per liter 1 -pollutants microgram per cubic meter 1 -porosity % 0 -potassium milligram per liter 1 -potassium parts per million 1 -pour_point Cel 0 -pressure atm 0 -primary_prod milligram per cubic meter per day 1 -primary_prod gram per square meter per day 1 -prod_rate m3/d 0 -radiation_regm rad 0 -radiation_regm Gy 0 -rainfall_regm mm 0 -redox_potential mV 0 -rel_air_humidity % 0 -rel_humidity_out gram of air 1 -rel_humidity_out kilogram of air 1 -resins_pc % 0 -room_air_exch_rate L/h 0 -room_dim m 0 -room_door_dist m 0 -room_net_area square feet 1 -room_net_area m2 0 -room_vol cubic feet 1 -room_vol m3 0 -root_med_carbon milligram per liter 1 -root_med_macronutr milligram per liter 1 -root_med_micronutr milligram per liter 1 -root_med_regl milligram per liter 1 -root_med_suppl milligram per liter 1 -salinity psu 0 -salinity % 0 -salt_regm g 0 -salt_regm ug 0 -salt_regm mol/L 0 -salt_regm g/L 0 -samp_loc_corr_rate millimeter per year 1 -samp_md m 0 -samp_preserv mL 0 -samp_size millliter 1 -samp_size g 0 -samp_size mg 0 -samp_size L 0 -samp_store_temp Cel 0 -samp_time_out h 0 -samp_transport_cond days;degree Celsius 1 -samp_tvdss m 0 -samp_vol_we_dna_ext millliter 1 -samp_vol_we_dna_ext g 0 -samp_vol_we_dna_ext mg 0 -samp_vol_we_dna_ext cm2 0 -saturates_pc % 0 -season_precpt mm 0 -season_temp Cel 0 -silicate micromole per liter 1 -size_frac_low micrometer 1 -size_frac_up micrometer 1 -slope_aspect degree 1 -slope_gradient % 0 -sludge_retent_time hours 1 -sodium milligram per liter 1 -sodium parts per million 1 -solar_irradiance kilowatts per square meter per day 1 -solar_irradiance ergs per square centimeter per second 1 -soluble_inorg_mat g 0 -soluble_inorg_mat ug 0 -soluble_inorg_mat mol/L 0 -soluble_inorg_mat g/L 0 -soluble_inorg_mat parts per million 1 -soluble_org_mat g 0 -soluble_org_mat ug 0 -soluble_org_mat mol/L 0 -soluble_org_mat g/L 0 -soluble_org_mat parts per million 1 -soluble_react_phosp micromole per liter 1 -soluble_react_phosp milligram per liter 1 -soluble_react_phosp parts per million 1 -specific_humidity gram of air 1 -specific_humidity kilogram of air 1 -sulfate micromole per liter 1 -sulfate milligram per liter 1 -sulfate parts per million 1 -sulfate_fw milligram per liter 1 -sulfide micromole per liter 1 -sulfide milligram per liter 1 -sulfide parts per million 1 -surf_humidity % 0 -surf_moisture parts per million 1 -surf_moisture g/m3 0 -surf_moisture gram per square meter 1 -surf_temp Cel 0 -suspend_part_matter milligram per liter 1 -suspend_solids g 0 -suspend_solids ug 0 -suspend_solids milligram per liter 1 -suspend_solids mol/L 0 -suspend_solids g/L 0 -suspend_solids part per million 1 -tan milligram per liter 1 -temp Cel 0 -temp_out Cel 0 -toluene milligram per liter 1 -toluene parts per million 1 -tot_carb microgram per liter 1 -tot_depth_water_col m 0 -tot_diss_nitro microgram per liter 1 -tot_inorg_nitro microgram per liter 1 -tot_iron milligram per liter 1 -tot_iron milligram per kilogram 1 -tot_nitro microgram per liter 1 -tot_nitro micromole per liter 1 -tot_nitro milligram per liter 1 -tot_nitro_content microgram per liter 1 -tot_nitro_content micromole per liter 1 -tot_nitro_content milligram per liter 1 -tot_org_carb gram Carbon per kilogram sample material 1 -tot_part_carb microgram per liter 1 -tot_part_carb micromole per liter 1 -tot_phosp micromole per liter 1 -tot_phosp milligram per liter 1 -tot_phosp parts per million 1 -tot_phosphate microgram per liter 1 -tot_phosphate micromole per liter 1 -tot_sulfur milligram per liter 1 -tot_sulfur parts per million 1 -turbidity formazin turbidity unit 1 -turbidity formazin nephelometric units 1 -tvdss_of_hcr_press m 0 -tvdss_of_hcr_temp m 0 -ventilation_rate cubic meter per minute 1 -ventilation_rate liters per second 1 -vfa milligram per liter 1 -vfa parts per million 1 -vfa_fw milligram per liter 1 -viscosity cP at degree Celsius 1 -volatile_org_comp microgram per cubic meter 1 -volatile_org_comp parts per million 1 -volatile_org_comp ng/L 0 -wall_area m2 0 -wall_height cm 0 -wall_thermal_mass joule per degree Celsius 1 -water_content gram per gram or cubic centimeter per cubic centimeter 1 -water_content gram per gram or cubic centimeter per cubic centimeter 1 -water_current m3/s 0 -water_current knots 1 -water_cut % 0 -water_feat_size m2 0 -water_prod_rate m3/d 0 -water_temp_regm Cel 0 -watering_regm mL 0 -watering_regm L 0 -wind_speed m/s 0 -wind_speed km/h 0 -window_size inch 1 -window_size m 0 -xylene milligram per liter 1 -xylene parts per million 1 -zinc mg/kg (ppm) 1 diff --git a/units/output/schema_units_excuses.tsv b/units/output/schema_units_excuses.tsv index 9a7a39f11f..1c86ff7460 100644 --- a/units/output/schema_units_excuses.tsv +++ b/units/output/schema_units_excuses.tsv @@ -1,15 +1,11 @@ api non_ucum_unit -biomaterial_purity pending_analysis bulk_elect_conductivity pending_analysis -concentration pending_analysis container_size pending_analysis efficiency_percent mixs_inconsistent -exp_pipe pending_analysis filter_pore_size pending_analysis input_volume pending_analysis inside_lux mixs_inconsistent microbial_biomass complex_unit -occup_density_samp pending_analysis rel_humidity_out mixs_inconsistent soil_text_measure pending_analysis specific_humidity mixs_inconsistent diff --git a/units/output/testdata_has_unit_check.tsv b/units/output/testdata_has_unit_check.tsv deleted file mode 100644 index 6dc50f423f..0000000000 --- a/units/output/testdata_has_unit_check.tsv +++ /dev/null @@ -1,2 +0,0 @@ -path has_raw_value status -SUMMARY 0 missing has_unit fields PASS diff --git a/units/output/testdata_quantity_values.tsv b/units/output/testdata_quantity_values.tsv deleted file mode 100644 index aa7ec792c7..0000000000 --- a/units/output/testdata_quantity_values.tsv +++ /dev/null @@ -1,176 +0,0 @@ -field_name has_maximum_numeric_value has_minimum_numeric_value has_numeric_value has_unit has_raw_value type -abs_air_humidity 9.0 g/g 9 gram per gram nmdc:QuantityValue -air_temp 20.0 Cel 20 degree Celsius nmdc:QuantityValue -al_sat 19 % 19 % nmdc:QuantityValue -alkalinity 50.0 mg/L 50 milligram per liter nmdc:QuantityValue -alkyl_diethers 0.005 mol/L 0.005 mole per liter nmdc:QuantityValue -alt 100.0 m 100 meter nmdc:QuantityValue -aminopept_act 0.269 mol/L/h 0.269 mole per liter per hour nmdc:QuantityValue -ammonium 1.5 mg/L 1.5 milligram per liter nmdc:QuantityValue -ammonium_nitrogen 0.5 mg/kg 0.5 mg/kg nmdc:QuantityValue -amount_light lx xxx nmdc:QuantityValue -annual_precpt 0.5 mm 0.5 mm nmdc:QuantityValue -annual_temp 12.5 Cel 12.5 degree Celsius nmdc:QuantityValue -api 1 xxx nmdc:QuantityValue -avg_dew_point 25.5 Cel 25.5 degree Celsius nmdc:QuantityValue -avg_temp Cel xxx nmdc:QuantityValue -bac_prod 5.0 mg/m3/d 5 milligram per cubic meter per day nmdc:QuantityValue -bac_resp mg/m3/d xxx nmdc:QuantityValue -bacteria_carb_prod 2.53 ng/h 2.53 ng/h nmdc:QuantityValue -barometric_press 5.0 mbar 5 millibar nmdc:QuantityValue -benzene mg/L xxx nmdc:QuantityValue -biochem_oxygen_dem mg/L xxx nmdc:QuantityValue -bishomohopanol ug/L 14 microgram per liter nmdc:QuantityValue -blood_press_diast mm[Hg] xxx nmdc:QuantityValue -blood_press_syst mm[Hg] xxx nmdc:QuantityValue -bromide 0.05 [ppm] 0.05 parts per million nmdc:QuantityValue -built_struc_age 7 a 7 years nmdc:QuantityValue -calcium 0.2 umol/L 0.2 micromole per liter nmdc:QuantityValue -carb_dioxide 410.0 [ppm] 410 parts per million nmdc:QuantityValue -carb_monoxide umol/L xxx nmdc:QuantityValue -carb_nitro_ratio 0.417361111 1 0.417361111 nmdc:QuantityValue -ceil_area m2 xxx nmdc:QuantityValue -ceil_thermal_mass J/K xxx nmdc:QuantityValue -chem_oxygen_dem mg/L xxx nmdc:QuantityValue -chloride 5000.0 mg/L 5000 milligram per liter nmdc:QuantityValue -chlorophyll 5.0 mg/m3 5 milligram per cubic meter nmdc:QuantityValue -conduc 10.0 mS/cm 10 milliSiemens per centimeter nmdc:QuantityValue -density 1000.0 g/m3 1000 kilogram per cubic meter nmdc:QuantityValue -depth 2.5 1.5 2 m 1.5 to 2.5 meters nmdc:QuantityValue -dew_point Cel xxx nmdc:QuantityValue -diss_carb_dioxide 5.0 mg/L 5 milligram per liter nmdc:QuantityValue -diss_hydrogen 0.3 umol/L 0.3 micromole per liter nmdc:QuantityValue -diss_inorg_carb 2059.0 ug/L 2059 micromole per kilogram nmdc:QuantityValue -diss_inorg_nitro ug/L xxx nmdc:QuantityValue -diss_inorg_phosp 56.5 ug/L 56.5 micromole per liter nmdc:QuantityValue -diss_iron mg/L xxx nmdc:QuantityValue -diss_org_carb 197.0 umol/L 197 micromole per liter nmdc:QuantityValue -diss_org_nitro 0.05 ug/L 0.05 micromole per liter nmdc:QuantityValue -diss_oxygen 175.0 umol/kg 175 micromole per kilogram nmdc:QuantityValue -diss_oxygen_fluid umol/kg xxx nmdc:QuantityValue -door_size m2 xxx nmdc:QuantityValue -down_par umol/m2/s xxx nmdc:QuantityValue -efficiency_percent % xxx nmdc:QuantityValue -ethylbenzene mg/L xxx nmdc:QuantityValue -exp_duct m2 xxx nmdc:QuantityValue -exp_pipe m2 xxx nmdc:QuantityValue -floor_age 5 a 5 years nmdc:QuantityValue -floor_area m2 xxx nmdc:QuantityValue -floor_thermal_mass J/K xxx nmdc:QuantityValue -fluor mg/m3 xxx nmdc:QuantityValue -freq_clean 1/d xxx nmdc:QuantityValue -freq_cook 1/d xxx nmdc:QuantityValue -glucosidase_act 5.0 mol/L/h 5 mol per liter per hour nmdc:QuantityValue -hcr_fw_salinity mg/L xxx nmdc:QuantityValue -height_carper_fiber cm xxx nmdc:QuantityValue -host_age 3 a 3 years nmdc:QuantityValue -host_body_temp Cel xxx nmdc:QuantityValue -host_dry_mass kg xxx nmdc:QuantityValue -host_height cm xxx nmdc:QuantityValue -host_length cm xxx nmdc:QuantityValue -host_tot_mass kg xxx nmdc:QuantityValue -host_wet_mass kg xxx nmdc:QuantityValue -humidity 25.0 g/m3 25 gram per cubic meter nmdc:QuantityValue -indust_eff_percent % xxx nmdc:QuantityValue -inside_lux kW/m2 xxx nmdc:QuantityValue -iwf % xxx nmdc:QuantityValue -lbc_thirty 543.0 [ppm] 543 ppm nmdc:QuantityValue -lbceq 1575.0 [ppm] 1575 ppm nmdc:QuantityValue -light_intensity 0.3 lx 0.3 lux nmdc:QuantityValue -magnesium 52.8 umol/kg 52.8 micromole per kilogram nmdc:QuantityValue -manganese 24.7 mg/kg 24.7 mg/kg nmdc:QuantityValue -max_occup 35 1 35 nmdc:QuantityValue -mean_frict_vel 0.5 m/s 0.5 meter per second nmdc:QuantityValue -mean_peak_frict_vel 1.0 m/s 1 meter per second nmdc:QuantityValue -methane 1800.0 [ppb] 1800 parts per billion nmdc:QuantityValue -microbial_biomass kg xxx nmdc:QuantityValue -nitrate 65.0 umol/L 65 micromole per liter nmdc:QuantityValue -nitrite 0.5 umol/L 0.5 micromole per liter nmdc:QuantityValue -nitrite_nitrogen 1.2 mg/kg 1.2 mg/kg nmdc:QuantityValue -nitro umol/L xxx nmdc:QuantityValue -number_pets 3 1 3 nmdc:QuantityValue -number_plants 4 1 4 nmdc:QuantityValue -number_resident 3 1 3 nmdc:QuantityValue -occup_density_samp 1 xxx nmdc:QuantityValue -occup_samp 1 xxx nmdc:QuantityValue -org_carb umol/L xxx nmdc:QuantityValue -org_matter 1.75 ug/L 1.75 milligram per cubic meter nmdc:QuantityValue -org_nitro 4.0 ug/L 4 micromole per liter nmdc:QuantityValue -organism_count[0] 1 total prokaryotes;3.5e7 cells per milliliter;qPCR nmdc:QuantityValue -owc_tvdss m xxx nmdc:QuantityValue -oxygen 600.0 [ppm] 600 parts per million nmdc:QuantityValue -part_org_carb 1.92 ug/L 1.92 micromole per liter nmdc:QuantityValue -part_org_nitro ug/L xxx nmdc:QuantityValue -petroleum_hydrocarb 0.05 umol/L 0.05 micromole per liter nmdc:QuantityValue -phosphate 0.7 umol/L 0.7 micromole per liter nmdc:QuantityValue -photon_flux 3.926 umol/m2/s 3.926 micromole photons per second per square meter nmdc:QuantityValue -potassium 463.0 mg/L 463 milligram per liter nmdc:QuantityValue -pour_point Cel xxx nmdc:QuantityValue -pressure 50.0 atm 50 atmosphere nmdc:QuantityValue -primary_prod mg/m3/d xxx nmdc:QuantityValue -prod_rate m3/d xxx nmdc:QuantityValue -redox_potential 300.0 mV 300 millivolt nmdc:QuantityValue -rel_air_humidity 80.0 % 80 % nmdc:QuantityValue -rel_humidity_out % xxx nmdc:QuantityValue -room_air_exch_rate L/h xxx nmdc:QuantityValue -room_occup 1 xxx nmdc:QuantityValue -root_med_ph [pH] xxx nmdc:QuantityValue -salinity 25 % 25 practical salinity unit nmdc:QuantityValue -samp_md m xxx nmdc:QuantityValue -samp_size 5 mL 5 mL nmdc:QuantityValue -samp_store_temp -80.0 Cel -80 degree Celsius nmdc:QuantityValue -season_precpt 75.0 mm 75 millimeters nmdc:QuantityValue -season_temp 18.0 Cel 18 degree Celsius nmdc:QuantityValue -silicate 0.05 umol/L 0.05 micromole per liter nmdc:QuantityValue -size_frac_low 0.2 um 0.2 micrometer nmdc:QuantityValue -size_frac_up 20.0 um 20 micrometer nmdc:QuantityValue -slope_aspect 22 deg 22 deg nmdc:QuantityValue -slope_gradient 17 % 17 % nmdc:QuantityValue -sludge_retent_time h xxx nmdc:QuantityValue -sodium 10.5 mg/L 10.5 milligram per liter nmdc:QuantityValue -soil_text_measure 1 xxx nmdc:QuantityValue -solar_irradiance 1.36 kW/m2/d 1.36 kilowatts per square meter per day nmdc:QuantityValue -soluble_react_phosp umol/L xxx nmdc:QuantityValue -specific_humidity g/kg xxx nmdc:QuantityValue -sulfate 5.0 umol/L 5 micromole per liter nmdc:QuantityValue -sulfate_fw mg/L xxx nmdc:QuantityValue -sulfide 2.0 umol/L 2 micromole per liter nmdc:QuantityValue -surf_humidity % xxx nmdc:QuantityValue -surf_moisture g/m3 xxx nmdc:QuantityValue -surf_temp Cel xxx nmdc:QuantityValue -suspend_part_matter mg/L xxx nmdc:QuantityValue -tan mg/L xxx nmdc:QuantityValue -temp 25.0 Cel 25 degree Celsius nmdc:QuantityValue -temp_out 5.0 Cel 5 degree Celsius nmdc:QuantityValue -toluene mg/L xxx nmdc:QuantityValue -tot_carb 11 ug/L 11 ug/L nmdc:QuantityValue -tot_depth_water_col 500.0 m 500 meter nmdc:QuantityValue -tot_diss_nitro 40.0 ug/L 40 microgram per liter nmdc:QuantityValue -tot_inorg_nitro ug/L xxx nmdc:QuantityValue -tot_iron mg/L xxx nmdc:QuantityValue -tot_nitro ug/L xxx nmdc:QuantityValue -tot_nitro_content 35.0 mg/L 35 milligrams Nitrogen per kilogram of soil nmdc:QuantityValue -tot_org_carb 2 mg/L 2 mg/L nmdc:QuantityValue -tot_part_carb ug/L xxx nmdc:QuantityValue -tot_phosp 0.03 mg/L 0.03 milligram per liter nmdc:QuantityValue -tot_phosphate ug/L xxx nmdc:QuantityValue -tot_sulfur mg/L xxx nmdc:QuantityValue -turbidity 0.3 [NTU] 0.3 nephelometric turbidity units nmdc:QuantityValue -tvdss_of_hcr_press m xxx nmdc:QuantityValue -tvdss_of_hcr_temp m xxx nmdc:QuantityValue -ventilation_rate 750.0 m3/min 750 cubic meter per minute nmdc:QuantityValue -vfa mg/L xxx nmdc:QuantityValue -vfa_fw mg/L xxx nmdc:QuantityValue -wall_area m2 xxx nmdc:QuantityValue -wall_height cm xxx nmdc:QuantityValue -wall_thermal_mass J/K xxx nmdc:QuantityValue -water_current m3/s xxx nmdc:QuantityValue -water_cut % xxx nmdc:QuantityValue -water_feat_size m2 xxx nmdc:QuantityValue -water_prod_rate m3/d xxx nmdc:QuantityValue -wind_speed 21.0 km/h 21 kilometer per hour nmdc:QuantityValue -xylene mg/L xxx nmdc:QuantityValue -zinc 2.5 mg/kg 2.5 mg/kg nmdc:QuantityValue -subsurface_depth 10.0 m 10.0 m nmdc:QuantityValue -bulk_elect_conductivity 0.5 mS/cm 0.5 millisiemens per centimeter nmdc:QuantityValue -nitrate_nitrogen 1.2 mg/kg 1.2 mg/kg nmdc:QuantityValue diff --git a/units/output/ucum_validation_results.csv b/units/output/ucum_validation_results.csv deleted file mode 100644 index 9ccf25de1b..0000000000 --- a/units/output/ucum_validation_results.csv +++ /dev/null @@ -1,48 +0,0 @@ -unit,status,message,cleaned_unit,ucum_format -%,valid,https://units-of-measurement.org/%25,, -Cel,valid,https://units-of-measurement.org/Cel,, -J/K,valid,https://units-of-measurement.org/J.K-1,,J.K-1 -L/h,valid,https://units-of-measurement.org/L.h-1,,L.h-1 -[pH],valid,https://units-of-measurement.org/%5BpH%5D,, -[ppb],valid,https://units-of-measurement.org/%5Bppb%5D,, -[ppm],valid,https://units-of-measurement.org/%5Bppm%5D,, -a,valid,https://units-of-measurement.org/a,, -atm,valid,https://units-of-measurement.org/atm,, -cm,valid,https://units-of-measurement.org/cm,, -deg,valid,https://units-of-measurement.org/deg,, -g/g,valid,https://units-of-measurement.org/g.g-1,,g.g-1 -g/kg,valid,https://units-of-measurement.org/g.kg-1,,g.kg-1 -g/m3,valid,https://units-of-measurement.org/g.m-3,,g.m-3 -h,valid,https://units-of-measurement.org/h,, -kW/m2,valid,https://units-of-measurement.org/kW.m-2,,kW.m-2 -kW/m2/d,valid,https://units-of-measurement.org/kW.m-2.d-1,,kW.m-2.d-1 -kg,valid,https://units-of-measurement.org/kg,, -km/h,valid,https://units-of-measurement.org/km.h-1,,km.h-1 -lx,valid,https://units-of-measurement.org/lx,, -m,valid,https://units-of-measurement.org/m,, -m/s,valid,https://units-of-measurement.org/m.s-1,,m.s-1 -m2,valid,https://units-of-measurement.org/m2,, -m3/d,valid,https://units-of-measurement.org/m3.d-1,,m3.d-1 -m3/min,valid,https://units-of-measurement.org/m3.min-1,,m3.min-1 -m3/s,valid,https://units-of-measurement.org/m3.s-1,,m3.s-1 -mL,valid,https://units-of-measurement.org/mL,, -mS/cm,valid,https://units-of-measurement.org/mS.cm-1,,mS.cm-1 -mV,valid,https://units-of-measurement.org/mV,, -mg/L,valid,https://units-of-measurement.org/mg.L-1,,mg.L-1 -mg/kg,valid,https://units-of-measurement.org/mg.kg-1,,mg.kg-1 -mg/m3,valid,https://units-of-measurement.org/mg.m-3,,mg.m-3 -mg/m3/d,valid,https://units-of-measurement.org/mg.m-3.d-1,,mg.m-3.d-1 -mm,valid,https://units-of-measurement.org/mm,, -mol/L,valid,https://units-of-measurement.org/mol.L-1,,mol.L-1 -mol/L/h,valid,https://units-of-measurement.org/mol.L-1.h-1,,mol.L-1.h-1 -ng/h,valid,https://units-of-measurement.org/ng.h-1,,ng.h-1 -ug/L,valid,https://units-of-measurement.org/ug.L-1,,ug.L-1 -um,valid,https://units-of-measurement.org/um,, -umol/L,valid,https://units-of-measurement.org/umol.L-1,,umol.L-1 -umol/kg,valid,https://units-of-measurement.org/umol.kg-1,,umol.kg-1 -umol/m2/s,valid,https://units-of-measurement.org/umol.m-2.s-1,,umol.m-2.s-1 -1/d,invalid,Invalid UCUM code,,1.d-1 -[NTU],invalid,Invalid UCUM code,, -mbar,invalid,Invalid UCUM code,, -1,skipped,Skipped (dimensionless or custom unit),, -mm[Hg],skipped,Skipped (dimensionless or custom unit),, diff --git a/units/output/user_friendly_units.tsv b/units/output/user_friendly_units.tsv index beb12e4a4d..23b36968e3 100644 --- a/units/output/user_friendly_units.tsv +++ b/units/output/user_friendly_units.tsv @@ -4,6 +4,7 @@ a years umol/m2/s micromoles per square meter per second 1 ratio/unitless lx lux +1/[sft_i] per square foot [NTU] Nephelometric Turbidity Units [FNU] Formazin Nephelometric Units [lb_av] pounds (avoirdupois) diff --git a/units/output/yq_commands_multi_unit.txt b/units/output/yq_commands_multi_unit.txt deleted file mode 100644 index 89c73b9d62..0000000000 --- a/units/output/yq_commands_multi_unit.txt +++ /dev/null @@ -1,43 +0,0 @@ -# Add storage_units annotations for slots with multiple UCUM-compatible preferred units -'.slots.abs_air_humidity.annotations.storage_units = {"tag": "storage_units", "value": "kg"}' -'.slots.agrochem_addition.annotations.storage_units = {"tag": "storage_units", "value": "g|mol/L"}' -'.slots.biomass.annotations.storage_units = {"tag": "storage_units", "value": "g|kg"}' -'.slots.density.annotations.storage_units = {"tag": "storage_units", "value": "g/cm3|g/m3"}' -'.slots.fertilizer_regm.annotations.storage_units = {"tag": "storage_units", "value": "g|mol/L"}' -'.slots.fungicide_regm.annotations.storage_units = {"tag": "storage_units", "value": "g|mol/L"}' -'.slots.growth_hormone_regm.annotations.storage_units = {"tag": "storage_units", "value": "g|mol/L"}' -'.slots.hcr_pressure.annotations.storage_units = {"tag": "storage_units", "value": "atm"}' -'.slots.herbicide_regm.annotations.storage_units = {"tag": "storage_units", "value": "g|mol/L"}' -'.slots.host_age.annotations.storage_units = {"tag": "storage_units", "value": "a|d|h"}' -'.slots.host_dry_mass.annotations.storage_units = {"tag": "storage_units", "value": "g|kg"}' -'.slots.host_height.annotations.storage_units = {"tag": "storage_units", "value": "cm|m|mm"}' -'.slots.host_length.annotations.storage_units = {"tag": "storage_units", "value": "cm|m|mm"}' -'.slots.host_tot_mass.annotations.storage_units = {"tag": "storage_units", "value": "g|kg"}' -'.slots.host_wet_mass.annotations.storage_units = {"tag": "storage_units", "value": "g|kg"}' -'.slots.inorg_particles.annotations.storage_units = {"tag": "storage_units", "value": "mol/L"}' -'.slots.magnesium.annotations.storage_units = {"tag": "storage_units", "value": "mol/L"}' -'.slots.microbial_biomass.annotations.storage_units = {"tag": "storage_units", "value": "kg"}' -'.slots.mineral_nutr_regm.annotations.storage_units = {"tag": "storage_units", "value": "g|mol/L"}' -'.slots.non_min_nutr_regm.annotations.storage_units = {"tag": "storage_units", "value": "g|mol/L"}' -'.slots.pesticide_regm.annotations.storage_units = {"tag": "storage_units", "value": "g|mol/L"}' -'.slots.phosplipid_fatt_acid.annotations.storage_units = {"tag": "storage_units", "value": "mol/L"}' -'.slots.pollutants.annotations.storage_units = {"tag": "storage_units", "value": "g|mol/L"}' -'.slots.radiation_regm.annotations.storage_units = {"tag": "storage_units", "value": "Gy|rad"}' -'.slots.room_net_area.annotations.storage_units = {"tag": "storage_units", "value": "m2"}' -'.slots.room_vol.annotations.storage_units = {"tag": "storage_units", "value": "m3"}' -'.slots.salinity.annotations.storage_units = {"tag": "storage_units", "value": "%|psu"}' -'.slots.salt_regm.annotations.storage_units = {"tag": "storage_units", "value": "g|g/L|mol/L|ug"}' -'.slots.samp_size.annotations.storage_units = {"tag": "storage_units", "value": "L|g|mg"}' -'.slots.samp_vol_we_dna_ext.annotations.storage_units = {"tag": "storage_units", "value": "cm2|g|mg"}' -'.slots.soluble_inorg_mat.annotations.storage_units = {"tag": "storage_units", "value": "g|g/L|mol/L|ug"}' -'.slots.soluble_org_mat.annotations.storage_units = {"tag": "storage_units", "value": "g|g/L|mol/L|ug"}' -'.slots.surf_moisture.annotations.storage_units = {"tag": "storage_units", "value": "g/m3"}' -'.slots.suspend_solids.annotations.storage_units = {"tag": "storage_units", "value": "g|g/L|mol/L|ug"}' -'.slots.volatile_org_comp.annotations.storage_units = {"tag": "storage_units", "value": "ng/L"}' -'.slots.water_current.annotations.storage_units = {"tag": "storage_units", "value": "m3/s"}' -'.slots.watering_regm.annotations.storage_units = {"tag": "storage_units", "value": "L|mL"}' -'.slots.wind_speed.annotations.storage_units = {"tag": "storage_units", "value": "km/h|m/s"}' -'.slots.window_size.annotations.storage_units = {"tag": "storage_units", "value": "m"}' - -# Generated 39 yq commands for multi-unit storage_units annotations -# Summary: 79 total rows across 39 slots with multiple units \ No newline at end of file diff --git a/units/output/yq_commands_single_unit.txt b/units/output/yq_commands_single_unit.txt deleted file mode 100644 index 0d27625c46..0000000000 --- a/units/output/yq_commands_single_unit.txt +++ /dev/null @@ -1,133 +0,0 @@ -# Add storage_units annotations for slots with single UCUM-compatible preferred units -'.slots.air_temp.annotations.storage_units.tag |= "storage_units"' -'.slots.air_temp.annotations.storage_units.value |= "Cel"' -'.slots.air_temp_regm.annotations.storage_units.tag |= "storage_units"' -'.slots.air_temp_regm.annotations.storage_units.value |= "m"' -'.slots.al_sat.annotations.storage_units.tag |= "storage_units"' -'.slots.al_sat.annotations.storage_units.value |= "%"' -'.slots.alkyl_diethers.annotations.storage_units.tag |= "storage_units"' -'.slots.alkyl_diethers.annotations.storage_units.value |= "mol/L"' -'.slots.annual_precpt.annotations.storage_units.tag |= "storage_units"' -'.slots.annual_precpt.annotations.storage_units.value |= "mm"' -'.slots.annual_temp.annotations.storage_units.tag |= "storage_units"' -'.slots.annual_temp.annotations.storage_units.value |= "Cel"' -'.slots.antibiotic_regm.annotations.storage_units.tag |= "storage_units"' -'.slots.antibiotic_regm.annotations.storage_units.value |= "mg"' -'.slots.aromatics_pc.annotations.storage_units.tag |= "storage_units"' -'.slots.aromatics_pc.annotations.storage_units.value |= "%"' -'.slots.asphaltenes_pc.annotations.storage_units.tag |= "storage_units"' -'.slots.asphaltenes_pc.annotations.storage_units.value |= "%"' -'.slots.avg_dew_point.annotations.storage_units.tag |= "storage_units"' -'.slots.avg_dew_point.annotations.storage_units.value |= "Cel"' -'.slots.avg_temp.annotations.storage_units.tag |= "storage_units"' -'.slots.avg_temp.annotations.storage_units.value |= "Cel"' -'.slots.bacteria_carb_prod.annotations.storage_units.tag |= "storage_units"' -'.slots.bacteria_carb_prod.annotations.storage_units.value |= "ng/h"' -'.slots.barometric_press.annotations.storage_units.tag |= "storage_units"' -'.slots.barometric_press.annotations.storage_units.value |= "mbar"' -'.slots.built_struc_age.annotations.storage_units.tag |= "storage_units"' -'.slots.built_struc_age.annotations.storage_units.value |= "a"' -'.slots.ceil_area.annotations.storage_units.tag |= "storage_units"' -'.slots.ceil_area.annotations.storage_units.value |= "m2"' -'.slots.dew_point.annotations.storage_units.tag |= "storage_units"' -'.slots.dew_point.annotations.storage_units.value |= "Cel"' -'.slots.diether_lipids.annotations.storage_units.tag |= "storage_units"' -'.slots.diether_lipids.annotations.storage_units.value |= "ng/L"' -'.slots.door_size.annotations.storage_units.tag |= "storage_units"' -'.slots.door_size.annotations.storage_units.value |= "m2"' -'.slots.emulsions.annotations.storage_units.tag |= "storage_units"' -'.slots.emulsions.annotations.storage_units.value |= "g/L"' -'.slots.exp_duct.annotations.storage_units.tag |= "storage_units"' -'.slots.exp_duct.annotations.storage_units.value |= "m2"' -'.slots.floor_area.annotations.storage_units.tag |= "storage_units"' -'.slots.floor_area.annotations.storage_units.value |= "m2"' -'.slots.hcr_temp.annotations.storage_units.tag |= "storage_units"' -'.slots.hcr_temp.annotations.storage_units.value |= "Cel"' -'.slots.height_carper_fiber.annotations.storage_units.tag |= "storage_units"' -'.slots.height_carper_fiber.annotations.storage_units.value |= "cm"' -'.slots.host_body_temp.annotations.storage_units.tag |= "storage_units"' -'.slots.host_body_temp.annotations.storage_units.value |= "Cel"' -'.slots.humidity.annotations.storage_units.tag |= "storage_units"' -'.slots.humidity.annotations.storage_units.value |= "g/m3"' -'.slots.humidity_regm.annotations.storage_units.tag |= "storage_units"' -'.slots.humidity_regm.annotations.storage_units.value |= "g/m3"' -'.slots.indust_eff_percent.annotations.storage_units.tag |= "storage_units"' -'.slots.indust_eff_percent.annotations.storage_units.value |= "%"' -'.slots.iwf.annotations.storage_units.tag |= "storage_units"' -'.slots.iwf.annotations.storage_units.value |= "%"' -'.slots.mean_frict_vel.annotations.storage_units.tag |= "storage_units"' -'.slots.mean_frict_vel.annotations.storage_units.value |= "m/s"' -'.slots.mean_peak_frict_vel.annotations.storage_units.tag |= "storage_units"' -'.slots.mean_peak_frict_vel.annotations.storage_units.value |= "m/s"' -'.slots.org_particles.annotations.storage_units.tag |= "storage_units"' -'.slots.org_particles.annotations.storage_units.value |= "g/L"' -'.slots.owc_tvdss.annotations.storage_units.tag |= "storage_units"' -'.slots.owc_tvdss.annotations.storage_units.value |= "m"' -'.slots.porosity.annotations.storage_units.tag |= "storage_units"' -'.slots.porosity.annotations.storage_units.value |= "%"' -'.slots.pour_point.annotations.storage_units.tag |= "storage_units"' -'.slots.pour_point.annotations.storage_units.value |= "Cel"' -'.slots.pressure.annotations.storage_units.tag |= "storage_units"' -'.slots.pressure.annotations.storage_units.value |= "atm"' -'.slots.prod_rate.annotations.storage_units.tag |= "storage_units"' -'.slots.prod_rate.annotations.storage_units.value |= "m3/d"' -'.slots.rainfall_regm.annotations.storage_units.tag |= "storage_units"' -'.slots.rainfall_regm.annotations.storage_units.value |= "mm"' -'.slots.redox_potential.annotations.storage_units.tag |= "storage_units"' -'.slots.redox_potential.annotations.storage_units.value |= "mV"' -'.slots.rel_air_humidity.annotations.storage_units.tag |= "storage_units"' -'.slots.rel_air_humidity.annotations.storage_units.value |= "%"' -'.slots.resins_pc.annotations.storage_units.tag |= "storage_units"' -'.slots.resins_pc.annotations.storage_units.value |= "%"' -'.slots.room_air_exch_rate.annotations.storage_units.tag |= "storage_units"' -'.slots.room_air_exch_rate.annotations.storage_units.value |= "L/h"' -'.slots.room_dim.annotations.storage_units.tag |= "storage_units"' -'.slots.room_dim.annotations.storage_units.value |= "m"' -'.slots.room_door_dist.annotations.storage_units.tag |= "storage_units"' -'.slots.room_door_dist.annotations.storage_units.value |= "m"' -'.slots.samp_md.annotations.storage_units.tag |= "storage_units"' -'.slots.samp_md.annotations.storage_units.value |= "m"' -'.slots.samp_preserv.annotations.storage_units.tag |= "storage_units"' -'.slots.samp_preserv.annotations.storage_units.value |= "mL"' -'.slots.samp_store_temp.annotations.storage_units.tag |= "storage_units"' -'.slots.samp_store_temp.annotations.storage_units.value |= "Cel"' -'.slots.samp_time_out.annotations.storage_units.tag |= "storage_units"' -'.slots.samp_time_out.annotations.storage_units.value |= "h"' -'.slots.samp_tvdss.annotations.storage_units.tag |= "storage_units"' -'.slots.samp_tvdss.annotations.storage_units.value |= "m"' -'.slots.saturates_pc.annotations.storage_units.tag |= "storage_units"' -'.slots.saturates_pc.annotations.storage_units.value |= "%"' -'.slots.season_precpt.annotations.storage_units.tag |= "storage_units"' -'.slots.season_precpt.annotations.storage_units.value |= "mm"' -'.slots.season_temp.annotations.storage_units.tag |= "storage_units"' -'.slots.season_temp.annotations.storage_units.value |= "Cel"' -'.slots.slope_gradient.annotations.storage_units.tag |= "storage_units"' -'.slots.slope_gradient.annotations.storage_units.value |= "%"' -'.slots.surf_humidity.annotations.storage_units.tag |= "storage_units"' -'.slots.surf_humidity.annotations.storage_units.value |= "%"' -'.slots.surf_temp.annotations.storage_units.tag |= "storage_units"' -'.slots.surf_temp.annotations.storage_units.value |= "Cel"' -'.slots.temp.annotations.storage_units.tag |= "storage_units"' -'.slots.temp.annotations.storage_units.value |= "Cel"' -'.slots.temp_out.annotations.storage_units.tag |= "storage_units"' -'.slots.temp_out.annotations.storage_units.value |= "Cel"' -'.slots.tot_depth_water_col.annotations.storage_units.tag |= "storage_units"' -'.slots.tot_depth_water_col.annotations.storage_units.value |= "m"' -'.slots.tvdss_of_hcr_press.annotations.storage_units.tag |= "storage_units"' -'.slots.tvdss_of_hcr_press.annotations.storage_units.value |= "m"' -'.slots.tvdss_of_hcr_temp.annotations.storage_units.tag |= "storage_units"' -'.slots.tvdss_of_hcr_temp.annotations.storage_units.value |= "m"' -'.slots.wall_area.annotations.storage_units.tag |= "storage_units"' -'.slots.wall_area.annotations.storage_units.value |= "m2"' -'.slots.wall_height.annotations.storage_units.tag |= "storage_units"' -'.slots.wall_height.annotations.storage_units.value |= "cm"' -'.slots.water_cut.annotations.storage_units.tag |= "storage_units"' -'.slots.water_cut.annotations.storage_units.value |= "%"' -'.slots.water_feat_size.annotations.storage_units.tag |= "storage_units"' -'.slots.water_feat_size.annotations.storage_units.value |= "m2"' -'.slots.water_prod_rate.annotations.storage_units.tag |= "storage_units"' -'.slots.water_prod_rate.annotations.storage_units.value |= "m3/d"' -'.slots.water_temp_regm.annotations.storage_units.tag |= "storage_units"' -'.slots.water_temp_regm.annotations.storage_units.value |= "Cel"' - -# Generated 130 yq commands for 65 single-unit slots \ No newline at end of file diff --git a/units/scripts/mongodb_analyze_units.py b/units/scripts/mongodb_analyze_units.py deleted file mode 100644 index b067cf3667..0000000000 --- a/units/scripts/mongodb_analyze_units.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env python3 -""" -MongoDB Unit Validation Analysis - -This script analyzes production MongoDB data to validate actual units against -schema-acceptable units. Part of the legacy MongoDB-based workflow. - -Input CSV format (from SPARQL query over RDF-converted MongoDB data): -- sc: schema class (e.g., https://w3id.org/nmdc/Biosample) -- p: property (e.g., https://w3id.org/mixs/0000110) -- l: label (e.g., samp_store_temp) -- su: schema-acceptable units, pipe-separated (e.g., Cel|K) -- u: actual unit found in production data (e.g., Cel) -- count: number of occurrences in production data - -Processing logic: -1. Splits pipe-separated acceptable units (su column) -2. Checks if actual unit (u) exists in acceptable list -3. Assigns validation status: valid/invalid/no_spec - -Output: Original CSV with added 'valid' column showing validation results. -Provides summary statistics of unit validation across production data. - -Note: This is part of the legacy MongoDB workflow. The current schema-only -approach (analyze.py → extract.py → process.py) eliminates this dependency. -""" - -import csv -import sys -import click - -@click.command() -@click.option('--input', type=click.Path(exists=True, path_type=str), required=True, - help='MongoDB slots-to-units CSV from SPARQL query') -@click.option('--output', type=click.Path(path_type=str), - help='Output file path (default: INPUT_analyzed.csv)') -def main(input: str, output: str = None): - """Analyze MongoDB unit validation data.""" - - csv_file = input - if output is None: - output = csv_file.replace('.csv', '_analyzed.csv') - - try: - with open(csv_file, 'r') as infile, open(output, 'w', newline='') as outfile: - reader = csv.DictReader(infile) - - # Add 'valid' column to fieldnames - fieldnames = reader.fieldnames + ['valid'] - writer = csv.DictWriter(outfile, fieldnames=fieldnames) - writer.writeheader() - - for row in reader: - su = row['su'].strip() # acceptable units - u = row['u'].strip() # actual unit used - - if not su: # No acceptable units specified - row['valid'] = 'no_spec' - else: - # Split pipe-separated acceptable units - acceptable_units = [unit.strip() for unit in su.split('|')] - if u in acceptable_units: - row['valid'] = 'valid' - else: - row['valid'] = 'invalid' - - writer.writerow(row) - - click.echo(f"Analysis complete. Output written to: {output}") - - # Print summary - with open(output, 'r') as f: - reader = csv.DictReader(f) - valid_count = 0 - invalid_count = 0 - no_spec_count = 0 - total = 0 - - for row in reader: - total += 1 - if row['valid'] == 'valid': - valid_count += 1 - elif row['valid'] == 'invalid': - invalid_count += 1 - else: - no_spec_count += 1 - - click.echo(f"\nSummary:") - click.echo(f"Total rows: {total}") - click.echo(f"Valid: {valid_count} ({valid_count/total*100:.1f}%)") - click.echo(f"Invalid: {invalid_count} ({invalid_count/total*100:.1f}%)") - click.echo(f"No specification: {no_spec_count} ({no_spec_count/total*100:.1f}%)") - - except FileNotFoundError: - click.echo(f"Error: File '{csv_file}' not found", err=True) - sys.exit(1) - except Exception as e: - click.echo(f"Error: {e}", err=True) - sys.exit(1) - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/units/scripts/schema_convert_to_ucum.py b/units/scripts/schema_convert_to_ucum.py deleted file mode 100644 index db8d7ac57c..0000000000 --- a/units/scripts/schema_convert_to_ucum.py +++ /dev/null @@ -1,261 +0,0 @@ -#!/usr/bin/env python3 -""" -Generate input for process.py from NMDC schema data only. - -This script demonstrates that the input for process.py can be generated -completely deterministically from schema-centric data without needing MongoDB data. - -Prerequisites: Run this first to generate the preferred units report: - cd src/scripts && python analyze_preferred_units.py - -Data Sources (all schema-based): -1. preferred_units_report.tsv (generated by analyze_preferred_units.py) -2. UCUM validation rules (deterministic conversion logic) -3. Problem detection (pattern-based analysis of unit strings) - -This replaces the original workflow that used MongoDB + MIxS + LLM processing. -""" - -import pandas as pd -import re -import sys -from pathlib import Path -import click - - -def convert_preferred_unit_to_ucum(preferred_unit: str) -> tuple[str, int]: - """ - Convert NMDC preferred_unit to UCUM notation and detect problems. - - This is completely deterministic based on unit string patterns - no LLM needed. - """ - - # Handle empty/missing units - if not preferred_unit or preferred_unit.strip() == '': - return '', 1 - - preferred_unit = preferred_unit.strip() - - # Direct UCUM mappings for common single units - direct_mappings = { - 'degree Celsius': 'Cel', - 'meter': 'm', - 'millimeter': 'mm', - 'centimeter': 'cm', - 'kilometer': 'km', - 'gram': 'g', - 'kilogram': 'kg', - 'milligram': 'mg', - 'microgram': 'ug', - 'liter': 'L', - 'milliliter': 'mL', - 'second': 's', - 'minute': 'min', - 'hour': 'h', - 'day': 'd', - 'year': 'a', - 'percent': '%', - 'percentage': '%', - 'pH': 'pH', - 'Pascal': 'Pa', - 'atmosphere': 'atm', - 'square meter': 'm2', - 'cubic meter': 'm3', - 'square centimeter': 'cm2', - 'cubic centimeter': 'cm3', - } - - # Check for direct mapping first - if preferred_unit in direct_mappings: - return direct_mappings[preferred_unit], 0 - - # Problem patterns that indicate UCUM issues - problem_patterns = [ - r'.*,.*', # Multiple units separated by commas - r'.*\|.*', # Multiple units separated by pipes - r'.*\[.*\].*', # Bracketed units like [NTU], [pH] - r'.*\bper\b.*\bper\b.*', # Complex ratios like "per liter per hour" - r'.*\bdegree\b.*(?!Celsius)', # Non-standard degree units - r'.*\bparts per\b.*', # Parts per million/billion/etc - r'.*\bmilli.*\s+per\s+.*', # Complex compound units - r'.*\bmicro.*\s+per\s+.*', # Complex compound units - r'.*\s+per\s+.*\s+per\s+.*', # Triple ratios - r'.*\bcft\b.*', # Non-standard abbreviations - r'.*\blb\b.*', # Imperial units - r'.*\binch\b.*', # Imperial units - r'.*\bfeet\b.*', # Imperial units - r'.*undefined.*', # Undefined units - r'.*not applicable.*', # Not applicable - r'.*\bAPI\b.*', # Specialized scales - r'.*mercury.*', # Mercury-based pressure units - r'.*formazin.*', # Turbidity units - r'.*nephelometric.*', # Turbidity units - ] - - # Check for problem patterns - for pattern in problem_patterns: - if re.match(pattern, preferred_unit, re.IGNORECASE): - return preferred_unit, 1 # Keep original, mark as problem - - # Simple compound units that can be converted - simple_compounds = { - 'milligram per liter': 'mg/L', - 'microgram per liter': 'ug/L', - 'micromole per liter': 'umol/L', - 'gram per liter': 'g/L', - 'milligram per kilogram': 'mg/kg', - 'gram per kilogram': 'g/kg', - 'meter per second': 'm/s', - 'kilometer per hour': 'km/h', - 'gram per cubic meter': 'g/m3', - 'gram per cubic centimeter': 'g/cm3', - 'milligram per cubic meter': 'mg/m3', - 'Watt per square meter': 'W/m2', - 'joule per degree Celsius': 'J/Cel', - 'millimeter per year': 'mm/a', - 'cubic meter per day': 'm3/d', - 'cubic meter per second': 'm3/s', - 'liter per hour': 'L/h', - 'milliliter per hour': 'mL/h', - 'milliequivalent per liter': 'meq/L', - 'mole per liter': 'mol/L', - 'mole per liter per hour': 'mol/(L.h)', - 'millimole per liter': 'mmol/L', - 'micromole per kilogram': 'umol/kg', - 'nanogram per hour': 'ng/h', - 'nanogram per liter': 'ng/L', - 'millibar': 'mbar', - 'millimeter mercury': 'mm[Hg]', # Will be flagged as problem - 'millivolt': 'mV', - 'milliSiemens per centimeter': 'mS/cm', - 'microEinstein per square meter per second': 'uE/(m2.s)', - 'rad': 'rad', - 'gray': 'Gy', - 'practical salinity unit': 'psu', - 'formazin turbidity unit': '[FTU]', # Will be flagged as problem - 'formazin nephelometric units': '[FNU]', # Will be flagged as problem - } - - if preferred_unit in simple_compounds: - # Check if the mapped unit has problem patterns - mapped_unit = simple_compounds[preferred_unit] - if '[' in mapped_unit or 'Hg' in mapped_unit: - return mapped_unit, 1 # Mark as problem - return mapped_unit, 0 - - # If we can't map it cleanly, mark as problem - return preferred_unit, 1 - - -def expand_multi_unit_slots(df: pd.DataFrame) -> pd.DataFrame: - """ - Expand slots that have multiple preferred units into separate rows. - - This handles the multi-unit case from the original workflow. - """ - expanded_rows = [] - - for _, row in df.iterrows(): - preferred_unit = row['preferred_unit'] - slot_name = row['slot_name'] - - # Check for multiple units (comma or pipe separated) - if ',' in preferred_unit or '|' in preferred_unit: - # Split on both comma and pipe, clean whitespace - units = re.split(r'[,|]', preferred_unit) - units = [unit.strip() for unit in units if unit.strip()] - - # Create a row for each unit - for unit in units: - ucum_notation, problem = convert_preferred_unit_to_ucum(unit) - expanded_rows.append({ - 'slot': slot_name, - 'ucum_notation': ucum_notation, - 'problem': problem, - 'original_preferred_unit': preferred_unit, - 'individual_unit': unit, - 'context': row['context'], - 'class_name': row['class_name'], - 'description': row['description'] - }) - else: - # Single unit - ucum_notation, problem = convert_preferred_unit_to_ucum(preferred_unit) - expanded_rows.append({ - 'slot': slot_name, - 'ucum_notation': ucum_notation, - 'problem': problem, - 'original_preferred_unit': preferred_unit, - 'individual_unit': preferred_unit, - 'context': row['context'], - 'class_name': row['class_name'], - 'description': row['description'] - }) - - return pd.DataFrame(expanded_rows) - - -@click.command() -@click.option('--input', type=click.Path(exists=True, path_type=Path), required=True, - help='preferred_units_report.tsv from analyze.py') -@click.option('--output', type=click.Path(path_type=Path), required=True, - help='TSV file with slot, ucum_notation, problem columns') -@click.option('--detailed', type=click.Path(path_type=Path), - help='Output detailed metadata file') -@click.option('--quiet', '-q', is_flag=True, help='Suppress progress output') -def main(input: Path, output: Path, detailed: Path = None, quiet: bool = False): - """Generate process.py input from NMDC schema preferred_unit annotations.""" - - input_file = input - output_file = output - - if not quiet: - click.echo("Generating process.py input from NMDC schema...") - click.echo("=" * 60) - - # Load the extracted data - if not quiet: - click.echo(f"Loading preferred units data from {input_file}...") - - schema_df = pd.read_csv(input_file, sep='\t') - if not quiet: - click.echo(f"Found {len(schema_df)} slots with preferred_unit annotations") - - # Expand multi-unit slots and convert to UCUM - if not quiet: - click.echo("Converting preferred units to UCUM notation...") - expanded_df = expand_multi_unit_slots(schema_df) - - # Create the minimal input file (only required columns) - required_cols = ['slot', 'ucum_notation', 'problem'] - minimal_df = expanded_df[required_cols].copy() - - # Write output file - minimal_df.to_csv(output_file, sep='\t', index=False) - if not quiet: - click.echo(f"Generated: {output_file} ({len(minimal_df)} rows)") - - # Write detailed file if requested - if detailed: - expanded_df.to_csv(detailed, sep='\t', index=False) - if not quiet: - click.echo(f"Generated: {detailed} ({len(expanded_df)} rows with metadata)") - - if not quiet: - # Show summary - click.echo(f"\nSummary:") - click.echo(f"Total slot-unit combinations: {len(expanded_df)}") - click.echo(f"Unique slots: {expanded_df['slot'].nunique()}") - click.echo(f"Problem units (need fixing): {expanded_df['problem'].sum()}") - click.echo(f"Clean UCUM units: {(expanded_df['problem'] == 0).sum()}") - - # Count single vs multi-unit slots - slot_counts = expanded_df.groupby('slot').size() - single_unit_slots = (slot_counts == 1).sum() - multi_unit_slots = (slot_counts > 1).sum() - click.echo(f"Single-unit slots: {single_unit_slots}") - click.echo(f"Multi-unit slots: {multi_unit_slots}") - - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/units/scripts/schema_expand_storage_units.py b/units/scripts/schema_expand_storage_units.py deleted file mode 100644 index 889c885471..0000000000 --- a/units/scripts/schema_expand_storage_units.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to expand pipe-concatenated storage_units annotations into separate rows. -""" - -import click -import csv -import yaml -from pathlib import Path - - -@click.command() -@click.option('--schema-file', type=click.Path(exists=True, path_type=Path), - default='../nmdc_schema/nmdc_materialized_patterns.yaml', - help='NMDC schema YAML file') -@click.option('--output', 'output_file', default='output/schema_storage_units_expanded.tsv', - type=click.Path(path_type=Path), - help='Output TSV file with expanded storage_units') -def main(schema_file, output_file): - """ - Extract QuantityValue slots with storage_units and expand pipe-separated values. - """ - output_file.parent.mkdir(parents=True, exist_ok=True) - - with open(schema_file, 'r') as f: - schema = yaml.safe_load(f) - - expanded_units = [] - - # Extract slots with QuantityValue range and storage_units annotations - slots = schema.get('slots', {}) - for slot_name, slot_def in slots.items(): - if (slot_def.get('range') == 'QuantityValue' and - 'annotations' in slot_def and - 'storage_units' in slot_def['annotations']): - - storage_units = slot_def['annotations']['storage_units'] - # Handle both string and dict annotation formats - if isinstance(storage_units, dict): - units_value = storage_units.get('value', '') - else: - units_value = str(storage_units) - - # Split pipe-separated units and create separate rows - for unit in units_value.split('|'): - unit = unit.strip() - if unit: # Skip empty units - expanded_units.append({ - 'slot': slot_name, - 'storage_unit': unit - }) - - # Write to TSV - with open(output_file, 'w', newline='') as f: - writer = csv.DictWriter(f, fieldnames=['slot', 'storage_unit'], delimiter='\t') - writer.writeheader() - writer.writerows(expanded_units) - - click.echo(f"Expanded {len(expanded_units)} slot-unit combinations to {output_file}") - - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/units/scripts/schema_extract_preferred_units.py b/units/scripts/schema_extract_preferred_units.py deleted file mode 100644 index 52fe60a433..0000000000 --- a/units/scripts/schema_extract_preferred_units.py +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to analyze NMDC schema for slots with preferred_unit annotations. - -This script examines nmdc_materialized_patterns.yaml to find: -1. Global slot definitions with preferred_unit annotations -2. Slot usage within classes that have preferred_unit annotations - -Generates a TSV report with slot name, context (global or class-specific), -class name (if applicable), and preferred unit value. -""" - -import yaml -import csv -import sys -from pathlib import Path -from typing import Dict, Any, List, Optional -import click - -def extract_examples_values(slot_data: Dict[str, Any]) -> str: - """Extract examples values from slot data.""" - examples = slot_data.get('examples', []) - if not examples: - return '' - - example_values = [] - for example in examples: - if isinstance(example, dict): - value = example.get('value', '') - if value: - example_values.append(str(value)) - elif isinstance(example, str): - example_values.append(example) - - return '; '.join(example_values) - -def extract_preferred_units_from_slots(slots_data: Dict[str, Any]) -> List[Dict[str, str]]: - """Extract preferred_unit annotations from global slot definitions.""" - results = [] - - for slot_name, slot_data in slots_data.items(): - if isinstance(slot_data, dict): - annotations = slot_data.get('annotations', {}) - if 'preferred_unit' in annotations: - preferred_unit_info = annotations['preferred_unit'] - unit_value = preferred_unit_info.get('value', '') if isinstance(preferred_unit_info, dict) else '' - - results.append({ - 'slot_name': slot_name, - 'context': 'global', - 'class_name': '', - 'preferred_unit': unit_value, - 'description': slot_data.get('description', ''), - 'range': slot_data.get('range', ''), - 'examples': extract_examples_values(slot_data) - }) - - return results - -def extract_preferred_units_from_classes(classes_data: Dict[str, Any]) -> List[Dict[str, str]]: - """Extract preferred_unit annotations from slot_usage within classes.""" - results = [] - - for class_name, class_data in classes_data.items(): - if isinstance(class_data, dict): - slot_usage = class_data.get('slot_usage', {}) - if slot_usage: - for slot_name, slot_usage_data in slot_usage.items(): - if isinstance(slot_usage_data, dict): - annotations = slot_usage_data.get('annotations', {}) - if 'preferred_unit' in annotations: - preferred_unit_info = annotations['preferred_unit'] - unit_value = preferred_unit_info.get('value', '') if isinstance(preferred_unit_info, dict) else '' - - results.append({ - 'slot_name': slot_name, - 'context': 'class_usage', - 'class_name': class_name, - 'preferred_unit': unit_value, - 'description': slot_usage_data.get('description', ''), - 'range': slot_usage_data.get('range', ''), - 'examples': extract_examples_values(slot_usage_data) - }) - - return results - -@click.command() -@click.option('--schema-file', type=click.Path(exists=True, path_type=Path), - default=Path('../nmdc_schema/nmdc_materialized_patterns.yaml'), - help='Path to schema file') -@click.option('--output', type=click.Path(path_type=Path), required=True, - help='TSV file to write the preferred units report') -def main(schema_file: Path, output: Path): - """Analyze NMDC schema for slots with preferred_unit annotations.""" - - output_file = output - - # Read YAML file - try: - with open(schema_file, 'r', encoding='utf-8') as f: - schema_data = yaml.safe_load(f) - except FileNotFoundError: - click.echo(f"Error: Schema file {schema_file} not found", err=True) - sys.exit(1) - except yaml.YAMLError as e: - click.echo(f"Error parsing YAML: {e}", err=True) - sys.exit(1) - - # Extract preferred unit annotations - # From global slots - slots_data = schema_data.get('slots', {}) - global_units = extract_preferred_units_from_slots(slots_data) - - # From class slot_usage - classes_data = schema_data.get('classes', {}) - class_usage_units = extract_preferred_units_from_classes(classes_data) - - # Combine results - all_results = global_units + class_usage_units - - if not all_results: - click.echo("No preferred_unit annotations found in the schema") - sys.exit(0) - - # Sort by slot name, then by context - all_results.sort(key=lambda x: (x['slot_name'], x['context'], x['class_name'])) - - # Define column headers - headers = [ - 'slot_name', - 'context', - 'class_name', - 'preferred_unit', - 'description', - 'range', - 'examples' - ] - - # Write to TSV file - try: - with open(output_file, 'w', newline='', encoding='utf-8') as f: - writer = csv.DictWriter(f, fieldnames=headers, delimiter='\t') - writer.writeheader() - writer.writerows(all_results) - - click.echo(f"Extracted {len(all_results)} preferred unit annotations to {output_file}") - - except IOError as e: - click.echo(f"Error writing to file: {e}", err=True) - sys.exit(1) - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/units/scripts/schema_generate_yq_commands.py b/units/scripts/schema_generate_yq_commands.py deleted file mode 100644 index ddd8901807..0000000000 --- a/units/scripts/schema_generate_yq_commands.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env python3 -""" -Consolidated MIxS Unit Processing Pipeline - -This script replaces the chain of individual scripts: -- add_has_problem.py -- add_slot_count.py -- find_storage_units.py -- generate_multi_unit_storage_units.py - -Usage: - python process.py INPUT_FILE [--output-dir OUTPUT_DIR] - -Input file should contain columns: -- slot: The schema slot name -- ucum_notation: UCUM-compatible unit notation -- problem: 1 if problematic unit, 0 if clean - -Outputs: -- storage-units-single.txt: yq commands for single-unit slots -- storage-units-multi.txt: yq commands for multi-unit slots -""" - -import sys -from pathlib import Path -from typing import List -import pandas as pd -import click - - -def validate_input_file(file_path: Path) -> bool: - """Validate that input file exists and has required columns.""" - if not file_path.exists(): - print(f"Error: Input file '{file_path}' not found") - return False - - try: - df = pd.read_csv(file_path, sep='\t', nrows=1) - required_cols = {'slot', 'ucum_notation', 'problem'} - missing_cols = required_cols - set(df.columns) - if missing_cols: - print(f"Error: Missing required columns: {missing_cols}") - print(f"Available columns: {list(df.columns)}") - return False - return True - except Exception as e: - print(f"Error reading input file: {e}") - return False - - -def process_mixs_data(input_file: Path) -> pd.DataFrame: - """ - Process MIxS data through the complete pipeline: - 1. Add has_problem flags (slot-level) - 2. Add slot_row_count (count units per slot) - 3. Filter and prepare for yq command generation - """ - print(f"Reading input file: {input_file}") - df = pd.read_csv(input_file, sep='\t') - - print(f"Loaded {len(df)} rows with {len(df['slot'].unique())} unique slots") - - # Step 1: Add has_problem column (slot-level problem flag) - problem_slots = df[df['problem'] == 1]['slot'].unique() - df['has_problem'] = df['slot'].isin(problem_slots).astype(int) - print(f"Found {len(problem_slots)} slots with problem units") - - # Step 2: Add slot_row_count (units per slot) - slot_counts = df['slot'].value_counts().to_dict() - df['slot_row_count'] = df['slot'].map(slot_counts) - - # Summary statistics - single_unit_slots = df[df['slot_row_count'] == 1]['slot'].nunique() - multi_unit_slots = df[df['slot_row_count'] > 1]['slot'].nunique() - print(f"Slots with single unit: {single_unit_slots}") - print(f"Slots with multiple units: {multi_unit_slots}") - - return df - - -def generate_single_unit_commands(df: pd.DataFrame) -> List[str]: - """Generate yq commands for slots with single UCUM-compatible units.""" - # Filter: no problems AND exactly one unit per slot - valid_slots = df[(df['problem'] != 1) & (df['slot_row_count'] == 1)].copy() - - commands = [] - commands.append("# Add storage_units annotations for slots with single UCUM-compatible preferred units") - - for _, row in valid_slots.iterrows(): - slot_name = row['slot'] - ucum_notation = row['ucum_notation'] - commands.append(f"'.slots.{slot_name}.annotations.storage_units.tag |= \"storage_units\"'") - commands.append(f"'.slots.{slot_name}.annotations.storage_units.value |= \"{ucum_notation}\"'") - - commands.append(f"\n# Generated {len(valid_slots) * 2} yq commands for {len(valid_slots)} single-unit slots") - return commands - - -def generate_multi_unit_commands(df: pd.DataFrame) -> List[str]: - """Generate yq commands for slots with multiple UCUM-compatible units.""" - # Filter: no problems AND multiple units per slot - multi_unit_slots = df[(df['problem'] != 1) & (df['slot_row_count'] > 1)].copy() - - # Group by slot and create pipe-separated UCUM notation lists - slot_groups = multi_unit_slots.groupby('slot')['ucum_notation'].apply( - lambda x: '|'.join(sorted(x.unique())) - ).reset_index() - - commands = [] - commands.append("# Add storage_units annotations for slots with multiple UCUM-compatible preferred units") - - for _, row in slot_groups.iterrows(): - slot_name = row['slot'] - ucum_list = row['ucum_notation'] - commands.append(f"'.slots.{slot_name}.annotations.storage_units = {{\"tag\": \"storage_units\", \"value\": \"{ucum_list}\"}}'") - - total_rows = len(multi_unit_slots) - unique_slots = len(slot_groups) - commands.append(f"\n# Generated {len(slot_groups)} yq commands for multi-unit storage_units annotations") - commands.append(f"# Summary: {total_rows} total rows across {unique_slots} slots with multiple units") - - return commands - - -def write_output_files(single_commands: List[str], multi_commands: List[str], output_dir: Path): - """Write yq commands to output files.""" - output_dir.mkdir(parents=True, exist_ok=True) - - single_file = output_dir / "yq_commands_single_unit.txt" - multi_file = output_dir / "yq_commands_multi_unit.txt" - - with open(single_file, 'w') as f: - f.write('\n'.join(single_commands)) - print(f"Written single-unit commands to: {single_file}") - - with open(multi_file, 'w') as f: - f.write('\n'.join(multi_commands)) - print(f"Written multi-unit commands to: {multi_file}") - - -@click.command() -@click.option('--input', type=click.Path(exists=True, path_type=Path), required=True, - help='TSV file with columns: slot, ucum_notation, problem') -@click.option('--output-dir', type=click.Path(path_type=Path), default=Path('.'), - help='Output directory for generated files') -def main(input: Path, output_dir: Path): - """Process MIxS unit data and generate storage_units yq commands.""" - - input_file = input - - # Validate input - if not validate_input_file(input_file): - sys.exit(1) - - try: - # Process the data through the complete pipeline - df = process_mixs_data(input_file) - - # Generate yq commands - click.echo("Generating yq commands...") - single_commands = generate_single_unit_commands(df) - multi_commands = generate_multi_unit_commands(df) - - # Write output files - write_output_files(single_commands, multi_commands, output_dir) - click.echo(f"Processing complete! Files written to: {output_dir}") - - except Exception as e: - click.echo(f"Error during processing: {e}", err=True) - sys.exit(1) - - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/units/scripts/testdata_check_has_unit.py b/units/scripts/testdata_check_has_unit.py deleted file mode 100644 index 124408e987..0000000000 --- a/units/scripts/testdata_check_has_unit.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to check QuantityValue fields for missing has_unit fields. -""" - -import click -import yaml -import csv -from pathlib import Path - - -def check_quantity_value_units(data, path=""): - """ - Recursively check for QuantityValue entries missing has_unit fields. - """ - missing_units = [] - - if isinstance(data, dict): - if data.get('type') == 'nmdc:QuantityValue': - if 'has_unit' not in data: - missing_units.append({ - 'path': path, - 'has_raw_value': data.get('has_raw_value', 'N/A') - }) - - for key, value in data.items(): - new_path = f"{path}.{key}" if path else key - missing_units.extend(check_quantity_value_units(value, new_path)) - - elif isinstance(data, list): - for i, item in enumerate(data): - new_path = f"{path}[{i}]" - missing_units.extend(check_quantity_value_units(item, new_path)) - - return missing_units - - -@click.command() -@click.option('--file-path', default='src/data/valid/Biosample-possibly-exhaustive.yaml', help='Path to YAML file to check.') -@click.option('--output', 'output_file', default='output/testdata_has_unit_check.tsv', help='Output TSV file for results.') -def main(file_path, output_file): - """ - Check a YAML file for QuantityValue entries missing has_unit fields. - """ - file_path = Path(file_path) - output_file = Path(output_file) - - if not file_path.exists(): - click.echo(f"Error: File {file_path} does not exist") - return - - # Ensure output directory exists - output_file.parent.mkdir(parents=True, exist_ok=True) - - with open(file_path, 'r') as f: - data = yaml.safe_load(f) - - missing_units = check_quantity_value_units(data) - - # Write structured output - with open(output_file, 'w', newline='') as f: - writer = csv.writer(f, delimiter='\t') - writer.writerow(['path', 'has_raw_value', 'status']) - - if missing_units: - for entry in missing_units: - writer.writerow([entry['path'], entry['has_raw_value'], 'missing_has_unit']) - - # Write summary row - writer.writerow(['SUMMARY', f'{len(missing_units)} missing has_unit fields', - 'FAIL' if missing_units else 'PASS']) - - # Minimal console output - if missing_units: - click.echo(f"Found {len(missing_units)} QuantityValue entries missing has_unit - see {output_file}") - else: - click.echo(f"✅ All QuantityValue entries have has_unit fields - see {output_file}") - - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/units/scripts/testdata_extract_quantity_values.py b/units/scripts/testdata_extract_quantity_values.py deleted file mode 100644 index ee85ff4266..0000000000 --- a/units/scripts/testdata_extract_quantity_values.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to flatten nmdc:QuantityValue structures from YAML files -to TSV format with specified columns. -""" - -import yaml -import csv -import sys -import click -from pathlib import Path -from typing import Dict, Any, List - -def extract_quantity_values(data: Dict[str, Any], parent_key: str = '') -> List[Dict[str, str]]: - """Extract all QuantityValue structures from nested YAML data.""" - results = [] - - for key, value in data.items(): - current_key = f"{parent_key}.{key}" if parent_key else key - - if isinstance(value, dict): - if value.get('type') == 'nmdc:QuantityValue': - # Extract QuantityValue fields - qv_data = { - 'field_name': current_key, - 'has_maximum_numeric_value': str(value.get('has_maximum_numeric_value', '')), - 'has_minimum_numeric_value': str(value.get('has_minimum_numeric_value', '')), - 'has_numeric_value': str(value.get('has_numeric_value', '')), - 'has_unit': str(value.get('has_unit', '')), - 'has_raw_value': str(value.get('has_raw_value', '')), - 'type': str(value.get('type', '')) - } - results.append(qv_data) - else: - # Recursively search nested dictionaries - results.extend(extract_quantity_values(value, current_key)) - elif isinstance(value, list): - # Handle lists of objects - for i, item in enumerate(value): - if isinstance(item, dict): - if item.get('type') == 'nmdc:QuantityValue': - qv_data = { - 'field_name': f"{current_key}[{i}]", - 'has_maximum_numeric_value': str(item.get('has_maximum_numeric_value', '')), - 'has_minimum_numeric_value': str(item.get('has_minimum_numeric_value', '')), - 'has_numeric_value': str(item.get('has_numeric_value', '')), - 'has_unit': str(item.get('has_unit', '')), - 'has_raw_value': str(item.get('has_raw_value', '')), - 'type': str(item.get('type', '')) - } - results.append(qv_data) - else: - results.extend(extract_quantity_values(item, f"{current_key}[{i}]")) - - return results - -@click.command() -@click.option('--input', 'input_file', default='../src/data/valid/Biosample-possibly-exhaustive.yaml', - type=click.Path(exists=True, path_type=Path), - help='Input YAML file containing QuantityValue structures') -@click.option('--output', 'output_file', default='quantity_values.tsv', - type=click.Path(path_type=Path), - help='Output TSV file path') -def main(input_file, output_file): - """Extract QuantityValue structures from YAML file to TSV format.""" - - # Read YAML file - try: - with open(input_file, 'r') as f: - data = yaml.safe_load(f) - except FileNotFoundError: - click.echo(f"Error: File {input_file} not found") - sys.exit(1) - except yaml.YAMLError as e: - click.echo(f"Error parsing YAML: {e}") - sys.exit(1) - - # Extract QuantityValue structures - quantity_values = extract_quantity_values(data) - - if not quantity_values: - click.echo("No QuantityValue structures found in the file") - sys.exit(0) - - # Define column headers - headers = [ - 'field_name', - 'has_maximum_numeric_value', - 'has_minimum_numeric_value', - 'has_numeric_value', - 'has_unit', - 'has_raw_value', - 'type' - ] - - # Write to TSV file - try: - with open(output_file, 'w', newline='') as f: - writer = csv.DictWriter(f, fieldnames=headers, delimiter='\t') - writer.writeheader() - writer.writerows(quantity_values) - - click.echo(f"Extracted {len(quantity_values)} QuantityValue structures to {output_file}") - - except IOError as e: - click.echo(f"Error writing to file: {e}") - sys.exit(1) - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/units/scripts/ucum_validate_units.py b/units/scripts/ucum_validate_units.py deleted file mode 100644 index 81c0f01fc8..0000000000 --- a/units/scripts/ucum_validate_units.py +++ /dev/null @@ -1,403 +0,0 @@ -#!/usr/bin/env python3 -""" -UCUM Unit Validator - -This script validates has_unit values from quantity_values.tsv against the UOM website -to identify invalid UCUM codes. It handles UCUM format conversion, annotation cleaning, -and provides comprehensive validation reporting. - -Author: Generated with Claude Code -""" - -import csv -import re -import sys -import time -import urllib.parse -import click -from dataclasses import dataclass -from enum import Enum -from pathlib import Path -from typing import Dict, List, Optional, Set, Tuple - -import requests - - -class ValidationStatus(Enum): - """Status of unit validation.""" - VALID = "valid" - INVALID = "invalid" - SKIPPED = "skipped" - ERROR = "error" - - -@dataclass -class ValidationResult: - """Result of unit validation.""" - unit: str - status: ValidationStatus - message: str - cleaned_unit: Optional[str] = None - ucum_format: Optional[str] = None - - -@dataclass -class ValidationSummary: - """Summary of validation results.""" - total_units: int - valid_units: List[ValidationResult] - invalid_units: List[ValidationResult] - skipped_units: List[ValidationResult] - error_units: List[ValidationResult] - - @property - def success_rate(self) -> float: - """Calculate success rate (valid + skipped / total).""" - if self.total_units == 0: - return 0.0 - return (len(self.valid_units) + len(self.skipped_units)) / self.total_units * 100 - - -class UCUMValidator: - """Validator for UCUM units using the UOM website.""" - - BASE_URL = "https://units-of-measurement.org" - REQUEST_DELAY = 0.5 # seconds - REQUEST_TIMEOUT = 10 # seconds - - # Units that should be skipped (special cases) - SKIP_UNITS = {'1', 'mm[Hg]'} - - def __init__(self, delay: float = REQUEST_DELAY, timeout: float = REQUEST_TIMEOUT): - """Initialize validator with optional custom delay and timeout.""" - self.delay = delay - self.timeout = timeout - - def extract_unique_units(self, tsv_file: Path) -> Set[str]: - """Extract unique has_unit values from the TSV file.""" - unique_units = set() - - try: - with open(tsv_file, 'r', encoding='utf-8') as f: - reader = csv.DictReader(f, delimiter='\t') - for row in reader: - unit = row.get('has_unit', '').strip() - if unit: # Skip empty units - unique_units.add(unit) - except KeyError as e: - raise ValueError(f"Missing required column in TSV file: {e}") - - return unique_units - - def convert_to_ucum_format(self, unit: str) -> str: - """ - Convert units with division (/) to UCUM format using multiplication (.) and inverse (-1). - Also handle exponents properly (e.g., m3 -> m^3, so 1/m3 -> m-3). - - Examples: - 'g/g' -> 'g.g-1' - 'mg/L' -> 'mg.L-1' - 'mol/L/h' -> 'mol.L-1.h-1' - 'g/m3' -> 'g.m-3' - 'kW/m2' -> 'kW.m-2' - """ - if '/' not in unit: - return unit - - # Split on '/' and process each part - parts = unit.split('/') - - # First part stays as is - result = parts[0] - - # Subsequent parts get converted with proper exponent handling - for part in parts[1:]: - # Check if the part ends with a number (indicating an exponent) - match = re.match(r'^([a-zA-Z\[\]\']+)(\d+)$', part) - if match: - base_unit = match.group(1) - exponent = match.group(2) - # For division, we negate the exponent - result += f'.{base_unit}-{exponent}' - else: - # No exponent, just add -1 - result += f'.{part}-1' - - return result - - def clean_unit_for_checking(self, unit: str) -> Tuple[str, bool]: - """ - Clean a unit for UCUM checking by removing curly bracket annotations. - - Returns: - tuple: (cleaned_unit, should_skip) - - cleaned_unit: unit with curly bracket portions removed - - should_skip: True if the unit should be skipped entirely - """ - # Skip these specific units - if unit in self.SKIP_UNITS: - return unit, True - - # Remove anything in curly brackets (annotations) - cleaned = re.sub(r'\{[^}]*\}', '', unit) - - # If nothing is left after removing annotations, skip it - if not cleaned.strip(): - return unit, True - - return cleaned.strip(), False - - def validate_unit_with_uom(self, unit: str) -> ValidationResult: - """ - Validate a single unit against the UOM website. - - Args: - unit: The unit string to validate - - Returns: - ValidationResult with status and details - """ - # Clean the unit and check if it should be skipped - cleaned_unit, should_skip = self.clean_unit_for_checking(unit) - - if should_skip: - return ValidationResult( - unit=unit, - status=ValidationStatus.SKIPPED, - message="Skipped (dimensionless or custom unit)", - cleaned_unit=cleaned_unit if cleaned_unit != unit else None - ) - - # Convert to UCUM format for units with division - ucum_unit = self.convert_to_ucum_format(cleaned_unit) - - # Percent encode the unit for URL - encoded_unit = urllib.parse.quote(ucum_unit, safe='') - url = f"{self.BASE_URL}/{encoded_unit}" - - try: - # Add a small delay to be respectful to the server - time.sleep(self.delay) - - response = requests.get(url, timeout=self.timeout) - response_text = response.text - - # Check for the error message indicating invalid UCUM code - if "Oops!" in response_text and "is not a valid UCUM code" in response_text: - return ValidationResult( - unit=unit, - status=ValidationStatus.INVALID, - message="Invalid UCUM code", - cleaned_unit=cleaned_unit if cleaned_unit != unit else None, - ucum_format=ucum_unit if ucum_unit != cleaned_unit else None - ) - elif response.status_code == 200: - return ValidationResult( - unit=unit, - status=ValidationStatus.VALID, - message=url, - cleaned_unit=cleaned_unit if cleaned_unit != unit else None, - ucum_format=ucum_unit if ucum_unit != cleaned_unit else None - ) - else: - return ValidationResult( - unit=unit, - status=ValidationStatus.ERROR, - message=f"HTTP {response.status_code}", - cleaned_unit=cleaned_unit if cleaned_unit != unit else None, - ucum_format=ucum_unit if ucum_unit != cleaned_unit else None - ) - - except requests.RequestException as e: - return ValidationResult( - unit=unit, - status=ValidationStatus.ERROR, - message=f"Request failed: {str(e)}", - cleaned_unit=cleaned_unit if cleaned_unit != unit else None, - ucum_format=ucum_unit if ucum_unit != cleaned_unit else None - ) - - def validate_units(self, units: Set[str], verbose: bool = True) -> ValidationSummary: - """ - Validate a set of units and return comprehensive results. - - Args: - units: Set of unit strings to validate - verbose: Whether to print progress information - - Returns: - ValidationSummary with all results - """ - if verbose: - print(f"Found {len(units)} unique has_unit values") - print("\\nUnique units:") - for unit in sorted(units): - print(f" '{unit}'") - - print(f"\\nChecking validity of {len(units)} units against UOM website...") - print("(This may take a while due to rate limiting)") - - valid_units = [] - invalid_units = [] - error_units = [] - skipped_units = [] - - for i, unit in enumerate(sorted(units), 1): - result = self.validate_unit_with_uom(unit) - - if verbose: - # Show the cleaning process if applicable - display_parts = [] - if result.cleaned_unit: - display_parts.append(f"cleaned to '{result.cleaned_unit}'") - if result.ucum_format: - display_parts.append(f"UCUM format '{result.ucum_format}'") - - if display_parts: - display_str = " (" + ", ".join(display_parts) + ")" - print(f"[{i}/{len(units)}] Checking '{unit}'{display_str}...") - else: - print(f"[{i}/{len(units)}] Checking '{unit}'...") - - # Categorize results - if result.status == ValidationStatus.VALID: - valid_units.append(result) - if verbose: - print(f" ✓ Valid: {result.message}") - elif result.status == ValidationStatus.INVALID: - invalid_units.append(result) - if verbose: - print(f" ✗ Invalid: {result.message}") - elif result.status == ValidationStatus.SKIPPED: - skipped_units.append(result) - if verbose: - print(f" - Skipped: {result.unit}") - else: # ERROR - error_units.append(result) - if verbose: - print(f" ? Error: {result.message}") - - return ValidationSummary( - total_units=len(units), - valid_units=valid_units, - invalid_units=invalid_units, - skipped_units=skipped_units, - error_units=error_units - ) - - -class ReportGenerator: - """Generate validation reports.""" - - @staticmethod - def print_summary_report(summary: ValidationSummary) -> None: - """Print a comprehensive summary report.""" - print(f"\\n{'='*60}") - print("SUMMARY REPORT") - print(f"{'='*60}") - print(f"Total units found: {summary.total_units}") - print(f"Valid units: {len(summary.valid_units)}") - print(f"Invalid units: {len(summary.invalid_units)}") - print(f"Error/Unable to check: {len(summary.error_units)}") - print(f"Skipped units: {len(summary.skipped_units)}") - print(f"Success rate: {summary.success_rate:.1f}%") - - if summary.skipped_units: - print(f"\\n{'='*60}") - print("SKIPPED UNITS:") - print(f"{'='*60}") - for result in summary.skipped_units: - print(f" '{result.unit}' - {result.message}") - - if summary.invalid_units: - print(f"\\n{'='*60}") - print("INVALID UCUM CODES FOUND:") - print(f"{'='*60}") - for result in summary.invalid_units: - print(f" '{result.unit}' - {result.message}") - - if summary.error_units: - print(f"\\n{'='*60}") - print("UNITS WITH ERRORS (unable to verify):") - print(f"{'='*60}") - for result in summary.error_units: - print(f" '{result.unit}' - {result.message}") - - if summary.valid_units: - print(f"\\n{'='*60}") - print("VALID UCUM CODES:") - print(f"{'='*60}") - for result in summary.valid_units: - print(f" '{result.unit}' - {result.message}") - - @staticmethod - def save_csv_report(summary: ValidationSummary, output_file: Path) -> None: - """Save validation results to a CSV file.""" - all_results = ( - summary.valid_units + - summary.invalid_units + - summary.skipped_units + - summary.error_units - ) - - with open(output_file, 'w', newline='', encoding='utf-8') as f: - writer = csv.writer(f) - writer.writerow(['unit', 'status', 'message', 'cleaned_unit', 'ucum_format']) - - for result in all_results: - writer.writerow([ - result.unit, - result.status.value, - result.message, - result.cleaned_unit or '', - result.ucum_format or '' - ]) - - -@click.command() -@click.option('--input', 'input_file', default='quantity_values.tsv', - type=click.Path(exists=True, path_type=Path), - help='Input TSV file with QuantityValue data') -@click.option('--output', 'output_file', default='units_validation_report.csv', - type=click.Path(path_type=Path), - help='Output CSV file for validation report') -@click.option('--verbose', is_flag=True, help='Show detailed progress information') -def main(input_file, output_file, verbose) -> None: - """Validate UCUM units from QuantityValue TSV file.""" - - try: - # Initialize validator - validator = UCUMValidator() - - # Extract unique units from TSV file - unique_units = validator.extract_unique_units(input_file) - - # Validate units - summary = validator.validate_units(unique_units, verbose=verbose) - - # Generate report (only if verbose) - if verbose: - ReportGenerator.print_summary_report(summary) - - # Save CSV report - ReportGenerator.save_csv_report(summary, output_file) - - # Minimal console summary - if not verbose: - click.echo(f"UCUM validation: {len(summary.valid_units)} valid, {len(summary.invalid_units)} invalid, {summary.success_rate:.1f}% success - see {output_file}") - else: - click.echo(f"\nValidation report saved to: {output_file}") - - except FileNotFoundError: - click.echo(f"Error: File {input_file} not found", file=sys.stderr) - sys.exit(1) - except ValueError as e: - click.echo(f"Error: {e}", file=sys.stderr) - sys.exit(1) - except Exception as e: - click.echo(f"Unexpected error: {e}", file=sys.stderr) - sys.exit(1) - - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/utils/test_modules_are_independent.py b/utils/test_modules_are_independent.py deleted file mode 100644 index e02aa37677..0000000000 --- a/utils/test_modules_are_independent.py +++ /dev/null @@ -1,52 +0,0 @@ -import unittest -import linkml.generators.jsonschemagen as jsg -import linkml.generators.owlgen as og -import os -from linkml_runtime import SchemaView - -ROOT = os.path.join(os.path.dirname(__file__), '..') -SCHEMA_DIR = os.path.join(ROOT, "src", "schema") - -schema_modules = [] - -for root, dirs, files in os.walk(SCHEMA_DIR): - for file in files: - if file.endswith(".yaml"): - schema_modules.append(os.path.join(root, file)) - - -class TestModulesAreIndependent(unittest.TestCase): - """Test that modules can be independently converted to JSON schema.""" - - def test_modules_are_independent(self): - """Test that modules are independent.""" - - schema_modules.sort() - - for schema_module in schema_modules: - if schema_module.endswith("deprecated.yaml"): - continue - view = SchemaView(schema_module) - generated = jsg.JsonSchemaGenerator(schema=view.schema) - generated_text = generated.serialize() - - assert generated_text is not None - - -class TestModulesForOwl(unittest.TestCase): - """Test that modules can be independently converted to OWL.""" - - def test_modules_are_independent(self): - """Test that modules are independent.""" - - # schema_modules = [ - # ] # could test a defined subset - - for schema_module in schema_modules: - if schema_module.endswith("deprecated.yaml"): - continue - view = SchemaView(schema_module) - generated = og.OwlSchemaGenerator(schema=view.schema) - generated_text = generated.serialize() - - assert generated_text is not None