Replies: 7 comments 28 replies
-
Thank you for the idea! 🙌 I agree that we should split the In the long run I'd love to show all the runcard information in the website, such that the HW users can forget about using these long YAML files. |
Beta Was this translation helpful? Give feedback.
-
Regarding the |
Beta Was this translation helpful? Give feedback.
-
FYI this is related to #248 |
Beta Was this translation helpful? Give feedback.
-
I agree 100% with this idea. I just want to give a different perspective. I wouldn't conceptualise it as a chip runcard, but rather as a calibration file. Any parameter that can be calibrated could go on this file, every gate parameter, crosstalk information, line distortions etc... (Note that this is not necessarily specific to the chip.) We can then have methods to create/update these calibration files. For example the position of the sweet spots (in voltage) can change between cooldowns, a method to automatically measure it and update it would be great. If we swap a filter on a line, just recalibrate the distortion and update the calibration file, etc... Also, It is imperative that qililab works (at least for spectroscopy) without a calibration file. It doesn't make sense to require calibration before calibrating. |
Beta Was this translation helpful? Give feedback.
-
@fedonman, @AlbertMitjans how does qililab use (or plan to use) the chip schema information? It is not clear to me how it is useful. |
Beta Was this translation helpful? Give feedback.
-
I wrote down what I think the calibration file could look like. This is just a schetch and for sure there are practicalities I'm not accounting for qubits:
0:
frequency: 4.92e+09
offset: -0.78
measurement:
frequency: 7.734e+09
amplitude: 0.12
duration: 2000
weighed_acq_enabled: false
weights_i: [1., 1., 1., 1., 1.]
weights_q: [1., 1., 1., 1., 1.]
threshold: -0.0013194
# All other parameters I cant remember
gates:
- name: Drag
amplitude: 0.076
duration: 20
shape:
name: drag
num_sigmas: 4
drag_coefficient: 0.1
# similar structure for other qubits
two_qubit_gates:
(0,2):
- name: CZ
amplitude: 0.34
duration: 52
shape:
name: rectangular
park:
qubit: 1
amplitude: 0.01
safety_time: 16
bus_calibration:
- bus: flux_q0
time_of_flight: 0.04
distortions:
- name: lfilter
a: [1.0526315789473684, 0, 0, 0, 0, 0, 0, 0, 0, -0.05263157894736836]
b: [1.]
norm_factor: 1.
- bus: drive_q0
time_of_flight: 0.04
mixer:
gain_imbalance: [0.1]
pahse_imbalance: [0.02]
offset_i: 0.01
offset_q: -0.02
- bus: readout
mixer:
gain_imbalance: [0.1, 0.02, 0.04, 0.05] # this could depend on IF
pahse_imbalance: [0.1, 0.02, 0.04, 0.05]
offset_i: 0.01
offset_q: 0.02
crosstalk:
buses: [flux_q0,flux_q1,flux_q2]
matrix: [[1, 0.1, 0.05],[-0.1,1.0,0.01],[0.1, 0.1, 1.]] |
Beta Was this translation helpful? Give feedback.
-
In my head buses are meant to contain the logic of how multiple instruments connect together to make a signal. For example, microwave pulses require an awg and an LO while flux lines (sometimes) need an awg and a DC current/voltage source. With this in mind, here is an example of how I think buses should be defined in the run card: buses:
- category: readout_bus
qubits: [0,1,2,4]
alias: readout
awg:
name: QRM1
outputs: [0,1]
digitizer:
name: QRM1
inputs: [2,3]
LO:
name: rs_1
frequency: 7.904e+09
attenuator:
name: attenuator
attenuation: 37
- category: drive_bus
qubit: 0
alias: drive_q0
awg:
name: QCM1
output: [0,1]
LO:
name: rs_2
frequency: 7.904e+09
- category: flux_bus
alias: flux_q0
qubit: 0
awg:
name: QCM2
output: 0
source:
name: s4g
output: 0 |
Beta Was this translation helpful? Give feedback.
-
This is a proposal for the structure of the runcard. Currently, we use one runcard file for describing our platform. This has some disadvantages:
My thought is to split the runcard to (at least) three different files:
chips/soprano.yml
. All qubits/resonators/ports indexes should be exactly as described in chip's diagram provided by the manufacturer.delay_between_pulses
, gates etc.Each file should correspond to a class in Qililab. Currently, we have implementations for the
chip.yml
(Chip
class), and thesettings.yml
(PlatformSettings
class) and we should create aLab
class.The
Lab
class should contain useful methods and properties likeget_instruments_of_bus(index: int)
etc, but it shouldn't concern itself about theChip
: It doesn't mater if you have a chip of N qubits but you have a lab setup connected to only one of it. (now this throws an error as mentioned above)Finally, the
Platform
class, now constructed with something likeplatform = Platform(chip=chip, lab=lab, settings=settings)
is responsible to figure out the connectivity. For example, it would provide methods likeis_port_connected(index:int)
orget_control_bus_for_qubit(qubit_index: int)
etc.Beta Was this translation helpful? Give feedback.
All reactions