def fht(zsrc, zrec, lsrc, lrec, off, factAng, depth, ab, etaH, etaV, zetaH,
        zetaV, xdirect, fhtarg, use_ne_eval, msrc, mrec):
    r"""Hankel Transform using the Digital Linear Filter method.

    The *Digital Linear Filter* method was introduced to geophysics by
    [Ghos70]_, and made popular and wide-spread by [Ande75]_, [Ande79]_,
    [Ande82]_. The DLF is sometimes referred to as the *Fast Hankel Transform*
    FHT, from which this routine has its name.

    This implementation of the DLF follows [Key12]_, equation 6.  Without going
    into the mathematical details (which can be found in any of the above
    papers) and following [Key12]_, the DLF method rewrites the Hankel
    transform of the form

    .. math:: F(r)   = \int^\infty_0 f(\lambda)J_v(\lambda r)\
            \mathrm{d}\lambda

    as

    .. math::   F(r)   = \sum^n_{i=1} f(b_i/r)h_i/r \ ,

    where :math:`h` is the digital filter.The Filter abscissae b is given by

    .. math:: b_i = \lambda_ir = e^{ai}, \qquad i = -l, -l+1, \cdots, l \ ,

    with :math:`l=(n-1)/2`, and :math:`a` is the spacing coefficient.

    This function is loosely based on ``get_CSEM1D_FD_FHT.m`` from the source
    code distributed with [Key12]_.

    The function is called from one of the modelling routines in :mod:`model`.
    Consult these modelling routines for a description of the input and output
    parameters.

    Returns
    -------
    fEM : array
        Returns frequency-domain EM response.

    kcount : int
        Kernel count. For DLF, this is 1.

    conv : bool
        Only relevant for QWE/QUAD.

    """
    # 1. Get fhtargs
    fhtfilt = fhtarg[0]
    pts_per_dec = fhtarg[1]
    lambd = fhtarg[2]
    int_pts = fhtarg[3]

    # 2. Call the kernel
    PJ = kernel.wavenumber(zsrc, zrec, lsrc, lrec, depth, etaH, etaV, zetaH,
                           zetaV, lambd, ab, xdirect, msrc, mrec, use_ne_eval)

    # 3. Carry out the dlf
    fEM = dlf(PJ, lambd, off, fhtfilt, pts_per_dec, factAng=factAng, ab=ab,
              int_pts=int_pts)

    return fEM, 1, True
r"""Hankel Transform using the Digital Linear Filter method.

    The *Digital Linear Filter* method was introduced to geophysics by
    [Ghos70]_, and made popular and wide-spread by [Ande75]_, [Ande79]_,
    [Ande82]_. The DLF is sometimes referred to as the *Fast Hankel Transform*
    FHT, from which this routine has its name.

    This implementation of the DLF follows [Key12]_, equation 6.  Without going
    into the mathematical details (which can be found in any of the above
    papers) and following [Key12]_, the DLF method rewrites the Hankel
    transform of the form

    .. math:: F(r)   = \int^\infty_0 f(\lambda)J_v(\lambda r)\
            \mathrm{d}\lambda

    as

    .. math::   F(r)   = \sum^n_{i=1} f(b_i/r)h_i/r \ ,

    where :math:`h` is the digital filter.The Filter abscissae b is given by

    .. math:: b_i = \lambda_ir = e^{ai}, \qquad i = -l, -l+1, \cdots, l \ ,

    with :math:`l=(n-1)/2`, and :math:`a` is the spacing coefficient.

    This function is loosely based on ``get_CSEM1D_FD_FHT.m`` from the source
    code distributed with [Key12]_.

    The function is called from one of the modelling routines in :mod:`model`.
    Consult these modelling routines for a description of the input and output
    parameters.

    Returns
    -------
    fEM : array
        Returns frequency-domain EM response.

    kcount : int
        Kernel count. For DLF, this is 1.

    conv : bool
        Only relevant for QWE/QUAD.