Ejemplo n.º 1
0
        "LO": devices.LO(name="lo", resolution=sim_res, outputs=1),
        "AWG": devices.AWG(name="awg", resolution=awg_res, outputs=1),
        "DigitalToAnalog": devices.DigitalToAnalog(
            name="dac", resolution=sim_res, inputs=1, outputs=1
        ),
        "Response": devices.Response(
            name="resp",
            rise_time=Qty(value=0.3e-9, min_val=0.05e-9, max_val=0.6e-9, unit="s"),
            resolution=sim_res,
            inputs=1,
            outputs=1,
        ),
        "Mixer": devices.Mixer(name="mixer", inputs=2, outputs=1),
        "VoltsToHertz": devices.VoltsToHertz(
            name="v_to_hz",
            V_to_Hz=Qty(value=1e9, min_val=0.9e9, max_val=1.1e9, unit="Hz/V"),
            inputs=1,
            outputs=1,
        ),
    },
    chains={
        "d1": ["LO", "AWG", "DigitalToAnalog", "Response", "Mixer", "VoltsToHertz"],
        "d2": ["LO", "AWG", "DigitalToAnalog", "Response", "Mixer", "VoltsToHertz"],
    },
)

t_final = 7e-9  # Time for single qubit gates
sideband = 50e6
gauss_params_single = {
    "amp": Qty(value=0.5, min_val=0.4, max_val=0.6, unit="V"),
    "t_final": Qty(
        value=t_final, min_val=0.5 * t_final, max_val=1.5 * t_final, unit="s"
Ejemplo n.º 2
0
                                        unit='Wb'),
                              phi=Qty(value=fluxpoint,
                                      min_val=-1.0 * phi_0_tc,
                                      max_val=1.0 * phi_0_tc,
                                      unit='Wb'),
                              omega_0=Qty(value=freq_tc,
                                          min_val=0.9 * freq_tc,
                                          max_val=1.1 * freq_tc,
                                          unit='Hz 2pi'),
                              d=Qty(value=d,
                                    min_val=d * 0.9,
                                    max_val=d * 1.1,
                                    unit=''))
v_to_hz = devices.VoltsToHertz(name='v2hz',
                               V_to_Hz=Qty(value=v2hz,
                                           min_val=0.9 * v2hz,
                                           max_val=1.1 * v2hz,
                                           unit='Hz 2pi/V'))
device_dict = {
    dev.name: dev
    for dev in [lo, awg, mixer, dig_to_an, resp, v_to_hz, fluxbias]
}
generator = Gnr(devices=device_dict,
                chains={
                    "TC": ["lo", "awg", "dac", "resp", "mixer", "fluxbias"],
                    "Q1": ["lo", "awg", "dac", "resp", "mixer", "v2hz"],
                    "Q2": ["lo", "awg", "dac", "resp", "mixer", "v2hz"],
                })

# ### MAKE GATESET
nodrive_env = pulse.Envelope(name="no_drive",
Ejemplo n.º 3
0
def create_experiment():
    lindblad = False
    dressed = True
    qubit_lvls = 3
    freq_q1 = 5e9 * 2 * np.pi
    freq_q2 = 5.6e9 * 2 * np.pi
    anhar_q1 = -210e6 * 2 * np.pi
    anhar_q2 = -240e6 * 2 * np.pi
    coupling_strength = 20e6 * 2 * np.pi
    t1_q1 = 27e-6
    t1_q2 = 23e-6
    t2star_q1 = 39e-6
    t2star_q2 = 31e-6
    init_temp = 0
    qubit_temp = 0
    t_final = 7e-9  # Time for single qubit gates
    sim_res = 100e9
    awg_res = 2e9
    sideband = 50e6 * 2 * np.pi
    lo_freq_q1 = 5e9 * 2 * np.pi + sideband
    lo_freq_q2 = 5.6e9 * 2 * np.pi + sideband

    # ### MAKE MODEL
    q1 = chip.Qubit(
        name="Q1",
        desc="Qubit 1",
        freq=Qty(
            value=freq_q1,
            min_val=4.995e9 * 2 * np.pi,
            max_val=5.005e9 * 2 * np.pi,
            unit="Hz 2pi",
        ),
        anhar=Qty(
            value=anhar_q1,
            min_val=-380e6 * 2 * np.pi,
            max_val=-120e6 * 2 * np.pi,
            unit="Hz 2pi",
        ),
        hilbert_dim=qubit_lvls,
        t1=Qty(value=t1_q1, min_val=1e-6, max_val=90e-6, unit="s"),
        t2star=Qty(value=t2star_q1, min_val=10e-6, max_val=90e-6, unit="s"),
        temp=Qty(value=qubit_temp, min_val=0.0, max_val=0.12, unit="K"),
    )
    q2 = chip.Qubit(
        name="Q2",
        desc="Qubit 2",
        freq=Qty(
            value=freq_q2,
            min_val=5.595e9 * 2 * np.pi,
            max_val=5.605e9 * 2 * np.pi,
            unit="Hz 2pi",
        ),
        anhar=Qty(
            value=anhar_q2,
            min_val=-380e6 * 2 * np.pi,
            max_val=-120e6 * 2 * np.pi,
            unit="Hz 2pi",
        ),
        hilbert_dim=qubit_lvls,
        t1=Qty(value=t1_q2, min_val=1e-6, max_val=90e-6, unit="s"),
        t2star=Qty(value=t2star_q2, min_val=10e-6, max_val=90e-6, unit="s"),
        temp=Qty(value=qubit_temp, min_val=0.0, max_val=0.12, unit="K"),
    )

    q1q2 = chip.Coupling(
        name="Q1-Q2",
        desc="coupling",
        comment="Coupling qubit 1 to qubit 2",
        connected=["Q1", "Q2"],
        strength=Qty(
            value=coupling_strength,
            min_val=-1 * 1e3 * 2 * np.pi,
            max_val=200e6 * 2 * np.pi,
            unit="Hz 2pi",
        ),
        hamiltonian_func=hamiltonians.int_XX,
    )

    drive = chip.Drive(
        name="d1",
        desc="Drive 1",
        comment="Drive line 1 on qubit 1",
        connected=["Q1"],
        hamiltonian_func=hamiltonians.x_drive,
    )
    drive2 = chip.Drive(
        name="d2",
        desc="Drive 2",
        comment="Drive line 2 on qubit 2",
        connected=["Q2"],
        hamiltonian_func=hamiltonians.x_drive,
    )
    phys_components = [q1, q2]
    line_components = [drive, drive2, q1q2]

    init_ground = tasks.InitialiseGround(
        init_temp=Qty(value=init_temp, min_val=-0.001, max_val=0.22, unit="K"))
    task_list = [init_ground]
    model = Mdl(phys_components, line_components, task_list)
    model.set_lindbladian(lindblad)
    model.set_dressed(dressed)

    # ### MAKE GENERATOR
    generator = Gnr(
        devices={
            "LO":
            devices.LO(name="lo", resolution=sim_res, outputs=1),
            "AWG":
            devices.AWG(name="awg", resolution=awg_res, outputs=1),
            "DigitalToAnalog":
            devices.DigitalToAnalog(name="dac",
                                    resolution=sim_res,
                                    inputs=1,
                                    outputs=1),
            "Response":
            devices.Response(
                name="resp",
                rise_time=Qty(value=0.3e-9,
                              min_val=0.05e-9,
                              max_val=0.6e-9,
                              unit="s"),
                resolution=sim_res,
                inputs=1,
                outputs=1,
            ),
            "Mixer":
            devices.Mixer(name="mixer", inputs=2, outputs=1),
            "VoltsToHertz":
            devices.VoltsToHertz(
                name="v_to_hz",
                V_to_Hz=Qty(value=1e9,
                            min_val=0.9e9,
                            max_val=1.1e9,
                            unit="Hz/V"),
                inputs=1,
                outputs=1,
            ),
        },
        chains={
            "d1": [
                "LO", "AWG", "DigitalToAnalog", "Response", "Mixer",
                "VoltsToHertz"
            ],
            "d2": [
                "LO", "AWG", "DigitalToAnalog", "Response", "Mixer",
                "VoltsToHertz"
            ],
        },
    )
    generator.devices["awg"].enable_drag_2()

    # ### MAKE GATESET
    gateset = gates.GateSet()
    gauss_params_single = {
        "amp":
        Qty(value=0.45, min_val=0.4, max_val=0.6, unit="V"),
        "t_final":
        Qty(value=t_final,
            min_val=0.5 * t_final,
            max_val=1.5 * t_final,
            unit="s"),
        "sigma":
        Qty(value=t_final / 4,
            min_val=t_final / 8,
            max_val=t_final / 2,
            unit="s"),
        "xy_angle":
        Qty(value=0.0, min_val=-0.5 * np.pi, max_val=2.5 * np.pi, unit="rad"),
        "freq_offset":
        Qty(
            value=-sideband - 0.5e6 * 2 * np.pi,
            min_val=-53 * 1e6 * 2 * np.pi,
            max_val=-47 * 1e6 * 2 * np.pi,
            unit="Hz 2pi",
        ),
        "delta":
        Qty(value=-1, min_val=-5, max_val=3, unit=""),
    }

    gauss_env_single = pulse.Envelope(
        name="gauss",
        desc="Gaussian comp for single-qubit gates",
        params=gauss_params_single,
        shape=envelopes.gaussian_nonorm,
    )
    nodrive_env = pulse.Envelope(
        name="no_drive",
        params={
            "t_final":
            Qty(value=t_final,
                min_val=0.5 * t_final,
                max_val=1.5 * t_final,
                unit="s")
        },
        shape=envelopes.no_drive,
    )
    carrier_parameters = {
        "freq":
        Qty(
            value=lo_freq_q1,
            min_val=4.5e9 * 2 * np.pi,
            max_val=6e9 * 2 * np.pi,
            unit="Hz 2pi",
        ),
        "framechange":
        Qty(value=0.0, min_val=-np.pi, max_val=3 * np.pi, unit="rad"),
    }
    carr = pulse.Carrier(
        name="carrier",
        desc="Frequency of the local oscillator",
        params=carrier_parameters,
    )
    carr_2 = copy.deepcopy(carr)
    carr_2.params["freq"].set_value(lo_freq_q2)

    RX90p_q1 = gates.Instruction(name="RX90p",
                                 t_start=0.0,
                                 t_end=t_final,
                                 channels=["d1"])
    RX90p_q2 = gates.Instruction(name="RX90p",
                                 t_start=0.0,
                                 t_end=t_final,
                                 channels=["d2"])
    QId_q1 = gates.Instruction(name="Id",
                               t_start=0.0,
                               t_end=t_final,
                               channels=["d1"])
    QId_q2 = gates.Instruction(name="Id",
                               t_start=0.0,
                               t_end=t_final,
                               channels=["d2"])

    RX90p_q1.add_component(gauss_env_single, "d1")
    RX90p_q1.add_component(carr, "d1")
    QId_q1.add_component(nodrive_env, "d1")
    QId_q1.add_component(copy.deepcopy(carr), "d1")
    QId_q1.comps["d1"]["carrier"].params["framechange"].set_value(
        (-sideband * t_final) % (2 * np.pi))
    Y90p_q1 = copy.deepcopy(RX90p_q1)
    Y90p_q1.name = "RY90p"
    X90m_q1 = copy.deepcopy(RX90p_q1)
    X90m_q1.name = "RX90m"
    Y90m_q1 = copy.deepcopy(RX90p_q1)
    Y90m_q1.name = "RY90m"
    Y90p_q1.comps["d1"]["gauss"].params["xy_angle"].set_value(0.5 * np.pi)
    X90m_q1.comps["d1"]["gauss"].params["xy_angle"].set_value(np.pi)
    Y90m_q1.comps["d1"]["gauss"].params["xy_angle"].set_value(1.5 * np.pi)
    Q1_gates = [QId_q1, RX90p_q1, Y90p_q1, X90m_q1, Y90m_q1]

    RX90p_q2.add_component(copy.deepcopy(gauss_env_single), "d2")
    RX90p_q2.add_component(carr_2, "d2")
    QId_q2.add_component(copy.deepcopy(nodrive_env), "d2")
    QId_q2.add_component(copy.deepcopy(carr_2), "d2")
    QId_q2.comps["d2"]["carrier"].params["framechange"].set_value(
        (-sideband * t_final) % (2 * np.pi))
    Y90p_q2 = copy.deepcopy(RX90p_q2)
    Y90p_q2.name = "RY90p"
    X90m_q2 = copy.deepcopy(RX90p_q2)
    X90m_q2.name = "RX90m"
    Y90m_q2 = copy.deepcopy(RX90p_q2)
    Y90m_q2.name = "RY90m"
    Y90p_q2.comps["d2"]["gauss"].params["xy_angle"].set_value(0.5 * np.pi)
    X90m_q2.comps["d2"]["gauss"].params["xy_angle"].set_value(np.pi)
    Y90m_q2.comps["d2"]["gauss"].params["xy_angle"].set_value(1.5 * np.pi)
    Q2_gates = [QId_q2, RX90p_q2, Y90p_q2, X90m_q2, Y90m_q2]

    all_1q_gates_comb = []
    for g1 in Q1_gates:
        for g2 in Q2_gates:
            g = gates.Instruction(name="NONE",
                                  t_start=0.0,
                                  t_end=t_final,
                                  channels=[])
            g.name = g1.name + ":" + g2.name
            channels = []
            channels.extend(g1.comps.keys())
            channels.extend(g2.comps.keys())
            for chan in channels:
                g.comps[chan] = {}
                if chan in g1.comps:
                    g.comps[chan].update(g1.comps[chan])
                if chan in g2.comps:
                    g.comps[chan].update(g2.comps[chan])
            all_1q_gates_comb.append(g)

    for gate in all_1q_gates_comb:
        gateset.add_instruction(gate)

    # ### MAKE EXPERIMENT
    exp = Exp(model=model, generator=generator, gateset=gateset)
    return exp
Ejemplo n.º 4
0
def make_exp(simtime: np.float64 = 7e-9) -> Exp:
    """

    Parameters
    ----------
    simtime : np.float64
    """
    qubit_lvls = 3
    freq_q1 = 5e9
    anhar_q1 = -210e6
    t1_q1 = 27e-6
    t2star_q1 = 39e-6
    qubit_temp = 50e-3

    q1 = chip.Qubit(
        name="Q1",
        desc="Qubit 1",
        freq=Qty(value=freq_q1,
                 min_val=4.995e9,
                 max_val=5.005e9,
                 unit="Hz 2pi"),
        anhar=Qty(value=anhar_q1,
                  min_val=-380e6,
                  max_val=-120e6,
                  unit="Hz 2pi"),
        hilbert_dim=qubit_lvls,
        t1=Qty(value=t1_q1, min_val=1e-6, max_val=90e-6, unit="s"),
        t2star=Qty(value=t2star_q1, min_val=10e-6, max_val=90e-3, unit="s"),
        temp=Qty(value=qubit_temp, min_val=0.0, max_val=0.12, unit="K"),
    )

    freq_q2 = 5.6e9
    anhar_q2 = -240e6
    t1_q2 = 23e-6
    t2star_q2 = 31e-6
    q2 = chip.Qubit(
        name="Q2",
        desc="Qubit 2",
        freq=Qty(value=freq_q2,
                 min_val=5.595e9,
                 max_val=5.605e9,
                 unit="Hz 2pi"),
        anhar=Qty(value=anhar_q2,
                  min_val=-380e6,
                  max_val=-120e6,
                  unit="Hz 2pi"),
        hilbert_dim=qubit_lvls,
        t1=Qty(value=t1_q2, min_val=1e-6, max_val=90e-6, unit="s"),
        t2star=Qty(value=t2star_q2, min_val=10e-6, max_val=90e-6, unit="s"),
        temp=Qty(value=qubit_temp, min_val=0.0, max_val=0.12, unit="K"),
    )

    coupling_strength = 20e6
    q1q2 = chip.Coupling(
        name="Q1-Q2",
        desc="coupling",
        comment="Coupling qubit 1 to qubit 2",
        connected=["Q1", "Q2"],
        strength=Qty(value=coupling_strength,
                     min_val=-1 * 1e3,
                     max_val=200e6,
                     unit="Hz 2pi"),
        hamiltonian_func=hamiltonians.int_XX,
    )

    drive = chip.Drive(
        name="d1",
        desc="Drive 1",
        comment="Drive line 1 on qubit 1",
        connected=["Q1"],
        hamiltonian_func=hamiltonians.x_drive,
    )
    drive2 = chip.Drive(
        name="d2",
        desc="Drive 2",
        comment="Drive line 2 on qubit 2",
        connected=["Q2"],
        hamiltonian_func=hamiltonians.x_drive,
    )

    m00_q1 = 0.97  # Prop to read qubit 1 state 0 as 0
    m01_q1 = 0.04  # Prop to read qubit 1 state 0 as 1
    m00_q2 = 0.96  # Prop to read qubit 2 state 0 as 0
    m01_q2 = 0.05  # Prop to read qubit 2 state 0 as 1
    one_zeros = np.array([0] * qubit_lvls)
    zero_ones = np.array([1] * qubit_lvls)
    one_zeros[0] = 1
    zero_ones[0] = 0
    val1 = one_zeros * m00_q1 + zero_ones * m01_q1
    val2 = one_zeros * m00_q2 + zero_ones * m01_q2
    min_val = one_zeros * 0.8 + zero_ones * 0.0
    max_val = one_zeros * 1.0 + zero_ones * 0.2
    confusion_row1 = Qty(value=val1, min_val=min_val, max_val=max_val, unit="")
    confusion_row2 = Qty(value=val2, min_val=min_val, max_val=max_val, unit="")
    conf_matrix = tasks.ConfusionMatrix(Q1=confusion_row1, Q2=confusion_row2)

    init_temp = 50e-3
    init_ground = tasks.InitialiseGround(
        init_temp=Qty(value=init_temp, min_val=-0.001, max_val=0.22, unit="K"))

    model = Mdl(
        [q1, q2],  # Individual, self-contained components
        [drive, drive2, q1q2],  # Interactions between components
        [conf_matrix, init_ground],  # SPAM processing
    )

    model.set_lindbladian(False)
    model.set_dressed(True)

    sim_res = 100e9  # Resolution for numerical simulation
    awg_res = 2e9  # Realistic, limited resolution of an AWG

    generator = Gnr(
        devices={
            "LO":
            devices.LO(name="lo", resolution=sim_res, outputs=1),
            "AWG":
            devices.AWG(name="awg", resolution=awg_res, outputs=1),
            "DigitalToAnalog":
            devices.DigitalToAnalog(name="dac",
                                    resolution=sim_res,
                                    inputs=1,
                                    outputs=1),
            "Response":
            devices.Response(
                name="resp",
                rise_time=Qty(value=0.3e-9,
                              min_val=0.05e-9,
                              max_val=0.6e-9,
                              unit="s"),
                resolution=sim_res,
                inputs=1,
                outputs=1,
            ),
            "Mixer":
            devices.Mixer(name="mixer", inputs=2, outputs=1),
            "VoltsToHertz":
            devices.VoltsToHertz(
                name="v_to_hz",
                V_to_Hz=Qty(value=1e9,
                            min_val=0.9e9,
                            max_val=1.1e9,
                            unit="Hz/V"),
                inputs=1,
                outputs=1,
            ),
        },
        chains={
            "d1": [
                "LO", "AWG", "DigitalToAnalog", "Response", "Mixer",
                "VoltsToHertz"
            ],
            "d2": [
                "LO", "AWG", "DigitalToAnalog", "Response", "Mixer",
                "VoltsToHertz"
            ],
        },
    )

    t_final = simtime  # Time for single qubit gates
    sideband = 50e6
    gauss_params_single = {
        "amp":
        Qty(value=0.5, min_val=0.4, max_val=0.6, unit="V"),
        "t_final":
        Qty(value=t_final,
            min_val=0.5 * t_final,
            max_val=1.5 * t_final,
            unit="s"),
        "sigma":
        Qty(value=t_final / 4,
            min_val=t_final / 8,
            max_val=t_final / 2,
            unit="s"),
        "xy_angle":
        Qty(value=0.0, min_val=-0.5 * np.pi, max_val=2.5 * np.pi, unit="rad"),
        "freq_offset":
        Qty(value=-sideband - 3e6,
            min_val=-56 * 1e6,
            max_val=-52 * 1e6,
            unit="Hz 2pi"),
        "delta":
        Qty(value=-1, min_val=-5, max_val=3, unit=""),
    }

    gauss_env_single = pulse.Envelope(
        name="gauss",
        desc="Gaussian comp for single-qubit gates",
        params=gauss_params_single,
        shape=envelopes.gaussian_nonorm,
    )

    lo_freq_q1 = 5e9 + sideband
    carrier_parameters = {
        "freq":
        Qty(value=lo_freq_q1, min_val=4.5e9, max_val=6e9, unit="Hz 2pi"),
        "framechange":
        Qty(value=0.0, min_val=-np.pi, max_val=3 * np.pi, unit="rad"),
    }

    nodrive_env = pulse.Envelope(
        name="no_drive",
        params={
            "t_final":
            Qty(value=t_final,
                min_val=0.5 * t_final,
                max_val=1.5 * t_final,
                unit="s")
        },
        shape=envelopes.no_drive,
    )

    lo_freq_q1 = 5e9 + sideband
    carrier_parameters = {
        "freq":
        Qty(value=lo_freq_q1, min_val=4.5e9, max_val=6e9, unit="Hz 2pi"),
        "framechange":
        Qty(value=0.0, min_val=-np.pi, max_val=3 * np.pi, unit="rad"),
    }
    carr = pulse.Carrier(name="carrier",
                         desc="Frequency of the local oscillator",
                         params=carrier_parameters)

    lo_freq_q2 = 5.6e9 + sideband
    carr_2 = copy.deepcopy(carr)
    carr_2.params["freq"].set_value(lo_freq_q2)

    X90p_q1 = gates.Instruction(name="X90p",
                                channels=["d1"],
                                t_start=0.0,
                                t_end=t_final)
    X90p_q2 = gates.Instruction(name="X90p",
                                channels=["d2"],
                                t_start=0.0,
                                t_end=t_final)
    QId_q1 = gates.Instruction(name="Id",
                               channels=["d1"],
                               t_start=0.0,
                               t_end=t_final)
    QId_q2 = gates.Instruction(name="Id",
                               channels=["d2"],
                               t_start=0.0,
                               t_end=t_final)

    X90p_q1.add_component(gauss_env_single, "d1")
    X90p_q1.add_component(carr, "d1")
    QId_q1.add_component(nodrive_env, "d1")
    QId_q1.add_component(copy.deepcopy(carr), "d1")

    X90p_q2.add_component(copy.deepcopy(gauss_env_single), "d2")
    X90p_q2.add_component(carr_2, "d2")
    QId_q2.add_component(copy.deepcopy(nodrive_env), "d2")
    QId_q2.add_component(copy.deepcopy(carr_2), "d2")

    QId_q1.comps["d1"]["carrier"].params["framechange"].set_value(
        (-sideband * t_final) * 2 * np.pi % (2 * np.pi))
    QId_q2.comps["d2"]["carrier"].params["framechange"].set_value(
        (-sideband * t_final) * 2 * np.pi % (2 * np.pi))

    Y90p_q1 = copy.deepcopy(X90p_q1)
    Y90p_q1.name = "Y90p"
    X90m_q1 = copy.deepcopy(X90p_q1)
    X90m_q1.name = "X90m"
    Y90m_q1 = copy.deepcopy(X90p_q1)
    Y90m_q1.name = "Y90m"
    Y90p_q1.comps["d1"]["gauss"].params["xy_angle"].set_value(0.5 * np.pi)
    X90m_q1.comps["d1"]["gauss"].params["xy_angle"].set_value(np.pi)
    Y90m_q1.comps["d1"]["gauss"].params["xy_angle"].set_value(1.5 * np.pi)
    Q1_gates = [QId_q1, X90p_q1, Y90p_q1, X90m_q1, Y90m_q1]

    Y90p_q2 = copy.deepcopy(X90p_q2)
    Y90p_q2.name = "Y90p"
    X90m_q2 = copy.deepcopy(X90p_q2)
    X90m_q2.name = "X90m"
    Y90m_q2 = copy.deepcopy(X90p_q2)
    Y90m_q2.name = "Y90m"
    Y90p_q2.comps["d2"]["gauss"].params["xy_angle"].set_value(0.5 * np.pi)
    X90m_q2.comps["d2"]["gauss"].params["xy_angle"].set_value(np.pi)
    Y90m_q2.comps["d2"]["gauss"].params["xy_angle"].set_value(1.5 * np.pi)
    Q2_gates = [QId_q2, X90p_q2, Y90p_q2, X90m_q2, Y90m_q2]

    all_1q_gates_comb = []
    for g1 in Q1_gates:
        for g2 in Q2_gates:
            g = gates.Instruction(name="NONE",
                                  channels=[],
                                  t_start=0.0,
                                  t_end=t_final)
            g.name = g1.name + ":" + g2.name
            channels: List[str] = []
            channels.extend(g1.comps.keys())
            channels.extend(g2.comps.keys())
            for chan in channels:
                g.comps[chan] = {}
                if chan in g1.comps:
                    g.comps[chan].update(g1.comps[chan])
                if chan in g2.comps:
                    g.comps[chan].update(g2.comps[chan])
            all_1q_gates_comb.append(g)

    pmap = PMap(all_1q_gates_comb, generator, model)

    return Exp(pmap)
Ejemplo n.º 5
0
def create_experiment():
    lindblad = False
    dressed = True
    qubit_lvls = 3
    freq_q1 = 5e9 * 2 * np.pi
    freq_q2 = 5.6e9 * 2 * np.pi
    anhar_q1 = -210e6 * 2 * np.pi
    anhar_q2 = -240e6 * 2 * np.pi
    coupling_strength = 20e6 * 2 * np.pi
    t1_q1 = 27e-6
    t1_q2 = 23e-6
    t2star_q1 = 39e-6
    t2star_q2 = 31e-6
    init_temp = 0
    qubit_temp = 0
    v2hz = 1e9
    t_final = 7e-9  # Time for single qubit gates
    sim_res = 100e9
    awg_res = 2e9
    meas_offset = 0.0
    meas_scale = 1.0
    sideband = 50e6 * 2 * np.pi
    lo_freq_q1 = 5e9 * 2 * np.pi + sideband
    lo_freq_q2 = 5.6e9 * 2 * np.pi + sideband

    # ### MAKE MODEL
    q1 = chip.Qubit(name="Q1",
                    desc="Qubit 1",
                    freq=Qty(value=freq_q1,
                             min=4.995e9 * 2 * np.pi,
                             max=5.005e9 * 2 * np.pi,
                             unit='Hz 2pi'),
                    anhar=Qty(value=anhar_q1,
                              min=-380e6 * 2 * np.pi,
                              max=-120e6 * 2 * np.pi,
                              unit='Hz 2pi'),
                    hilbert_dim=qubit_lvls,
                    t1=Qty(value=t1_q1, min=1e-6, max=90e-6, unit='s'),
                    t2star=Qty(value=t2star_q1, min=10e-6, max=90e-6,
                               unit='s'),
                    temp=Qty(value=qubit_temp, min=0.0, max=0.12, unit='K'))
    q2 = chip.Qubit(name="Q2",
                    desc="Qubit 2",
                    freq=Qty(value=freq_q2,
                             min=5.595e9 * 2 * np.pi,
                             max=5.605e9 * 2 * np.pi,
                             unit='Hz 2pi'),
                    anhar=Qty(value=anhar_q2,
                              min=-380e6 * 2 * np.pi,
                              max=-120e6 * 2 * np.pi,
                              unit='Hz 2pi'),
                    hilbert_dim=qubit_lvls,
                    t1=Qty(value=t1_q2, min=1e-6, max=90e-6, unit='s'),
                    t2star=Qty(value=t2star_q2, min=10e-6, max=90e-6,
                               unit='s'),
                    temp=Qty(value=qubit_temp, min=0.0, max=0.12, unit='K'))

    q1q2 = chip.Coupling(name="Q1-Q2",
                         desc="coupling",
                         comment="Coupling qubit 1 to qubit 2",
                         connected=["Q1", "Q2"],
                         strength=Qty(value=coupling_strength,
                                      min=-1 * 1e3 * 2 * np.pi,
                                      max=200e6 * 2 * np.pi,
                                      unit='Hz 2pi'),
                         hamiltonian_func=hamiltonians.int_XX)

    drive = chip.Drive(name="d1",
                       desc="Drive 1",
                       comment="Drive line 1 on qubit 1",
                       connected=["Q1"],
                       hamiltonian_func=hamiltonians.x_drive)
    drive2 = chip.Drive(name="d2",
                        desc="Drive 2",
                        comment="Drive line 2 on qubit 2",
                        connected=["Q2"],
                        hamiltonian_func=hamiltonians.x_drive)
    phys_components = [q1, q2]
    line_components = [drive, drive2, q1q2]

    init_ground = tasks.InitialiseGround(
        init_temp=Qty(value=init_temp, min=-0.001, max=0.22, unit='K'))
    task_list = [init_ground]
    model = Mdl(phys_components, line_components, task_list)
    model.set_lindbladian(lindblad)
    model.set_dressed(dressed)

    # ### MAKE GENERATOR
    lo = devices.LO(name='lo', resolution=sim_res)
    awg = devices.AWG(name='awg', resolution=awg_res)
    mixer = devices.Mixer(name='mixer')

    v_to_hz = devices.VoltsToHertz(name='v_to_hz',
                                   V_to_Hz=Qty(value=v2hz,
                                               min=0.9e9,
                                               max=1.1e9,
                                               unit='Hz 2pi/V'))
    dig_to_an = devices.DigitalToAnalog(name="dac", resolution=sim_res)
    resp = devices.Response(name='resp',
                            rise_time=Qty(value=0.3e-9,
                                          min=0.05e-9,
                                          max=0.6e-9,
                                          unit='s'),
                            resolution=sim_res)

    device_list = [lo, awg, mixer, v_to_hz, dig_to_an, resp]
    generator = Gnr(device_list)
    generator.devices['awg'].enable_drag_2()

    # ### MAKE GATESET
    gateset = gates.GateSet()
    gauss_params_single = {
        'amp':
        Qty(value=0.45, min=0.4, max=0.6, unit="V"),
        't_final':
        Qty(value=t_final, min=0.5 * t_final, max=1.5 * t_final, unit="s"),
        'sigma':
        Qty(value=t_final / 4, min=t_final / 8, max=t_final / 2, unit="s"),
        'xy_angle':
        Qty(value=0.0, min=-0.5 * np.pi, max=2.5 * np.pi, unit='rad'),
        'freq_offset':
        Qty(value=-sideband - 0.5e6 * 2 * np.pi,
            min=-53 * 1e6 * 2 * np.pi,
            max=-47 * 1e6 * 2 * np.pi,
            unit='Hz 2pi'),
        'delta':
        Qty(value=-1, min=-5, max=3, unit="")
    }

    gauss_env_single = pulse.Envelope(
        name="gauss",
        desc="Gaussian comp for single-qubit gates",
        params=gauss_params_single,
        shape=envelopes.gaussian_nonorm)
    nodrive_env = pulse.Envelope(name="no_drive",
                                 params={
                                     't_final':
                                     Qty(value=t_final,
                                         min=0.5 * t_final,
                                         max=1.5 * t_final,
                                         unit="s")
                                 },
                                 shape=envelopes.no_drive)
    carrier_parameters = {
        'freq':
        Qty(value=lo_freq_q1,
            min=4.5e9 * 2 * np.pi,
            max=6e9 * 2 * np.pi,
            unit='Hz 2pi'),
        'framechange':
        Qty(value=0.0, min=-np.pi, max=3 * np.pi, unit='rad')
    }
    carr = pulse.Carrier(name="carrier",
                         desc="Frequency of the local oscillator",
                         params=carrier_parameters)
    carr_2 = copy.deepcopy(carr)
    carr_2.params['freq'].set_value(lo_freq_q2)

    X90p_q1 = gates.Instruction(name="X90p",
                                t_start=0.0,
                                t_end=t_final,
                                channels=["d1"])
    X90p_q2 = gates.Instruction(name="X90p",
                                t_start=0.0,
                                t_end=t_final,
                                channels=["d2"])
    QId_q1 = gates.Instruction(name="Id",
                               t_start=0.0,
                               t_end=t_final,
                               channels=["d1"])
    QId_q2 = gates.Instruction(name="Id",
                               t_start=0.0,
                               t_end=t_final,
                               channels=["d2"])

    X90p_q1.add_component(gauss_env_single, "d1")
    X90p_q1.add_component(carr, "d1")
    QId_q1.add_component(nodrive_env, "d1")
    QId_q1.add_component(copy.deepcopy(carr), "d1")
    QId_q1.comps['d1']['carrier'].params['framechange'].set_value(
        (-sideband * t_final) % (2 * np.pi))
    Y90p_q1 = copy.deepcopy(X90p_q1)
    Y90p_q1.name = "Y90p"
    X90m_q1 = copy.deepcopy(X90p_q1)
    X90m_q1.name = "X90m"
    Y90m_q1 = copy.deepcopy(X90p_q1)
    Y90m_q1.name = "Y90m"
    Y90p_q1.comps['d1']['gauss'].params['xy_angle'].set_value(0.5 * np.pi)
    X90m_q1.comps['d1']['gauss'].params['xy_angle'].set_value(np.pi)
    Y90m_q1.comps['d1']['gauss'].params['xy_angle'].set_value(1.5 * np.pi)
    Q1_gates = [QId_q1, X90p_q1, Y90p_q1, X90m_q1, Y90m_q1]

    X90p_q2.add_component(copy.deepcopy(gauss_env_single), "d2")
    X90p_q2.add_component(carr_2, "d2")
    QId_q2.add_component(copy.deepcopy(nodrive_env), "d2")
    QId_q2.add_component(copy.deepcopy(carr_2), "d2")
    QId_q2.comps['d2']['carrier'].params['framechange'].set_value(
        (-sideband * t_final) % (2 * np.pi))
    Y90p_q2 = copy.deepcopy(X90p_q2)
    Y90p_q2.name = "Y90p"
    X90m_q2 = copy.deepcopy(X90p_q2)
    X90m_q2.name = "X90m"
    Y90m_q2 = copy.deepcopy(X90p_q2)
    Y90m_q2.name = "Y90m"
    Y90p_q2.comps['d2']['gauss'].params['xy_angle'].set_value(0.5 * np.pi)
    X90m_q2.comps['d2']['gauss'].params['xy_angle'].set_value(np.pi)
    Y90m_q2.comps['d2']['gauss'].params['xy_angle'].set_value(1.5 * np.pi)
    Q2_gates = [QId_q2, X90p_q2, Y90p_q2, X90m_q2, Y90m_q2]

    all_1q_gates_comb = []
    for g1 in Q1_gates:
        for g2 in Q2_gates:
            g = gates.Instruction(name="NONE",
                                  t_start=0.0,
                                  t_end=t_final,
                                  channels=[])
            g.name = g1.name + ":" + g2.name
            channels = []
            channels.extend(g1.comps.keys())
            channels.extend(g2.comps.keys())
            for chan in channels:
                g.comps[chan] = {}
                if chan in g1.comps:
                    g.comps[chan].update(g1.comps[chan])
                if chan in g2.comps:
                    g.comps[chan].update(g2.comps[chan])
            all_1q_gates_comb.append(g)

    for gate in all_1q_gates_comb:
        gateset.add_instruction(gate)

    # ### MAKE EXPERIMENT
    exp = Exp(model=model, generator=generator, gateset=gateset)
    return exp
Ejemplo n.º 6
0
def create_experiment(gatetime: np.float64 = 7e-9, anhar=-210e6) -> Exp:
    """

    Parameters
    ----------
    gatetime : longer gatetimes needed for a better FFT of the microwave signal
    """
    lindblad = False
    dressed = True
    qubit_lvls = 3
    freq = 5e9
    anhar = anhar
    init_temp = 0
    qubit_temp = 0
    t_final = gatetime  # Time for single qubit gates
    sim_res = 100e9
    awg_res = 2e9
    sideband = 50e6
    lo_freq = 5e9 + sideband
    lo2_freq = lo_freq + anhar  # for 1<->2

    # ### MAKE MODEL
    q1 = chip.Qubit(
        name="Q1",
        desc="Qubit 1",
        freq=Qty(
            value=freq,
            min_val=4.995e9,
            max_val=5.005e9,
            unit="Hz 2pi",
        ),
        anhar=Qty(
            value=anhar,
            # min_val=-380e9,
            # max_val=-120e6,
            unit="Hz 2pi",
        ),
        hilbert_dim=qubit_lvls,
        temp=Qty(value=qubit_temp, min_val=0.0, max_val=0.12, unit="K"),
    )

    drive = chip.Drive(
        name="d1",
        desc="Drive 1",
        comment="Drive line 1 on qubit 1",
        connected=["Q1"],
        hamiltonian_func=hamiltonians.x_drive,
    )
    phys_components = [q1]
    line_components = [drive]

    init_ground = tasks.InitialiseGround(
        init_temp=Qty(value=init_temp, min_val=-0.001, max_val=0.22, unit="K"))
    task_list = [init_ground]
    model = Mdl(phys_components, line_components, task_list)
    model.set_lindbladian(lindblad)
    model.set_dressed(dressed)

    # ### MAKE GENERATOR
    generator = Gnr(
        devices={
            "LO":
            devices.LO(name="lo", resolution=sim_res, outputs=1),
            "AWG":
            devices.AWG(name="awg", resolution=awg_res, outputs=1),
            "DigitalToAnalog":
            devices.DigitalToAnalog(name="dac",
                                    resolution=sim_res,
                                    inputs=1,
                                    outputs=1),
            "Response":
            devices.Response(
                name="resp",
                rise_time=Qty(value=0.3e-9,
                              min_val=0.05e-9,
                              max_val=0.6e-9,
                              unit="s"),
                resolution=sim_res,
                inputs=1,
                outputs=1,
            ),
            "Mixer":
            devices.Mixer(name="mixer", inputs=2, outputs=1),
            "VoltsToHertz":
            devices.VoltsToHertz(
                name="v_to_hz",
                V_to_Hz=Qty(value=1e9,
                            min_val=0.9e9,
                            max_val=1.1e9,
                            unit="Hz/V"),
                inputs=1,
                outputs=1,
            ),
        },
        chains={
            "d1": [
                "LO", "AWG", "DigitalToAnalog", "Response", "Mixer",
                "VoltsToHertz"
            ]
        },
    )
    generator.devices["AWG"].enable_drag_2()

    # ### MAKE GATESET
    gauss_params_single = {
        "amp":
        Qty(value=0.45, min_val=0.4, max_val=0.6, unit="V"),
        "t_final":
        Qty(value=t_final,
            min_val=0.5 * t_final,
            max_val=1.5 * t_final,
            unit="s"),
        "sigma":
        Qty(value=t_final / 4,
            min_val=t_final / 8,
            max_val=t_final / 2,
            unit="s"),
        "xy_angle":
        Qty(value=0.0, min_val=-0.5 * np.pi, max_val=2.5 * np.pi, unit="rad"),
        "freq_offset":
        Qty(
            value=-sideband - 0.5e6,
            min_val=-60 * 1e6,
            max_val=-40 * 1e6,
            unit="Hz 2pi",
        ),
        "delta":
        Qty(value=-1, min_val=-5, max_val=3, unit=""),
    }

    gauss_params_pi = {
        "amp":
        Qty(value=0.8, min_val=0.4, max_val=0.9, unit="V"),
        "t_final":
        Qty(value=t_final,
            min_val=0.5 * t_final,
            max_val=1.5 * t_final,
            unit="s"),
        "sigma":
        Qty(value=t_final / 4,
            min_val=t_final / 8,
            max_val=t_final / 2,
            unit="s"),
        "xy_angle":
        Qty(value=0.0, min_val=-0.5 * np.pi, max_val=2.5 * np.pi, unit="rad"),
        "freq_offset":
        Qty(
            value=-sideband - 0.5e6,
            min_val=-60 * 1e6,
            max_val=-40 * 1e6,
            unit="Hz 2pi",
        ),
        "delta":
        Qty(value=-1, min_val=-5, max_val=3, unit=""),
    }

    gauss_env_pi = pulse.Envelope(
        name="gauss",
        desc="Gaussian comp for single-qubit gates",
        params=gauss_params_pi,
        shape=envelopes.gaussian_nonorm,
    )

    gauss_env_single = pulse.Envelope(
        name="gauss",
        desc="Gaussian comp for single-qubit gates",
        params=gauss_params_single,
        shape=envelopes.gaussian_nonorm,
    )
    nodrive_env = pulse.Envelope(
        name="no_drive",
        params={
            "t_final":
            Qty(value=t_final,
                min_val=0.5 * t_final,
                max_val=1.5 * t_final,
                unit="s")
        },
        shape=envelopes.no_drive,
    )
    carrier_parameters = {
        "freq":
        Qty(
            value=lo_freq,
            min_val=4.5e9,
            max_val=6e9,
            unit="Hz 2pi",
        ),
        "framechange":
        Qty(value=0.0, min_val=-np.pi, max_val=3 * np.pi, unit="rad"),
    }
    carr = pulse.Carrier(
        name="carrier",
        desc="Frequency of the local oscillator",
        params=carrier_parameters,
    )

    #  for 1<->2
    carrier2_parameters = {
        "freq":
        Qty(
            value=lo2_freq,
            min_val=4.5e9,
            max_val=6e9,
            unit="Hz 2pi",
        ),
        "framechange":
        Qty(value=0.0, min_val=-np.pi, max_val=3 * np.pi, unit="rad"),
    }
    carr2 = pulse.Carrier(
        name="carrier",
        desc="Frequency of the local oscillator 2",
        params=carrier2_parameters,
    )

    PI01p = gates.Instruction(name="PI01p",
                              t_start=0.0,
                              t_end=t_final,
                              channels=["d1"])
    RX90p = gates.Instruction(name="RX90p",
                              t_start=0.0,
                              t_end=t_final,
                              channels=["d1"])
    RXp12 = gates.Instruction(name="RXp12",
                              t_start=0.0,
                              t_end=t_final,
                              channels=["d1"])
    RXp = gates.Instruction(name="RXp",
                            t_start=0.0,
                            t_end=t_final,
                            channels=["d1"])
    QId = gates.Instruction(name="Id",
                            t_start=0.0,
                            t_end=t_final,
                            channels=["d1"])

    PI01p.add_component(gauss_env_pi, "d1")
    PI01p.add_component(carr, "d1")
    RX90p.add_component(gauss_env_single, "d1")
    RX90p.add_component(carr, "d1")
    RXp12.add_component(gauss_env_pi, "d1")
    RXp12.add_component(carr2, "d1")
    RXp.add_component(gauss_env_pi, "d1")
    RXp.add_component(carr, "d1")

    QId.add_component(nodrive_env, "d1")
    QId.add_component(copy.deepcopy(carr), "d1")
    QId.comps["d1"]["carrier"].params["framechange"].set_value(
        (-sideband * t_final) % (2 * np.pi))
    RY90p = copy.deepcopy(RX90p)
    RY90p.name = "RY90p"
    RX90m = copy.deepcopy(RX90p)
    RX90m.name = "RX90m"
    RY90m = copy.deepcopy(RX90p)
    RY90m.name = "RY90m"
    RY90p.comps["d1"]["gauss"].params["xy_angle"].set_value(0.5 * np.pi)
    RX90m.comps["d1"]["gauss"].params["xy_angle"].set_value(np.pi)
    RY90m.comps["d1"]["gauss"].params["xy_angle"].set_value(1.5 * np.pi)

    parameter_map = PMap(
        instructions=[QId, RX90p, RY90p, RX90m, RY90m, RXp12, PI01p, RXp],
        model=model,
        generator=generator)

    # ### MAKE EXPERIMENT
    exp = Exp(pmap=parameter_map)
    return exp
Ejemplo n.º 7
0
def create_experiment():
    lindblad = False
    dressed = True
    qubit_lvls = 3
    freq = 5e9 * 2 * np.pi
    anhar = -210e6 * 2 * np.pi
    init_temp = 0
    qubit_temp = 0
    v2hz = 1e9
    t_final = 7e-9   # Time for single qubit gates
    sim_res = 100e9
    awg_res = 2e9
    sideband = 50e6 * 2 * np.pi
    lo_freq = 5e9 * 2 * np.pi + sideband

    # ### MAKE MODEL
    q1 = chip.Qubit(
        name="Q1",
        desc="Qubit 1",
        freq=Qty(
            value=freq,
            min=4.995e9 * 2 * np.pi,
            max=5.005e9 * 2 * np.pi,
            unit='Hz 2pi'
        ),
        anhar=Qty(
            value=anhar,
            min=-380e6 * 2 * np.pi,
            max=-120e6 * 2 * np.pi,
            unit='Hz 2pi'
        ),
        hilbert_dim=qubit_lvls,
        temp=Qty(
            value=qubit_temp,
            min=0.0,
            max=0.12,
            unit='K'
        )
    )

    drive = chip.Drive(
        name="d1",
        desc="Drive 1",
        comment="Drive line 1 on qubit 1",
        connected=["Q1"],
        hamiltonian_func=hamiltonians.x_drive
    )
    phys_components = [q1]
    line_components = [drive]

    init_ground = tasks.InitialiseGround(
        init_temp=Qty(
            value=init_temp,
            min=-0.001,
            max=0.22,
            unit='K'
        )
    )
    task_list = [init_ground]
    model = Mdl(phys_components, line_components, task_list)
    model.set_lindbladian(lindblad)
    model.set_dressed(dressed)

    # ### MAKE GENERATOR
    lo = devices.LO(name='lo', resolution=sim_res)
    awg = devices.AWG(name='awg', resolution=awg_res)
    mixer = devices.Mixer(name='mixer')

    v_to_hz = devices.VoltsToHertz(
        name='v_to_hz',
        V_to_Hz=Qty(
            value=v2hz,
            min=0.9e9,
            max=1.1e9,
            unit='Hz 2pi/V'
        )
    )
    dig_to_an = devices.DigitalToAnalog(
        name="dac",
        resolution=sim_res
    )
    resp = devices.Response(
        name='resp',
        rise_time=Qty(
            value=0.3e-9,
            min=0.05e-9,
            max=0.6e-9,
            unit='s'
        ),
        resolution=sim_res
    )

    device_list = [lo, awg, mixer, v_to_hz, dig_to_an, resp]
    generator = Gnr(device_list)
    generator.devices['awg'].enable_drag_2()

    # ### MAKE GATESET
    gauss_params_single = {
        'amp': Qty(
            value=0.45,
            min=0.4,
            max=0.6,
            unit="V"
        ),
        't_final': Qty(
            value=t_final,
            min=0.5 * t_final,
            max=1.5 * t_final,
            unit="s"
        ),
        'sigma': Qty(
            value=t_final / 4,
            min=t_final / 8,
            max=t_final / 2,
            unit="s"
        ),
        'xy_angle': Qty(
            value=0.0,
            min=-0.5 * np.pi,
            max=2.5 * np.pi,
            unit='rad'
        ),
        'freq_offset': Qty(
            value=-sideband - 0.5e6 * 2 * np.pi,
            min=-60 * 1e6 * 2 * np.pi,
            max=-40 * 1e6 * 2 * np.pi,
            unit='Hz 2pi'
        ),
        'delta': Qty(
            value=-1,
            min=-5,
            max=3,
            unit=""
        )
    }

    gauss_env_single = pulse.Envelope(
        name="gauss",
        desc="Gaussian comp for single-qubit gates",
        params=gauss_params_single,
        shape=envelopes.gaussian_nonorm
    )
    nodrive_env = pulse.Envelope(
        name="no_drive",
        params={
            't_final': Qty(
                value=t_final,
                min=0.5 * t_final,
                max=1.5 * t_final,
                unit="s"
            )
        },
        shape=envelopes.no_drive
    )
    carrier_parameters = {
        'freq': Qty(
            value=lo_freq,
            min=4.5e9 * 2 * np.pi,
            max=6e9 * 2 * np.pi,
            unit='Hz 2pi'
        ),
        'framechange': Qty(
            value=0.0,
            min= -np.pi,
            max= 3 * np.pi,
            unit='rad'
        )
    }
    carr = pulse.Carrier(
        name="carrier",
        desc="Frequency of the local oscillator",
        params=carrier_parameters
    )

    X90p = gates.Instruction(
        name="X90p",
        t_start=0.0,
        t_end=t_final,
        channels=["d1"]
    )
    QId = gates.Instruction(
        name="Id",
        t_start=0.0,
        t_end=t_final,
        channels=["d1"]
    )

    X90p.add_component(gauss_env_single, "d1")
    X90p.add_component(carr, "d1")
    QId.add_component(nodrive_env, "d1")
    QId.add_component(copy.deepcopy(carr), "d1")
    QId.comps['d1']['carrier'].params['framechange'].set_value(
        (-sideband * t_final) % (2*np.pi)
    )
    Y90p = copy.deepcopy(X90p)
    Y90p.name = "Y90p"
    X90m = copy.deepcopy(X90p)
    X90m.name = "X90m"
    Y90m = copy.deepcopy(X90p)
    Y90m.name = "Y90m"
    Y90p.comps['d1']['gauss'].params['xy_angle'].set_value(0.5 * np.pi)
    X90m.comps['d1']['gauss'].params['xy_angle'].set_value(np.pi)
    Y90m.comps['d1']['gauss'].params['xy_angle'].set_value(1.5 * np.pi)

    parameter_map = PMap(instructions=[QId, X90p, Y90p, X90m, Y90m], model=model, generator=generator)

    # ### MAKE EXPERIMENT
    exp = Exp(pmap=parameter_map)
    return exp
Ejemplo n.º 8
0
              unit="Wb"),
    phi=Qty(value=fluxpoint,
            min_val=-1.0 * phi_0_tc,
            max_val=1.0 * phi_0_tc,
            unit="Wb"),
    omega_0=Qty(value=freq_tc,
                min_val=0.9 * freq_tc,
                max_val=1.1 * freq_tc,
                unit="Hz 2pi"),
    d=Qty(value=d, min_val=d * 0.9, max_val=d * 1.1, unit=""),
    anhar=Qty(value=anhar_q1, min_val=-380e6, max_val=-120e6, unit="Hz 2pi"),
)
v_to_hz = devices.VoltsToHertz(
    name="v2hz",
    V_to_Hz=Qty(value=v2hz,
                min_val=0.9 * v2hz,
                max_val=1.1 * v2hz,
                unit="Hz 2pi/V"),
)
device_dict = {
    dev.name: dev
    for dev in [lo, awg, mixer, dig_to_an, resp, v_to_hz, fluxbias]
}
generator = Gnr(
    devices=device_dict,
    chains={
        "TC": {
            "lo": [],
            "awg": [],
            "dac": ["awg"],
            "resp": ["dac"],