{
"cells": [
{
"cell_type": "markdown",
"id": "608100a9",
"metadata": {},
"source": [
"Basic sequencing\n",
"================\n",
"\n",
"In this tutorial we will demonstrate basic sequencer based operations (see [Sequencer Operation](https://docs.qblox.com/en/main/cluster/q1_sequence_processor.html#operation)) for programming a qblox instrument.\n",
"This includes creating a sequence consisting of waveforms and a simple Q1ASM program,\n",
"and executing this sequence synchronously on multiple sequencers.\n",
"\n",
"The general process for setting up and executing a program on a Q1 sequencer is as follows:\n",
"\n",
"1. Connect to instrument\n",
"2. Prepare a sequence (JSON formatted file) which consists of\n",
" - Waveforms for playback\n",
" - Weights for weighted integration\n",
" - Acquisitions for capture\n",
" - Q1ASM program to be executed by the sequencer\n",
"3. This sequence is then loaded onto a sequencer on the connected instrument using the method `instrument_variable.sequencerX.sequence(\"SequenceFile.json\")`\n",
"4. The sequencer is then setup over its API as necessary\n",
"5. Sequencer is then armed and started to commence the experiment\n",
"6. Stop the sequencer and close down all instruments\n",
"\n",
"This tutorial will give a basic introduction on how to work with the waveforms and Q1ASM segments of a sequence.\n",
"\n",
"In the Tutorial the sequence is going to consecutively play two waveforms, a gaussian and block with a duration of 22ns each, with an increasing wait period\n",
"in between them. We will increase the wait period by 20ns repeated 100 times, after which the sequence is stopped. The sequence will also trigger marker\n",
"output 1 at every interval, so that the sequence can be easily monitored on an oscilloscope."
]
},
{
"cell_type": "markdown",
"id": "f0dfad1d",
"metadata": {
"lines_to_next_cell": 0,
"tags": []
},
"source": [
"Setup\n",
"-----\n",
"\n",
"First, we are going to import the required packages."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "b486151f",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:44.316950Z",
"iopub.status.busy": "2025-05-07T16:52:44.316701Z",
"iopub.status.idle": "2025-05-07T16:52:45.160648Z",
"shell.execute_reply": "2025-05-07T16:52:45.159903Z"
},
"tags": [
"imports"
]
},
"outputs": [],
"source": [
"from __future__ import annotations\n",
"\n",
"import json\n",
"from typing import TYPE_CHECKING, Callable\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import scipy.signal\n",
"from qcodes.instrument import find_or_create_instrument\n",
"\n",
"from qblox_instruments import Cluster, ClusterType\n",
"\n",
"if TYPE_CHECKING:\n",
" from qblox_instruments.qcodes_drivers.module import Module"
]
},
{
"cell_type": "markdown",
"id": "4a71fb16",
"metadata": {},
"source": [
"### Scan For Clusters\n",
"\n",
"We scan for the available devices connected via ethernet using the Plug & Play functionality of the Qblox Instruments package (see [Plug & Play](https://docs.qblox.com/en/main/api_reference/tools.html#api-pnp) for more info)."
]
},
{
"cell_type": "markdown",
"id": "dc2f889d",
"metadata": {},
"source": [
"`!qblox-pnp list`"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "94b1d039",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:45.163088Z",
"iopub.status.busy": "2025-05-07T16:52:45.162920Z",
"iopub.status.idle": "2025-05-07T16:52:45.165577Z",
"shell.execute_reply": "2025-05-07T16:52:45.165116Z"
}
},
"outputs": [],
"source": [
"cluster_ip = \"10.10.200.42\"\n",
"cluster_name = \"cluster0\""
]
},
{
"cell_type": "markdown",
"id": "780ec47f",
"metadata": {},
"source": [
"### Connect to Cluster\n",
"\n",
"We now make a connection with the Cluster."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "a74c5223",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:45.167183Z",
"iopub.status.busy": "2025-05-07T16:52:45.167036Z",
"iopub.status.idle": "2025-05-07T16:52:45.998560Z",
"shell.execute_reply": "2025-05-07T16:52:45.997484Z"
},
"lines_to_next_cell": 2
},
"outputs": [],
"source": [
"cluster = find_or_create_instrument(\n",
" Cluster,\n",
" recreate=True,\n",
" name=cluster_name,\n",
" identifier=cluster_ip,\n",
" dummy_cfg=(\n",
" {\n",
" 2: ClusterType.CLUSTER_QCM,\n",
" 4: ClusterType.CLUSTER_QRM,\n",
" 6: ClusterType.CLUSTER_QCM_RF,\n",
" 8: ClusterType.CLUSTER_QRM_RF,\n",
" 10: ClusterType.CLUSTER_QTM,\n",
" }\n",
" if cluster_ip is None\n",
" else None\n",
" ),\n",
")"
]
},
{
"cell_type": "markdown",
"id": "a9550713",
"metadata": {
"lines_to_next_cell": 2
},
"source": [
"#### Get connected modules"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "120de1e8",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:46.000857Z",
"iopub.status.busy": "2025-05-07T16:52:46.000681Z",
"iopub.status.idle": "2025-05-07T16:52:46.005148Z",
"shell.execute_reply": "2025-05-07T16:52:46.004399Z"
}
},
"outputs": [],
"source": [
"def get_connected_modules(cluster: Cluster, filter_fn: Callable | None = None) -> dict[int, Module]:\n",
" def checked_filter_fn(mod: ClusterType) -> bool:\n",
" if filter_fn is not None:\n",
" return filter_fn(mod)\n",
" return True\n",
"\n",
" return {\n",
" mod.slot_idx: mod for mod in cluster.modules if mod.present() and checked_filter_fn(mod)\n",
" }"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "7d64bae5",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:46.006856Z",
"iopub.status.busy": "2025-05-07T16:52:46.006702Z",
"iopub.status.idle": "2025-05-07T16:52:46.024631Z",
"shell.execute_reply": "2025-05-07T16:52:46.023863Z"
},
"lines_to_next_cell": 0,
"tags": [
"QRM-RF"
]
},
"outputs": [],
"source": [
"# QRM-RF modules\n",
"modules = get_connected_modules(cluster, lambda mod: mod.is_qrm_type and mod.is_rf_type)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "3370e7de",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:46.026301Z",
"iopub.status.busy": "2025-05-07T16:52:46.026153Z",
"iopub.status.idle": "2025-05-07T16:52:46.029337Z",
"shell.execute_reply": "2025-05-07T16:52:46.028584Z"
}
},
"outputs": [],
"source": [
"# This uses the module of the correct type with the lowest slot index\n",
"module = list(modules.values())[0]"
]
},
{
"cell_type": "markdown",
"id": "9c985f42",
"metadata": {},
"source": [
"### Reset the Cluster\n",
"\n",
"We reset the Cluster to enter a well-defined state. Note that resetting will clear all stored parameters, so resetting between experiments is usually not desirable."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "cc81152b",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:46.031483Z",
"iopub.status.busy": "2025-05-07T16:52:46.031021Z",
"iopub.status.idle": "2025-05-07T16:52:48.587949Z",
"shell.execute_reply": "2025-05-07T16:52:48.586521Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Status: OKAY, Flags: NONE, Slot flags: NONE\n"
]
}
],
"source": [
"cluster.reset()\n",
"print(cluster.get_system_status())"
]
},
{
"cell_type": "markdown",
"id": "14a0c083",
"metadata": {},
"source": [
"Generate waveforms \n",
"------------------\n",
"\n",
"Next, we need to create the gaussian and block waveforms for the sequence. The waveforms constructed here will be referenced by the Q1ASM program for playback. See section [Sequencer](https://docs.qblox.com/en/main/cluster/q1_sequence_processor.html#sequences) for details on how waveform dictionary is structured."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "fd9b81c5",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:48.592204Z",
"iopub.status.busy": "2025-05-07T16:52:48.591822Z",
"iopub.status.idle": "2025-05-07T16:52:48.599473Z",
"shell.execute_reply": "2025-05-07T16:52:48.598347Z"
}
},
"outputs": [],
"source": [
"# Waveform parameters\n",
"waveform_length = 22 # nanoseconds\n",
"\n",
"# Waveform dictionary (data will hold the samples and index will be used to select the waveforms in the instrument).\n",
"waveforms = {\n",
" \"gaussian\": {\n",
" \"data\": scipy.signal.windows.gaussian(waveform_length, std=0.12 * waveform_length).tolist(),\n",
" \"index\": 0,\n",
" },\n",
" \"block\": {\"data\": [1.0 for i in range(0, waveform_length)], \"index\": 1},\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "0668f94b",
"metadata": {},
"source": [
"Let's plot the waveforms to see what we have created."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "1c3f12c5",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:48.603422Z",
"iopub.status.busy": "2025-05-07T16:52:48.603021Z",
"iopub.status.idle": "2025-05-07T16:52:48.901172Z",
"shell.execute_reply": "2025-05-07T16:52:48.900594Z"
}
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"time = np.arange(0, max(len(d[\"data\"]) for d in waveforms.values()), 1)\n",
"fig, ax = plt.subplots(1, 1)\n",
"\n",
"for wf, d in waveforms.items():\n",
" ax.plot(time[: len(d[\"data\"])], d[\"data\"], label=wf)\n",
"\n",
"ax.legend()\n",
"ax.grid(alpha=1 / 10)\n",
"ax.set_ylabel(\"Waveform primitive amplitude\")\n",
"ax.set_xlabel(\"Time (ns)\")\n",
"\n",
"plt.draw()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "c70aa4ae",
"metadata": {},
"source": [
"Create Q1ASM program\n",
"--------------------\n",
"\n",
"Now that we have the waveforms for the sequence, we need a Q1ASM program that sequences the waveforms as previously described. The Q1ASM program can address the memory in the sequences waveforms and acquisitions to construct a program for playback. View [Q1 Programming](https://docs.qblox.com/en/main/cluster/q1_sequence_processor.html#instructions) for a break down of available instructions in the Q1ASM language."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "d67e3921",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:48.902965Z",
"iopub.status.busy": "2025-05-07T16:52:48.902806Z",
"iopub.status.idle": "2025-05-07T16:52:48.905878Z",
"shell.execute_reply": "2025-05-07T16:52:48.905409Z"
},
"tags": [
"QRM-RF",
"QCM-RF"
]
},
"outputs": [],
"source": [
"seq_prog = \"\"\"\n",
" move 100,R0 #Loop iterator.\n",
" move 20,R1 #Initial wait period in ns.\n",
" wait_sync 4 #Wait for sequencers to synchronize and then wait another 4 ns.\n",
"\n",
"loop: set_mrk 15 #Set marker output and enable output 1 and 2.\n",
" play 0,1,4 #Play a gaussian and a block on output path 0 and 1 respectively and wait 4 ns.\n",
" set_mrk 3 #Reset marker outputs.\n",
" upd_param 18 #Update parameters and wait the remaining 18 ns of the waveforms.\n",
"\n",
" wait R1 #Wait period.\n",
"\n",
" play 1,0,22 #Play a block and a gaussian on output path 0 and 1 respectively and wait 22 ns.\n",
" wait 1000 #Wait a 1us in between iterations.\n",
" add R1,20,R1 #Increase wait period by 20 ns.\n",
" loop R0,@loop #Subtract one from loop iterator.\n",
"\n",
" stop #Stop the sequence after the last iteration.\n",
"\"\"\""
]
},
{
"cell_type": "markdown",
"id": "2dc24a7a",
"metadata": {},
"source": [
"Prepare and Upload sequence\n",
"---------------------------\n",
"\n",
"Now that we have the waveforms and Q1ASM program, we can combine them in a sequence stored in a JSON file."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "9727f5ef",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:48.907435Z",
"iopub.status.busy": "2025-05-07T16:52:48.907144Z",
"iopub.status.idle": "2025-05-07T16:52:48.910514Z",
"shell.execute_reply": "2025-05-07T16:52:48.910023Z"
}
},
"outputs": [],
"source": [
"# Add sequence to single dictionary and write to JSON file.\n",
"sequence = {\n",
" \"waveforms\": waveforms,\n",
" \"weights\": {},\n",
" \"acquisitions\": {},\n",
" \"program\": seq_prog,\n",
"}\n",
"with open(\"sequence.json\", \"w\", encoding=\"utf-8\") as file:\n",
" json.dump(sequence, file, indent=4)\n",
" file.close()"
]
},
{
"cell_type": "markdown",
"id": "ede883a7",
"metadata": {},
"source": [
"Let's write the JSON file to the instruments. We will use sequencer 0 and 1, which will drive outputs $\\text{O}^{[1-2]}$ and $\\text{O}^{[3-4]}$ respectively."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "df20a3d1",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:48.911934Z",
"iopub.status.busy": "2025-05-07T16:52:48.911657Z",
"iopub.status.idle": "2025-05-07T16:52:48.966444Z",
"shell.execute_reply": "2025-05-07T16:52:48.965946Z"
}
},
"outputs": [],
"source": [
"# Upload sequence.\n",
"module.sequencer0.sequence(\"sequence.json\")\n",
"module.sequencer1.sequence(\"sequence.json\")"
]
},
{
"cell_type": "markdown",
"id": "2db28f0d",
"metadata": {},
"source": [
"Play sequence\n",
"-------------\n",
"\n",
"The sequence has been uploaded to the instrument. Now we need to configure the sequencers in the instrument to use the `wait_sync` instruction\n",
"at the start of the Q1ASM program to synchronize."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "c3498d3a",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:48.967976Z",
"iopub.status.busy": "2025-05-07T16:52:48.967825Z",
"iopub.status.idle": "2025-05-07T16:52:49.002544Z",
"shell.execute_reply": "2025-05-07T16:52:49.002075Z"
}
},
"outputs": [],
"source": [
"# Configure the sequencers to synchronize.\n",
"module.sequencer0.sync_en(True)\n",
"module.sequencer1.sync_en(True)\n",
"\n",
"# Map sequencers to specific outputs (but first disable all sequencer connections).\n",
"module.disconnect_outputs()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "6eda30fa",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:49.003969Z",
"iopub.status.busy": "2025-05-07T16:52:49.003821Z",
"iopub.status.idle": "2025-05-07T16:52:49.054559Z",
"shell.execute_reply": "2025-05-07T16:52:49.054075Z"
},
"lines_to_next_cell": 0,
"tags": [
"QRM-RF"
]
},
"outputs": [],
"source": [
"module.disconnect_inputs()\n",
"module.sequencer0.connect_sequencer(\"io0\")\n",
"module.out0_in0_lo_freq(3e9)\n",
"module.sequencer0.nco_freq(50e6)"
]
},
{
"cell_type": "markdown",
"id": "8773e769",
"metadata": {},
"source": [
"Now let's start the sequence. If you want to observe the sequence, this is the time to connect an oscilloscope to marker output 1 and one or more\n",
"of the four outputs. Configure the oscilloscope to trigger on the marker output 1."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "adcbf83f",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:49.056150Z",
"iopub.status.busy": "2025-05-07T16:52:49.055999Z",
"iopub.status.idle": "2025-05-07T16:52:49.071855Z",
"shell.execute_reply": "2025-05-07T16:52:49.071371Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Status: OKAY, State: STOPPED, Info Flags: NONE, Warning Flags: NONE, Error Flags: NONE, Log: []\n",
"Status: OKAY, State: STOPPED, Info Flags: NONE, Warning Flags: NONE, Error Flags: NONE, Log: []\n"
]
}
],
"source": [
"# Arm and start both sequencers.\n",
"module.arm_sequencer(0)\n",
"module.arm_sequencer(1)\n",
"module.start_sequencer()\n",
"\n",
"# Print status of both sequencers.\n",
"print(module.get_sequencer_status(0))\n",
"print(module.get_sequencer_status(1))"
]
},
{
"cell_type": "markdown",
"id": "61565f47",
"metadata": {},
"source": [
"Stop\n",
"----\n",
"\n",
"Finally, let's stop the sequencers if they haven't already and close the instrument connection. One can also display a detailed snapshot containing the instrument parameters before\n",
"closing the connection by uncommenting the corresponding lines."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "d5fa1417",
"metadata": {
"execution": {
"iopub.execute_input": "2025-05-07T16:52:49.073244Z",
"iopub.status.busy": "2025-05-07T16:52:49.073096Z",
"iopub.status.idle": "2025-05-07T16:52:54.928187Z",
"shell.execute_reply": "2025-05-07T16:52:54.926709Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Status: OKAY, State: STOPPED, Info Flags: FORCED_STOP, Warning Flags: NONE, Error Flags: NONE, Log: []\n",
"Status: OKAY, State: STOPPED, Info Flags: FORCED_STOP, Warning Flags: NONE, Error Flags: NONE, Log: []\n",
"\n",
"Snapshot:\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cluster0_module8:\n",
"\tparameter value\n",
"--------------------------------------------------------------------------------\n",
"connected :\tTrue \n",
"in0_att :\t0 (dB)\n",
"in0_offset_path0 :\t0 (V)\n",
"in0_offset_path1 :\t0 (V)\n",
"marker0_exp0_config :\tbypassed \n",
"marker0_exp1_config :\tbypassed \n",
"marker0_exp2_config :\tbypassed \n",
"marker0_exp3_config :\tbypassed \n",
"marker0_fir_config :\tbypassed \n",
"marker0_inv_en :\tFalse \n",
"marker1_exp0_config :\tbypassed \n",
"marker1_exp1_config :\tbypassed \n",
"marker1_exp2_config :\tbypassed \n",
"marker1_exp3_config :\tbypassed \n",
"marker1_fir_config :\tbypassed \n",
"marker1_inv_en :\tFalse \n",
"marker2_exp0_config :\tbypassed \n",
"marker2_exp1_config :\tbypassed \n",
"marker2_exp2_config :\tbypassed \n",
"marker2_exp3_config :\tbypassed \n",
"marker2_fir_config :\tbypassed \n",
"marker3_exp0_config :\tbypassed \n",
"marker3_exp1_config :\tbypassed \n",
"marker3_exp2_config :\tbypassed \n",
"marker3_exp3_config :\tbypassed \n",
"marker3_fir_config :\tbypassed \n",
"out0_att :\t0 (dB)\n",
"out0_exp0_config :\tbypassed \n",
"out0_exp1_config :\tbypassed \n",
"out0_exp2_config :\tbypassed \n",
"out0_exp3_config :\tbypassed \n",
"out0_fir_config :\tbypassed \n",
"out0_in0_lo_en :\tTrue \n",
"out0_in0_lo_freq :\t3000000000 (Hz)\n",
"out0_in0_lo_freq_cal_type_default :\toff (Hz)\n",
"out0_latency :\t0 (s)\n",
"out0_offset_path0 :\t7.625 (mV)\n",
"out0_offset_path1 :\t7.625 (mV)\n",
"present :\tTrue \n",
"scope_acq_avg_mode_en_path0 :\tFalse \n",
"scope_acq_avg_mode_en_path1 :\tFalse \n",
"scope_acq_sequencer_select :\t0 \n",
"scope_acq_trigger_level_path0 :\t0 \n",
"scope_acq_trigger_level_path1 :\t0 \n",
"scope_acq_trigger_mode_path0 :\tsequencer \n",
"scope_acq_trigger_mode_path1 :\tsequencer \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cluster0_module8_sequencer0:\n",
"\tparameter value\n",
"--------------------------------------------------------------------------------\n",
"connect_acq :\tin0 \n",
"connect_out0 :\tIQ \n",
"cont_mode_en_awg_path0 :\tFalse \n",
"cont_mode_en_awg_path1 :\tFalse \n",
"cont_mode_waveform_idx_awg_path0 :\t0 \n",
"cont_mode_waveform_idx_awg_path1 :\t0 \n",
"demod_en_acq :\tFalse \n",
"gain_awg_path0 :\t1 \n",
"gain_awg_path1 :\t1 \n",
"integration_length_acq :\t1024 \n",
"marker_ovr_en :\tFalse \n",
"marker_ovr_value :\t0 \n",
"mixer_corr_gain_ratio :\t1 \n",
"mixer_corr_phase_offset_degree :\t-0 \n",
"mod_en_awg :\tFalse \n",
"nco_freq :\t5e+07 (Hz)\n",
"nco_freq_cal_type_default :\toff (Hz)\n",
"nco_phase_offs :\t0 (Degrees)\n",
"nco_prop_delay_comp :\t0 (ns)\n",
"nco_prop_delay_comp_en :\tFalse (ns)\n",
"offset_awg_path0 :\t0 \n",
"offset_awg_path1 :\t0 \n",
"sync_en :\tTrue \n",
"thresholded_acq_marker_address :\t1 \n",
"thresholded_acq_marker_en :\tFalse \n",
"thresholded_acq_marker_invert :\tFalse \n",
"thresholded_acq_rotation :\t0 (Degrees)\n",
"thresholded_acq_threshold :\t0 \n",
"thresholded_acq_trigger_address :\t1 \n",
"thresholded_acq_trigger_en :\tFalse \n",
"thresholded_acq_trigger_invert :\tFalse \n",
"trigger10_count_threshold :\t1 \n",
"trigger10_threshold_invert :\tFalse \n",
"trigger11_count_threshold :\t1 \n",
"trigger11_threshold_invert :\tFalse \n",
"trigger12_count_threshold :\t1 \n",
"trigger12_threshold_invert :\tFalse \n",
"trigger13_count_threshold :\t1 \n",
"trigger13_threshold_invert :\tFalse \n",
"trigger14_count_threshold :\t1 \n",
"trigger14_threshold_invert :\tFalse \n",
"trigger15_count_threshold :\t1 \n",
"trigger15_threshold_invert :\tFalse \n",
"trigger1_count_threshold :\t1 \n",
"trigger1_threshold_invert :\tFalse \n",
"trigger2_count_threshold :\t1 \n",
"trigger2_threshold_invert :\tFalse \n",
"trigger3_count_threshold :\t1 \n",
"trigger3_threshold_invert :\tFalse \n",
"trigger4_count_threshold :\t1 \n",
"trigger4_threshold_invert :\tFalse \n",
"trigger5_count_threshold :\t1 \n",
"trigger5_threshold_invert :\tFalse \n",
"trigger6_count_threshold :\t1 \n",
"trigger6_threshold_invert :\tFalse \n",
"trigger7_count_threshold :\t1 \n",
"trigger7_threshold_invert :\tFalse \n",
"trigger8_count_threshold :\t1 \n",
"trigger8_threshold_invert :\tFalse \n",
"trigger9_count_threshold :\t1 \n",
"trigger9_threshold_invert :\tFalse \n",
"upsample_rate_awg_path0 :\t0 \n",
"upsample_rate_awg_path1 :\t0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cluster0_module8_sequencer1:\n",
"\tparameter value\n",
"--------------------------------------------------------------------------------\n",
"connect_acq :\toff \n",
"connect_out0 :\toff \n",
"cont_mode_en_awg_path0 :\tFalse \n",
"cont_mode_en_awg_path1 :\tFalse \n",
"cont_mode_waveform_idx_awg_path0 :\t0 \n",
"cont_mode_waveform_idx_awg_path1 :\t0 \n",
"demod_en_acq :\tFalse \n",
"gain_awg_path0 :\t1 \n",
"gain_awg_path1 :\t1 \n",
"integration_length_acq :\t1024 \n",
"marker_ovr_en :\tFalse \n",
"marker_ovr_value :\t0 \n",
"mixer_corr_gain_ratio :\t1 \n",
"mixer_corr_phase_offset_degree :\t-0 \n",
"mod_en_awg :\tFalse \n",
"nco_freq :\t0 (Hz)\n",
"nco_freq_cal_type_default :\toff (Hz)\n",
"nco_phase_offs :\t0 (Degrees)\n",
"nco_prop_delay_comp :\t0 (ns)\n",
"nco_prop_delay_comp_en :\tFalse (ns)\n",
"offset_awg_path0 :\t0 \n",
"offset_awg_path1 :\t0 \n",
"sync_en :\tTrue \n",
"thresholded_acq_marker_address :\t1 \n",
"thresholded_acq_marker_en :\tFalse \n",
"thresholded_acq_marker_invert :\tFalse \n",
"thresholded_acq_rotation :\t0 (Degrees)\n",
"thresholded_acq_threshold :\t0 \n",
"thresholded_acq_trigger_address :\t1 \n",
"thresholded_acq_trigger_en :\tFalse \n",
"thresholded_acq_trigger_invert :\tFalse \n",
"trigger10_count_threshold :\t1 \n",
"trigger10_threshold_invert :\tFalse \n",
"trigger11_count_threshold :\t1 \n",
"trigger11_threshold_invert :\tFalse \n",
"trigger12_count_threshold :\t1 \n",
"trigger12_threshold_invert :\tFalse \n",
"trigger13_count_threshold :\t1 \n",
"trigger13_threshold_invert :\tFalse \n",
"trigger14_count_threshold :\t1 \n",
"trigger14_threshold_invert :\tFalse \n",
"trigger15_count_threshold :\t1 \n",
"trigger15_threshold_invert :\tFalse \n",
"trigger1_count_threshold :\t1 \n",
"trigger1_threshold_invert :\tFalse \n",
"trigger2_count_threshold :\t1 \n",
"trigger2_threshold_invert :\tFalse \n",
"trigger3_count_threshold :\t1 \n",
"trigger3_threshold_invert :\tFalse \n",
"trigger4_count_threshold :\t1 \n",
"trigger4_threshold_invert :\tFalse \n",
"trigger5_count_threshold :\t1 \n",
"trigger5_threshold_invert :\tFalse \n",
"trigger6_count_threshold :\t1 \n",
"trigger6_threshold_invert :\tFalse \n",
"trigger7_count_threshold :\t1 \n",
"trigger7_threshold_invert :\tFalse \n",
"trigger8_count_threshold :\t1 \n",
"trigger8_threshold_invert :\tFalse \n",
"trigger9_count_threshold :\t1 \n",
"trigger9_threshold_invert :\tFalse \n",
"upsample_rate_awg_path0 :\t0 \n",
"upsample_rate_awg_path1 :\t0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cluster0_module8_sequencer2:\n",
"\tparameter value\n",
"--------------------------------------------------------------------------------\n",
"connect_acq :\toff \n",
"connect_out0 :\toff \n",
"cont_mode_en_awg_path0 :\tFalse \n",
"cont_mode_en_awg_path1 :\tFalse \n",
"cont_mode_waveform_idx_awg_path0 :\t0 \n",
"cont_mode_waveform_idx_awg_path1 :\t0 \n",
"demod_en_acq :\tFalse \n",
"gain_awg_path0 :\t1 \n",
"gain_awg_path1 :\t1 \n",
"integration_length_acq :\t1024 \n",
"marker_ovr_en :\tFalse \n",
"marker_ovr_value :\t0 \n",
"mixer_corr_gain_ratio :\t1 \n",
"mixer_corr_phase_offset_degree :\t-0 \n",
"mod_en_awg :\tFalse \n",
"nco_freq :\t0 (Hz)\n",
"nco_freq_cal_type_default :\toff (Hz)\n",
"nco_phase_offs :\t0 (Degrees)\n",
"nco_prop_delay_comp :\t0 (ns)\n",
"nco_prop_delay_comp_en :\tFalse (ns)\n",
"offset_awg_path0 :\t0 \n",
"offset_awg_path1 :\t0 \n",
"sync_en :\tFalse \n",
"thresholded_acq_marker_address :\t1 \n",
"thresholded_acq_marker_en :\tFalse \n",
"thresholded_acq_marker_invert :\tFalse \n",
"thresholded_acq_rotation :\t0 (Degrees)\n",
"thresholded_acq_threshold :\t0 \n",
"thresholded_acq_trigger_address :\t1 \n",
"thresholded_acq_trigger_en :\tFalse \n",
"thresholded_acq_trigger_invert :\tFalse \n",
"trigger10_count_threshold :\t1 \n",
"trigger10_threshold_invert :\tFalse \n",
"trigger11_count_threshold :\t1 \n",
"trigger11_threshold_invert :\tFalse \n",
"trigger12_count_threshold :\t1 \n",
"trigger12_threshold_invert :\tFalse \n",
"trigger13_count_threshold :\t1 \n",
"trigger13_threshold_invert :\tFalse \n",
"trigger14_count_threshold :\t1 \n",
"trigger14_threshold_invert :\tFalse \n",
"trigger15_count_threshold :\t1 \n",
"trigger15_threshold_invert :\tFalse \n",
"trigger1_count_threshold :\t1 \n",
"trigger1_threshold_invert :\tFalse \n",
"trigger2_count_threshold :\t1 \n",
"trigger2_threshold_invert :\tFalse \n",
"trigger3_count_threshold :\t1 \n",
"trigger3_threshold_invert :\tFalse \n",
"trigger4_count_threshold :\t1 \n",
"trigger4_threshold_invert :\tFalse \n",
"trigger5_count_threshold :\t1 \n",
"trigger5_threshold_invert :\tFalse \n",
"trigger6_count_threshold :\t1 \n",
"trigger6_threshold_invert :\tFalse \n",
"trigger7_count_threshold :\t1 \n",
"trigger7_threshold_invert :\tFalse \n",
"trigger8_count_threshold :\t1 \n",
"trigger8_threshold_invert :\tFalse \n",
"trigger9_count_threshold :\t1 \n",
"trigger9_threshold_invert :\tFalse \n",
"upsample_rate_awg_path0 :\t0 \n",
"upsample_rate_awg_path1 :\t0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cluster0_module8_sequencer3:\n",
"\tparameter value\n",
"--------------------------------------------------------------------------------\n",
"connect_acq :\toff \n",
"connect_out0 :\toff \n",
"cont_mode_en_awg_path0 :\tFalse \n",
"cont_mode_en_awg_path1 :\tFalse \n",
"cont_mode_waveform_idx_awg_path0 :\t0 \n",
"cont_mode_waveform_idx_awg_path1 :\t0 \n",
"demod_en_acq :\tFalse \n",
"gain_awg_path0 :\t1 \n",
"gain_awg_path1 :\t1 \n",
"integration_length_acq :\t1024 \n",
"marker_ovr_en :\tFalse \n",
"marker_ovr_value :\t0 \n",
"mixer_corr_gain_ratio :\t1 \n",
"mixer_corr_phase_offset_degree :\t-0 \n",
"mod_en_awg :\tFalse \n",
"nco_freq :\t0 (Hz)\n",
"nco_freq_cal_type_default :\toff (Hz)\n",
"nco_phase_offs :\t0 (Degrees)\n",
"nco_prop_delay_comp :\t0 (ns)\n",
"nco_prop_delay_comp_en :\tFalse (ns)\n",
"offset_awg_path0 :\t0 \n",
"offset_awg_path1 :\t0 \n",
"sync_en :\tFalse \n",
"thresholded_acq_marker_address :\t1 \n",
"thresholded_acq_marker_en :\tFalse \n",
"thresholded_acq_marker_invert :\tFalse \n",
"thresholded_acq_rotation :\t0 (Degrees)\n",
"thresholded_acq_threshold :\t0 \n",
"thresholded_acq_trigger_address :\t1 \n",
"thresholded_acq_trigger_en :\tFalse \n",
"thresholded_acq_trigger_invert :\tFalse \n",
"trigger10_count_threshold :\t1 \n",
"trigger10_threshold_invert :\tFalse \n",
"trigger11_count_threshold :\t1 \n",
"trigger11_threshold_invert :\tFalse \n",
"trigger12_count_threshold :\t1 \n",
"trigger12_threshold_invert :\tFalse \n",
"trigger13_count_threshold :\t1 \n",
"trigger13_threshold_invert :\tFalse \n",
"trigger14_count_threshold :\t1 \n",
"trigger14_threshold_invert :\tFalse \n",
"trigger15_count_threshold :\t1 \n",
"trigger15_threshold_invert :\tFalse \n",
"trigger1_count_threshold :\t1 \n",
"trigger1_threshold_invert :\tFalse \n",
"trigger2_count_threshold :\t1 \n",
"trigger2_threshold_invert :\tFalse \n",
"trigger3_count_threshold :\t1 \n",
"trigger3_threshold_invert :\tFalse \n",
"trigger4_count_threshold :\t1 \n",
"trigger4_threshold_invert :\tFalse \n",
"trigger5_count_threshold :\t1 \n",
"trigger5_threshold_invert :\tFalse \n",
"trigger6_count_threshold :\t1 \n",
"trigger6_threshold_invert :\tFalse \n",
"trigger7_count_threshold :\t1 \n",
"trigger7_threshold_invert :\tFalse \n",
"trigger8_count_threshold :\t1 \n",
"trigger8_threshold_invert :\tFalse \n",
"trigger9_count_threshold :\t1 \n",
"trigger9_threshold_invert :\tFalse \n",
"upsample_rate_awg_path0 :\t0 \n",
"upsample_rate_awg_path1 :\t0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cluster0_module8_sequencer4:\n",
"\tparameter value\n",
"--------------------------------------------------------------------------------\n",
"connect_acq :\toff \n",
"connect_out0 :\toff \n",
"cont_mode_en_awg_path0 :\tFalse \n",
"cont_mode_en_awg_path1 :\tFalse \n",
"cont_mode_waveform_idx_awg_path0 :\t0 \n",
"cont_mode_waveform_idx_awg_path1 :\t0 \n",
"demod_en_acq :\tFalse \n",
"gain_awg_path0 :\t1 \n",
"gain_awg_path1 :\t1 \n",
"integration_length_acq :\t1024 \n",
"marker_ovr_en :\tFalse \n",
"marker_ovr_value :\t0 \n",
"mixer_corr_gain_ratio :\t1 \n",
"mixer_corr_phase_offset_degree :\t-0 \n",
"mod_en_awg :\tFalse \n",
"nco_freq :\t0 (Hz)\n",
"nco_freq_cal_type_default :\toff (Hz)\n",
"nco_phase_offs :\t0 (Degrees)\n",
"nco_prop_delay_comp :\t0 (ns)\n",
"nco_prop_delay_comp_en :\tFalse (ns)\n",
"offset_awg_path0 :\t0 \n",
"offset_awg_path1 :\t0 \n",
"sync_en :\tFalse \n",
"thresholded_acq_marker_address :\t1 \n",
"thresholded_acq_marker_en :\tFalse \n",
"thresholded_acq_marker_invert :\tFalse \n",
"thresholded_acq_rotation :\t0 (Degrees)\n",
"thresholded_acq_threshold :\t0 \n",
"thresholded_acq_trigger_address :\t1 \n",
"thresholded_acq_trigger_en :\tFalse \n",
"thresholded_acq_trigger_invert :\tFalse \n",
"trigger10_count_threshold :\t1 \n",
"trigger10_threshold_invert :\tFalse \n",
"trigger11_count_threshold :\t1 \n",
"trigger11_threshold_invert :\tFalse \n",
"trigger12_count_threshold :\t1 \n",
"trigger12_threshold_invert :\tFalse \n",
"trigger13_count_threshold :\t1 \n",
"trigger13_threshold_invert :\tFalse \n",
"trigger14_count_threshold :\t1 \n",
"trigger14_threshold_invert :\tFalse \n",
"trigger15_count_threshold :\t1 \n",
"trigger15_threshold_invert :\tFalse \n",
"trigger1_count_threshold :\t1 \n",
"trigger1_threshold_invert :\tFalse \n",
"trigger2_count_threshold :\t1 \n",
"trigger2_threshold_invert :\tFalse \n",
"trigger3_count_threshold :\t1 \n",
"trigger3_threshold_invert :\tFalse \n",
"trigger4_count_threshold :\t1 \n",
"trigger4_threshold_invert :\tFalse \n",
"trigger5_count_threshold :\t1 \n",
"trigger5_threshold_invert :\tFalse \n",
"trigger6_count_threshold :\t1 \n",
"trigger6_threshold_invert :\tFalse \n",
"trigger7_count_threshold :\t1 \n",
"trigger7_threshold_invert :\tFalse \n",
"trigger8_count_threshold :\t1 \n",
"trigger8_threshold_invert :\tFalse \n",
"trigger9_count_threshold :\t1 \n",
"trigger9_threshold_invert :\tFalse \n",
"upsample_rate_awg_path0 :\t0 \n",
"upsample_rate_awg_path1 :\t0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cluster0_module8_sequencer5:\n",
"\tparameter value\n",
"--------------------------------------------------------------------------------\n",
"connect_acq :\toff \n",
"connect_out0 :\toff \n",
"cont_mode_en_awg_path0 :\tFalse \n",
"cont_mode_en_awg_path1 :\tFalse \n",
"cont_mode_waveform_idx_awg_path0 :\t0 \n",
"cont_mode_waveform_idx_awg_path1 :\t0 \n",
"demod_en_acq :\tFalse \n",
"gain_awg_path0 :\t1 \n",
"gain_awg_path1 :\t1 \n",
"integration_length_acq :\t1024 \n",
"marker_ovr_en :\tFalse \n",
"marker_ovr_value :\t0 \n",
"mixer_corr_gain_ratio :\t1 \n",
"mixer_corr_phase_offset_degree :\t-0 \n",
"mod_en_awg :\tFalse \n",
"nco_freq :\t0 (Hz)\n",
"nco_freq_cal_type_default :\toff (Hz)\n",
"nco_phase_offs :\t0 (Degrees)\n",
"nco_prop_delay_comp :\t0 (ns)\n",
"nco_prop_delay_comp_en :\tFalse (ns)\n",
"offset_awg_path0 :\t0 \n",
"offset_awg_path1 :\t0 \n",
"sync_en :\tFalse \n",
"thresholded_acq_marker_address :\t1 \n",
"thresholded_acq_marker_en :\tFalse \n",
"thresholded_acq_marker_invert :\tFalse \n",
"thresholded_acq_rotation :\t0 (Degrees)\n",
"thresholded_acq_threshold :\t0 \n",
"thresholded_acq_trigger_address :\t1 \n",
"thresholded_acq_trigger_en :\tFalse \n",
"thresholded_acq_trigger_invert :\tFalse \n",
"trigger10_count_threshold :\t1 \n",
"trigger10_threshold_invert :\tFalse \n",
"trigger11_count_threshold :\t1 \n",
"trigger11_threshold_invert :\tFalse \n",
"trigger12_count_threshold :\t1 \n",
"trigger12_threshold_invert :\tFalse \n",
"trigger13_count_threshold :\t1 \n",
"trigger13_threshold_invert :\tFalse \n",
"trigger14_count_threshold :\t1 \n",
"trigger14_threshold_invert :\tFalse \n",
"trigger15_count_threshold :\t1 \n",
"trigger15_threshold_invert :\tFalse \n",
"trigger1_count_threshold :\t1 \n",
"trigger1_threshold_invert :\tFalse \n",
"trigger2_count_threshold :\t1 \n",
"trigger2_threshold_invert :\tFalse \n",
"trigger3_count_threshold :\t1 \n",
"trigger3_threshold_invert :\tFalse \n",
"trigger4_count_threshold :\t1 \n",
"trigger4_threshold_invert :\tFalse \n",
"trigger5_count_threshold :\t1 \n",
"trigger5_threshold_invert :\tFalse \n",
"trigger6_count_threshold :\t1 \n",
"trigger6_threshold_invert :\tFalse \n",
"trigger7_count_threshold :\t1 \n",
"trigger7_threshold_invert :\tFalse \n",
"trigger8_count_threshold :\t1 \n",
"trigger8_threshold_invert :\tFalse \n",
"trigger9_count_threshold :\t1 \n",
"trigger9_threshold_invert :\tFalse \n",
"upsample_rate_awg_path0 :\t0 \n",
"upsample_rate_awg_path1 :\t0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Status: OKAY, Flags: NONE, Slot flags: NONE\n"
]
}
],
"source": [
"# Stop both sequencers.\n",
"module.stop_sequencer()\n",
"\n",
"# Print status of both sequencers (should now say it is stopped).\n",
"print(module.get_sequencer_status(0))\n",
"print(module.get_sequencer_status(1))\n",
"print()\n",
"\n",
"# Print an overview of the instrument parameters.\n",
"print(\"Snapshot:\")\n",
"module.print_readable_snapshot(update=True)\n",
"\n",
"# Reset the cluster\n",
"cluster.reset()\n",
"print(cluster.get_system_status())"
]
}
],
"metadata": {
"jupytext": {
"cell_metadata_filter": "all",
"notebook_metadata_filter": "files_to_bundle_in_zip_file,is_demo,execute"
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.20"
}
},
"nbformat": 4,
"nbformat_minor": 5
}