# 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')

#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 Returns the result. If provided, use result to compute the result locally.