Stanza provides a comprehensive suite of automated tools for checking the initial status of quantum dot devices. We group these tools into a routine called Health Check. Health Check follows a similar workflow to other algorithms that you may be familiar with for quantum devices such as BATIS [1]. The Health Check routine systematically tests and characterizes your device to establish baseline operating parameters such as checking for leaking gates and threshold voltages before running more complex experiments.
Health Check is the critical first step in quantum dot tuning. Before you can measure charge stability diagrams or manipulate individual quantum dots, you need to:
Stanza’s Health Check routine automates this entire workflow, producing actionable parameters that subsequent tune-up sequences can use.
Configure the Health Check routine in your device YAML file:
Then run the full Health Check sequence:
The safe voltage bounds (max_safe_voltage_bound and min_safe_voltage_bound) represent the
extreme voltages that can be safely applied to gates without causing device damage or
unwanted leakage. The interpretation of these bounds depends on the charge carrier type:
For electron-based devices (n-channel, charge_carrier_type=“electron”):
max_safe_voltage_bound is POSITIVE and represents the maximum safe positive voltagemin_safe_voltage_bound is NEGATIVE and represents the most negative voltage (depletion)For hole-based devices (p-channel, charge_carrier_type=“hole”):
max_safe_voltage_bound is POSITIVE and represents the most positive voltage (depletion)min_safe_voltage_bound is NEGATIVE and represents the maximum safe negative voltageIn both cases, the routines sweep from depletion (low current) toward accumulation (high current), but the voltage polarity is reversed between electron and hole devices. The charge_carrier_type parameter determines which voltage bound is used for accumulation sweeps.
Purpose: Establish baseline measurement noise and offset to distinguish real signals from noise.
The noise floor measurement performs repeated current measurements on a specified electrode to characterize the statistical properties of measurement noise and offset. The resulting standard deviation is used as a threshold in subsequent routines.
Parameters:
measure_electrode (str): Electrode (or contact) to measure current from (e.g., “DRAIN”)num_points (int, default=100): Number of measurements for statisticssession (LoggerSession, optional): Session for logging measurementsReturns:
current_mean (float): Mean measured current in Amperescurrent_std (float): Standard deviation of current in AmperesUsage Notes:
device.zero(PadType.ALL)current_std value is typically used in leakage_test as min_current_threshold
Purpose: Detect unwanted electrical leakage or shorts between gate electrodes and the device’s conductive channel (or substrate), ensuring gate isolation integrity.
The leakage test systematically tests for electrical leakage between all pairs of control gates by sweeping each gate through its voltage range while measuring current on other gates. Leakage is quantified as inter-gate resistance (dV/dI).
Parameters:
leakage_threshold_resistance (int): Maximum acceptable resistance (Ohms) between gate pairs. Lower values indicate more stringent requirements. Typical: 50e6 (50 MOhm)leakage_threshold_count (int, default=0): Maximum number of leaky gate pairs allowed. Default 0 means any leakage causes failurenum_points (int, default=10): Number of voltage steps per directionsession (LoggerSession, optional): Session for logging leakage matricesReturns:
max_safe_voltage_bound (float): Voltage offset tested for positive boundmin_safe_voltage_bound (float): Voltage offset tested for negative boundHow It Works:
leakage_threshold_resistanceUsage Notes:
ctx.results.get("current_std") from noise_floor_measurement if available, otherwise defaults to 1e-10 Amin_current_threshold are skipped to avoid noise
Purpose: Determine the global turn-on voltage by sweeping all gate voltages simultaneously to induce channel conduction.
This routine sweeps all control gates together from minimum to maximum voltage, identifying the voltage where the device transitions from depletion to accumulation. This establishes a baseline operating point for subsequent characterization.
Parameters:
measure_electrode (str): Electrode to measure current fromstep_size (float): Voltage increment (V) between sweep points. Smaller = higher resolution but longer measurement time. Typical: 0.01 V (10 mV)bias_gate (str): Name of gate to apply bias voltage to during measurementbias_voltage (float): Bias voltage (V) to apply to bias_gatecharge_carrier_type (str): The mobile charge particle type. Must be “electron” or “hole”.session (LoggerSession, optional): Session for logging sweep dataReturns:
global_turn_on_voltage (float): Cut-off voltage (cutoff_voltage) where device turns on, in VoltsHow It Works:
max_voltage_bound and min_voltage_bound from prior leakage_testcutoff_voltage)cutoff_voltage after analysisUsage Notes:
step_size converted to num_points based on voltage rangecutoff_voltage after successful analysiscutoff_voltage value used by subsequent steps in the Health Check routineRoutineError if step_size ≤ 0
Global accumulation sweep with all control gates swept simultaneously. The hyperbolic tangent fit extracts the global turn-on voltage (cutoff_voltage) from the depletion to accumulation transition.
Purpose: Characterize individual reservoir gates to determine their cut-off voltages.
This routine determines the turn-on voltage for each reservoir gate individually by sweeping each reservoir while holding others in accumulation. This isolates each reservoir’s behavior.
Parameters:
measure_electrode (str): Electrode to measure current fromstep_size (float): Voltage increment (V) between sweep points. Typical: 0.01 Vbias_gate (str): Name of gate to apply bias voltage to during measurementbias_voltage (float): Bias voltage (V) to apply to bias_gatecharge_carrier_type (str): The mobile charge particle type. Must be “electron” or “hole”.session (LoggerSession, optional): Session for logging sweep dataReturns:
reservoir_characterization (dict): Maps each reservoir name to its turn-on voltage cutoff_voltage in VoltsHow It Works:
global_turn_on_voltage from prior routinescutoff_voltageUsage Notes:
ValueError if curve fit fails
Purpose: Characterize individual finger gates (plungers and barriers) to determine their cut-off voltages.
This routine determines the cut-off voltage for each finger gate (plungers and barriers) individually by sweeping each gate while holding others in accumulation.
Parameters:
measure_electrode (str): Electrode to measure current fromstep_size (float): Voltage increment (V) between sweep points. Typical: 0.01 Vbias_gate (str): Name of gate to apply bias voltage to during measurementbias_voltage (float): Bias voltage (V) to apply to bias_gatecharge_carrier_type (str): The mobile charge particle type. Must be “electron” or “hole”.session (LoggerSession, optional): Session for logging sweep dataReturns:
finger_gate_characterization (dict): Maps each finger gate name to its cut-off voltage in VoltsHow It Works:
global_turn_on_voltage from prior routinescutoff_voltageUsage Notes:
ValueError if curve fit fails
All gate characterizations in the Health Check routine uses a pinch-off curve fitting approach to extract turn-on voltages. The fitting uses a smooth hyperbolic tangent model:
Where:
a: Amplitude parameterb: Slope parameterc: Offset parameterThe analysis extracts three characteristic voltages from derivative extrema:
The Health Check routine returns the pinch-off analysis characteristics [2].
The Health Check routine requires proper gate type annotations in your device config:
Key parameters to tune for your device:
Leakage Test:
Sweep Step Size:
Trade-offs:
Stanza supports nested routines for organizing complex workflows:
Execute the entire tree with:
Or run individual routines:
Stanza’s Health Check routine follows a similar workflow to the BATIS framework [1], with several key improvements:
1. Configuration-First Design
2. Modular Architecture
3. Extensible Framework
4. Automatic Data Logging
5. Result Chaining
6. Type Safety
Example: Stanza
You can write custom routines that use Health Check results:
Add to your config:
The Health Check routine raises RoutineError for configuration issues and ValueError for fit failures:
Common failure modes:
All components of the Health Check routine support optional session logging:
Each routine session contains:
The noise floor measurement provides the current threshold for leakage testing:
Running gate characterization on a leaky device can damage gates. Always verify leakage test passes before proceeding:
Balance resolution vs measurement time:
Check covariance matrices for poor fits:
Always version control your device YAML alongside data:
Symptom: ValueError: Curve fit covariance matrix indicates poor fit
Causes:
Solutions:
Symptom: Leakage test failed: Found N leaky connections
Causes:
Solutions:
leakage_threshold_resistance if device has known crosstalkleakage_threshold_count > 0 to allow some leakageSymptom: KeyError: 'global_turn_on_voltage' or similar
Causes:
Solutions:
runner.run_all() instead of individual run() calls[1] Kovach, T. et al. BATIS: Bootstrapping, Autonomous Testing, and Initialization System for Si/SiGe Multi-quantum Dot Devices. arXiv:2412.07676 (2024).
[2] Darulová, J. et al. Autonomous tuning and charge state detection of gate defined quantum dots. Physical Review Applied 13, 054005 (2020).