Hilbert Transform

TRIQS comes with a Hilbert transform. Let us look at an example:

from triqs.lattice.tight_binding import *
from triqs.dos import HilbertTransform
from triqs.gf import GfImFreq

# Define a DOS (here on a square lattice)
BL = BravaisLattice(units = [(1,0,0) , (0,1,0) ], orbital_positions= [(0,0,0)] )
t   = -1.00                # First neighbour Hopping
tp  =  0.0*t               # Second neighbour Hopping
hop= {  (1,0) :  [[ t]],
        (-1,0):  [[ t]],
        (0,1) :  [[ t]],
        (0,-1):  [[ t]],
        (1,1) :  [[ tp]],
        (-1,-1):  [[ tp]],
        (1,-1):  [[ tp]],
        (-1,1):  [[ tp]]}

TB = TightBinding (BL, hop)
d = dos(TB, n_kpts= 500, n_eps = 101, name = 'dos')[0]

#define a Hilbert transform
H = HilbertTransform(d)

#fill a Green function
G = GfImFreq(indices = ['up','down'], beta = 20)
Sigma0 = GfImFreq(indices = ['up','down'], beta = 20); Sigma0.zero()
G << H(Sigma = Sigma0,mu=0.)

Given a density of states d (here for a tight-binding model), the Hilbert transform H is defined is defined in the following way:

H = HilbertTransform(d)

To construct a Green’s function:

G = GfImFreq(indices = ['up','down'], beta = 20)
Sigma0 = GfImFreq(indices = ['up','down'], beta = 20); Sigma0.zero()
G << H(Sigma = Sigma0, mu=0.)
class triqs.dos.HilbertTransform(rho)[source]

Computes the Hilbert Transform from a DOS object

\[\int_{-\infty}^\infty d \epsilon \rho(\epsilon) \Bigl( (\omega + \mu + I\eta)\mathbf{1} - \hat\varepsilon(\epsilon) - \text{field} - \Sigma(\epsilon) \Bigr)^{-1}\]
__call__(Sigma, mu=0, eta=0, field=None, epsilon_hat=None, result=None, n_points_integral=None, test_convergence=None)[source]

Compute the Hilbert Transform

Parameters:
  • mu (float) –

  • eta (float) –

  • Sigma (a GFBloc or a function epsilon-> GFBloc) –

  • field (anything that can added to the GFBloc Sigma, e.g.:) –

    • an Array_with_GFBloc_Indices (same size as Sigma)

    • a GBloc

  • epsilon_hat (a function that takes a 1d array eps[i] and returns 3d-array eps[i,:,:]) – where the:,: has the matrix structure of Sigma. Default: eps[i] * Identity_Matrix Used only when DOS is a DOSFromFunction:

  • n_points_integral (How many points to use. If None, use the Npts of construction) –

  • test_convergence (If defined, it will refine the grid until CV is reached) – starting from n_points_integral and multiplying by 2

Return type:

Returns the result. If provided, use result to compute the result locally.