Brillouin zones

Brillouin zone overlay

Python

Plot the constant-energy map. Then construct the real-space lattice vectors and pass them to erlab.plotting.plot_bz():

import matplotlib.pyplot as plt

import erlab
import erlab.plotting as eplt

lattice_constant = 6.97
avec = erlab.lattice.abc2avec(
    lattice_constant,
    lattice_constant,
    1.0,
    90.0,
    90.0,
    120.0,
)

fig, ax = plt.subplots(figsize=(3.4, 3.0), layout="compressed")
eplt.plot_array(
    constant_energy_map,
    ax=ax,
    cmap="Greys",
    gamma=0.5,
    aspect="equal",
)
eplt.plot_bz(
    avec,
    ax=ax,
    rotate=30.0,
    edgecolor="tab:purple",
    linestyle="--",
    linewidth=1.2,
)

(Source code)

Constant energy map with a hexagonal Brillouin zone boundary

Figure Composer

The current BZ Overlay step draws an in-plane section. It does not draw the single first-zone polygon in this guide.

Planned Figure Composer support

Figure Composer does not yet have an editable step for this plotting operation. Structured support is planned. Until then, add a Python step to the recipe and use the code in this section.

  1. Set Layout to a \(1 \times 1\) grid.

  2. Add constant_energy_map in Sources.

  3. Add an Image Plot step and set Aspect to equal.

  4. Add a Python step after the image.

  5. Review this code, then enter it in Code:

import erlab

lattice_constant = 6.97
avec = erlab.lattice.abc2avec(
    lattice_constant,
    lattice_constant,
    1.0,
    90.0,
    90.0,
    120.0,
)
eplt.plot_bz(
    avec,
    ax=ax,
    rotate=30.0,
    fill=False,
)

Replace the lattice parameters with those of the measured material. See erlab.plotting.plot_bz() for reciprocal input, rotation, and offset arguments.

In-plane sections

Python

Construct the conventional real-space lattice vectors. Convert the centered conventional cell to primitive lattice vectors. Then calculate the reciprocal-lattice vectors:

import matplotlib.pyplot as plt

import erlab
import erlab.plotting as eplt

avec = erlab.lattice.abc2avec(6.0, 10.0, 25.0, 90.0, 90.0, 90.0)
avec_primitive = erlab.lattice.to_primitive(avec, centering_type="F")
bvec = erlab.lattice.to_reciprocal(avec_primitive)

fig, ax = plt.subplots(figsize=(3.0, 3.0), layout="compressed")
eplt.plot_in_plane_bz(
    bvec,
    kz=0.2,
    angle=60.0,
    bounds=(-1.5, 1.5, -1.5, 1.5),
    ax=ax,
    vertices=True,
    color="tab:purple",
    linewidth=1.5,
)
ax.set(
    xlabel=r"$k_x$ (Å$^{-1}$)",
    ylabel=r"$k_y$ (Å$^{-1}$)",
    aspect="equal",
)

(Source code)

Constant-kz section through the Brillouin zones of a face-centered orthorhombic crystal

Set kz to the out-of-plane momentum of the measured section. Use angle for the rotation about the \(k_z\) axis. Set bounds to the required in-plane momentum window.

erlab.plotting.plot_in_plane_bz() obtains the boundary segments and vertices from erlab.lattice.get_bz_slice(). Use get_bz_slice() directly for an arbitrary plane. Supply a point on the plane, its normal vector, and the bounds in the local plane coordinates.

Figure Composer

  1. In ImageTool Manager, choose File ‣ New Empty Figure.

  2. Add a BZ Overlay step.

  3. Under Slice, set Mode to In-plane. Enter the kz, Angle, and Bounds for the required section.

  4. Under Lattice, enter the lattice parameters and Centering for the sample.

  5. Under Style, enable Vertices if corner markers are useful.

  6. Add Axes Method steps for set_xlabel and set_ylabel. Enter the in-plane momentum labels and units.

  7. Add an Axes Method step for set_aspect, and set Aspect to equal.

The kz control accepts both multiples of \(\pi/c\) and Å\(^{-1}\). See erlab.plotting.plot_in_plane_bz() for the corresponding Python arguments.

Out-of-plane sections

Python

Construct the real-space lattice vectors and apply the crystal centering. Convert the primitive vectors to reciprocal lattice vectors before you calculate the section:

import matplotlib.pyplot as plt

import erlab
import erlab.plotting as eplt

avec = erlab.lattice.abc2avec(6.0, 10.0, 25.0, 90.0, 90.0, 90.0)
avec_primitive = erlab.lattice.to_primitive(avec, centering_type="F")
bvec = erlab.lattice.to_reciprocal(avec_primitive)

fig, ax = plt.subplots(figsize=(3.0, 3.0), layout="compressed")
eplt.plot_out_of_plane_bz(
    bvec,
    k_parallel=0.0,
    angle=90.0,
    bounds=(-1.5, 1.5, -1.5, 1.5),
    ax=ax,
    vertices=True,
    color="tab:purple",
    linewidth=1.5,
)
ax.set(
    xlabel=r"$k_x$ (Å$^{-1}$)",
    ylabel=r"$k_z$ (Å$^{-1}$)",
    aspect="equal",
)

(Source code)

Out-of-plane Brillouin-zone section with vertices marked on equal momentum axes

Figure Composer

  1. In ImageTool Manager, choose File ‣ New Empty Figure.

  2. Set Layout to a \(1 \times 1\) grid.

  3. Add a BZ Overlay step.

  4. Under Slice, set Mode to Out-of-plane. Enter the Angle, fixed k parallel, and Bounds for the required section.

  5. Under Lattice, enter the lattice parameters and Centering for the sample.

  6. Under Points, enable Vertices if corner markers are useful.

  7. Add an Axes Method step for set_xlabel, and set Label to \(k_x\)\(^{-1}\)).

  8. Add an Axes Method step for set_ylabel, and set Label to \(k_z\)\(^{-1}\)).

  9. Add an Axes Method step for set_aspect, and set Aspect to equal.

To compare the section with measured intensity, plot the corresponding momentum-space intensity on the same axes before the boundary. Confirm the fixed momentum, azimuthal direction, and coordinate orientation first.

See erlab.plotting.plot_out_of_plane_bz() for the supported slice parameters.