From a5e8f690cdc0a1d20ce69b9c40788dfd625105fd Mon Sep 17 00:00:00 2001
From: Anton Akhmerov <anton.akhmerov@gmail.com>
Date: Wed, 11 Sep 2013 09:02:22 +0200
Subject: [PATCH] tweak workflow script, brag more in index :)

---
 content/index.txt         | 10 +++++-----
 content/kwant_workflow.py | 26 +++++++++++++-------------
 2 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/content/index.txt b/content/index.txt
index 58e4f13..5170c4c 100644
--- a/content/index.txt
+++ b/content/index.txt
@@ -24,11 +24,11 @@ summarized as follows:
     :width: 90%
 
 Kwant was designed to be easy to use: for example the program that generates
-the right panel of the image above is only 42 lines long. Kwant is also
-accessible for people without expertise in numerics. To aid that, it is
-provided along with a detailed hand-on `tutorial </doc/1.0/tutorial/>`_ and the
-Kwant `paper </paper>`_, which describes the guiding principles underlying its
-design.
+the right panel of the image above is only 42 lines long (including detailed
+comments). Kwant is also accessible for people without expertise in
+numerics. To aid that, it is provided along with a detailed hand-on `tutorial
+</doc/1.0/tutorial/>`_ and the Kwant `paper </paper>`_, which describes the
+guiding principles underlying its design.
 
 Examples of the use of Kwant
 ----------------------------
diff --git a/content/kwant_workflow.py b/content/kwant_workflow.py
index 62df7be..d5d3029 100644
--- a/content/kwant_workflow.py
+++ b/content/kwant_workflow.py
@@ -3,40 +3,40 @@ import matplotlib.pyplot as pyplot
 from scipy import misc
 import numpy as np
 
-# shape.png is an image containing the system shape colored in black.
+# shape.png is an image containing the system shape colored in black.  Here we
+# read the image from this file, create an empty scattering region, and add to
+# it the sites with coordinates of pixels that we encounter in the image.
 im = misc.imread('shape.png')[:, :, 0]
-w, h = im.T.shape
-
 sys = kwant.Builder()
 lat = kwant.lattice.square()
-
 for pos in np.argwhere(im != 255):
     sys[lat(pos[1], -pos[0])] = 4
 
-def make_wire_shape(period, center, r, ymin, ymax):
+def wire_shape(period, center, r, ymin, ymax):
+    """Return sites from a bounded segment of an infinite wire."""
     direction = np.array(period / np.linalg.norm(period))
     def wire_shape(pos):
-        rel_pos = pos - np.array(center)
+        rel_pos = center - pos
         projection = direction * np.dot(direction, rel_pos) - rel_pos
         return sum(projection**2) <= r**2 and ymin < pos[1] < ymax
+    return lat.shape(wire_shape, center)
 
-    return wire_shape
-
+# Directions of the leads, positions of the centers of the lead segments to be
+# attached, and the boundaries of these segments in y-directions.
 wire_dir = [(-1., -1.), (3., -4.), (2., 4.)]
-wire_center = [(h/2 - 50, -w/2 + 50), (h/2, -w/2 + 180),
-               (h/2 + 30, -w/2 + 200)]
+wire_center = [(166, -236), (216, -106), (246, -86)]
 ylims = [(-400, -200), (-440, -100), (-100, 60)]
 
+# Add segments of leads to the scattering region, and attach leads themselves.
 for direction, center, ylim in zip(wire_dir, wire_center, ylims):
-    sys[lat.shape(make_wire_shape(direction, center, 50, *ylim), center)] = 4
+    sys[wire_shape(direction, np.array(center), 50, *ylim)] = 4
     lead = kwant.Builder(kwant.TranslationalSymmetry(direction))
     lead[lat.wire(center, 50)] = 4
     lead[lat.neighbors()] = -1
     sys.attach_lead(lead)
 
+# Finally add hoppings to the system, get its wave function, and plot.
 sys[lat.neighbors()] = -1
-
 sys = sys.finalized()
-
 wfs = kwant.wave_function(sys, energy=0.14)(0)[0]
 kwant.plotter.map(sys, abs(wfs), oversampling=1, cmap="PuBu")
-- 
GitLab