diff --git a/simpeg_drivers-assets/uijson/direct_current_2d_forward.ui.json b/simpeg_drivers-assets/uijson/direct_current_2d_forward.ui.json index 723664da..62882450 100644 --- a/simpeg_drivers-assets/uijson/direct_current_2d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_2d_forward.ui.json @@ -105,7 +105,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json b/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json index 467bdb80..95b75605 100644 --- a/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json @@ -125,7 +125,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/direct_current_3d_forward.ui.json b/simpeg_drivers-assets/uijson/direct_current_3d_forward.ui.json index da8ba5a9..1a93c370 100644 --- a/simpeg_drivers-assets/uijson/direct_current_3d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_3d_forward.ui.json @@ -31,7 +31,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json b/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json index 48b90fee..5eba2847 100644 --- a/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json @@ -56,7 +56,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/direct_current_batch2d_forward.ui.json b/simpeg_drivers-assets/uijson/direct_current_batch2d_forward.ui.json index 34a966a5..8628a630 100644 --- a/simpeg_drivers-assets/uijson/direct_current_batch2d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_batch2d_forward.ui.json @@ -88,7 +88,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/direct_current_batch2d_inversion.ui.json b/simpeg_drivers-assets/uijson/direct_current_batch2d_inversion.ui.json index 04de4956..7c19bce0 100644 --- a/simpeg_drivers-assets/uijson/direct_current_batch2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_batch2d_inversion.ui.json @@ -107,7 +107,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/fdem1d_forward.ui.json b/simpeg_drivers-assets/uijson/fdem1d_forward.ui.json index 33192e3c..af248f1b 100644 --- a/simpeg_drivers-assets/uijson/fdem1d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/fdem1d_forward.ui.json @@ -84,7 +84,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json b/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json index 6199b8db..dd5510db 100644 --- a/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json @@ -132,7 +132,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/fdem_forward.ui.json b/simpeg_drivers-assets/uijson/fdem_forward.ui.json index 24f6eedb..c72f54d4 100644 --- a/simpeg_drivers-assets/uijson/fdem_forward.ui.json +++ b/simpeg_drivers-assets/uijson/fdem_forward.ui.json @@ -44,7 +44,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/fdem_inversion.ui.json b/simpeg_drivers-assets/uijson/fdem_inversion.ui.json index 76991d4c..acd5692f 100644 --- a/simpeg_drivers-assets/uijson/fdem_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/fdem_inversion.ui.json @@ -92,7 +92,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_2d_forward.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_2d_forward.ui.json index d08f22cf..e90f20d4 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_2d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_2d_forward.ui.json @@ -105,7 +105,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", @@ -121,7 +121,7 @@ "isValue": true, "parent": "mesh", "label": "Background", - "tooltip": "Background model in the 'Model units' (S/m or ohm-m).", + "tooltip": "Background model in the 'Model units' (S/m or Ohm-m).", "property": "", "value": 0.001 }, diff --git a/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json index 999d02a8..5664233a 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json @@ -124,7 +124,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", @@ -140,7 +140,7 @@ "isValue": true, "parent": "mesh", "label": "Background", - "tooltip": "Background model in the 'Model units' (S/m or ohm-m).", + "tooltip": "Background model in the 'Model units' (S/m or Ohm-m).", "property": "", "value": 0.001 }, diff --git a/simpeg_drivers-assets/uijson/induced_polarization_3d_forward.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_3d_forward.ui.json index e9f559d4..889ca714 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_3d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_3d_forward.ui.json @@ -31,7 +31,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json index 96913778..79d43580 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json @@ -56,7 +56,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_batch2d_forward.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_batch2d_forward.ui.json index 0917f832..79ffccd7 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_batch2d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_batch2d_forward.ui.json @@ -88,7 +88,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_batch2d_inversion.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_batch2d_inversion.ui.json index e8fdbf7c..b9007098 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_batch2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_batch2d_inversion.ui.json @@ -107,7 +107,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json index 28815d75..62557f66 100644 --- a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json @@ -71,7 +71,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json b/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json index e6942efe..8cdecac5 100644 --- a/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json +++ b/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json @@ -78,7 +78,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json index 27708817..3a34206e 100644 --- a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json @@ -270,7 +270,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/tdem1d_forward.ui.json b/simpeg_drivers-assets/uijson/tdem1d_forward.ui.json index 02ceba28..b4d6c39f 100644 --- a/simpeg_drivers-assets/uijson/tdem1d_forward.ui.json +++ b/simpeg_drivers-assets/uijson/tdem1d_forward.ui.json @@ -98,7 +98,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json b/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json index 95129a3d..dbefaba0 100644 --- a/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json @@ -122,7 +122,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/tdem_forward.ui.json b/simpeg_drivers-assets/uijson/tdem_forward.ui.json index a5720a27..7549311d 100644 --- a/simpeg_drivers-assets/uijson/tdem_forward.ui.json +++ b/simpeg_drivers-assets/uijson/tdem_forward.ui.json @@ -70,7 +70,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json index c7b96f84..c9c22995 100644 --- a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json @@ -142,7 +142,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/tipper_forward.ui.json b/simpeg_drivers-assets/uijson/tipper_forward.ui.json index 7af86543..a0cd3617 100644 --- a/simpeg_drivers-assets/uijson/tipper_forward.ui.json +++ b/simpeg_drivers-assets/uijson/tipper_forward.ui.json @@ -54,7 +54,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json index eab33514..1581dab8 100644 --- a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json @@ -150,7 +150,7 @@ "model_type": { "choiceList": [ "Conductivity (S/m)", - "Resistivity (ohm-m)" + "Resistivity (Ohm-m)" ], "main": true, "group": "Mesh and models", diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index b4c74bdd..74304323 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -25,7 +25,7 @@ from simpeg.utils.mat_utils import cartesian2amplitude_dip_azimuth from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory -from simpeg_drivers.options import BaseInversionOptions +from simpeg_drivers.options import BaseInversionOptions, ModelTypeEnum if TYPE_CHECKING: @@ -418,7 +418,7 @@ def assemble_keyword_arguments( inversion_object.permutation.T, ] - if self.params.models.model_type.lower() == "resistivity (ohm-m)": + if self.params.models.model_type == ModelTypeEnum.resistivity: kwargs["transforms"].append(lambda x: 1 / x) if "1d" in self.factory_type: diff --git a/simpeg_drivers/components/factories/source_factory.py b/simpeg_drivers/components/factories/source_factory.py index ba1d729d..f9abbed9 100644 --- a/simpeg_drivers/components/factories/source_factory.py +++ b/simpeg_drivers/components/factories/source_factory.py @@ -24,6 +24,7 @@ from geoh5py.objects import LargeLoopGroundTEMReceivers from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory +from simpeg_drivers.options import ModelTypeEnum if TYPE_CHECKING: @@ -138,7 +139,10 @@ def assemble_keyword_arguments( # pylint: disable=arguments-differ if self.factory_type in ["magnetotellurics", "tipper"]: background = deepcopy(self.params.models.conductivity_model) - if getattr(self.params.models, "model_type", None) == "Resistivity (ohm-m)": + if ( + getattr(self.params.models, "model_type", None) + == ModelTypeEnum.resistivity + ): background **= -1.0 kwargs["sigma_primary"] = [background] diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 9cef58a6..32927f9b 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -24,6 +24,8 @@ mkvc, ) +from simpeg_drivers.options import ModelTypeEnum + if TYPE_CHECKING: from simpeg_drivers.driver import InversionDriver @@ -165,7 +167,7 @@ def starting_model(self) -> np.ndarray | None: mstart = self._starting_model.model.copy() if mstart is not None and self.is_sigma: - if self.driver.params.models.model_type.lower() == "resistivity (ohm-m)": + if self.driver.params.models.model_type == ModelTypeEnum.resistivity: mstart = 1 / mstart mstart = np.log(mstart) @@ -221,7 +223,7 @@ def reference_model(self) -> np.ndarray | None: ref_model = mref.copy() if self.is_sigma: - if self.driver.params.models.model_type.lower() == "resistivity (ohm-m)": + if self.driver.params.models.model_type == ModelTypeEnum.resistivity: ref_model = 1 / ref_model ref_model = np.log(ref_model) @@ -263,7 +265,7 @@ def reference_declination(self) -> np.ndarray | None: def lower_bound(self) -> np.ndarray | None: if ( self.is_sigma - and self.driver.params.models.model_type.lower() == "resistivity (ohm-m)" + and self.driver.params.models.model_type == ModelTypeEnum.resistivity ): bound_model = self._upper_bound.model else: @@ -283,7 +285,7 @@ def lower_bound(self) -> np.ndarray | None: if self.is_sigma: is_finite = np.isfinite(lbound) - if self.driver.params.models.model_type.lower() == "resistivity (ohm-m)": + if self.driver.params.models.model_type == ModelTypeEnum.resistivity: lbound[is_finite] = 1 / lbound[is_finite] lbound[is_finite] = np.log(lbound[is_finite]) @@ -297,7 +299,7 @@ def lower_bound(self) -> np.ndarray | None: def upper_bound(self) -> np.ndarray | None: if ( self.is_sigma - and self.driver.params.models.model_type.lower() == "resistivity (ohm-m)" + and self.driver.params.models.model_type == ModelTypeEnum.resistivity ): bound_model = self._lower_bound.model else: @@ -311,7 +313,7 @@ def upper_bound(self) -> np.ndarray | None: if self.is_sigma: is_finite = np.isfinite(ubound) - if self.driver.params.models.model_type.lower() == "resistivity (ohm-m)": + if self.driver.params.models.model_type == ModelTypeEnum.resistivity: ubound[is_finite] = 1 / ubound[is_finite] ubound[is_finite] = np.log(ubound[is_finite]) @@ -329,7 +331,7 @@ def conductivity_model(self) -> np.ndarray | None: background_sigma = self._conductivity_model.model.copy() if background_sigma is not None: - if self.driver.params.models.model_type.lower() == "resistivity (ohm-m)": + if self.driver.params.models.model_type == ModelTypeEnum.resistivity: background_sigma = 1 / background_sigma # Don't apply log if IP inversion @@ -568,9 +570,8 @@ def save_model(self): model_type = self.model_type if ( - model_type - and model_type.lower() == "conductivity_model" - and self.driver.params.models.model_type.lower() == "resistivity (ohm-m)" + model_type == "conductivity_model" + and self.driver.params.models.model_type == ModelTypeEnum.resistivity ): model_type = "resistivity_model" @@ -589,12 +590,11 @@ def save_model(self): def edit_ndv_model(self, model): """Change values to NDV on models and save to workspace.""" + model_type = self.model_type if ( - model_type - and model_type.lower() == "conductivity_model" - and getattr(self.driver.params.models, "model_type", None) - == "Resistivity (ohm-m)" + getattr(self.driver.params.models, "model_type", None) + == ModelTypeEnum.resistivity ): model_type = "resistivity_model" diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 135d8897..de308714 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -38,6 +38,7 @@ ) from simpeg_drivers.driver import InversionDriver from simpeg_drivers.joint.options import BaseJointOptions +from simpeg_drivers.options import ModelTypeEnum from simpeg_drivers.utils.utils import simpeg_group_to_driver @@ -451,7 +452,10 @@ def _get_local_model_save_directives( ) model_directive.label = driver.params.physical_property - if getattr(driver.params.models, "model_type", None) == "Resistivity (ohm-m)": + if ( + getattr(driver.params.models, "model_type", None) + == ModelTypeEnum.resistivity + ): model_directive.label = "resistivity_model" model_directive.transforms = [wire, *model_directive.transforms] diff --git a/simpeg_drivers/joint/joint_surveys/driver.py b/simpeg_drivers/joint/joint_surveys/driver.py index e288c3b5..eb912c18 100644 --- a/simpeg_drivers/joint/joint_surveys/driver.py +++ b/simpeg_drivers/joint/joint_surveys/driver.py @@ -14,12 +14,12 @@ from logging import getLogger import numpy as np -from geoh5py.groups.property_group_type import GroupTypeEnum from geoh5py.shared.utils import fetch_active_workspace from simpeg import maps from simpeg_drivers.driver import InversionDriver from simpeg_drivers.joint.driver import BaseJointDriver +from simpeg_drivers.options import ModelTypeEnum from .options import JointSurveysOptions @@ -64,7 +64,7 @@ def validate_create_models(self): model = np.exp(model) if ( getattr(self.params.models, "model_type", None) - == "Resistivity (ohm-m)" + == ModelTypeEnum.resistivity ): model = 1.0 / model diff --git a/simpeg_drivers/joint/joint_surveys/options.py b/simpeg_drivers/joint/joint_surveys/options.py index 7e0da88b..b80a3bd4 100644 --- a/simpeg_drivers/joint/joint_surveys/options.py +++ b/simpeg_drivers/joint/joint_surveys/options.py @@ -14,11 +14,26 @@ from pathlib import Path from typing import ClassVar +from geoh5py.data import FloatData from pydantic import field_validator, model_validator from simpeg_drivers import assets_path -from simpeg_drivers.joint.options import BaseJointOptions -from simpeg_drivers.options import ConductivityModelOptions +from simpeg_drivers.joint.options import BaseJointOptions, JointModelOptions +from simpeg_drivers.options import ModelTypeEnum + + +class JointSurveysModelOptions(JointModelOptions): + """ + Joint Surveys model options. + + :param model_type: The physical property type for the inversion. + :param starting_model: The starting model for the inversion. + :param reference_model: The reference model for the inversion. + """ + + model_type: ModelTypeEnum = ModelTypeEnum.conductivity + starting_model: float | FloatData | None = None + reference_model: float | FloatData | None = None class JointSurveysOptions(BaseJointOptions): @@ -32,7 +47,7 @@ class JointSurveysOptions(BaseJointOptions): title: str = "Joint Surveys Inversion" inversion_type: str = "joint surveys" - models: ConductivityModelOptions + models: JointSurveysModelOptions @field_validator("group_a", "group_b", "group_c") @classmethod diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 965edfcb..7499daef 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -11,6 +11,7 @@ from __future__ import annotations +from enum import Enum from logging import getLogger from pathlib import Path from typing import Annotated, Any, ClassVar, Literal, TypeAlias @@ -314,14 +315,17 @@ def gradient_orientations(self) -> tuple(float, float): return None +class ModelTypeEnum(str, Enum): + conductivity = "Conductivity (S/m)" + resistivity = "Resistivity (Ohm-m)" + + class ConductivityModelOptions(ModelOptions): """ Options for the conductivity model used in all of EM methods. """ - model_type: Literal["Conductivity (S/m)", "Resistivity (ohm-m)"] = ( - "Conductivity (S/m)" - ) + model_type: ModelTypeEnum = ModelTypeEnum.conductivity conductivity_model: float | FloatData | None = Field( None, validation_alias=AliasChoices("background_conductivity", "conductivity_model"), diff --git a/simpeg_drivers/plate_simulation/driver.py b/simpeg_drivers/plate_simulation/driver.py index d8752295..d3f62c59 100644 --- a/simpeg_drivers/plate_simulation/driver.py +++ b/simpeg_drivers/plate_simulation/driver.py @@ -21,11 +21,10 @@ from geoh5py.groups import SimPEGGroup from geoh5py.objects import Octree, Points, Surface from geoh5py.shared.utils import fetch_active_workspace, stringify -from geoh5py.ui_json import InputFile, monitored_directory_copy from grid_apps.octree_creation.driver import OctreeDriver from simpeg_drivers.driver import BaseDriver, InversionDriver -from simpeg_drivers.options import BaseForwardOptions +from simpeg_drivers.options import BaseForwardOptions, ModelTypeEnum from simpeg_drivers.plate_simulation.models.events import Anomaly, Erosion, Overburden from simpeg_drivers.plate_simulation.models.parametric import Plate from simpeg_drivers.plate_simulation.models.series import DikeSwarm, Geology @@ -137,7 +136,9 @@ def simulation_parameters(self) -> BaseForwardOptions: if self._simulation_parameters is None: self._simulation_parameters = self.params.simulation_parameters() if self._simulation_parameters.physical_property == "conductivity": - self._simulation_parameters.models.model_type = "Resistivity (ohm-m)" + self._simulation_parameters.models.model_type = ( + ModelTypeEnum.resistivity + ) return self._simulation_parameters @property diff --git a/simpeg_drivers/utils/nested.py b/simpeg_drivers/utils/nested.py index 719740e8..6ff3a325 100644 --- a/simpeg_drivers/utils/nested.py +++ b/simpeg_drivers/utils/nested.py @@ -275,7 +275,7 @@ def create_simulation( n_actives = int(actives.sum()) if getattr(simulation, "_chiMap", None) is not None: - if simulation.model_type and simulation.model_type.lower() == "vector": + if simulation.model_type == "vector": kwargs["chiMap"] = maps.IdentityMap(nP=n_actives * 3) kwargs["model_type"] = "vector" else: diff --git a/tests/run_tests/driver_2d_rotated_gradients_test.py b/tests/run_tests/driver_2d_rotated_gradients_test.py index 7e1218ae..5d6be39f 100644 --- a/tests/run_tests/driver_2d_rotated_gradients_test.py +++ b/tests/run_tests/driver_2d_rotated_gradients_test.py @@ -153,7 +153,7 @@ def test_dc2d_rotated_grad_run( gradient_rotation=pg, potential_channel=potential, potential_uncertainty=1e-3, - model_type="Resistivity (ohm-m)", + model_type="Resistivity (Ohm-m)", starting_model=100.0, reference_model=100.0, s_norm=1.0, diff --git a/tests/run_tests/driver_dc_2d_test.py b/tests/run_tests/driver_dc_2d_test.py index 91ac277a..46e9cf64 100644 --- a/tests/run_tests/driver_dc_2d_test.py +++ b/tests/run_tests/driver_dc_2d_test.py @@ -113,7 +113,7 @@ def test_dc_2d_run(tmp_path: Path, max_iterations=1, pytest=True): data_object=potential.parent, potential_channel=potential, potential_uncertainty=1e-3, - model_type="Resistivity (ohm-m)", + model_type="Resistivity (Ohm-m)", starting_model=100.0, reference_model=100.0, s_norm=0.0, diff --git a/tests/run_tests/driver_ip_2d_test.py b/tests/run_tests/driver_ip_2d_test.py index 92eb45c3..219ea86b 100644 --- a/tests/run_tests/driver_ip_2d_test.py +++ b/tests/run_tests/driver_ip_2d_test.py @@ -64,7 +64,7 @@ def test_ip_2d_fwr_run( topography_object=components.topography, starting_model=components.model, conductivity_model=1e2, - model_type="Resistivity (ohm-m)", + model_type="Resistivity (Ohm-m)", line_selection=LineSelectionOptions( line_object=geoh5.get_entity("line_ids")[0], line_id=101, diff --git a/tests/run_tests/driver_ip_test.py b/tests/run_tests/driver_ip_test.py index 7ee6fcd6..6f828a41 100644 --- a/tests/run_tests/driver_ip_test.py +++ b/tests/run_tests/driver_ip_test.py @@ -90,7 +90,7 @@ def test_ip_3d_run( topography_object=topography, data_object=potential.parent, conductivity_model=1e2, - model_type="Resistivity (ohm-m)", + model_type="Resistivity (Ohm-m)", reference_model=1e-6, starting_model=1e-6, s_norm=0.0, diff --git a/tests/run_tests/driver_joint_cross_gradient_test.py b/tests/run_tests/driver_joint_cross_gradient_test.py index caba490b..6184c201 100644 --- a/tests/run_tests/driver_joint_cross_gradient_test.py +++ b/tests/run_tests/driver_joint_cross_gradient_test.py @@ -210,7 +210,7 @@ def test_joint_cross_gradient_inv_run( topography_object=topography, data_object=survey, potential_channel=data, - model_type="Resistivity (ohm-m)", + model_type="Resistivity (Ohm-m)", potential_uncertainty=5e-4, tile_spatial=1, starting_model=100.0, diff --git a/tests/run_tests/driver_joint_surveys_test.py b/tests/run_tests/driver_joint_surveys_test.py index 412a8da7..29537085 100644 --- a/tests/run_tests/driver_joint_surveys_test.py +++ b/tests/run_tests/driver_joint_surveys_test.py @@ -225,7 +225,7 @@ def test_joint_surveys_conductivity_run( data_object=components.survey, starting_model=components.model, reference_model=5.0, - model_type="Resistivity (ohm-m)", + model_type="Resistivity (Ohm-m)", ) driver_A = DC3DInversionDriver(params) driver_B = DC3DInversionDriver(params) diff --git a/tests/run_tests/driver_mt_test.py b/tests/run_tests/driver_mt_test.py index 70736a68..45c7f2fe 100644 --- a/tests/run_tests/driver_mt_test.py +++ b/tests/run_tests/driver_mt_test.py @@ -169,7 +169,7 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True): z_norm=1.0, cooling_rate=1, lower_bound=0.75, - model_type="Resistivity (ohm-m)", + model_type="Resistivity (Ohm-m)", background_conductivity=100.0, max_global_iterations=max_iterations, initial_beta_ratio=1e3, diff --git a/tests/run_tests/driver_tipper_test.py b/tests/run_tests/driver_tipper_test.py index 72786d8c..fd34ff46 100644 --- a/tests/run_tests/driver_tipper_test.py +++ b/tests/run_tests/driver_tipper_test.py @@ -66,7 +66,7 @@ def test_tipper_fwr_run( topography_object=components.topography, data_object=components.survey, starting_model=components.model, - model_type="Resistivity (ohm-m)", + model_type="Resistivity (Ohm-m)", background_conductivity=1e2, txz_real_channel_bool=True, txz_imag_channel_bool=True, @@ -146,7 +146,7 @@ def test_tipper_run(tmp_path: Path, max_iterations=1, pytest=True): y_norm=1.0, z_norm=1.0, alpha_s=1.0, - model_type="Resistivity (ohm-m)", + model_type="Resistivity (Ohm-m)", lower_bound=0.75, max_global_iterations=max_iterations, initial_beta_ratio=1e3,