Tools for designing and fabricating superconducting Josephson junctions using e-beam lithography.
This repository provides Python tools for:
- Dose chip generation: Create comprehensive test chips with dose and geometry sweeps
- Junction design: Multiple junction types (Dolan, Manhattan cross, arrays)
- phidl integration: Modern GDS layout generation using the phidl library
- Create 5Γ5 mm or 7Γ7 mm dose test chips
- Dose tests: Vary e-beam doses with fixed geometry
- Geometry sweeps: Vary junction dimensions with fixed doses
- Manhattan junction support
- Automatic dose tables for BEAMER e-beam system
- Configurable grid layouts
- Dolan junctions: Standard bridge junctions with undercut
- Manhattan cross junctions: Perpendicular crossing leads with paddle undercuts
- Junction arrays: Multiple junctions in series
- Asymmetric junctions: Different widths on left/right sides
- Compatibility layer between old mask_maker API and modern phidl
- Stateful CPW drawing (CPWStraight, CPWLinearTaper, CPWBend)
- Two-layer support (PIN/GAP for optical/e-beam lithography)
- Python 3.8+ (tested with Python 3.10)
- phidl (GDS layout library)
- numpy (numerical computing)
- shapely (polygon operations)
- Optional: jupyter, matplotlib (for interactive notebooks)
# Create a new environment
conda create -n slab_junctions python=3.10 -y
# Activate the environment
conda activate slab_junctions
# Install dependencies
pip install -r requirements.txt
# Test the installation
python test_installation.py# Create a virtual environment (optional but recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Test the installation
python test_installation.pyAfter installation, run the test script to verify everything works:
python test_installation.pyYou should see output like:
======================================================================
SLAB JUNCTIONS - INSTALLATION TEST
======================================================================
[OK] Imports: PASSED
[OK] phidl_bridge: PASSED
[OK] Dose Chip Generator: PASSED
[OK] Junction Functions: PASSED
[OK] ALL TESTS PASSED!
The slab_junctions package is working correctly.
from dose_chip.dose_chip_generator import DoseChipGenerator, draw_dolan_junction
# Create 5Γ5 mm chip
generator = DoseChipGenerator(chip_size=(5000, 5000))
# Add dose test grid (vary doses)
generator.add_dose_test(
name='Dose Test',
junction_func=draw_dolan_junction,
geometry=(0.2, 0.2), # Fixed width, gap
dose_fullcut_range=(400, 3600),
dose_undercut_range=(100, 1200),
position=(-2350, 1017),
n_rows=15,
n_cols=15,
spacing=100
)
# Save GDS and dose table
generator.save('my_chip.gds')See junction_experiments/ for interactive notebooks and examples:
test_manhattan_junction.ipynb: Manhattan cross junction designerexamples/asymmetric_junction.py: Asymmetric junction exampletemplates/template_array.py: Junction array template
Comprehensive guide to using the phidl_bridge API for CPW layout design:
Covers:
- Common functions: CPWStraight, CPWLinearTaper, CPWBend
- CPW geometry convention: Understanding pinw/gapw parameters
- Layer management: Single and two-layer modes for optical/e-beam
- Complete examples: Lines, bends, tapers, junctions, meanders
- Best practices: Tips and troubleshooting
Perfect for learning how to create custom CPW structures!
slab_junctions/
βββ README.md
βββ requirements.txt
βββ .gitignore
βββ phidl_bridge.py # phidl compatibility layer
βββ phidl_native.py # Native phidl components
βββ dose_chip/
β βββ dose_chip_generator.py # Main dose chip library
β βββ my_chip_config.py # Example configuration
βββ junction_experiments/
β βββ test_manhattan_junction.ipynb # Interactive junction designer
β βββ examples/
β β βββ asymmetric_junction.py
β βββ templates/
β βββ template_array.py
βββ examples/
βββ run_files.ipynb # Full workflow example
generator.add_dose_test(
name='My Dose Test',
junction_func=draw_dolan_junction,
geometry=(0.2, 0.2),
dose_fullcut_range=(500, 2000),
dose_undercut_range=(100, 600),
position=(0, 0),
n_rows=10,
n_cols=10,
spacing=100
)generator.add_dose_array(
name='Geometry Sweep',
junction_func=draw_dolan_junction,
dose_fullcut=1450,
dose_undercut=350,
width_range=(0.1, 0.4),
gap_range=(0.1, 0.4),
position=(0, 0),
n_rows=10,
n_cols=10,
spacing=100
)generator.add_manhattan_dose_test(
name='Manhattan Test',
geometry=(0.18, 0),
dose_fullcut_range=(400, 3600),
dose_undercut_range=(100, 1200),
position=(0, 0),
n_rows=15,
n_cols=15,
spacing=100
)- Layer 1: Optical lithography labels and markers
- Layer 2: Clearing dose text (3000 Β΅C/cmΒ²)
- Layer 20: E-beam fullcut (PIN layer - junction metal)
- Layer 60: E-beam undercut (GAP layer - junction bridge)
- Layers 200-214: Dose test fullcut layers (varying doses)
- Layers 600-614: Dose test undercut layers (varying doses)
- Fullcut doses typically range from 400-3600 Β΅C/cmΒ²
- Undercut doses are multiplied by 4Γ for BEAMER compatibility
- Clearing dose for text labels: 3000 Β΅C/cmΒ²
- Minimum junction width: ~0.05 Β΅m (50 nm)
- Typical undercut border: 0.15-0.3 Β΅m (150-300 nm)
- Grid spacing: 50-500 Β΅m depending on chip size
This is a research tool developed at the Schuster Lab. For questions or contributions, please contact the maintainers.
[Add license information]
If you use this code in your research, please cite: [Add citation information]