#  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 GXFFT2(gxapi_cy.WrapFFT2):
    """
    GXFFT2 class.
    2-D Fast Fourier Transforms
    These methods now work with an `GXIMG <geosoft.gxapi.GXIMG>` object, instead of creating
    their own `GXFFT2 <geosoft.gxapi.GXFFT2>` object.
    """
[docs]
    def __init__(self, handle=0):
        super(GXFFT2, self).__init__(GXContext._get_tls_geo(), handle) 
[docs]
    @classmethod
    def null(cls):
        """
        A null (undefined) instance of `GXFFT2 <geosoft.gxapi.GXFFT2>`
        
        :returns: A null `GXFFT2 <geosoft.gxapi.GXFFT2>`
        :rtype:   GXFFT2
        """
        return GXFFT2() 
[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 cross_correlation_pg(cls, pg1, pg2, normalise, pgo):
        """
        
        Calculate the cross-correlation of two transform pagers: 
        The complex conjugate of (r, i) items in the first pager are 
        multiplied by the second pager (r, i) values.
        
        :param pg1:        Input pager 1
        :param pg2:        Input pager 2
        :param normalise:  0 - do not normalise, 1 - result is normalised by max value
        :param pgo:        Output pager
        :type  pg1:        GXPG
        :type  pg2:        GXPG
        :type  normalise:  int
        :type  pgo:        GXPG
        .. versionadded:: 2023.2
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        gxapi_cy.WrapFFT2._cross_correlation_pg(GXContext._get_tls_geo(), pg1, pg2, normalise, pgo) 
        
[docs]
    @classmethod
    def fft2_in(cls, im_gi, trn_fil, spc_fil):
        """
        
        `GXFFT2 <geosoft.gxapi.GXFFT2>` transform
        
        :param im_gi:    Input image
        :param trn_fil:  Output Transform file name string
        :param spc_fil:  Output Power Spectrum file name string
        :type  im_gi:    GXIMG
        :type  trn_fil:  str
        :type  spc_fil:  str
        .. versionadded:: 5.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        gxapi_cy.WrapFFT2._fft2_in(GXContext._get_tls_geo(), im_gi, trn_fil.encode(), spc_fil.encode()) 
        
[docs]
    @classmethod
    def filter_pg(cls, pg, con_fil, tr, dx, dy, rot):
        """
        
        Apply 2D FFT filters to data in pager
        
        :param pg:       Pager obj
        :param con_fil:  FFT filter control file
        :param tr:       `GXTR <geosoft.gxapi.GXTR>` obj
        :param dx:       rDx - X increment
        :param dy:       rDy - Y increment
        :param rot:      rRot- Rotation degree
        :type  pg:       GXPG
        :type  con_fil:  str
        :type  tr:       GXTR
        :type  dx:       float
        :type  dy:       float
        :type  rot:      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>`_
        """
        
        gxapi_cy.WrapFFT2._filter_pg(GXContext._get_tls_geo(), pg, con_fil.encode(), tr, dx, dy, rot) 
        
[docs]
    @classmethod
    def flt(cls, im_gi, out_fil, con_fil):
        """
        
        `GXFFT2 <geosoft.gxapi.GXFFT2>` filter
        
        :param im_gi:    Input image (Transform grid)
        :param out_fil:  Output file (Transform grid)
        :param con_fil:  Control file
        :type  im_gi:    GXIMG
        :type  out_fil:  str
        :type  con_fil:  str
        .. versionadded:: 5.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        gxapi_cy.WrapFFT2._flt(GXContext._get_tls_geo(), im_gi, out_fil.encode(), con_fil.encode()) 
        
[docs]
    @classmethod
    def flt_inv(cls, im_gi, out_fil, con_fil):
        """
        
        `GXFFT2 <geosoft.gxapi.GXFFT2>` filter and inverse
        
        :param im_gi:    Input image (Transform grid)
        :param out_fil:  Output file
        :param con_fil:  Control file
        :type  im_gi:    GXIMG
        :type  out_fil:  str
        :type  con_fil:  str
        .. versionadded:: 5.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        gxapi_cy.WrapFFT2._flt_inv(GXContext._get_tls_geo(), im_gi, out_fil.encode(), con_fil.encode()) 
        
[docs]
    @classmethod
    def pow_spc(cls, im_gi, spc_fil):
        """
        
        `GXFFT2 <geosoft.gxapi.GXFFT2>` transform power spectrum
        
        :param im_gi:    Input image (Transform grid)
        :param spc_fil:  Output Power Spectrum file name string
        :type  im_gi:    GXIMG
        :type  spc_fil:  str
        .. versionadded:: 5.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        gxapi_cy.WrapFFT2._pow_spc(GXContext._get_tls_geo(), im_gi, spc_fil.encode()) 
        
[docs]
    @classmethod
    def rad_spc(cls, im_gi, spc_fil):
        """
        
        `GXFFT2 <geosoft.gxapi.GXFFT2>` transform Radially averaged power spectrum
        
        :param im_gi:    Input image (Transform grid)
        :param spc_fil:  Output Radial Spectrum file name string
        :type  im_gi:    GXIMG
        :type  spc_fil:  str
        .. versionadded:: 5.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        gxapi_cy.WrapFFT2._rad_spc(GXContext._get_tls_geo(), im_gi, spc_fil.encode()) 
        
[docs]
    @classmethod
    def rad_spc_alt(cls, im_gi, spc_fil):
        """
        
        `GXFFT2 <geosoft.gxapi.GXFFT2>` transform Radially averaged power spectrum - log before average and no normalization
        
        :param im_gi:    Input image (Transform grid)
        :param spc_fil:  Output Radial Spectrum file name string
        :type  im_gi:    GXIMG
        :type  spc_fil:  str
        .. versionadded:: 9.4
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        gxapi_cy.WrapFFT2._rad_spc_alt(GXContext._get_tls_geo(), im_gi, spc_fil.encode()) 
        
[docs]
    @classmethod
    def rad_spc1(cls, img, vv):
        """
        
        `GXFFT2 <geosoft.gxapi.GXFFT2>` transform Radially averaged power spectrum for one `GXIMG <geosoft.gxapi.GXIMG>`
        
        :param img:  Input image (Transform grid)
        :param vv:   Output Radial Spectrum `GXVV <geosoft.gxapi.GXVV>`
        :type  img:  GXIMG
        :type  vv:   GXVV
        .. versionadded:: 7.2
        **License:** `Geosoft Open License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-open-lic>`_
        """
        
        gxapi_cy.WrapFFT2._rad_spc1(GXContext._get_tls_geo(), img, vv) 
        
[docs]
    @classmethod
    def rad_spc2(cls, img1, img2, vv, v_vst, opt):
        """
        
        `GXFFT2 <geosoft.gxapi.GXFFT2>` transform Radially averaged power spectrum for two IMGs
        
        :param img1:   Input image1 (Transform grid1 - G)
        :param img2:   Input image2 (Transform grid2 - H)
        :param vv:     Output Radial Spectrum `GXVV <geosoft.gxapi.GXVV>`
        :param v_vst:  Output Radial Spectrum Standard deviation VVst	(Null: no calc)
        :param opt:    lOpt - 1: <Re(GH*/HH*)> `GXVV <geosoft.gxapi.GXVV>`;  0: <Re(GH*)> `GXVV <geosoft.gxapi.GXVV>`
        :type  img1:   GXIMG
        :type  img2:   GXIMG
        :type  vv:     GXVV
        :type  v_vst:  GXVV
        :type  opt:    int
        .. versionadded:: 7.2
        **License:** `Geosoft Open License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-open-lic>`_
        """
        
        gxapi_cy.WrapFFT2._rad_spc2(GXContext._get_tls_geo(), img1, img2, vv, v_vst, opt) 
        
[docs]
    @classmethod
    def td_xd_y(cls, img_tx, img_ty, out_fil, inv_flg):
        """
        
        `GXFFT2 <geosoft.gxapi.GXFFT2>` filter (calculate T from the derivatives Tx and Ty)
        
        :param img_tx:   Input dX image (Transform grid)
        :param img_ty:   Input dY image (Transform grid)
        :param out_fil:  Output T file name
        :param inv_flg:  0 - no invers, 1 - invers FFT applied
        :type  img_tx:   GXIMG
        :type  img_ty:   GXIMG
        :type  out_fil:  str
        :type  inv_flg:  int
        .. versionadded:: 5.0.1
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        gxapi_cy.WrapFFT2._td_xd_y(GXContext._get_tls_geo(), img_tx, img_ty, out_fil.encode(), inv_flg) 
        
[docs]
    @classmethod
    def trans_pg(cls, pg, opt):
        """
        
        Apply 2D FFT transform to data in pager
        
        :param pg:   Pager obj
        :param opt:  :ref:`FFT2_PG`
        :type  pg:   GXPG
        :type  opt:  int
        .. versionadded:: 5.0
        **License:** `Geosoft Extended End-User License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-ext-end-user-lic>`_
        """
        
        gxapi_cy.WrapFFT2._trans_pg(GXContext._get_tls_geo(), pg, opt) 
        
[docs]
    @classmethod
    def filter_response(cls, con_fil, start, increment, input_vv, output_vv, profile_vv):
        """
        
        Calculates response for filter(s) defined in control file. Not specific to 2D.
        
        :param con_fil:     FFT filter control file
        :param start:       Wavenumber start
        :param increment:   Wavenumber increment
        :param input_vv:    Input spectrum
        :param output_vv:   Output spectrum
        :param profile_vv:  Output filter profile
        :type  con_fil:     str
        :type  start:       float
        :type  increment:   float
        :type  input_vv:    GXVV
        :type  output_vv:   GXVV
        :type  profile_vv:  GXVV
        .. versionadded:: 9.9
        **License:** `Geosoft Open License <https://geosoftgxdev.atlassian.net/wiki/spaces/GD/pages/2359406/License#License-open-lic>`_
        """
        
        gxapi_cy.WrapFFT2._filter_response(GXContext._get_tls_geo(), con_fil.encode(), start, increment, input_vv, output_vv, profile_vv) 
 
        
### 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