Skip to content

Commit 3fcb4aa

Browse files
Add earth science module with SESAR vocabularies
This commit adds comprehensive earth science vocabularies based on the SESAR (System for Earth Sample Registration) standard from geosamples.org. New Schema Files: - src/valuesets/schema/earth_science/material_types.yaml * 15 material types (ROCK, SEDIMENT, SOIL, MINERAL, ICE, etc.) * Ontology mappings to ENVO, CHEBI, and PO - src/valuesets/schema/earth_science/sample_types.yaml * 23 sample object types (CORE, DREDGE, GRAB, CTD, etc.) * Describes physical form and collection context - src/valuesets/schema/earth_science/collection_methods.yaml * 32+ collection methods with hierarchical organization * Main methods: BLASTING, CORING, DREDGING, GRAB, MANUAL, PROBE * Subtypes for specialized techniques (17 coring variants, ROV/HOV grab, etc.) - src/valuesets/schema/earth_science/physiographic_features.yaml * 67 physiographic features (geological/geographical contexts) * Features: VOLCANO, HYDROTHERMAL_VENT, SEAMOUNT, CANYON, REEF, etc. * 11 features mapped to ENVO ontology terms Generated Code: - Python enums in src/valuesets/enums/earth_science/ - Updated documentation in docs/schema/valuesets.yaml All schemas validated successfully with proper ontology mappings. References: - https://www.geosamples.org/vocabularies - SESAR material types, sample types, collection methods, and physiographic features 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent ed42b6d commit 3fcb4aa

File tree

13 files changed

+1207
-2
lines changed

13 files changed

+1207
-2
lines changed

docs/schema/valuesets.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51071,5 +51071,5 @@ metamodel_version: 1.7.0
5107151071
source_file: valuesets.yaml
5107251072
source_file_date: '2025-10-30T12:09:22'
5107351073
source_file_size: 2816
51074-
generation_date: '2025-10-31T16:49:01'
51074+
generation_date: '2025-11-03T17:34:51'
5107551075

src/valuesets/enums/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@
101101
from .data_science.sentiment_analysis import SentimentClassificationEnum, FineSentimentClassificationEnum
102102
from .data_science.text_classification import NewsTopicCategoryEnum, ToxicityClassificationEnum, IntentClassificationEnum
103103

104+
# Earth_Science domain
105+
from .earth_science.collection_methods import SESARCollectionMethod
106+
from .earth_science.material_types import SESARMaterialType
107+
from .earth_science.physiographic_features import SESARPhysiographicFeature
108+
from .earth_science.sample_types import SESARSampleType
109+
104110
# Energy domain
105111
from .energy.energy import EnergySource, EnergyUnit, PowerUnit, EnergyEfficiencyRating, BuildingEnergyStandard, GridType, EnergyStorageType, EmissionScope, CarbonIntensity, ElectricityMarket
106112
from .energy.fossil_fuels import FossilFuelTypeEnum
@@ -545,6 +551,10 @@
545551
"ResearchReactorTypeEnum",
546552
"ResearchRole",
547553
"RoboticArmTypeEnum",
554+
"SESARCollectionMethod",
555+
"SESARMaterialType",
556+
"SESARPhysiographicFeature",
557+
"SESARSampleType",
548558
"SafetyColorEnum",
549559
"SafetySystemClassEnum",
550560
"SampleProcessingOperationEnum",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""Auto-generated package."""
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
"""
2+
Earth Science Sample Collection Methods
3+
4+
Methods for collecting earth samples, based on SESAR (System for Earth Sample Registration) vocabulary
5+
6+
Generated from: earth_science/collection_methods.yaml
7+
"""
8+
9+
from __future__ import annotations
10+
11+
from typing import Dict, Any, Optional
12+
from valuesets.generators.rich_enum import RichEnum
13+
14+
class SESARCollectionMethod(RichEnum):
15+
"""
16+
Sample collection methods as defined by SESAR (System for Earth Sample Registration). These describe the method by which a sample was collected.
17+
"""
18+
# Enum members
19+
BLASTING = "BLASTING"
20+
CAMERA_SLED = "CAMERA_SLED"
21+
CORING = "CORING"
22+
CORING_BOX_CORER = "CORING_BOX_CORER"
23+
CORING_CAMERA_MOUNTED = "CORING_CAMERA_MOUNTED"
24+
CORING_DRILL_CORER = "CORING_DRILL_CORER"
25+
CORING_FREE_FALL_CORER = "CORING_FREE_FALL_CORER"
26+
CORING_GRAVITY = "CORING_GRAVITY"
27+
CORING_HAND_HELD = "CORING_HAND_HELD"
28+
CORING_KASTENLOT = "CORING_KASTENLOT"
29+
CORING_MULTI = "CORING_MULTI"
30+
CORING_PISTON = "CORING_PISTON"
31+
CORING_ROCK = "CORING_ROCK"
32+
CORING_SIDE_SADDLE = "CORING_SIDE_SADDLE"
33+
CORING_SUBMERSIBLE_MOUNTED = "CORING_SUBMERSIBLE_MOUNTED"
34+
CORING_TRIGGER_WEIGHT = "CORING_TRIGGER_WEIGHT"
35+
CORING_VIBRATING = "CORING_VIBRATING"
36+
DREDGING = "DREDGING"
37+
DREDGING_CHAIN_BAG = "DREDGING_CHAIN_BAG"
38+
DREDGING_CHAIN_BAG_DREDGE = "DREDGING_CHAIN_BAG_DREDGE"
39+
EXPERIMENTAL_APPARATUS = "EXPERIMENTAL_APPARATUS"
40+
GRAB = "GRAB"
41+
GRAB_HOV = "GRAB_HOV"
42+
GRAB_ROV = "GRAB_ROV"
43+
MANUAL = "MANUAL"
44+
MANUAL_HAMMER = "MANUAL_HAMMER"
45+
PROBE = "PROBE"
46+
SEDIMENT_TRAP = "SEDIMENT_TRAP"
47+
SUSPENDED_SEDIMENT = "SUSPENDED_SEDIMENT"
48+
UNKNOWN = "UNKNOWN"
49+
50+
# Set metadata after class creation
51+
SESARCollectionMethod._metadata = {
52+
"BLASTING": {'description': 'Sample collected using blasting techniques'},
53+
"CAMERA_SLED": {'description': 'Sample collected via camera sled or camera tow', 'annotations': {'aliases': 'Camera tow'}},
54+
"CORING": {'description': 'Sample collected using coring techniques'},
55+
"CORING_BOX_CORER": {'description': 'Sample collected using a box corer', 'annotations': {'parent_method': 'Coring'}},
56+
"CORING_CAMERA_MOUNTED": {'description': 'Sample collected using camera-mounted corer', 'annotations': {'parent_method': 'Coring'}},
57+
"CORING_DRILL_CORER": {'description': 'Sample collected using a drill corer', 'annotations': {'parent_method': 'Coring'}},
58+
"CORING_FREE_FALL_CORER": {'description': 'Sample collected using a free-fall corer', 'annotations': {'parent_method': 'Coring'}},
59+
"CORING_GRAVITY": {'description': 'Sample collected using a gravity corer', 'annotations': {'parent_method': 'Coring'}},
60+
"CORING_HAND_HELD": {'description': 'Sample collected using a hand-held corer', 'annotations': {'parent_method': 'Coring'}},
61+
"CORING_KASTENLOT": {'description': 'Sample collected using a kastenlot corer', 'annotations': {'parent_method': 'Coring'}},
62+
"CORING_MULTI": {'description': 'Sample collected using a multi-corer', 'annotations': {'parent_method': 'Coring'}},
63+
"CORING_PISTON": {'description': 'Sample collected using a piston corer', 'annotations': {'parent_method': 'Coring'}},
64+
"CORING_ROCK": {'description': 'Sample collected using a rock corer', 'annotations': {'parent_method': 'Coring'}},
65+
"CORING_SIDE_SADDLE": {'description': 'Sample collected using a side saddle corer', 'annotations': {'parent_method': 'Coring'}},
66+
"CORING_SUBMERSIBLE_MOUNTED": {'description': 'Sample collected using a submersible-mounted corer', 'annotations': {'parent_method': 'Coring'}},
67+
"CORING_TRIGGER_WEIGHT": {'description': 'Sample collected using a trigger weight corer', 'annotations': {'parent_method': 'Coring'}},
68+
"CORING_VIBRATING": {'description': 'Sample collected using a vibrating corer', 'annotations': {'parent_method': 'Coring'}},
69+
"DREDGING": {'description': 'Sample collected by dredging'},
70+
"DREDGING_CHAIN_BAG": {'description': 'Sample collected using a chain bag dredge', 'annotations': {'parent_method': 'Dredging'}},
71+
"DREDGING_CHAIN_BAG_DREDGE": {'description': 'Sample collected using a chain bag dredge', 'annotations': {'parent_method': 'Dredging'}},
72+
"EXPERIMENTAL_APPARATUS": {'description': 'Sample collected using experimental apparatus'},
73+
"GRAB": {'description': 'Sample collected using a grab sampler'},
74+
"GRAB_HOV": {'description': 'Sample collected using Human-Occupied Vehicle grab', 'annotations': {'parent_method': 'Grab', 'full_name': 'Human-Occupied Vehicle'}},
75+
"GRAB_ROV": {'description': 'Sample collected using Remotely Operated Vehicle grab', 'annotations': {'parent_method': 'Grab', 'full_name': 'Remotely Operated Vehicle'}},
76+
"MANUAL": {'description': 'Sample collected manually'},
77+
"MANUAL_HAMMER": {'description': 'Sample collected manually using a hammer', 'annotations': {'parent_method': 'Manual'}},
78+
"PROBE": {'description': 'Sample collected using a probe'},
79+
"SEDIMENT_TRAP": {'description': 'Sample collected using a sediment trap'},
80+
"SUSPENDED_SEDIMENT": {'description': 'Suspended sediment sample'},
81+
"UNKNOWN": {'description': 'Collection method unknown'},
82+
}
83+
84+
__all__ = [
85+
"SESARCollectionMethod",
86+
]
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
"""
2+
Earth Science Material Types
3+
4+
Material types for earth samples, based on SESAR (System for Earth Sample Registration) vocabulary
5+
6+
Generated from: earth_science/material_types.yaml
7+
"""
8+
9+
from __future__ import annotations
10+
11+
from typing import Dict, Any, Optional
12+
from valuesets.generators.rich_enum import RichEnum
13+
14+
class SESARMaterialType(RichEnum):
15+
"""
16+
Material types as defined by SESAR (System for Earth Sample Registration). These describe what a sample consists of (e.g., rock, mineral, liquid).
17+
"""
18+
# Enum members
19+
BIOLOGY = "BIOLOGY"
20+
GAS = "GAS"
21+
ICE = "ICE"
22+
LIQUID_AQUEOUS = "LIQUID_AQUEOUS"
23+
LIQUID_ORGANIC = "LIQUID_ORGANIC"
24+
MINERAL = "MINERAL"
25+
NOT_APPLICABLE = "NOT_APPLICABLE"
26+
ORGANIC_MATERIAL = "ORGANIC_MATERIAL"
27+
OTHER = "OTHER"
28+
PARTICULATE = "PARTICULATE"
29+
PLANT_STRUCTURE = "PLANT_STRUCTURE"
30+
ROCK = "ROCK"
31+
SEDIMENT = "SEDIMENT"
32+
SOIL = "SOIL"
33+
SYNTHETIC = "SYNTHETIC"
34+
35+
# Set metadata after class creation
36+
SESARMaterialType._metadata = {
37+
"BIOLOGY": {'description': 'Biological material or specimens'},
38+
"GAS": {'description': 'Gaseous material'},
39+
"ICE": {'description': 'Frozen water or ice samples', 'meaning': 'ENVO:01001125'},
40+
"LIQUID_AQUEOUS": {'description': 'Aqueous (water-based) liquid', 'annotations': {'sesar_label': 'Liquid>aqueous'}},
41+
"LIQUID_ORGANIC": {'description': 'Organic liquid', 'annotations': {'sesar_label': 'Liquid>organic'}},
42+
"MINERAL": {'description': 'Mineral specimen', 'meaning': 'CHEBI:46662'},
43+
"NOT_APPLICABLE": {'description': 'Material type not applicable', 'annotations': {'sesar_label': 'NotApplicable'}},
44+
"ORGANIC_MATERIAL": {'description': 'Organic material (non-living)', 'meaning': 'ENVO:01000155'},
45+
"OTHER": {'description': 'Other material type not listed'},
46+
"PARTICULATE": {'description': 'Particulate matter'},
47+
"PLANT_STRUCTURE": {'description': 'Plant structure or tissue', 'meaning': 'PO:0009011'},
48+
"ROCK": {'description': 'Rock specimen', 'meaning': 'ENVO:00001995'},
49+
"SEDIMENT": {'description': 'Sediment sample', 'meaning': 'ENVO:00002007'},
50+
"SOIL": {'description': 'Soil sample', 'meaning': 'ENVO:00001998'},
51+
"SYNTHETIC": {'description': 'Synthetic or artificial material'},
52+
}
53+
54+
__all__ = [
55+
"SESARMaterialType",
56+
]
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
"""
2+
Earth Science Physiographic Features
3+
4+
Physiographic features for earth sample collection sites, based on SESAR (System for Earth Sample Registration) vocabulary
5+
6+
Generated from: earth_science/physiographic_features.yaml
7+
"""
8+
9+
from __future__ import annotations
10+
11+
from typing import Dict, Any, Optional
12+
from valuesets.generators.rich_enum import RichEnum
13+
14+
class SESARPhysiographicFeature(RichEnum):
15+
"""
16+
Physiographic feature types as defined by SESAR (System for Earth Sample Registration). These describe the type of physical feature from which a sample was collected.
17+
"""
18+
# Enum members
19+
ABYSSAL_FEATURE = "ABYSSAL_FEATURE"
20+
ALLUVIAL_FAN = "ALLUVIAL_FAN"
21+
ANTICLINE = "ANTICLINE"
22+
AQUIFER = "AQUIFER"
23+
ARCH = "ARCH"
24+
ARROYO = "ARROYO"
25+
BADLANDS = "BADLANDS"
26+
BANK = "BANK"
27+
BAR = "BAR"
28+
BASIN = "BASIN"
29+
BAY = "BAY"
30+
BEACH = "BEACH"
31+
BIGHT = "BIGHT"
32+
CANYON = "CANYON"
33+
CAPE = "CAPE"
34+
CAVE = "CAVE"
35+
CHANNEL = "CHANNEL"
36+
CIRQUE = "CIRQUE"
37+
CLIFF = "CLIFF"
38+
CONTINENTAL_DIVIDE = "CONTINENTAL_DIVIDE"
39+
CONTINENTAL_MARGIN = "CONTINENTAL_MARGIN"
40+
CRATER = "CRATER"
41+
DELTA = "DELTA"
42+
DRAINAGE_BASIN = "DRAINAGE_BASIN"
43+
DRUMLIN = "DRUMLIN"
44+
DUNE = "DUNE"
45+
EARTHQUAKE_FEATURE = "EARTHQUAKE_FEATURE"
46+
ESTUARY = "ESTUARY"
47+
FAULT = "FAULT"
48+
FAULT_ZONE = "FAULT_ZONE"
49+
FLAT = "FLAT"
50+
FLOODPLAIN = "FLOODPLAIN"
51+
FOLD = "FOLD"
52+
FRACTURE_ZONE = "FRACTURE_ZONE"
53+
GAP = "GAP"
54+
GULF = "GULF"
55+
GUT = "GUT"
56+
HYDROTHERMAL_VENT = "HYDROTHERMAL_VENT"
57+
ICE_MASS = "ICE_MASS"
58+
ISTHMUS = "ISTHMUS"
59+
KARST_AREA = "KARST_AREA"
60+
LAKE = "LAKE"
61+
LAVA_FIELD = "LAVA_FIELD"
62+
LEDGE = "LEDGE"
63+
MASSIF = "MASSIF"
64+
MESA = "MESA"
65+
MINERAL_DEPOSIT_AREA = "MINERAL_DEPOSIT_AREA"
66+
MORAINE = "MORAINE"
67+
MOUNTAIN = "MOUNTAIN"
68+
MOUNTAIN_RANGE = "MOUNTAIN_RANGE"
69+
MOUNTAIN_SUMMIT = "MOUNTAIN_SUMMIT"
70+
OCEAN_TRENCH = "OCEAN_TRENCH"
71+
OUTCROP = "OUTCROP"
72+
PLAIN = "PLAIN"
73+
PLATEAU = "PLATEAU"
74+
PLAYA = "PLAYA"
75+
REEF = "REEF"
76+
RIDGE = "RIDGE"
77+
RIFT_ZONE = "RIFT_ZONE"
78+
ROADCUT = "ROADCUT"
79+
SEAMOUNT = "SEAMOUNT"
80+
SEA = "SEA"
81+
STREAM = "STREAM"
82+
SUBMARINE_CANYON = "SUBMARINE_CANYON"
83+
SYNCLINE = "SYNCLINE"
84+
THERMAL_FEATURE = "THERMAL_FEATURE"
85+
VALLEY = "VALLEY"
86+
VOLCANO = "VOLCANO"
87+
88+
# Set metadata after class creation
89+
SESARPhysiographicFeature._metadata = {
90+
"ABYSSAL_FEATURE": {'description': 'Deep ocean floor feature'},
91+
"ALLUVIAL_FAN": {'description': 'Fan-shaped deposit formed by flowing water'},
92+
"ANTICLINE": {'description': 'Upward-folded rock formation'},
93+
"AQUIFER": {'description': 'Underground layer of water-bearing rock'},
94+
"ARCH": {'description': 'Natural arch formation', 'annotations': {'note': 'natural formation'}},
95+
"ARROYO": {'description': 'Steep-sided gully cut by running water'},
96+
"BADLANDS": {'description': 'Dry terrain with eroded sedimentary rocks'},
97+
"BANK": {'description': 'Raised area of seabed or riverbed', 'annotations': {'note': 'hydrographic'}},
98+
"BAR": {'description': 'Elongated landform feature', 'annotations': {'note': 'physiographic'}},
99+
"BASIN": {'description': "Depression in the Earth's surface"},
100+
"BAY": {'description': 'Body of water partly enclosed by land'},
101+
"BEACH": {'description': 'Landform along a body of water'},
102+
"BIGHT": {'description': 'Shallow bay or bend in a coastline'},
103+
"CANYON": {'description': 'Deep gorge with steep sides', 'meaning': 'ENVO:00000169'},
104+
"CAPE": {'description': 'Pointed land projection into water'},
105+
"CAVE": {'description': 'Natural underground chamber', 'meaning': 'ENVO:00000067'},
106+
"CHANNEL": {'description': 'Watercourse or strait'},
107+
"CIRQUE": {'description': 'Amphitheater-like valley carved by glacial erosion'},
108+
"CLIFF": {'description': 'Steep rock face'},
109+
"CONTINENTAL_DIVIDE": {'description': 'Drainage divide on a continent'},
110+
"CONTINENTAL_MARGIN": {'description': 'Zone between continental shelf and deep ocean'},
111+
"CRATER": {'description': 'Bowl-shaped depression'},
112+
"DELTA": {'description': 'Landform at river mouth', 'meaning': 'ENVO:00000101'},
113+
"DRAINAGE_BASIN": {'description': 'Area drained by a river system'},
114+
"DRUMLIN": {'description': 'Elongated hill formed by glacial action'},
115+
"DUNE": {'description': 'Hill of sand formed by wind or water'},
116+
"EARTHQUAKE_FEATURE": {'description': 'Landform created by seismic activity'},
117+
"ESTUARY": {'description': 'Partially enclosed coastal body of water', 'meaning': 'ENVO:00000045'},
118+
"FAULT": {'description': 'Fracture in rock with displacement'},
119+
"FAULT_ZONE": {'description': 'Area containing multiple faults'},
120+
"FLAT": {'description': 'Level land area'},
121+
"FLOODPLAIN": {'description': 'Flat area adjacent to a river'},
122+
"FOLD": {'description': 'Bend in rock layers', 'annotations': {'note': 'geologic'}},
123+
"FRACTURE_ZONE": {'description': 'Area of crustal fractures'},
124+
"GAP": {'description': 'Mountain pass or opening'},
125+
"GULF": {'description': 'Large bay'},
126+
"GUT": {'description': 'Narrow water passage'},
127+
"HYDROTHERMAL_VENT": {'description': 'Fissure releasing geothermally heated water', 'meaning': 'ENVO:00000215'},
128+
"ICE_MASS": {'description': 'Large accumulation of ice'},
129+
"ISTHMUS": {'description': 'Narrow strip of land connecting two larger areas'},
130+
"KARST_AREA": {'description': 'Landscape formed by limestone dissolution'},
131+
"LAKE": {'description': 'Body of standing water', 'meaning': 'ENVO:00000020'},
132+
"LAVA_FIELD": {'description': 'Area covered by lava flows'},
133+
"LEDGE": {'description': 'Narrow horizontal surface projecting from rock'},
134+
"MASSIF": {'description': 'Compact group of mountains'},
135+
"MESA": {'description': 'Isolated flat-topped hill'},
136+
"MINERAL_DEPOSIT_AREA": {'description': 'Area with concentrated mineral deposits'},
137+
"MORAINE": {'description': 'Glacially formed accumulation of debris'},
138+
"MOUNTAIN": {'description': 'Large natural elevation', 'meaning': 'ENVO:00000081'},
139+
"MOUNTAIN_RANGE": {'description': 'Series of connected mountains', 'meaning': 'ENVO:00000080'},
140+
"MOUNTAIN_SUMMIT": {'description': 'Highest point of a mountain'},
141+
"OCEAN_TRENCH": {'description': 'Deep oceanic depression'},
142+
"OUTCROP": {'description': 'Exposed rock formation'},
143+
"PLAIN": {'description': 'Flat or gently rolling land'},
144+
"PLATEAU": {'description': 'Elevated flat area'},
145+
"PLAYA": {'description': 'Dried lake bed'},
146+
"REEF": {'description': 'Ridge of rock or coral near water surface', 'meaning': 'ENVO:01001899'},
147+
"RIDGE": {'description': 'Long narrow elevation'},
148+
"RIFT_ZONE": {'description': "Area where Earth's crust is pulling apart"},
149+
"ROADCUT": {'description': 'Artificial rock exposure along roadway'},
150+
"SEAMOUNT": {'description': 'Underwater mountain', 'meaning': 'ENVO:00000264'},
151+
"SEA": {'description': 'Large body of salt water'},
152+
"STREAM": {'description': 'Flowing body of water'},
153+
"SUBMARINE_CANYON": {'description': 'Steep-sided valley on seafloor', 'meaning': 'ENVO:00000267'},
154+
"SYNCLINE": {'description': 'Downward-folded rock formation'},
155+
"THERMAL_FEATURE": {'description': 'Geothermal feature'},
156+
"VALLEY": {'description': 'Low area between hills or mountains'},
157+
"VOLCANO": {'description': "Vent in Earth's crust through which lava erupts", 'meaning': 'ENVO:00000247'},
158+
}
159+
160+
__all__ = [
161+
"SESARPhysiographicFeature",
162+
]

0 commit comments

Comments
 (0)