{
"cells": [
{
"cell_type": "markdown",
"id": "5f7eb3e0",
"metadata": {},
"source": [
"# Scanning SQUID microscopy"
]
},
{
"cell_type": "markdown",
"id": "e7db8181",
"metadata": {},
"source": [
"One of the original motivations for `SuperScreen` was to model scanning superconducting quantum interference device (SQUID) magnetometers/susceptometers used in [scanning SQUID microscopy](https://en.wikipedia.org/wiki/Scanning_SQUID_microscopy). In this notebook we demonstrate how `SuperScreen` can be used to calculate the mutual inductance between the field coil and pickup loop in state-of-the-art scanning SQUID susceptometers ([Rev. Sci. Instrum. 87, 093702 (2016)](https://pubs.aip.org/aip/rsi/article/87/9/093702/365810/Scanning-SQUID-susceptometers-with-sub-micron), [arXiv:1605.09483](https://arxiv.org/abs/1605.09483)).\n",
"\n",
"The layouts for four designs of scannning SQUID susceptometer are shown below (taken from Figure 4 of [Kirtley, et al., *Scanning SQUID susceptometers with sub-micron spatial resolution*, Rev. Sci. Instrum. 87, 093702 (2016)](https://pubs.aip.org/aip/rsi/article/87/9/093702/365810/Scanning-SQUID-susceptometers-with-sub-micron)). \n",
"\n",
"
\n",
"\n",
"There are three relevant superconducting wiring layers, labeled \"BE\" (blue), \"W1\" (purple), and \"W2\" (red). The **pickup loop**, the flux-sennsing loop that is part of the SQUID circuit, sits in the purple \"W1\" wiring layer. The pickup loop is partially covered by a superconducting shield in the red \"W2\" wiring layer, which sits between the pickup loop and the sample being measured. A single-turn **field coil** sitting in the blue \"BE\" wiring layer can be used to locally apply a magnetic field to the sample. The layer structure of the SQUID susceptometers is shown below (taken from Figure 5 of [Kirtley, et al., *Scanning SQUID susceptometers with sub-micron spatial resolution*, Rev. Sci. Instrum. 87, 093702 (2016)](https://pubs.aip.org/aip/rsi/article/87/9/093702/365810/Scanning-SQUID-susceptometers-with-sub-micron)).\n",
"\n",
"
\n",
"\n",
"The **pickup loop** and **field coil** can be used to perform a mutual inductance AC susceptibility measurement in a reflection geometry. The presence of a paramagnetic or diamagnetic sample near the pickup loop and field coil modifies the mutual inductance between the two loops, and the strength of the modification is a measure of the magnetic susceptibility of the sample. Quantitative modeling of the magnetic response of such multi-layer superconducting circuits is important both for interpreting measurements and for designing next-generation sensors."
]
},
{
"cell_type": "markdown",
"id": "0cf80810",
"metadata": {},
"source": [
"The experimentally measured values of the pickup loop - field coil mutual inductance (in units of $\\Phi_0/\\mathrm{A}$, the flux induced in the pickup loop per unit current flowing in the field coil) are shown below. The value are taken from Table 1 of [Rev. Sci. Instrum. 87, 093702 (2016)](https://pubs.aip.org/aip/rsi/article/87/9/093702/365810/Scanning-SQUID-susceptometers-with-sub-micron). As shown below, we find excellent agreement between `SuperScreen` models derived from the as-designed SQUID layouts and the experimentally measured mutual inductance."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "3e0a889a",
"metadata": {},
"outputs": [],
"source": [
"exp_mutuals = {\n",
" \"small\": (69, 7), # panel (a) in the first figure\n",
" \"medium\": (166, 4), # panel (b)\n",
" \"large\": (594, 24), # panel (c)\n",
" \"xlarge\": (1598, 47), # panel (d)\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "44370783",
"metadata": {},
"outputs": [],
"source": [
"# Automatically install superscreen from GitHub only if running in Google Colab\n",
"if \"google.colab\" in str(get_ipython()):\n",
" %pip install --quiet git+https://github.com/loganbvh/superscreen.git"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "7ae491a4",
"metadata": {},
"outputs": [],
"source": [
"%config InlineBackend.figure_formats = {\"retina\", \"png\"}\n",
"%matplotlib inline\n",
"\n",
"import os\n",
"import sys\n",
"\n",
"os.environ[\"OPENBLAS_NUM_THREADS\"] = \"1\"\n",
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"plt.rcParams[\"figure.figsize\"] = (5, 4)\n",
"plt.rcParams[\"font.size\"] = 10\n",
"\n",
"import superscreen as sc\n",
"from superscreen.geometry import box\n",
"\n",
"sys.path.insert(0, \"..\")\n",
"import squids"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "094a8262",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
| Software | Version |
|---|---|
| SuperScreen | 0.13.0 |
| Numpy | 2.4.4 |
| Numba | 0.65.1 |
| SciPy | 1.17.1 |
| matplotlib | 3.10.9 |
| IPython | 9.13.0 |
| Python | 3.14.4 | packaged by conda-forge | (main, Apr 8 2026, 02:33:53) [Clang 20.1.8 ] |
| OS | posix [darwin] |
| Number of CPUs | Physical: 10, Logical: 10 |
| BLAS Info | Generic |
| Tue Apr 28 20:47:28 2026 EDT | |