def curve_loader(value): rs = data[data[independent_variable_name] == value] result = read_csv( filename_containing_string_in_dirs(file_key_format % rs[file_key_column].iloc[0], search_dirs) ) result.columns = file_column_names if len(rs.index) > 1: for i, r in rs[1:].iterrows(): d = read_csv( filename_containing_string_in_dirs(file_key_format % rs[file_key_column].iloc[0], search_dirs) ) d.columns = file_column_names result = result.append(d) return result
def plot_hanle_curve_fits( data, key_col="Timestamp", var_col="W", A1_col="A1", A2_col="A2", k1_col="k1", k2_col="k2", L1_col="L1", L2_col="L2", y0_col="y0", Field_col="Field", FR_col="FR", file_key_format="%04d", search_dirs=".", file_column_names=["Field", "X", "Y", "PDA", "FR", "Timestamp"], ): for i in range(0, len(data.index)): d = read_csv(filename_containing_string_in_dirs(file_key_format % data.loc[i, key_col], search_dirs)) d.columns = file_column_names p = [data.loc[i, A1_col], data.loc[i, k1_col], data.loc[i, A2_col], data.loc[i, k2_col], data.loc[i, y0_col]] dm = d.groupby("Field") fig = double_lorentzian_fig( p, d[Field_col], d[FR_col], xm=dm.Field.mean(), ym=dm.FR.mean(), title=(file_key_format + "\n %fnm, %fns, %fns") % (data.loc[i, key_col], data.loc[i, var_col], data.loc[i, L1_col] / 1e-9, data.loc[i, L2_col] / 1e-9), ) fig.savefig("./fits/%04d_%04d.pdf" % (data.loc[i, var_col] * 10, data.loc[i, key_col])) plt.close(fig)
def generate_hanle_params( data, file_key_column, independent_variable_name, search_dirs, fit_paths, file_key_format="%04d", file_column_names=["Field", "X", "Y", "PDA", "FR", "Timestamp"], mag_field_col_name="Field", faraday_rot_col_name="FR", X_col_name="X", Y_col_name="Y", model=double_lorentzian_centered_no_off, fitter=opt.curve_fit, ): hanle_model_cols = ["A1", "k1", "A2", "k2", "y0"] for c in hanle_model_cols: if not c in data: data[c] = np.nan def curve_loader(value): rs = data[data[independent_variable_name] == value] result = read_csv( filename_containing_string_in_dirs(file_key_format % rs[file_key_column].iloc[0], search_dirs) ) result.columns = file_column_names if len(rs.index) > 1: for i, r in rs[1:].iterrows(): d = read_csv( filename_containing_string_in_dirs(file_key_format % rs[file_key_column].iloc[0], search_dirs) ) d.columns = file_column_names result = result.append(d) return result for init_p, path in fit_paths: progressive_fit( data, curve_loader, init_p, hanle_model_cols, model, path, key_name=independent_variable_name, x_name=mag_field_col_name, y_name=faraday_rot_col_name, fitter=fitter, ) data["L1"] = data[hanle_model_cols[1]].apply(lambda k: hanle_lifetime_gauss_in_sec(abs(k))) data["L2"] = data[hanle_model_cols[3]].apply(lambda k: hanle_lifetime_gauss_in_sec(abs(k))) # Calculate median phase of each Hanle curve and store it in the results if not "MP" in data: data["MP"] = np.nan for i, r in data.iterrows(): d = read_csv(filename_containing_string_in_dirs(file_key_format % r[file_key_column], search_dirs)) d.columns = file_column_names data.loc[i, "MP"] = np.median(np.arctan2(d[Y_col_name], d[X_col_name]))