예제 #1
0
def PSB_read_latched(segment, gates, t_ramp, t_read, p_0, p_1, p_2, disable_trigger=False):
    '''
    pulse able to perform a psb readout

    Args:
        segment (segment_container) : segment to which to add this stuff
        gates (tuple<str>) : plunger gate names
        t_ramp (double) : time to linearly ramp trought the anticrossing
        t_read (double) : readout time
        p_0 (tuple <double>) : starting point
        p_1 (tuple <double>) : point after the anticrossing
        p_2 (tuple <double>) : effective point where the averaging should happen
        disable_trigger (bool) : disable triggerig for digitizer, only for debuggig.
    '''
    # jump close to (1,1) -- (2,0) wait 100 ns
    add_block(segment, 100, gates, p_0)

    # pulse towards the window and stay for the measurment time
    add_ramp(segment, t_ramp, gates, p_0, p_1)
    add_ramp(segment, 10, gates, p_1, p_2)


    if disable_trigger == False:
        getattr(segment, gates[0]).add_HVI_marker("dig_trigger_1")
        getattr(segment, gates[0]).add_HVI_variable("t_measure", t_read)

    add_block(segment, t_read, gates, p_2)
예제 #2
0
def CROT_basic(segment,
               gates,
               v_exchange_pulse_off,
               v_exchange_pulse_on,
               gate_spec,
               t_ramp,
               padding=2):
    '''
    basic cphase, with a linear ramp

    Args:
        segment (segment_container) : segment to which to add this stuff
        gates (tuple<str>) : gates to be pulses for this gate.
        barrier_gate (str) : barrier to pulse (for the ac)
        v_exchange_pulse (double) : voltage to pulse to
        t_gate (double) : total time of the gate not inclusing the ramps
        t_ramp (double) : ramp time
    '''
    add_ramp(segment, t_ramp, gates, v_exchange_pulse_off, v_exchange_pulse_on)

    add_block(segment, padding, gates, v_exchange_pulse_on)
    for gate, level in zip(gates, v_exchange_pulse_on):
        getattr(segment,
                gate).add_block(0, gate_spec.t_pulse + gate_spec.padding * 2,
                                level)
    gate_spec.add(segment, reset=False)
    segment.reset_time()
    add_block(segment, padding, gates, v_exchange_pulse_on)

    add_ramp(segment, t_ramp, gates, v_exchange_pulse_on, v_exchange_pulse_off)
def iswap_basic(segment,
                gates,
                barrier_gate,
                v_exchange_pulse_off,
                v_exchange_pulse_on,
                v_ac,
                f_ac,
                t_gate,
                t_ramp,
                padding=2):
    '''
    basic iSWAP, with a linear ramp

    Args:
        segment (segment_container) : segment to which to add this stuff
        gates (tuple<str>) : gates to be pulses for this gate.
        barrier_gate (str) : barrier to pulse (for the ac)
        v_exchange_pulse (double) : voltage to pulse to
        t_gate (double) : total time of the gate not inclusing the ramps
        t_ramp (double) : ramp time
    '''
    add_ramp(segment, t_ramp, gates, v_exchange_pulse_off, v_exchange_pulse_on)

    add_block(segment, padding, gates, v_exchange_pulse_on)
    for gate, level in zip(gates, v_exchange_pulse_on):
        getattr(segment, gate).add_block(0, t_gate, level)
    getattr(segment, barrier_gate).add_sin(0, t_gate, v_ac, f_ac)
    segment.reset_time()
    add_block(segment, padding, gates, v_exchange_pulse_on)

    add_ramp(segment, t_ramp, gates, v_exchange_pulse_on, v_exchange_pulse_off)
def jump(segment, gates, t_ramp, p_0, p_1, reset_time=True, **kwargs):
    '''
    deperacted, use ramp instead.

    Args:
        segment (segment_container) : segment to which to add this stuff
        gates (tuple<str>) : plunger gate names
        t_ramp (double) : time to ramp from point 0 to point 1
        p_0 (tuple <double>) : point where to start
        p_1 (tuple <double>) : point where to end.
    '''
    add_ramp(segment, t_ramp, gates, p_0, p_1, reset_time)
예제 #5
0
def PSB_read_tc_ctrl(segment, gates, t_ramp, t_read, p_0, p_1, p_2, nth_readout, disable_trigger=False):
    '''
    pulse able to perform a psb readout, the tunnelcoupling is lowered at the end to make the pulse robust against T1 effects.

    Args:
        segment (segment_container) : segment to which to add this stuff
        gates (tuple<str>) : plunger gate names
        t_ramp (double) : time to linearly ramp trought the anticrossing
        t_read (double) : readout time
        p_0 (tuple <double>) : starting point
        p_1 (tuple<double>) : point after the anticrossing, for readout, when the tunnel coupling is on
        p_2 (tuple<double>) : point after the anticrossing, for readout, when the tunnel coupling oig odff
        disable_trigger (bool) : disable triggerig for digitizer, only for debuggig.
    '''
    # pulse towards the window and stay for the measurment time
    add_ramp(segment, t_ramp, gates, p_0, p_1)
    add_ramp(segment, 10, gates, p_1, p_2)


    if disable_trigger == False:
        getattr(segment, gates[0]).add_HVI_marker("dig_trigger_{}".format(int(nth_readout)))
        getattr(segment, gates[0]).add_HVI_variable("t_measure", t_read)

    add_block(segment, t_read, gates, p_2)
    add_ramp(segment, 10, gates, p_2, p_1)
    add_ramp(segment, t_ramp, gates, p_1, p_0)
def pulse_in_out(segment, gates, t_ramp, t_wait, p_0, p_1, p_2, **kwargs):
    '''
    pulse sequence to go adiabatically trough an interdot.
    The standard time to go from p_0 to p_1 and p_2 to p_3 is 100ns

    Args:
        segment (segment_container) : segment to which to add this stuff
        gates (tuple<str>) : plunger gate names
        t_ramp (double) : time to linearly ramp trought the anticrossing
        t_wait (double) : time to wait at p1
        p_0 (tuple <double>) : starting point
        p_1 (tuple<double>) : point where to wait
    '''
    # move towards anti-crossing, standaard 100ns
    add_ramp(segment, t_ramp, gates, p_0, p_1)
    add_ramp(segment, t_ramp, gates, p_1, p_2)

    # go though the anti-crossing
    add_block(segment, t_wait, gates, p_2)

    # move towards anti-crossing, standaard 100ns
    add_ramp(segment, t_ramp, gates, p_2, p_1)

    # move towards anti-crossing, standaard 100ns
    add_ramp(segment, t_ramp, gates, p_1, p_0)
def pulse_intra(segment, gates, t_wait, t_ramp, p_0, p_1, **kwargs):
    '''
    pulse over a transition line of 1 dot (e.g. N=0->N=1).
    first wait at p_0, the adiabatically ramp to p_1

    Args:
        segment (segment_container) : segment to which to add this stuff
        gates (tuple<str>) : plunger gate names
        t_wait (double) : time wait at p_0
        p_0 (tuple <double>) : starting point
        p_1 (tuple<double>) : end point after the ramp
    '''
    # wait a bit at the first point, e.g. make sure you are in the right charge state
    add_block(segment, t_wait, gates, p_0)

    # ramp slowly to where you want to be.
    add_ramp(segment, t_ramp, gates, p_0, p_1)
def elzerman_basic(segment,
                   gates,
                   t_init,
                   t_ramp,
                   t_load,
                   t_read,
                   p_0,
                   p_1,
                   p_2,
                   p_3,
                   p_4,
                   disable_trigger=False,
                   **kwargs):
    '''
    pulse able to perform a psb readout

    Args:
        segment (segment_container) : segment to which to add this stuff
        gates (tuple<str>) : plunger gate names
        t_init (double) : initialisation time to eject electron
        t_ramp (double) : time to ramp
        t_load (double) : time to wait at the load stage
        t_read (double) : readout time
        p_0 (tuple <double>) : init point
        p_1 (tuple <double>) : ramp start from N=0 to N=1
        p_2 (tuple <double>) : ramp end from N=0 to N=1
        p_3 (tuple <double>) : operating point
        p_4 (tuple <double>) : point where to readout
        disable_trigger (bool) : disable triggerig for digitizer, only for debuggig.
    '''
    # init
    add_block(segment, t_init, gates, p_0)

    # pulse towards the window and stay for the measurment time
    add_ramp(segment, t_ramp, gates, p_1, p_2)
    add_block(segment, t_load, gates, p_3)

    if disable_trigger == False:
        getattr(segment, gates[0]).add_HVI_marker("dig_wait")
        getattr(segment, gates[0]).add_HVI_variable("t_measure", t_read)

    add_block(segment, t_read, gates, p_4)
예제 #9
0
def PSB_read_multi(segment, gates, t_ramp, t_read, p_0, p_1, nth_readout=0,  unmute=None, disable_trigger=False):
    '''
    pulse able to perform a psb readout

    Args:
        segment (segment_container) : segment to which to add this stuff
        gates (tuple<str>) : plunger gate names
        t_ramp (double) : time to linearly ramp trought the anticrossing
        t_read (double) : readout time
        p_0 (tuple <double>) : starting point
        p_1 (tuple<double>) : point after the anticrossing, where the readout should happen.
        disable_trigger (bool) : disable triggerig for digitizer, only for debuggig.
    '''
    # pulse towards the window and stay for the measurment time
    add_ramp(segment, t_ramp, gates, p_0, p_1)
    if unmute is not None:
        getattr(segment, unmute).add_marker(0, t_read)
    if disable_trigger == False:
        getattr(segment, gates[0]).add_HVI_marker("dig_trigger_{}".format(int(nth_readout)))
        getattr(segment, gates[0]).add_HVI_variable("t_measure", t_read)

    add_block(segment, t_read, gates, p_1)
    add_ramp(segment, t_ramp, gates, p_1, p_0)