#  Copyright (c) 2024 Bentley Systems, Incorporated. All rights reserved.
### extends 'class_empty.py'
### block ClassImports
# NOTICE: Do not edit anything here, it is generated code
import warnings
from . import gxapi_cy
from geosoft.gxapi import GXContext, float_ref, int_ref, str_ref
### endblock ClassImports
### block Header
# NOTICE: The code generator will not replace the code in this block
### endblock Header
### block ClassImplementation
# NOTICE: Do not edit anything here, it is generated code
[docs]
class GXTC(gxapi_cy.WrapTC):
    """
    GXTC class.
    The `GXTC <geosoft.gxapi.GXTC>` object is used in gravitational modelling to create
    a terrain correction grid from a topography grid. This is
    accomplished with a call first to `grregter <geosoft.gxapi.GXTC.grregter>`, which determines
    the terrain correction from an input topography grid, then
    to `grterain <geosoft.gxapi.GXTC.grterain>`, which calculates the actual corrections at
    the input positions.
    """
[docs]
    def __init__(self, handle=0):
        super(GXTC, self).__init__(GXContext._get_tls_geo(), handle) 
[docs]
    @classmethod
    def null(cls):
        """
        A null (undefined) instance of `GXTC <geosoft.gxapi.GXTC>`
        
        :returns: A null `GXTC <geosoft.gxapi.GXTC>`
        :rtype:   GXTC
        """
        return GXTC() 
[docs]
    def is_null(self):
        """
        Check if this is a null (undefined) instance
        
        :returns: True if this is a null (undefined) instance, False otherwise.
        :rtype:   bool
        """
        return self._internal_handle() == 0 
# Miscellaneous
[docs]
    @classmethod
    def create(cls, img, elev_unit, dinner, douter, dens_t, dens_w, elev_w, edge, edge_elev, opt):
        """
        
        Creates a Terrain Correction object
        
        :param img:        Topo (DEM) grid
        :param elev_unit:  Elevation unit in 1 metre (i.e. 0.3048 for feet)
        :param dinner:     Inner distance (in topo grid projection units, default in metres)
        :param douter:     Outer distance (in topo grid projection units, default in metres)
        :param dens_t:     Terrain density in g/cc
        :param dens_w:     Water density in g/cc
        :param elev_w:     Water reference elevation (in elevation unit)
        :param edge:       1 to calculate an edge correction (compensation), 0 otherwise
        :param edge_elev:  Average elevation beyond max distance (in elevation unit)
        :param opt:        :ref:`TC_OPT`
        :type  img:        GXIMG
        :type  elev_unit:  float
        :type  dinner:     float
        :type  douter:     float
        :type  dens_t:     float
        :type  dens_w:     float
        :type  elev_w:     float
        :type  edge:       int
        :type  edge_elev:  float
        :type  opt:        int
        :returns:          `GXTC <geosoft.gxapi.GXTC>` Object
        :rtype:            GXTC
        .. versionadded:: 5.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        ret_val = gxapi_cy.WrapTC._create(GXContext._get_tls_geo(), img, elev_unit, dinner, douter, dens_t, dens_w, elev_w, edge, edge_elev, opt)
        return GXTC(ret_val) 
[docs]
    @classmethod
    def create_ex(cls, img, elev_unit, dinner, douter, dens_t, dens_w, elev_w, edge, edge_elev, opt, survey_type):
        """
        
        Creates a Terrain Correction object	with surveytype
        
        :param img:          Topo (DEM) grid
        :param elev_unit:    Elevation unit in 1 metre (i.e. 0.3048 for feet)
        :param dinner:       Inner distance (in topo grid projection units, default in metres)
        :param douter:       Outer distance (in topo grid projection units, default in metres)
        :param dens_t:       Terrain density in g/cc
        :param dens_w:       Water density in g/cc
        :param elev_w:       Water reference elevation (in elevation unit)
        :param edge:         1 to calculate an edge correction (compensation), 0 otherwise
        :param edge_elev:    Average elevation beyond max distance (in elevation unit)
        :param opt:          :ref:`TC_OPT`
        :param survey_type:  :ref:`TC_SURVEYTYPE`
        :type  img:          GXIMG
        :type  elev_unit:    float
        :type  dinner:       float
        :type  douter:       float
        :type  dens_t:       float
        :type  dens_w:       float
        :type  elev_w:       float
        :type  edge:         int
        :type  edge_elev:    float
        :type  opt:          int
        :type  survey_type:  int
        :returns:            `GXTC <geosoft.gxapi.GXTC>` Object
        :rtype:              GXTC
        .. versionadded:: 6.2
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        ret_val = gxapi_cy.WrapTC._create_ex(GXContext._get_tls_geo(), img, elev_unit, dinner, douter, dens_t, dens_w, elev_w, edge, edge_elev, opt, survey_type)
        return GXTC(ret_val) 
[docs]
    @classmethod
    def create_ex2(cls, img, elev_unit, dinner, douter, dens_t, dens_w, elev_w, edge, edge_elev, opt, survey_type, img2):
        """
        
        Creates a Terrain Correction object with surveytype and topo surface elevation grid
        
        :param img:          Topo (Rock Surface DEM) grid
        :param elev_unit:    Elevation unit in 1 metre (i.e. 0.3048 for feet)
        :param dinner:       Inner distance (in topo grid projection units, default in metres)
        :param douter:       Outer distance (in topo grid projection units, default in metres)
        :param dens_t:       Terrain density in g/cc
        :param dens_w:       Water density in g/cc
        :param elev_w:       Water reference elevation (in elevation unit)
        :param edge:         1 to calculate an edge correction (compensation), 0 otherwise
        :param edge_elev:    Average elevation beyond max distance (in elevation unit)
        :param opt:          :ref:`TC_OPT`
        :param survey_type:  :ref:`TC_SURVEYTYPE`
        :param img2:         Topo (Elev Surface DEM) grid
        :type  img:          GXIMG
        :type  elev_unit:    float
        :type  dinner:       float
        :type  douter:       float
        :type  dens_t:       float
        :type  dens_w:       float
        :type  elev_w:       float
        :type  edge:         int
        :type  edge_elev:    float
        :type  opt:          int
        :type  survey_type:  int
        :type  img2:         GXIMG
        :returns:            `GXTC <geosoft.gxapi.GXTC>` Object
        :rtype:              GXTC
        .. versionadded:: 9.9
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        ret_val = gxapi_cy.WrapTC._create_ex2(GXContext._get_tls_geo(), img, elev_unit, dinner, douter, dens_t, dens_w, elev_w, edge, edge_elev, opt, survey_type, img2)
        return GXTC(ret_val) 
[docs]
    def grregter(self, im_gi, im_go):
        """
        
        Create a terrain correction grid for a topo grid.
        
        :param im_gi:  Input `GXIMG <geosoft.gxapi.GXIMG>` (local DEM topo grid used for station elevation)
        :param im_go:  Image of output grid
        :type  im_gi:  GXIMG
        :type  im_go:  GXIMG
        .. versionadded:: 5.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        self._grregter(im_gi, im_go) 
        
[docs]
    def grterain(self, gv_vx, gv_vy, gv_velev, gv_vslop, gv_vtcor, im_gcor, dens_t):
        """
        
        Calculate terrain corrections.
        
        :param gv_vx:     Input X channel data (in topo grid projection units, default in metres)
        :param gv_vy:     Input Y channel data (in topo grid projection units, default in metres)
        :param gv_velev:  Input Elevation channel data (in elevation unit)
        :param gv_vslop:  Input slope channel data
        :param gv_vtcor:  Output Terrain Corrected channel data
        :param im_gcor:   Image of input correction grid
        :param dens_t:    Terrain density (default 2.67)
        :type  gv_vx:     GXVV
        :type  gv_vy:     GXVV
        :type  gv_velev:  GXVV
        :type  gv_vslop:  GXVV
        :type  gv_vtcor:  GXVV
        :type  im_gcor:   GXIMG
        :type  dens_t:    float
        .. versionadded:: 5.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        self._grterain(gv_vx, gv_vy, gv_velev, gv_vslop, gv_vtcor, im_gcor, dens_t) 
        
[docs]
    def grterain2(self, gv_vx, gv_vy, gv_velev, gv_vslop, gv_vwater, gv_vtcor, im_gcor, dens_t):
        """
        
        Calculate terrain corrections (work for marine gravity too).
        
        :param gv_vx:      Input X channel data (in topo grid projection units, default in metres)
        :param gv_vy:      Input Y channel data (in topo grid projection units, default in metres)
        :param gv_velev:   Input Elevation channel data (in elevation unit)
        :param gv_vslop:   Input slope channel data
        :param gv_vwater:  Input Water depth channel data (in metres)
        :param gv_vtcor:   Output Terrain Corrected channel data
        :param im_gcor:    Image of input correction grid
        :param dens_t:     Terrain density (default 2.67)
        :type  gv_vx:      GXVV
        :type  gv_vy:      GXVV
        :type  gv_velev:   GXVV
        :type  gv_vslop:   GXVV
        :type  gv_vwater:  GXVV
        :type  gv_vtcor:   GXVV
        :type  im_gcor:    GXIMG
        :type  dens_t:     float
        .. versionadded:: 6.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        self._grterain2(gv_vx, gv_vy, gv_velev, gv_vslop, gv_vwater, gv_vtcor, im_gcor, dens_t) 
        
[docs]
    def g_gterain(self, gv_vx, p3, p4, p5, p6, p7, p8):
        """
        
        Calculate GG terrain corrections
        
        :param gv_vx:  Input X channel data (in topo grid projection units, default in metres)
        :param p3:     Input Y channel data (in topo grid projection units, default in metres)
        :param p4:     Input Elevation channel data (in elevation unit)
        :param p5:     Output Terrain Corrected channel data
        :param p6:     Terrain density (default 2.67)
        :param p7:     Terrain reference level (default 0.0)
        :param p8:     :ref:`GG_ELEMENT`
        :type  gv_vx:  GXVV
        :type  p3:     GXVV
        :type  p4:     GXVV
        :type  p5:     GXVV
        :type  p6:     float
        :type  p7:     float
        :type  p8:     int
        .. versionadded:: 6.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        self._g_gterain(gv_vx, p3, p4, p5, p6, p7, p8) 
 
        
### endblock ClassImplementation
### block ClassExtend
# NOTICE: The code generator will not replace the code in this block
### endblock ClassExtend
### block Footer
# NOTICE: The code generator will not replace the code in this block
### endblock Footer