def hahn_echo_variable_delayline(name,
                                 debug=False,
                                 vary_refocussing_time=True,
                                 range_start=-2e-6,
                                 range_end=2e6,
                                 evolution_1_self_trigger=False,
                                 evolution_2_self_trigger=False,
                                 refocussing_time=1e-6):
    m = pulsar_delay.ElectronRefocussingTriggered(name)

    m.params.from_dict(qt.exp_params['samples'][SAMPLE])
    m.params.from_dict(qt.exp_params['protocols']['AdwinSSRO'])
    m.params.from_dict(qt.exp_params['protocols'][SAMPLE_CFG]['AdwinSSRO'])
    m.params.from_dict(
        qt.exp_params['protocols'][SAMPLE_CFG]['AdwinSSRO-integrated'])
    m.params.from_dict(qt.exp_params['protocols']['AdwinSSRO+espin'])
    m.params.from_dict(qt.exp_params['protocols']['cr_mod'])
    m.params.from_dict(qt.exp_params['protocols'][SAMPLE_CFG]['pulses'])
    m.params.from_dict(qt.exp_params['protocols']['AdwinSSRO+delay'])

    m.params['delay_to_voltage_fitparams'] = np.loadtxt(
        '../lt4_V_c_from_dl_fit_20170323_1914.txt')
    m.params['delay_to_voltage_fitfunc'] = V_c_from_dl_fit

    m.params['pulse_type'] = 'Hermite'

    m.params['Ex_SP_amplitude'] = 0
    m.params['AWG_to_adwin_ttl_trigger_duration'] = 2e-6
    m.params['wait_for_AWG_done'] = 1
    m.params['sequence_wait_time'] = 1

    m.params['self_trigger_duration'] = 100e-9

    # m.params['delay_voltage_DAC_channel'] = 16 # should be moved to msmt_params?
    m.params['do_delay_voltage_control'] = 1

    pts = 11

    m.params['pts'] = pts
    m.params['repetitions'] = 1000

    if vary_refocussing_time:
        m.params['refocussing_time'] = np.linspace(range_start, range_end, pts)
        m.params['defocussing_offset'] = 0.0 * np.ones(pts)
        m.params['self_trigger_delay'] = m.params['refocussing_time']

        m.params['sweep_name'] = 'single-sided free evolution time (us)'
        m.params['sweep_pts'] = (m.params['refocussing_time']) * 1e6

    else:
        m.params['refocussing_time'] = np.ones(pts) * refocussing_time
        m.params['defocussing_offset'] = np.linspace(range_start, range_end,
                                                     pts)
        m.params['self_trigger_delay'] = m.params['refocussing_time']

        m.params['sweep_name'] = 'defocussing offset (us)'
        m.params['sweep_pts'] = (m.params['defocussing_offset']) * 1e6

    # MW pulses
    X_pi2 = ps.Xpi2_pulse(m)
    X_pi = ps.X_pulse(m)

    # Start measurement
    m.autoconfig()
    print(m.params['delay_voltages'])
    m.generate_sequence(upload=True,
                        pulse_pi2=X_pi2,
                        pulse_pi=X_pi,
                        evolution_1_self_trigger=evolution_1_self_trigger,
                        evolution_2_self_trigger=evolution_2_self_trigger)

    if not debug:
        m.run(autoconfig=False)
        m.save()
        m.finish()
def electronRefocussingTriggered(name,
                                 debug=False,
                                 range_start=-2e-6,
                                 range_end=2e-6,
                                 evolution_1_self_trigger=True,
                                 evolution_2_self_trigger=False,
                                 vary_refocussing_time=False,
                                 refocussing_time=200e-6):
    m = pulsar_delay.ElectronRefocussingTriggered(name)

    m.params.from_dict(qt.exp_params['samples'][SAMPLE])
    m.params.from_dict(qt.exp_params['protocols']['AdwinSSRO'])
    m.params.from_dict(qt.exp_params['protocols'][SAMPLE_CFG]['AdwinSSRO'])
    m.params.from_dict(
        qt.exp_params['protocols'][SAMPLE_CFG]['AdwinSSRO-integrated'])
    m.params.from_dict(qt.exp_params['protocols']['AdwinSSRO+espin'])
    m.params.from_dict(qt.exp_params['protocols']['cr_mod'])
    m.params.from_dict(qt.exp_params['protocols'][SAMPLE_CFG]['pulses'])

    m.params['pulse_type'] = 'Hermite'

    m.params['Ex_SP_amplitude'] = 0
    m.params[
        'AWG_to_adwin_ttl_trigger_duration'] = 2e-6  # commenting this out gives an erro
    m.params['wait_for_AWG_done'] = 1
    m.params['sequence_wait_time'] = 1

    m.params['do_delay_voltage_control'] = 0
    m.params['delay_voltage_DAC_channel'] = 14

    pts = 51
    m.params['pts'] = pts
    m.params['repetitions'] = 1000
    #m.params['wait_for_AWG_done']=1
    #m.params['evolution_times'] = np.linspace(0,0.25*(pts-1)*1/m.params['N_HF_frq'],pts)
    # range from 0 to 1000 us

    # calibrated using Hahn echo
    m.params['self_trigger_delay'] = 2.950e-6 * np.ones(pts)
    m.params['self_trigger_duration'] = 100e-9

    if vary_refocussing_time:
        m.params['refocussing_time'] = np.linspace(range_start, range_end, pts)
        m.params['defocussing_offset'] = 0.0 * np.ones(pts)

        m.params['sweep_name'] = 'single-sided free evolution time (us)'
        m.params['sweep_pts'] = (m.params['refocussing_time']) * 1e6

    else:
        m.params['refocussing_time'] = np.ones(pts) * refocussing_time
        m.params['defocussing_offset'] = np.linspace(range_start, range_end,
                                                     pts)

        m.params['sweep_name'] = 'defocussing offset (us)'
        m.params['sweep_pts'] = (m.params['defocussing_offset']) * 1e6

    # MW pulses
    X_pi2 = ps.Xpi2_pulse(m)
    X_pi = ps.X_pulse(m)

    # for the self-triggering through the delay line
    # m.params['self_trigger_delay'] = 500e-9 # 0.5 us
    # m.params['self_trigger_duration'] = 100e-9

    # Start measurement
    m.autoconfig()
    m.generate_sequence(upload=True,
                        pulse_pi2=X_pi2,
                        pulse_pi=X_pi,
                        evolution_1_self_trigger=evolution_1_self_trigger,
                        evolution_2_self_trigger=evolution_2_self_trigger)

    if not debug:
        m.run(autoconfig=False)
        m.save()
        m.finish()