diff --git a/examples/logo.py b/examples/logo.py deleted file mode 100644 index 1dd183081d52a19b0df583d583132fac7d26495d..0000000000000000000000000000000000000000 --- a/examples/logo.py +++ /dev/null @@ -1,97 +0,0 @@ -"""The script generating Kwant logo. In addition to Kwant it also needs Python -image library Pillow.""" - -from PIL import Image, ImageFont, ImageDraw -import matplotlib -import numpy as np -import scipy.misc -import kwant - -def main(): - def bbox(array): - x, y = np.where(array) - return np.min(x), np.max(x), np.min(y), np.max(y) - - # Prepare an image. - x = 500 - y = 160 - im = Image.new('L', (x, y), 255) - draw = ImageDraw.Draw(im) - - # Select a font for the logo and make an image of the logo. We use a font - # available in Debian/Ubuntu, but it can also be downloaded e.g. at - # http://www.fonts2u.com/free-monospaced-bold.font - fontfile = "/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf" - font = ImageFont.truetype(fontfile, 150) - draw.text((10, 10), "kwant", font=font) - - dy = 3 - dx1 = 5 - dx2 = 3 - mu_system = 3.8 - - # The the coordinates of text. - textpos = (1. - np.array(im.getdata()) / 255.).reshape(y, x) - - # Cut away empty space around the letters. - xmin, xmax, ymin, ymax = bbox(textpos) - textpos = textpos[(xmin - 1) : (xmax + dx2)][:, (ymin - dy) : (ymax + dy)] - xmin, xmax, ymin, ymax = bbox(textpos) - - # Add an underscore that touches the lettes. - geometry = np.copy(textpos) - geometry[(xmax - dx1) : (xmax + dx2)][:, (ymin - dy) : (ymax + dy)] = 1 - - # Find x-coordinates separating the letters. - nonempty = np.apply_along_axis(np.sum, 0, textpos) > 0 - borders = np.where(np.diff(nonempty))[0] - letters = borders.reshape(-1, 2) - gaps = borders[1:-1].reshape(-1, 2) - - # Construct the system, and calculate LDOS. - syst = kwant.Builder() - lat = kwant.lattice.square() - syst[(lat(*coord) for coord in np.argwhere(geometry))] = mu_system - syst[lat.neighbors()] = -1 - lead = kwant.Builder(kwant.TranslationalSymmetry((1, 0))) - for y1 in range(ymin - dy, ymax + dy): - lead[lat(0, y1)] = mu_system - lead[lat.neighbors()[0]] = -3 - syst.attach_lead(lead) - syst = syst.finalized() - ldos = kwant.solvers.default.ldos(syst, energy=0) - - # Due to the letters having different overall thickness, the LDOS is larger - # in some letters, which makes them have visually different colors. We - # adjust this by normalizing each letter to its maximum. - def normalize_data(data): - sums = [] - for letter in letters: - letter_data = data[:, slice(*letter)] - letter_data = letter_data[np.nonzero(letter_data)] - sums.append(np.max(letter_data)) - weights = np.zeros(data.shape[1]) - for i, letter in enumerate(letters): - weights[slice(*letter)] = 1/sums[i] - for i, gap in enumerate(gaps): - weights[slice(*gap)] = np.linspace(1 / sums[i], 1 / sums[i+1], - gap[1] - gap[0]) - new_data = data * weights.reshape(1, -1) - new_data /= np.max(new_data) - return new_data - - # Here we apply a nonlinear transformation to LDOS to ensure that the - # result is not too empty or not too dark. - out = np.zeros(textpos.shape) - for i, rho in enumerate(ldos**.2): - x1, y1 = syst.sites[i].tag - out[x1, y1] = rho - out = normalize_data(out) - - # We use the original text data as a transparency mask for anti-aliasing. - out = matplotlib.cm.PuBu(out, bytes=True) - out[:, :, 3] = 255 * geometry - scipy.misc.imsave('logo.png', out) - -if __name__ == '__main__': - main()