How to Create Multi-Component Systems with Qubits, Cavity_Claw, and Couplers in SQuADDS
To create multi-component systems in SQuADDS, instantiate the CavityClaw class to assemble transmon qubits, couplers (CLT or CAPN/NCAP), and coplanar waveguides, then connect multiple instances via their registered pins using Qiskit Metal's design interface.
SQuADDS (Superconducting QUantum Architecture Design and Development Suite) provides a high-level Python API for building complex superconducting circuits directly within Qiskit Metal. The CavityClaw component serves as the foundational building block for coupled qubit-cavity systems, encapsulating all necessary sub-components into a single configurable object. By instantiating multiple CavityClaw objects and linking them through Qiskit Metal's pin-connection interface, you can rapidly prototype scalable quantum processor layouts.
Understanding the CavityClaw Architecture
The CavityClaw class, defined in squadds/components/cavity_claw.py, orchestrates three critical sub-components that form a complete qubit-cavity system.
TransmonClaw Qubit
The TransmonClaw generates a transmon-style qubit with customizable claw pads. This component is defined in squadds/components/claw_coupler.py and is instantiated internally when you call make_qubit(). You can customize pad geometries, connection types, and orientation through the qubit_options dictionary.
Coupler Interface
The Coupler provides the electromagnetic link between the qubit and the cavity. SQuADDS supports two primary types:
- CLT (Coupled-Line-Tee): A transmission-line based coupling structure
- CAPN / NCAP: Capacitive inter-digital tee couplers
The coupler selection and configuration occur in make_coupler(), which dynamically imports the appropriate Qiskit Metal coupler class based on your coupler_type setting.
Coplanar Waveguide Routing
CPWs (Coplanar Waveguides) route microwave signals to and from the qubit-cavity pair. The make_cpws() method generates left and optional right meandered transmission lines, automatically sizing them based on the chosen coupler geometry and the total_length parameter in cpw_opts.
Step-by-Step Implementation
Follow this workflow to instantiate your first multi-component system.
1. Initialize the Design Plane
All components register to a Qiskit Metal design object that stores the generated geometry.
from qiskit_metal import designs
design = designs.DesignPlanar()
2. Configure Component Options
Each component inherits a default_options dictionary. Use the copier helper to recursively merge your custom parameters without overriding the entire defaults structure.
from squadds.components.cavity_claw import CavityClaw
my_opts = {
"cavity_claw_options": {
"coupler_type": "CLT",
"coupler_options": {"orientation": "180", "coupling_length": "250um"},
"cpw_opts": {
"total_length": "5000um",
"left_options": {"lead": {"start_straight": 0, "end_straight": 0}},
"right_options": {"meander": {"spacing": "120um"}}
},
},
"qubit_options": {
"connection_pads": {"q1": {"connector_type": 0, "claw_length": "40um"}},
"orientation": "180",
"pos_y": "1500um",
},
}
3. Instantiate and Build Components
Create the CavityClaw instance and invoke the build sequence.
cav1 = CavityClaw(design, "cav_system_1", options=my_opts)
cav1.make() # Triggers make_qubit(), make_coupler(), make_cpws(), make_pins()
Calling make() executes the internal construction pipeline:
make_qubit()creates theTransmonClawusing parsedqubit_optionsmake_cavity()delegates tomake_coupler()andmake_cpws()make_pins()extractsprime_startandprime_endpins from the coupler and registers them on the design
Connecting Multiple Components
To create multi-component systems, instantiate additional CavityClaw objects and link them via their registered pins. The pin names follow the format {component_name}.prime_start and {component_name}.prime_end.
# Create a second cavity system with default options
cav2 = CavityClaw(design, "cav_system_2")
cav2.make()
# Connect the output of cav1 to the input of cav2
design.connect_pins(f"{cav1.name}.prime_end", f"{cav2.name}.prime_start")
This approach enables complex topologies such as:
- Multiple
CavityClawunits linked via a common feedline - Readout resonators coupled to specific cavity pins
- Custom interconnects using wire-bond launch pads
Adding Wire-Bond Launch Pads
For packaging and measurement accessibility, generate wire-bond pads on both sides of the coupler:
cav1.make_wirebond_pads()
Exporting and Visualizing Designs
Once your multi-component system is assembled, export the geometry for fabrication or simulation.
# Visualize in the Qiskit Metal GUI
design.visualize()
# Export to GDSII format for mask generation
design.export_gds("multicavity_system.gds")
All geometry is stored in Qiskit Metal's qgeometry tables, compatible with downstream electromagnetic simulation tools.
Summary
- CavityClaw is the core component in
squadds/components/cavity_claw.pythat encapsulates qubits, couplers, and CPWs. - The
make()method orchestrates construction throughmake_qubit(),make_coupler(),make_cpws(), andmake_pins(). - Supported coupler types include CLT and CAPN/NCAP, selected via
coupler_typein the options dictionary. - Multi-component systems are built by instantiating multiple
CavityClawobjects and connecting them viadesign.connect_pins()using theprime_startandprime_endpins. - Customization occurs through the
default_optionshierarchy, merged using the internalcopiermethod.
Frequently Asked Questions
How do I connect two CavityClaw instances together?
After calling make() on each instance, use design.connect_pins(cav1.name + ".prime_end", cav2.name + ".prime_start"). This links the output pin of the first cavity to the input pin of the second, creating a continuous transmission line without manual geometry stitching.
What coupler types are supported in SQuADDS?
SQuADDS supports CLT (Coupled-Line-Tee) and CAPN / NCAP (capacitive inter-digital tees). Specify your choice in the cavity_claw_options.coupler_type field. The system dynamically instantiates the corresponding Qiskit Metal coupler class during the make_coupler() phase.
Can I customize the transmon qubit geometry?
Yes. Pass a qubit_options dictionary when instantiating CavityClaw. This overrides specific fields in the TransmonClaw defaults defined in squadds/components/claw_coupler.py, such as claw_length, connection_pads, and orientation.
How do I export the final design to GDSII?
Call design.export_gds("filename.gds") on your DesignPlanar instance. This exports all generated geometry from the qgeometry tables, including all CavityClaw components, couplers, and wire-bond pads, into a standard GDSII format suitable for fabrication.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →