This is the system designed to perform various experiments with superconducting quantum circuits. It was developed in response to the increasing number and diversity of tasks and provides a common framework for all of them.
It is fully open-source and is based on pyvisa, matplotlib, scipy, ipython (jupyter) and some other open-source packages (i.e. resonator tools by S. Probst)
Features:
- Percievable and scalable object-oriented code (with encapsulation, polymorphism and inheritance)
- Distinct self-sufficient classes for each of the primitive experiments and their results with common interface
- Eye-pleasing visualization using matplotlib
- Real-time plotting and data collection in separate threads
- Image fitting modules to extract parameters of flux-tunable qubits from single-tone and two-tone heatmap spectra
- Real-time robust simultaneous real-imag curve fitting in time-resolved experiments
- Human-friendly storage and loading of raw data and measurement result objects (with pickle, high-res .png and .pdf plots)
- No GUI
The key goal of this project is to develop measurement protocols and fully automate processes to reduce overall human participation in experiments
Here some of the dispersive measurement results are presented
STS = SingleToneSpectroscopy(measurement_name, sample_name, vna = ['vna1'], src=[current_src])
vna_parameters = {"bandwidth":1000, "freq_limits":(8e9, 9e9), "nop":101, "power":-15, "averages":1}
STS.set_fixed_parameters(vna = [vna_parameters])
currents = linspace(-6e-3, 8e-3, 101)
STS.set_swept_parameters({'Current': (STS._src.set_current, currents)})
sts_result = STS.launch() # live plotting
sts_result.visualize(); # static plotting
sts_result.save()
Various anticrossings in a multimode sample
TTS = FluxTwoToneSpectroscopy("%s-two-tone"%qubit_name, sample_name, vna ="vna4",
mw_src="psg2", current_src="yok6")
vna_parameters = {"bandwidth":100, "freq_limits":res_limits, "nop":10, "power":-10, "averages":1}
mw_src_parameters = {"power":0}
mw_src_frequencies = linspace(4.5e9, 5.8e9, 101)
currents = linspace(-0.5e-5, 1.5e-5, 101) # comment out to use fluxes from STS
TTS.set_fixed_parameters(vna = [vna_parameters], mw_src = [mw_src_parameters], adaptive=True)
TTS.set_swept_parameters(mw_src_frequencies, current_values = currents)
tts_result = TTS.launch() # live plotting
tts_result.visualize();
tts_result.save()
Two coupled transmons
awg = Tektronix_AWG5014("TCPIP::192.168.137.7::INSTR")
ro_awg = IQAWG(AWGChannel(awg, 3), AWGChannel(awg, 4))
q_awg = IQAWG(AWGChannel(awg, 1), AWGChannel(awg, 2))
DR = DispersiveRamsey("%s-ramsey"%qubit_name, sample_name, vna=["vna4"],
ro_awg=[ro_awg], q_awg=[q_awg], q_lo=['psg2'])
vna_parameters = {"_res_find_nop":401, "bandwidth":10, "freq_limits":res_limits,
"nop":10, "averages":1}
ramsey_delays = linspace(0, 5000, 301)
exc_frequency = q_freq - 5e6
pulse_sequence_parameters = {"awg_trigger_reaction_delay":0, "readout_duration":5000,
"repetition_period":15000, "half_pi_pulse_duration":pi_pulse_duration/2}
ro_awg_params = {"calibration":ro_cal}
q_awg_params = {"calibration":q_cal}
DR.set_fixed_parameters([vna_parameters], [ro_awg_params], [q_awg_params],
exc_frequency, pulse_sequence_parameters)
DR.set_swept_parameters(ramsey_delays)
dr_result = DR.launch() # live plotting and fitting
dr_result.visualize();
dr_result.save()
Relaxation and dephasing
Quantum state tomography (experiment and LSQ fit) for the preparation sequence +Y/4, +X/3