Beispiel #1
0
def workup_adiabatic_w_control_correct_phase_bnc(fh, T_before, T_after, T_bf, T_af,
                        fp, fc, fs_dec):
    tps = fh['tp tip [s]'][:] # ms to s
    groups = fh['data'].keys()
    df = pd.DataFrame(index=pd.MultiIndex.from_product(
        (['data', 'control'], tp_groups), names=['expt', 'ds']))
    lis = {}
    locks = {}
    i = 0
    for control_or_data in ('control', 'data'):
        lis[control_or_data] = []
        locks[control_or_data] = []
        for tp_group in tqdm(groups):
            gr = fh[control_or_data][tp_group]
            print_response = i == 0
            try:
                N2even = gr.attrs['Calc BNC565 CantClk.N2 (even)']
                t1 = gr.attrs['Abrupt BNC565 CantClk.t1 [s]']
                t2 = np.sum(gr["half periods [s]"][:N2even+1])
                tp = np.sum(gr.attrs["Abrupt BNC565 CantClk.tp tip [s]"])
                t0 = -(t1 + t2)
                x = gr['cantilever-nm'][:]
                dt = fh['data/0000/dt [s]'].value
                fs = 1. / dt
                lock = lockin.adiabatic2lockin(gr, t0=t0)
                lock.lock2(fp=fp, fc=fc, print_response=False)
                lock.phase(tf=-t2)
                f0_V0 = lock.f0corr
                lock.phase(ti=-t2, tf=0)
                f0_V1 = lock.f0corr
                dphi, li = lockin.delta_phi_group(
                    gr, tp, T_before, T_after,
                    T_bf, T_af, fp, fc, fs_dec, print_response=print_response,
                    t0=t0)

                phi_at_tp, dA, dphi_tp_end = measure_dA_dphi(lock, li, tp)
                lis[control_or_data].append(li)
                locks[control_or_data].append(lock)
                i += 1

                curr_index = (control_or_data, tp_group)
                df.loc[curr_index, 'tp'] = tp
                df.loc[curr_index, 'dphi [cyc]'] = dphi/(2*np.pi)
                df.loc[curr_index, 'f0 [Hz]'] = f0_V0
                df.loc[curr_index, 'df_dV [Hz]'] = f0_V1 - f0_V0
                df.loc[curr_index, 'dA [nm]'] = dA
                df.loc[curr_index, 'dphi_tp_end [cyc]'] = dphi_tp_end
                df.loc[curr_index, 'phi_at_tp [rad]'] = phi_at_tp
                df.loc[curr_index, 'relative time [s]'] = gr['relative time [s]'].value
            except Exception as e:
                print(e)
                pass

    try:
        df.sort_index(inplace=True)
        print(df)

        df_clean = df.dropna()

        control = df_clean.xs('control')
        data = df_clean.xs('data')

        popt_phi, pcov_phi = optimize.curve_fit(offset_cos,
            control['phi_at_tp [rad]'], control['dphi_tp_end [cyc]'])
        popt_A, pcov_A = optimize.curve_fit(offset_cos,
            control['phi_at_tp [rad]'], control['dA [nm]'])

        df['dphi_corrected [cyc]'] = (df['dphi [cyc]']
                                - offset_cos(df['phi_at_tp [rad]'], *popt_phi))

        df_clean = df.dropna()
        control = df_clean.xs('control')
        data = df_clean.xs('data')

        # Issues here; not properly sorted, etc.
        popt_phase_corr, pcov_phase_corr = optimize.curve_fit(phase_step, data['tp'], data['dphi_corrected [cyc]'])
        popt_phase, pcov_phase = optimize.curve_fit(phase_step, data['tp'], data['dphi [cyc]'])

        # Extra information
        extras = {'popt_phi': popt_phi,
             'pcov_phi': pcov_phi,
             'pdiag_phi': np.diagonal(pcov_phi)**0.5,
             'popt_A': popt_A,
             'pcov_A': pcov_A,
             'pdiag_A': np.diagonal(pcov_A)**0.5,
             'popt_phase_corr': popt_phase_corr,
             'pcov_phase_corr': pcov_phase_corr,
             'pdiag_phase_corr': np.diagonal(pcov_phase_corr)**0.5,
             'popt_phase': popt_phase,
             'pcov_phase': pcov_phase,
             'pdiag_phase': np.diagonal(pcov_phase)**0.5,
             'params': {
             'T_before': T_before,
             'T_after': T_after,
             'T_bf': T_bf,
             'T_af': T_af,
             'fp': fp,
             'fc': fc,
             'fs_dec': fs_dec,
             'filename': fh.filename
             },
            'file_attrs_str': prnDict(dict(fh.attrs.items()), braces=False),
            'dataset_attrs_str': prnDict(dict(fh['data/0000'].attrs.items()), braces=False),
             'lis': lis,
             'locks': locks}

        return df, extras

    except Exception as e:
        print(e)
        raise
Beispiel #2
0
def workup_adiabatic_w_control_correct_phase(fh, T_before, T_after, T_bf, T_af,
                        fp, fc, fs_dec):
    tps = fh['tp'][:] * 0.001 # ms to s
    groups = fh['data'].keys()
    df = pd.DataFrame(index=pd.MultiIndex.from_product(
        (['data', 'control'], groups), names=['expt', 'ds']))
    lis = {}
    locks = {}
    i = 0
    for control_or_data in ('control', 'data'):
        lis[control_or_data] = []
        locks[control_or_data] = []
        for tp_group in tqdm(groups):
            gr = fh[control_or_data][tp_group]
            tp = gr.attrs['Adiabatic Parameters.tp [ms]'] * 0.001
            print_response = i == 0
            t1 = gr.attrs['Adiabatic Parameters.t1 [ms]'] * 0.001
            t2 = gr.attrs['Adiabatic Parameters.t2 [ms]'] * 0.001
            lock = lockin.adiabatic2lockin(gr)
            lock.lock2(fp=fp, fc=fc, print_response=False)
            lock.phase(tf=-t2)
            f0_V0 = lock.f0corr
            lock.phase(ti=-t2, tf=0)
            f0_V1 = lock.f0corr
            dphi, li = lockin.delta_phi_group(
                gr, tp, T_before, T_after,
                T_bf, T_af, fp, fc, fs_dec, print_response=print_response)

            phi_at_tp, dA, dphi_tp_end = measure_dA_dphi(lock, li, tp)
            lis[control_or_data].append(li)
            locks[control_or_data].append(lock)
            i += 1

            curr_index = (control_or_data, tp_group)
            df.loc[curr_index, 'tp'] = tp
            df.loc[curr_index, 'dphi [cyc]'] = dphi/(2*np.pi)
            df.loc[curr_index, 'f0 [Hz]'] = f0_V0
            df.loc[curr_index, 'df_dV [Hz]'] = f0_V1 - f0_V0
            df.loc[curr_index, 'dA [nm]'] = dA
            df.loc[curr_index, 'dphi_tp_end [cyc]'] = dphi_tp_end
            df.loc[curr_index, 'phi_at_tp [rad]'] = phi_at_tp
            df.loc[curr_index, 'relative time [s]'] = gr['relative time [s]'].value

    sys.stdout.write('\n')

    df.sort_index(inplace=True)

    control = df.xs('control')
    data = df.xs('data')
    popt_phi, pcov_phi = optimize.curve_fit(offset_cos,
        control['phi_at_tp [rad]'], control['dphi_tp_end [cyc]'])
    popt_A, pcov_A = optimize.curve_fit(offset_cos,
        control['phi_at_tp [rad]'], control['dA [nm]'])

    df['dphi_corrected [cyc]'] = (df['dphi [cyc]']
                            - offset_cos(df['phi_at_tp [rad]'], *popt_phi))

    control = df.xs('control')
    data = df.xs('data')


    popt_phase_corr, pcov_phase_corr = optimize.curve_fit(phase_step, data['tp'], data['dphi_corrected [cyc]'])
    popt_phase, pcov_phase = optimize.curve_fit(phase_step, data['tp'], data['dphi [cyc]'])

    # Extra information
    extras = {'popt_phi': popt_phi,
         'pcov_phi': pcov_phi,
         'pdiag_phi': np.diagonal(pcov_phi)**0.5,
         'popt_A': popt_A,
         'pcov_A': pcov_A,
         'pdiag_A': np.diagonal(pcov_A)**0.5,
         'popt_phase_corr': popt_phase_corr,
         'pcov_phase_corr': pcov_phase_corr,
         'pdiag_phase_corr': np.diagonal(pcov_phase_corr)**0.5,
         'popt_phase': popt_phase,
         'pcov_phase': pcov_phase,
         'pdiag_phase': np.diagonal(pcov_phase)**0.5,
         'params': {
         'T_before': T_before,
         'T_after': T_after,
         'T_bf': T_bf,
         'T_af': T_af,
         'fp': fp,
         'fc': fc,
         'fs_dec': fs_dec,
         'filename': fh.filename
         },
         'file_attrs_str': prnDict(dict(fh.attrs.items()), braces=False),
         'dataset_attrs_str': prnDict(dict(fh['data/0000'].attrs.items()), braces=False),
         'lis': lis,
         'locks': locks}

    # Do a fit to the corrected phase data here.

    return df, extras