Source code for quantify_scheduler.backends.zhinst.resolvers
# Repository: https://gitlab.com/quantify-os/quantify-scheduler
# Licensed according to the LICENCE file on the main branch
from __future__ import annotations
from typing import Tuple
import numpy as np
from zhinst import qcodes
from quantify_scheduler.backends.zhinst import helpers as zi_helpers
[docs]
def monitor_acquisition_resolver(
uhfqa: qcodes.UHFQA, monitor_nodes: Tuple[str, str]
) -> np.ndarray:
"""
Returns complex value of UHFQA Monitor nodes.
This acquisition resolver corresponds to measuring a time trace of the input on the
I channel (input 1) and Q channel (input 2).
Parameters
----------
uhfqa
monitor_nodes
"""
(node_i, node_q) = monitor_nodes
results_i = zi_helpers.get_value(uhfqa, node_i)
results_q = zi_helpers.get_value(uhfqa, node_q)
return results_i + 1j * results_q
[docs]
def result_acquisition_resolver(
uhfqa: qcodes.UHFQA, result_nodes: Tuple[str, str]
) -> np.ndarray:
"""
Returns complex value of UHFQA Result nodes.
Note that it needs two nodes to return a complex valued result.
For optimal weights one can ignore the imaginary part.
Parameters
----------
uhfqa
result_nodes
"""
vals_node0 = zi_helpers.get_value(uhfqa, result_nodes[0])
vals_node1 = zi_helpers.get_value(uhfqa, result_nodes[1])
# the ZI API keeps the contributions of both weight functions separate
# here we combine them so they correspond to the I and Q components.
vals_i = vals_node0.real + vals_node0.imag
vals_q = vals_node1.real + vals_node1.imag
results = vals_i + 1j * vals_q
return results