Source code for pycsamt.models.modem

# Author: LKouadio <etanoyau@gmail.com>
# License: LGPL-3.0
"""pycsamt.models.modem — Python interface to the ModEM MT inversion code.

ModEM (Modular EM inversion system) supports 2-D and 3-D magnetotelluric
inversion using a nonlinear conjugate-gradient (NLCG) algorithm.

References
----------
Egbert, G.D. & Kelbert, A. (2012). Computational recipes for electromagnetic
inverse problems. Geophysical Journal International, 189(1), 251-267.

Kelbert, A., Meqbel, N., Egbert, G.D., Tandon, K. (2014). ModEM: A modular
system for inversion of electromagnetic geophysical data.
Computers & Geosciences, 66, 40-53.

Quick start — 3D
-----------------
>>> from pycsamt.models.modem import ModEmConfig, InputBuilder
>>> cfg = ModEmConfig(mode='3d', initial_rho=100.0)
>>> builder = InputBuilder(config=cfg)
>>> builder.build(edi_source, workdir='./modem_run')
>>> from pycsamt.models.modem import ModEmRunner
>>> ModEmRunner(workdir='./modem_run', config=cfg).run()
>>> from pycsamt.models.modem import InversionResult
>>> result = InversionResult(workdir='./modem_run')
>>> result.plot_model().savefig('model.png')
"""

from .builder import InputBuilder
from .config import ModEmConfig
from .control import ModEmControl
from .covariance import ModEmCovariance
from .data import ModEmData
from .iotools import (
    ImpedanceFile,
    ZBlock,
    convert_z2d,
    convert_z3d,
    imp_units_factor,
    interp_model3d,
    interp_z3d,
    linear_to_loge,
    log10_to_loge,
    loge_to_linear,
    loge_to_log10,
    read_mackie2d,
    read_mackie3d,
    read_z2d_old,
    read_z3d_old,
    skin_depth,
    write_mackie2d,
    write_mackie3d,
    write_meshtools3d,
    write_z2d_list,
    write_z2d_old,
    write_z3d_list,
    write_z3d_old,
)
from .log import ModEmLog
from .model2d import ModEmModel2D
from .model3d import ModEmModel3D
from .plot import (
    PlotMisfit,
    PlotModel2D,
    PlotModel3D,
    PlotPseudo,
    PlotResponse,
)
from .results import InversionResult
from .runner import ModEmRunner
from .validation import (
    ModEmFileType,
    detect_file_type,
    is_control_file,
    is_covariance_file,
    is_data_file,
    is_log_file,
    is_model_2d_file,
    is_model_3d_file,
    is_model_file,
)

__all__ = [
    # config
    "ModEmConfig",
    # validation
    "ModEmFileType",
    "detect_file_type",
    "is_data_file",
    "is_model_file",
    "is_model_2d_file",
    "is_model_3d_file",
    "is_covariance_file",
    "is_control_file",
    "is_log_file",
    # I/O objects
    "ModEmData",
    "ModEmModel2D",
    "ModEmModel3D",
    "ModEmCovariance",
    "ModEmControl",
    "ModEmLog",
    "InversionResult",
    "ModEmRunner",
    # plots
    "PlotMisfit",
    "PlotModel2D",
    "PlotModel3D",
    "PlotResponse",
    "PlotPseudo",
    # builder
    "InputBuilder",
    # iotools — interpolation
    "interp_model3d",
    "interp_z3d",
    # iotools — export
    "write_meshtools3d",
    # iotools — utils
    "skin_depth",
    "imp_units_factor",
    "loge_to_log10",
    "log10_to_loge",
    "loge_to_linear",
    "linear_to_loge",
    # iotools — Mackie format
    "read_mackie2d",
    "write_mackie2d",
    "read_mackie3d",
    "write_mackie3d",
    # iotools — impedance old format
    "ZBlock",
    "ImpedanceFile",
    "read_z3d_old",
    "write_z3d_old",
    "read_z2d_old",
    "write_z2d_old",
    "write_z3d_list",
    "write_z2d_list",
    "convert_z3d",
    "convert_z2d",
]