Cells QPDK#

airbridge#

qpdk.cells.airbridge(bridge_length=30.0, bridge_width=8.0, pad_width=15.0, pad_length=12.0, bridge_layer=<LayerMapQPDK.AB_DRAW: 48>, pad_layer=<LayerMapQPDK.AB_VIA: 49>)[source]#

Generate a superconducting airbridge component.

Creates an airbridge consisting of a suspended bridge span and landing pads on either side. The bridge allows transmission lines to cross over each other without electrical contact, which is essential for complex quantum circuit routing without crosstalk.

The bridge_layer (AB_DRAW) represents the elevated metal bridge structure, while the pad_layer (AB_VIA) represents the contact/landing pads that connect to the underlying circuit.

Note

To be used with ComponentAlongPath the unrotated version should be _oriented for placement on a horizontal line_.

Parameters:
  • bridge_length (float) – Total length of the airbridge span in µm.

  • bridge_width (float) – Width of the suspended bridge in µm.

  • pad_width (float) – Width of the landing pads in µm.

  • pad_length (float) – Length of each landing pad in µm.

  • bridge_layer (LayerSpec) – Layer for the suspended bridge metal (default: AB_DRAW).

  • pad_layer (LayerSpec) – Layer for the landing pads/contacts (default: AB_VIA).

Returns:

Component containing the airbridge geometry with appropriate ports.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.airbridge(bridge_length=30, bridge_width=8, pad_width=15, pad_length=12, bridge_layer='AB_DRAW', pad_layer='AB_VIA').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-1.png

bend_circular#

qpdk.cells.bend_circular(**kwargs)[source]#

Returns circular bend.

Parameters:

**kwargs (Unpack[BendCircularKwargs]) – Arguments passed to gf.c.bend_circular.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.bend_circular().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-2.png

bend_circular_all_angle#

qpdk.cells.bend_circular_all_angle(**kwargs)[source]#

Returns circular bend with arbitrary angle.

Parameters:

**kwargs (Unpack[BendCircularAllAngleKwargs]) – Arguments passed to gf.c.bend_circular_all_angle.

Return type:

ComponentAllAngle

from qpdk import cells, PDK

PDK.activate()
c = cells.bend_circular_all_angle().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-3.png

bend_euler#

qpdk.cells.bend_euler(**kwargs)[source]#

Regular degree euler bend.

Parameters:

**kwargs (Unpack[BendEulerKwargs]) – Arguments passed to gf.c.bend_euler.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.bend_euler().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-4.png

bend_euler_all_angle#

qpdk.cells.bend_euler_all_angle(**kwargs)[source]#

Returns regular degree euler bend with arbitrary angle.

Parameters:

**kwargs (Unpack[BendEulerAllAngleKwargs]) – Arguments passed to gf.c.bend_euler_all_angle.

Return type:

ComponentAllAngle

from qpdk import cells, PDK

PDK.activate()
c = cells.bend_euler_all_angle().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-5.png

bend_s#

qpdk.cells.bend_s(**kwargs)[source]#

Return S bend with bezier curve.

stores min_bend_radius property in self.info[‘min_bend_radius’] min_bend_radius depends on height and length

Parameters:

**kwargs (Unpack[BendSKwargs]) – Arguments passed to gf.c.bend_s.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.bend_s().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-6.png

circle#

qpdk.cells.circle(radius=10.0, angle_resolution=2.5, layer='WG')[source]#

Generate a circle geometry.

Parameters:
  • radius (float) – of the circle.

  • angle_resolution (float) – number of degrees per point.

  • layer (LayerSpec) – layer.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.circle(radius=10, angle_resolution=2.5, layer='WG').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-7.png

coupler_tunable#

qpdk.cells.coupler_tunable(pad_width=30.0, pad_height=40.0, gap=3.0, tuning_pad_width=15.0, tuning_pad_height=20.0, tuning_gap=1.0, feed_width=10.0, feed_length=30.0, layer_metal=<LayerMapQPDK.M1_DRAW: 1>, port_type='electrical')[source]#

Creates a tunable capacitive coupler with voltage control.

A tunable coupler includes additional electrodes that can be voltage-biased to change the coupling strength dynamically.

Parameters:
  • pad_width (float) – Width of main coupling pads in μm.

  • pad_height (float) – Height of main coupling pads in μm.

  • gap (float) – Gap between main coupling pads in μm.

  • tuning_pad_width (float) – Width of tuning pads in μm.

  • tuning_pad_height (float) – Height of tuning pads in μm.

  • tuning_gap (float) – Gap to tuning pads in μm.

  • feed_width (float) – Width of feed lines in μm.

  • feed_length (float) – Length of feed lines in μm.

  • layer_metal (LayerSpec) – Layer for main metal structures.

  • port_type (str) – Type of port to add to the component.

Returns:

A gdsfactory component with the tunable coupler geometry.

Return type:

Component

            (connected to feed)
                 _______
                |       |
                | tpad1 |
                |       |
                |_______|
                tuning gap
           ______        ______
 _______  |      |      |      | _______
|       | |      |      |      ||       |
| feed1 | | pad1 | gap  | pad2 || feed2 |
|       | |      |      |      ||       |
|_______| |      |      |      ||_______|
          |______|      |______|
                tuning gap
                 _______
                |       |
                | tpad2 |
                |       |
                |_______|
            (connected to feed)
from qpdk import cells, PDK

PDK.activate()
c = cells.coupler_tunable(pad_width=30, pad_height=40, gap=3, tuning_pad_width=15, tuning_pad_height=20, tuning_gap=1, feed_width=10, feed_length=30, layer_metal='M1_DRAW', port_type='electrical').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-8.png

double_pad_transmon#

qpdk.cells.double_pad_transmon(**kwargs)[source]#

Creates a double capacitor pad transmon qubit with Josephson junction.

A transmon qubit consists of two capacitor pads connected by a Josephson junction. The junction creates an anharmonic oscillator that can be used as a qubit.

See [KYG+07] for details.

Parameters:

**kwargs (Unpack[DoublePadTransmonParams]) – DoublePadTransmonParams for the transmon qubit.

Returns:

A gdsfactory component with the transmon geometry.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.double_pad_transmon().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-9.png

double_pad_transmon_with_bbox#

qpdk.cells.double_pad_transmon_with_bbox(bbox_extension=200.0, **kwargs)[source]#

Creates a double capacitor pad transmon qubit with Josephson junction and an etched bounding box.

See double_pad_transmon() for more details.

Parameters:
  • bbox_extension (float) – Extension size for the bounding box in μm.

  • **kwargs (Unpack[DoublePadTransmonParams]) – DoublePadTransmonParams for the transmon qubit.

Returns:

A gdsfactory component with the transmon geometry and etched box.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.double_pad_transmon_with_bbox(bbox_extension=200).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-10.png

flipmon#

qpdk.cells.flipmon(**kwargs)[source]#

Creates a circular transmon qubit with flipmon geometry.

A circular variant of the transmon qubit with another circle as the inner pad.

See [LWJ+25, LZY+21] for details about the flipmon design.

Parameters:

**kwargs (Unpack[FlipmonParams]) – FlipmonParams for the flipmon qubit.

Keyword Arguments:
  • inner_ring_radius – Central radius of the inner circular capacitor pad in μm.

  • inner_ring_width – Width of the inner circular capacitor pad in μm.

  • outer_ring_radius – Central radius of the outer circular capacitor pad in μm.

  • outer_ring_width – Width of the outer circular capacitor pad in μm.

  • top_circle_radius – Central radius of the top circular capacitor pad in μm. There is no separate width as the filled circle is not a ring.

  • junction_spec – Component specification for the Josephson junction component.

  • junction_displacement – Optional complex transformation to apply to the junction.

  • layer_metal – Layer for the metal pads.

  • layer_metal_top – Layer for the other metal layer pad for flip-chip.

Returns:

A gdsfactory component with the circular transmon geometry.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.flipmon().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-11.png

flipmon_with_bbox#

qpdk.cells.flipmon_with_bbox(flipmon_params=None, m1_etch_extension_gap=30.0, m2_etch_extension_gap=40.0)[source]#

Creates a circular transmon qubit with flipmon geometry and a circular etched bounding box.

See flipmon() for more details.

Parameters:
  • flipmon_params (FlipmonParams | None) – FlipmonParams for the flipmon qubit.

  • m1_etch_extension_gap (float) – Radius extension length for the M1 etch bounding box in μm.

  • m2_etch_extension_gap (float) – Radius extension length for the M2 etch bounding box in μm.

Returns:

A gdsfactory component with the flipmon geometry and etched box.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.flipmon_with_bbox(m1_etch_extension_gap=30, m2_etch_extension_gap=40).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-12.png

indium_bump#

qpdk.cells.indium_bump(diameter=15.0)[source]#

Creates an indium bump component for 3D integration.

See [RKD+17] for details.

Parameters:

diameter (float) – Diameter of the indium bump in µm.

Returns:

A gdsfactory Component representing the indium bump.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.indium_bump(diameter=15).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-13.png

interdigital_capacitor#

qpdk.cells.interdigital_capacitor(**kwargs)[source]#

Generate an interdigital capacitor component with ports on both ends.

An interdigital capacitor consists of interleaved metal fingers that create a distributed capacitance. This component creates a planar capacitor with two sets of interleaved fingers extending from opposite ends.

See for example [LeiZhuW00].

Note

finger_length=0 effectively provides a parallel plate capacitor. The capacitance scales approximately linearly with the number of fingers and finger length.

Parameters:

kwargs (Unpack[InterdigitalCapacitorParams]) – InterdigitalCapacitorParams for the interdigital capacitor.

Returns:

A gdsfactory component with the interdigital capacitor geometry

and two ports (‘o1’ and ‘o2’) on opposing sides.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.interdigital_capacitor().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-14.png

josephson_junction#

qpdk.cells.josephson_junction(junction_overlap_displacement=1.8, **kwargs)[source]#

Creates a single Josephson junction component.

A Josephson junction consists of two superconducting electrodes separated by a thin insulating barrier allowing tunnelling.

Parameters:
  • junction_overlap_displacement (float) – Displacement of the overlap region in µm. Measured from the centers of the junction ports

  • kwargs (Unpack[SingleJosephsonJunctionWireParams]) – SingleJosephsonJunctionWireParams for single wires.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.josephson_junction(junction_overlap_displacement=1.8).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-15.png

launcher#

qpdk.cells.launcher(straight_length=200.0, taper_length=100.0, cross_section_big=<function launcher_cross_section_big>, cross_section_small='cpw')[source]#

Generate an RF launcher pad for wirebonding or probe testing.

Creates a launcher component consisting of a straight section with large cross-section connected to a tapered transition down to a smaller cross-section. This design facilitates RF signal access through probes or wirebonds while maintaining good impedance matching.

The default dimensions are taken from [TSKivijarvi+25].

Parameters:
  • straight_length (float) – Length of the straight, wirebond landing area, section in µm.

  • taper_length (float) – Length of the taper section in µm.

  • cross_section_big (CrossSectionSpec) – Cross-section specification for the large end of the launcher (probe/wirebond interface).

  • cross_section_small (CrossSectionSpec) – Cross-section specification for the small end of the launcher (circuit interface).

Returns:

A gdsfactory component containing the complete launcher

geometry with one output port (“o1”) at the small end.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.launcher(straight_length=200, taper_length=100, cross_section_small='cpw').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-16.png

nxn#

qpdk.cells.nxn(**kwargs)[source]#

Returns a tee waveguide.

Parameters:

**kwargs (Unpack[NxnKwargs]) – Arguments passed to gf.c.nxn.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.nxn().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-17.png

plate_capacitor#

qpdk.cells.plate_capacitor(**kwargs)[source]#

Creates a plate capacitor.

A capacitive coupler consists of two metal pads separated by a small gap, providing capacitive coupling between circuit elements like qubits and resonators.

Note

This is a special case of the interdigital capacitor with zero finger length.

Parameters:

**kwargs (Unpack[InterdigitalCapacitorParams]) – InterdigitalCapacitorParams for the interdigital

Returns:

A gdsfactory component with the plate capacitor geometry.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.plate_capacitor().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-18.png

plate_capacitor_single#

qpdk.cells.plate_capacitor_single(**kwargs)[source]#

Creates a single plate capacitor for coupling.

This is essentially half of a plate capacitor().

Parameters:

**kwargs (Unpack[InterdigitalCapacitorParams]) – InterdigitalCapacitorParams

Returns:

A gdsfactory component with the plate capacitor geometry.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.plate_capacitor_single().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-19.png

rectangle#

qpdk.cells.rectangle(size=(4.0, 2.0), layer='M1_DRAW', centered=False, port_type='electrical', port_orientations=(180, 90, 0, -90))[source]#

Returns a rectangle.

Parameters:
  • size (tuple[float, float]) – (tuple) Width and height of rectangle.

  • layer (tuple[int, int] | str | int | LayerEnum) – Specific layer to put polygon geometry on.

  • centered (bool) – True sets center to (0, 0), False sets south-west to (0, 0).

  • port_type (str | None) – optical, electrical.

  • port_orientations (tuple[int, ...] | list[int] | None) – list of port_orientations to add. None adds no ports.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.rectangle(size=(4, 2), layer='M1_DRAW', centered=False, port_type='electrical', port_orientations=(180, 90, 0, -90)).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-20.png

resonator#

qpdk.cells.resonator(length=4000.0, meanders=6, bend_spec=<function bend_circular>, cross_section='cpw', *, open_start=False, open_end=False)[source]#

Creates a meandering coplanar waveguide resonator.

Changing open_start and open_end appropriately allows creating a shorted quarter-wave resonator or an open half-wave resonator.

See [MP12] for details

Parameters:
  • length (float) – Length of the resonator in μm.

  • meanders (int) – Number of meander sections to fit the resonator in a compact area.

  • bend_spec (ComponentSpec) – Specification for the bend component used in meanders.

  • cross_section (CrossSectionSpec) – Cross-section specification for the resonator.

  • open_start (bool) – If True, adds an etch section at the start of the resonator.

  • open_end (bool) – If True, adds an etch section at the end of the resonator.

Returns:

A gdsfactory component with meandering resonator geometry.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.resonator(length=4000, meanders=6, cross_section='cpw', open_start=False, open_end=False).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-21.png

resonator_coupled#

qpdk.cells.resonator_coupled(resonator_params=None, cross_section_non_resonator='cpw', coupling_straight_length=200.0, coupling_gap=12.0)[source]#

Creates a meandering coplanar waveguide resonator with a coupling waveguide.

This component combines a resonator with a parallel coupling waveguide placed at a specified gap for proximity coupling. Similar to the design described in [BM18].

Parameters:
  • resonator_params (ResonatorParams | None) – Parameters for the resonator component. If None, defaults will be used.

  • cross_section_non_resonator (CrossSectionSpec) – Cross-section specification for the coupling waveguide.

  • coupling_straight_length (float) – Length of the coupling waveguide section in μm.

  • coupling_gap (float) – Gap between the resonator and coupling waveguide in μm. Measured from edges of the center conductors.

Returns:

A gdsfactory component with meandering resonator and coupling waveguide.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.resonator_coupled(cross_section_non_resonator='cpw', coupling_straight_length=200, coupling_gap=12).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-22.png

resonator_half_wave#

qpdk.cells.resonator_half_wave(length=4000.0, meanders=6, bend_spec=<function bend_circular>, cross_section='cpw', *, open_start=True, open_end=True)#

Creates a meandering coplanar waveguide resonator.

Changing open_start and open_end appropriately allows creating a shorted quarter-wave resonator or an open half-wave resonator.

See [MP12] for details

Parameters:
  • length (float) – Length of the resonator in μm.

  • meanders (int) – Number of meander sections to fit the resonator in a compact area.

  • bend_spec (ComponentSpec) – Specification for the bend component used in meanders.

  • cross_section (CrossSectionSpec) – Cross-section specification for the resonator.

  • open_start (bool) – If True, adds an etch section at the start of the resonator.

  • open_end (bool) – If True, adds an etch section at the end of the resonator.

Returns:

A gdsfactory component with meandering resonator geometry.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.resonator_half_wave(length=4000, meanders=6, cross_section='cpw', open_start=True, open_end=True).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-23.png

resonator_quarter_wave#

qpdk.cells.resonator_quarter_wave(length=4000.0, meanders=6, bend_spec=<function bend_circular>, cross_section='cpw', *, open_start=False, open_end=True)#

Creates a meandering coplanar waveguide resonator.

Changing open_start and open_end appropriately allows creating a shorted quarter-wave resonator or an open half-wave resonator.

See [MP12] for details

Parameters:
  • length (float) – Length of the resonator in μm.

  • meanders (int) – Number of meander sections to fit the resonator in a compact area.

  • bend_spec (ComponentSpec) – Specification for the bend component used in meanders.

  • cross_section (CrossSectionSpec) – Cross-section specification for the resonator.

  • open_start (bool) – If True, adds an etch section at the start of the resonator.

  • open_end (bool) – If True, adds an etch section at the end of the resonator.

Returns:

A gdsfactory component with meandering resonator geometry.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.resonator_quarter_wave(length=4000, meanders=6, cross_section='cpw', open_start=False, open_end=True).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-24.png

ring#

qpdk.cells.ring(radius=10.0, width=0.5, angle_resolution=2.5, layer='WG', angle=360)[source]#

Returns a ring.

Parameters:
  • radius (float) – ring radius.

  • width (float) – of the ring.

  • angle_resolution (float) – number of points per degree.

  • layer (LayerSpec) – layer.

  • angle (float) – angular coverage of the ring

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.ring(radius=10, width=0.5, angle_resolution=2.5, layer='WG', angle=360).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-25.png

single_josephson_junction_wire#

qpdk.cells.single_josephson_junction_wire(**kwargs)[source]#

Creates a single wire to use in a Josephson junction.

Parameters:

kwargs (Unpack[SingleJosephsonJunctionWireParams]) – SingleJosephsonJunctionWireParams parameters.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.single_josephson_junction_wire().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-26.png

snspd#

qpdk.cells.snspd(wire_width=0.2, wire_pitch=0.6, size=(10, 8), num_squares=None, turn_ratio=4, terminals_same_side=False, *, layer=<LayerMapQPDK.M1_DRAW: 1>, port_type='electrical')#

Creates an optimally-rounded SNSPD.

Parameters:
  • wire_width (float) – Width of the wire.

  • wire_pitch (float) – Distance between two adjacent wires. Must be greater than width.

  • size (Size) – Float2 (width, height) of the rectangle formed by the outer boundary of the SNSPD.

  • num_squares (int | None) – int | None = None Total number of squares inside the SNSPD length.

  • turn_ratio (float) – float Specifies how much of the SNSPD width is dedicated to the 180 degree turn. A turn_ratio of 10 will result in 20% of the width being comprised of the turn.

  • terminals_same_side (bool) – If True, both ports will be located on the same side of the SNSPD.

  • layer (LayerSpec) – layer spec to put polygon geometry on.

  • port_type (str) – type of port to add to the component.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.snspd(wire_width=0.2, wire_pitch=0.6, size=(10, 8), turn_ratio=4, terminals_same_side=False, layer='M1_DRAW', port_type='electrical').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-27.png

squid_junction#

qpdk.cells.squid_junction(junction_spec=<function josephson_junction>, loop_area=4)[source]#

Creates a SQUID (Superconducting Quantum Interference Device) junction component.

A SQUID consists of two Josephson junctions connected in parallel, forming a loop.

See [CB04] for details.

Parameters:
  • junction_spec (ComponentSpec) – Component specification for the Josephson junction component.

  • loop_area (float) – Area of the SQUID loop in µm². This does not take into account the junction wire widths.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.squid_junction(loop_area=4).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-28.png

straight#

qpdk.cells.straight(**kwargs)[source]#

Returns a Straight waveguide.

Parameters:

**kwargs (Unpack[StraightKwargs]) – Arguments passed to gf.c.straight.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.straight().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-29.png

straight_all_angle#

qpdk.cells.straight_all_angle(**kwargs)[source]#

Returns a Straight waveguide with offgrid ports.

Parameters:

**kwargs (Unpack[StraightAllAngleKwargs]) – Arguments passed to gf.c.straight_all_angle.

Return type:

ComponentAllAngle

o1  ──────────────── o2
        length
from qpdk import cells, PDK

PDK.activate()
c = cells.straight_all_angle().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-30.png

taper_cross_section#

qpdk.cells.taper_cross_section(*, cross_section1='cpw', cross_section2='cpw', length=10, npoints=100, linear=False, width_type='sine')#

Returns taper transition between cross_section1 and cross_section2.

Parameters:
  • cross_section1 (CrossSectionSpec) – start cross_section factory.

  • cross_section2 (CrossSectionSpec) – end cross_section factory.

  • length (float) – transition length.

  • npoints (int) – number of points.

  • linear (bool) – shape of the transition, sine when False.

  • width_type (str) – shape of the transition ONLY IF linear is False

Return type:

Component

                    _____________________
                   /
           _______/______________________
                 /
cross_section1  |        cross_section2
           ______\_______________________
                  \
                   \_____________________
from qpdk import cells, PDK

PDK.activate()
c = cells.taper_cross_section(cross_section1='cpw', cross_section2='cpw', length=10, npoints=100, linear=False, width_type='sine').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-31.png

tee#

qpdk.cells.tee(cross_section='cpw')[source]#

Returns a three-way tee waveguide.

Parameters:

cross_section (CrossSection | str | dict[str, Any] | Callable[[...], CrossSection] | SymmetricalCrossSection | DCrossSection) – specification (CrossSection, string or dict).

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.tee(cross_section='cpw').copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-32.png

transform_component#

qpdk.cells.transform_component(component, transform)[source]#

Applies a complex transformation to a component.

For use with container().

Parameters:
  • component (Component)

  • transform (DCplxTrans)

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.transform_component().copy()
c.draw_ports()
c.plot()

(Source code)

transmon_with_resonator#

qpdk.cells.transmon_with_resonator(transmon='double_pad_transmon_with_bbox', resonator=functools.partial(<function resonator>, open_start=False, open_end=True, length=4000, meanders=6), resonator_meander_start=(-700, -1300), resonator_length=5000.0, resonator_params=None, coupler=functools.partial(<function plate_capacitor_single>, thickness=20, fingers=18))[source]#

Returns a transmon qubit coupled to a quarter wave resonator.

Parameters:
  • transmon (ComponentSpec) – Transmon component.

  • resonator (ComponentSpec) – Resonator component.

  • resonator_meander_start (tuple[float, float]) – (x, y) position of the start of the resonator meander.

  • resonator_length (float) – Length of the resonator in µm.

  • resonator_params (ResonatorParams | None) – Parameters for the resonator component if it accepts any.

  • coupler (ComponentSpec) – Coupler component.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.transmon_with_resonator(transmon='double_pad_transmon_with_bbox', resonator_meander_start=(-700, -1300), resonator_length=5000).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-34.png

tsv#

qpdk.cells.tsv(diameter=15.0)[source]#

Creates a Through-silicon via (TSV) component for 3D integration.

See [YSM+20].

Parameters:

diameter (float) – Diameter of the via in µm.

Returns:

A gdsfactory Component representing the TSV.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.tsv(diameter=15).copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-35.png

xmon_transmon#

qpdk.cells.xmon_transmon(**kwargs)[source]#

Creates an Xmon style transmon qubit with cross-shaped geometry.

An Xmon transmon consists of a cross-shaped capacitor pad with four arms extending from a central region, connected by a Josephson junction at the center. The design provides better control over the coupling to readout resonators and neighboring qubits through the individual arm geometries.

See [BKM+13] for details about the Xmon design.

Parameters:

**kwargs (Unpack[XmonTransmonParams]) – XmonTransmonParams for the Xmon transmon qubit.

Returns:

A gdsfactory component with the Xmon transmon geometry.

Return type:

Component

from qpdk import cells, PDK

PDK.activate()
c = cells.xmon_transmon().copy()
c.draw_ports()
c.plot()

(Source code, png, hires.png, pdf)

_images/cells-36.png

References#

[BKM+13]

R. Barends, J. Kelly, A. Megrant, D. Sank, E. Jeffrey, Y. Chen, Y. Yin, B. Chiaro, J. Mutus, C. Neill, P. O'Malley, P. Roushan, J. Wenner, T. C. White, A. N. Cleland, and John M. Martinis. Coherent Josephson Qubit Suitable for Scalable Quantum Integrated Circuits. Physical Review Letters, 111(8):080502, August 2013. URL: https://link.aps.org/doi/10.1103/PhysRevLett.111.080502 (visited on 2025-09-06), doi:10.1103/PhysRevLett.111.080502.

[BM18]

Ilya Besedin and Alexey P Menushenkov. Quality factor of a transmission line coupled coplanar waveguide resonator. EPJ Quantum Technology, 5(1):2, December 2018. URL: https://epjquantumtechnology.springeropen.com/articles/10.1140/epjqt/s40507-018-0066-3 (visited on 2025-09-10), doi:10.1140/epjqt/s40507-018-0066-3.

[CB04]

John Clarke and Alex I. Braginski. The SQUID Handbook. Wiley-VCH, Weinheim, 2004. ISBN 978-3-527-40229-8.

[KYG+07]

Jens Koch, Terri M. Yu, Jay Gambetta, A. A. Houck, D. I. Schuster, J. Majer, Alexandre Blais, M. H. Devoret, S. M. Girvin, and R. J. Schoelkopf. Charge-insensitive qubit design derived from the Cooper pair box. Physical Review A, 76(4):042319, October 2007. URL: https://link.aps.org/doi/10.1103/PhysRevA.76.042319 (visited on 2025-09-04), doi:10.1103/PhysRevA.76.042319.

[LWJ+25]

Xuegang Li, Junhua Wang, Yao-Yao Jiang, Guang-Ming Xue, Xiaoxia Cai, Jun Zhou, Ming Gong, Zhao-Feng Liu, Shuang-Yu Zheng, Deng-Ke Ma, Mo Chen, Wei-Jie Sun, Shuang Yang, Fei Yan, Yi-Rong Jin, S. P. Zhao, Xue-Feng Ding, and Hai-Feng Yu. Cosmic-ray-induced correlated errors in superconducting qubit array. Nature Communications, 16(1):4677, May 2025. URL: https://www.nature.com/articles/s41467-025-59778-z (visited on 2025-09-04), doi:10.1038/s41467-025-59778-z.

[LZY+21]

Xuegang Li, Yingshan Zhang, Chuhong Yang, Zhiyuan Li, Junhua Wang, Tang Su, Mo Chen, Yongchao Li, Chengyao Li, Zhenyu Mi, Xuehui Liang, Chenlu Wang, Zhen Yang, Yulong Feng, Kehuan Linghu, Huikai Xu, Jiaxiu Han, Weiyang Liu, Peng Zhao, Teng Ma, Ruixia Wang, Jingning Zhang, Yu Song, Pei Liu, Ziting Wang, Zhaohua Yang, Guangming Xue, Yirong Jin, and Haifeng Yu. Vacuum-gap transmon qubits realized using flip-chip technology. Applied Physics Letters, 119(18):184003, November 2021. URL: https://pubs.aip.org/apl/article/119/18/184003/40593/Vacuum-gap-transmon-qubits-realized-using-flip (visited on 2025-09-04), doi:10.1063/5.0068255.

[MP12] (1,2,3)

David M. Pozar. Microwave Engineering. John Wiley & Sons, Inc., 4 edition, 2012. ISBN 978-0-470-63155-3.

[RKD+17]

D. Rosenberg, D. Kim, R. Das, D. Yost, S. Gustavsson, D. Hover, P. Krantz, A. Melville, L. Racz, G. O. Samach, S. J. Weber, F. Yan, J. L. Yoder, A. J. Kerman, and W. D. Oliver. 3D integrated superconducting qubits. npj Quantum Information, 3(1):42, October 2017. URL: https://www.nature.com/articles/s41534-017-0044-0 (visited on 2025-09-05), doi:10.1038/s41534-017-0044-0.

[TSKivijarvi+25]

Mikko Tuokkola, Yoshiki Sunada, Heidi Kivijärvi, Jonatan Albanese, Leif Grönberg, Jukka-Pekka Kaikkonen, Visa Vesterinen, Joonas Govenius, and Mikko Möttönen. Methods to achieve near-millisecond energy relaxation and dephasing times for a superconducting transmon qubit. Nature Communications, 16(1):5421, July 2025. URL: https://www.nature.com/articles/s41467-025-61126-0 (visited on 2025-08-29), doi:10.1038/s41467-025-61126-0.

[YSM+20]

D. R. W. Yost, M. E. Schwartz, J. Mallek, D. Rosenberg, C. Stull, J. L. Yoder, G. Calusine, M. Cook, R. Das, A. L. Day, E. B. Golden, D. K. Kim, A. Melville, B. M. Niedzielski, W. Woods, A. J. Kerman, and W. D. Oliver. Solid-state qubits integrated with superconducting through-silicon vias. npj Quantum Information, 6(1):59, July 2020. URL: https://www.nature.com/articles/s41534-020-00289-8 (visited on 2025-09-05), doi:10.1038/s41534-020-00289-8.

[LeiZhuW00]

Lei Zhu and Ke Wu. Accurate circuit model of interdigital capacitor and its application to design of new quasi-lumped miniaturized filters with suppression of harmonic resonance. IEEE Transactions on Microwave Theory and Techniques, 48(3):347–356, March 2000. URL: https://ieeexplore.ieee.org/document/826833/ (visited on 2025-09-01), doi:10.1109/22.826833.