def gr2lock_daq(gr, fp=2000, fc=8000): t1 = gr.attrs['Adiabatic Parameters.t1 [ms]'] * 0.001 t2 = gr.attrs['Adiabatic Parameters.t2 [ms]'] * 0.001 li = lockin.adiabatic2lockin(gr) li.lock2(fp=fp, fc=fc, print_response=False) li.t1 = t1 li.t2 = t2 return li
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
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