Usage of the backend

Configuring the backend is done by specifying a python dictionary (or loading it from a JSON file) that describes your experimental setup. An example of such a config:

{
    "backend": "quantify_scheduler.backends.qblox_backend.hardware_compile",
    "cluster0": {
        "cluster0_module1": {
            "complex_output_0": {
                "lo_name": "lo0",
                "portclock_configs": [
                    {
                        "clock": "q4.01",
                        "interm_freq": 200000000.0,
                        "mixer_amp_ratio": 0.9999,
                        "mixer_phase_error_deg": -4.2,
                        "port": "q4:mw"
                    }
                ]
            },
            "instrument_type": "QCM"
        },
        "cluster0_module2": {
            "complex_output_0": {
                "portclock_configs": [
                    {
                        "clock": "q5.01",
                        "interm_freq": 50000000.0,
                        "port": "q5:mw"
                    }
                ]
            },
            "instrument_type": "QCM_RF"
        },
        "cluster0_module3": {
            "complex_output_0": {
                "dc_mixer_offset_I": -0.054,
                "dc_mixer_offset_Q": -0.034,
                "lo_name": "lo1",
                "portclock_configs": [
                    {
                        "clock": "q4.ro",
                        "interm_freq": null,
                        "mixer_amp_ratio": 0.9997,
                        "mixer_phase_error_deg": -4.0,
                        "port": "q4:res"
                    }
                ]
            },
            "instrument_type": "QRM",
            "ref": "external"
        },
        "instrument_type": "Cluster",
        "ref": "internal"
    },
    "distortion_corrections": {
        "q0:fl-cl0.baseband": {
            "clipping_values": [
                -2.5,
                2.5
            ],
            "filter_func": "scipy.signal.lfilter",
            "input_var_name": "x",
            "kwargs": {
                "a": [
                    1
                ],
                "b": [
                    0,
                    0.25,
                    0.5
                ]
            }
        }
    },
    "latency_corrections": {
        "q4:mw-q4.01": 8e-09,
        "q5:mw-q5.01": 4e-09
    },
    "lo0": {
        "frequency": null,
        "instrument_type": "LocalOscillator",
        "power": 1
    },
    "lo1": {
        "frequency": 7200000000.0,
        "instrument_type": "LocalOscillator",
        "power": 1
    },
    "qcm0": {
        "complex_output_0": {
            "dc_mixer_offset_I": 0.1234,
            "dc_mixer_offset_Q": -1.337,
            "lo_name": "lo0",
            "portclock_configs": [
                {
                    "clock": "q0.01",
                    "interm_freq": 50000000.0,
                    "mixer_amp_ratio": 0.9998,
                    "mixer_phase_error_deg": -4.1,
                    "port": "q0:mw"
                }
            ]
        },
        "complex_output_1": {
            "lo_name": "lo1",
            "portclock_configs": [
                {
                    "clock": "q1.01",
                    "interm_freq": null,
                    "port": "q1:mw"
                }
            ]
        },
        "instrument_type": "Pulsar_QCM",
        "ref": "internal"
    },
    "qcm_rf0": {
        "complex_output_0": {
            "dc_mixer_offset_I": -0.045,
            "dc_mixer_offset_Q": -0.035,
            "portclock_configs": [
                {
                    "clock": "q2.01",
                    "interm_freq": 50000000.0,
                    "mixer_amp_ratio": 0.9996,
                    "mixer_phase_error_deg": -3.9,
                    "port": "q2:mw"
                }
            ]
        },
        "complex_output_1": {
            "lo_freq": 5000000000.0,
            "portclock_configs": [
                {
                    "clock": "q3.01",
                    "interm_freq": null,
                    "port": "q3:mw"
                }
            ]
        },
        "instrument_type": "Pulsar_QCM_RF",
        "ref": "internal"
    },
    "qrm0": {
        "complex_output_0": {
            "dc_mixer_offset_I": -0.054,
            "dc_mixer_offset_Q": -0.034,
            "lo_name": "lo1",
            "portclock_configs": [
                {
                    "clock": "q0.ro",
                    "interm_freq": null,
                    "mixer_amp_ratio": 0.9997,
                    "mixer_phase_error_deg": -4.0,
                    "port": "q0:res"
                },
                {
                    "clock": "q0.multiplex",
                    "interm_freq": null,
                    "mixer_amp_ratio": 0.9997,
                    "mixer_phase_error_deg": -4.0,
                    "port": "q0:res"
                }
            ]
        },
        "instrument_type": "Pulsar_QRM",
        "ref": "external"
    },
    "qrm1": {
        "complex_output_0": {
            "portclock_configs": [
                {
                    "clock": "q1.ro",
                    "port": "q1:res"
                }
            ]
        },
        "instrument_type": "Pulsar_QRM",
        "ref": "external"
    },
    "qrm_rf0": {
        "complex_output_0": {
            "dc_mixer_offset_I": -0.046,
            "dc_mixer_offset_Q": -0.036,
            "lo_freq": 7200000000.0,
            "portclock_configs": [
                {
                    "clock": "q2.ro",
                    "interm_freq": null,
                    "mixer_amp_ratio": 0.9999,
                    "mixer_phase_error_deg": -3.8,
                    "port": "q2:res"
                }
            ]
        },
        "instrument_type": "Pulsar_QRM_RF",
        "ref": "external"
    },
    "qrm_rf1": {
        "complex_output_0": {
            "portclock_configs": [
                {
                    "clock": "q3.ro",
                    "interm_freq": 100000000.0,
                    "port": "q3:res"
                }
            ]
        },
        "instrument_type": "Pulsar_QRM_RF",
        "ref": "external"
    }
}

Here the entry "backend": "quantify_scheduler.backends.qblox_backend.hardware_compile" specifies to the scheduler that we are using the Qblox backend (specifically the hardware_compile() function).

Apart from the "backend", each entry in the dictionary corresponds to a device connected to the setup. In the other sections we will look at the specific instrument configurations in more detail.