Stanza provides automated Double Quantum Dot (DQD) search routines for efficiently discovering voltage regions where two quantum dots form with stable charge configurations. After completing health check, DQD search is the next critical step in quantum dot tuning [2], using machine learning classifiers and adaptive grid search to locate promising operating points.
DQD Search automatically explores the plunger voltage space to find regions exhibiting characteristic double quantum dot charge stability diagrams. The routine follows a systematic multi-stage workflow:
Each stage builds on previous results, efficiently focusing measurement effort on promising voltage regions while avoiding exhaustive grid scanning.
Before running DQD search, you must complete device health check. DQD search requires:
See the Health Check documentation for completing these prerequisite routines.
Configure the DQD search routine in your device YAML file:
Then run the DQD discovery sequence:

Purpose: Determine the characteristic voltage spacing of Coulomb peaks [3] by analyzing random sweeps through plunger voltage space.
Peak spacing computation provides the fundamental length scale for DQD search by measuring typical distances between charge transitions. This spacing is used to size the grid squares for efficient exploration.
Parameters:
gates (list): All gate electrode names (plungers, barriers, reservoirs)measure_electrode (str): Electrode to measure current from (e.g., “DRAIN”)min_search_scale (float): Minimum voltage scale to test in volts. Typical: 0.05 V (50 mV)max_search_scale (float): Maximum voltage scale to test in volts. Typical: 0.2 V (200 mV)current_trace_points (int, default=128): Number of voltage points per sweep tracemax_number_of_samples (int, default=30): Maximum sweep attempts per voltage scalenumber_of_samples_for_scale_computation (int, default=10): Target number of successful peak detectionsseed (int, default=42): Random seed for reproducibilitysession (LoggerSession, optional): Session for logging measurementsbarrier_voltages (dict, optional): Custom barrier voltages (overrides health check values)Returns:
peak_spacing (float): Median peak spacing in voltsHow It Works:
min_search_scale to max_search_scalecoulomb-blockade-classifier-v3coulomb-blockade-peak-detector-v2) to identify individual Coulomb peaksgrid_square_size = peak_spacing × 3/√2 ≈ 2.12 × peak_spacing. This factor ensures the grid square spans approximately three Coulomb peaks along each plunger axis, assuming equal contributions from both gates to the diagonal spacing.Usage Notes:
max_safe_voltage_bound, min_safe_voltage_bound)ValueError if no valid peak spacings detected
Purpose: Efficiently explore plunger voltage space to find DQD regions using adaptive grid search with a three-stage classification hierarchy.
This routine implements the core DQD search algorithm, using intelligent square selection and multi-resolution measurements to minimize total measurement time while maximizing DQD discovery probability.
Parameters:
gates (list): All gate electrode namesmeasure_electrode (str): Electrode to measure current fromcurrent_trace_points (int, default=128): Points in diagonal current trace for Stage 1low_res_csd_points (int, default=16): Points per axis in low-resolution CSD for Stage 2high_res_csd_points (int, default=48): Points per axis in high-resolution CSD for Stage 3max_samples (int, optional): Maximum grid squares to sample. Default: 50% of total grid squaresnum_dqds_for_exit (int, default=1): Exit after finding this many DQDsinclude_diagonals (bool, default=False): Use 8-connected neighborhoods (True) vs 4-connected (False)seed (int, default=42): Random seed for reproducibilitysession (LoggerSession, optional): Session for logging measurementsbarrier_voltages (dict, optional): Custom barrier voltagesReturns:
dqd_squares (list): List of confirmed DQD squares, sorted by descending total score. Each square contains:
grid_idx (int): Linear index in gridcurrent_trace_currents (array): Stage 1 current measurementscurrent_trace_voltages (array): Stage 1 voltage coordinatescurrent_trace_score (float): Stage 1 ML classification scorecurrent_trace_classification (bool): Stage 1 classification resultlow_res_csd_currents (array or None): Stage 2 current gridlow_res_csd_voltages (array or None): Stage 2 voltage coordinateslow_res_csd_score (float): Stage 2 ML classification scorelow_res_csd_classification (bool): Stage 2 classification resulthigh_res_csd_currents (array or None): Stage 3 current gridhigh_res_csd_voltages (array or None): Stage 3 voltage coordinateshigh_res_csd_score (float): Stage 3 ML classification scorehigh_res_csd_classification (bool): Stage 3 classification resulttotal_score (float): Sum of all stage scoresis_dqd (bool): True if high-res CSD classified as DQDHow It Works:
The routine uses a hierarchical three-stage classification to efficiently filter grid squares:
Stage 1: Current Trace (Fast Screening)
coulomb-blockade-classifier-v3Stage 2: Low-Resolution CSD (Intermediate Check)
charge-stability-diagram-binary-classifier-v2-16x16Stage 3: High-Resolution CSD (Confirmation)
charge-stability-diagram-binary-classifier-v1-48x48Intelligent Square Selection: After the first random square, prioritizes exploration using spatial clustering:
total_score > 1.5 (passed Stage 1 and possibly Stage 2)The search terminates when:
num_dqds_for_exit DQDs are found, ORmax_samples squares are visited, ORUsage Notes:
peak_spacing from prior compute_peak_spacing routinetotal_score for easy access to best candidates
Purpose: Comprehensive DQD search that sweeps barrier voltages to explore different tunnel coupling regimes.
This routine extends the fixed-barrier search by systematically varying barrier voltages to find optimal configurations. It’s useful when fixed barriers don’t yield DQDs or when exploring the full parameter space.
Parameters:
gates (list): All gate electrode namesmeasure_electrode (str): Electrode to measure current frommin_search_scale (float): Minimum voltage scale for peak spacing computation (V)max_search_scale (float): Maximum voltage scale for peak spacing computation (V)current_trace_points (int): Points per current traceouter_barrier_points (int, default=5): Number of sweep points for outer barriers (B0, B2)inner_barrier_points (int, default=5): Number of sweep points for inner barrier (B1)num_dqds_for_exit (int, default=1): Number of DQDs required to exit barrier sweepsession (LoggerSession, optional): Session for loggingReturns:
run_dqd_search (list): List of results for each barrier configuration tested, each containing:
outer_barrier_voltage (float): Voltage applied to outer barriers (B0, B2)inner_barrier_voltage (float): Voltage applied to inner barrier (B1)peak_spacing (dict): Result from compute_peak_spacing at this barrier configurationdqd_squares (list): DQD squares found at this barrier configurationHow It Works:
compute_peak_spacing to determine grid sizerun_dqd_search_fixed_barriers to search for DQDsnum_dqds_for_exit DQDs found at any configurationUsage Notes:
[r for r in result['run_dqd_search'] if len(r['dqd_squares']) > 0]DQD search uses several specialized ML models trained on quantum dot measurement data [1]. For detailed specifications and performance metrics, refer to the Models documentation:
All classifiers return a score indicating confidence. Higher scores indicate stronger feature detection. The hierarchical use of classifiers minimizes total measurement time by filtering out unpromising regions early.
DQD search requires proper gate type annotations and sufficient plunger gates:
To use the machine learning classifiers, you must initialize the Conductor Quantum SDK using the setup_models_sdk routine. This routine authenticates with the platform and makes the models client available to the DQD search routines.
Add it to your configuration sequence before running DQD search:
Then ensure it runs before your search routines:
Key parameters to tune for your device:
Peak Spacing:
Trade-offs:
Grid Search Resolution:
It is recommended to use the default resolutions as the machine learning models provided with Stanza are specifically designed and trained for these input sizes (128/16/48).
Changing these resolutions is discouraged as it may significantly degrade model performance. The default models expect these specific input dimensions. Only modify these parameters if you are supplying your own custom ML models trained on different resolutions.
Search Control:
Trade-offs:
Organize DQD discovery as a nested routine workflow:
Execute the entire workflow:
Extract and visualize high-resolution charge stability diagrams:
Run DQD search with specific barrier voltages:
DQD search requires voltage bounds and gate characterization:
Use run_dqd_search_fixed_barriers before full barrier sweep:
Balance measurement quality vs time:
Verify peak spacing is reasonable:
num_dqds_for_exit=1 is often sufficient:
Visually inspect high-res CSDs:
Set seed parameter for reproducible random sweeps:
Symptom: ValueError: No peak spacings found.
Causes:
Solutions:
ctx.results for gate characterizationmax_search_scale to test larger voltage ranges (e.g., 0.3 V)max_number_of_samples for more attempts per scale (e.g., 50)Symptom: dqd_squares is empty after search completes
Causes:
Solutions:
run_dqd_search to sweep barrier voltages:
max_samples to explore more grid squareshigh_res_csd_points for better resolution (e.g., 64 instead of 48)Symptom: Search takes too long to complete
Causes:
Solutions:
max_samples for faster termination (e.g., 20% of grid)num_dqds_for_exit: 1 to exit after first DQDinclude_diagonals: false for sparser exploration<30 mV), consider adjusting search scalesSymptom: High-res CSDs don’t show clear DQD features
Causes:
Solutions:
total_score values - higher scores (>2.0) more reliablehigh_res_csd_points for clearer features (e.g., 64)Symptom: Grid squares skipped or voltage errors during search
Causes:
Solutions:
Here’s a complete example from health check to DQD discovery:
[1] Moon, H., et al. Machine learning enables completely automatic tuning of a quantum device faster than human experts. Nat Commun 11, 4161 (2020). https://doi.org/10.1038/s41467-020-17835-9
[2] Zwolak, J. P., et al. Autotuning of double-dot devices in situ with machine learning. Phys. Rev. Applied 13, 034075 (2020). https://doi.org/10.1103/PhysRevApplied.13.034075
[3] van der Wiel, W. G., et al. Electron transport through double quantum dots. Rev. Mod. Phys. 75, 1 (2002). https://doi.org/10.1103/RevModPhys.75.1