def plot_lifetime_for_power_dependence(db_conn, query, exp_dir, envir, title): hanle_curve_fits = db_conn.spin_optics.hanle_curve_fits query_vars = [ "probe_energy", "sample_temperature", "amplitude", "inv_hwhm", "probe_background", "offset", "pump_intensity", ] fits = field_dataframe(hanle_curve_fits.find(query), query_vars) print(fits) fig, ax = plt.subplots() plt.plot(fits["pump_intensity"], hanle_lifetime_gauss_in_sec(fits["inv_hwhm_0"], g=0.33), "^r", label="g = 0.33") plt.plot(fits["pump_intensity"], hanle_lifetime_gauss_in_sec(fits["inv_hwhm_1"], g=2.7), "ok", label="g = 2.7") ax.set_yticklabels(ax.get_yticks() / 1e-9) ax.set_xticklabels(ax.get_xticks() / 1e-3) plt.xlabel("Pump Intensity (milliwatts)") plt.ylabel("Lifetime (ns)") plt.title(title) plt.legend() plt.savefig(os.path.join(exp_dir, envir["eid"] + " lifetime vs. pump power.pdf")) fits["lifetime_0_0.33 (sec)"] = hanle_lifetime_gauss_in_sec(fits["inv_hwhm_0"], g=0.33) fits["lifetime_1_2.7 (sec)"] = hanle_lifetime_gauss_in_sec(fits["inv_hwhm_1"], g=2.7) fits.columns = dimension_column_labels(fits.columns, db_conn) fits.to_csv(os.path.join(exp_dir, envir["eid"] + " data vs. pump power.csv"))
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]))
def hanle_curve_title_from_params(fit_params, db_conn): sample = db_conn.spin_optics.samples.find_one({"_id": fit_params["sample_id"]}) result = "Hanle Effect on $%s$\n" % sample["system"] if "capping" in sample.keys(): result += 'Capping layer "%s"' % sample["capping"] if "substrate" in sample.keys(): result += ', Substrate "%s"\n' % sample["substrate"] else: result += "\n" result += "Pump %.2f eV @ %d $\mu W$ Probe %.2f eV @ %d $\mu W$\n" % ( fit_params["pump_energy"], fit_params["pump_intensity"] * 1e6, fit_params["probe_energy"], fit_params["probe_intensity"] * 1e6, ) result += "Temperature %.1f K\n" % fit_params["sample_temperature"] for a, l, i in zip(fit_params["amplitude"], fit_params["inv_hwhm"], range(0, len(list(fit_params["amplitude"])))): result += "Peak %d HWHM %d Gauss (g=1 lifetime is %.3fns\n" % ( i + 1, 1 / l, 1e9 * hanle_lifetime_gauss_in_sec(l), ) result += "(SID %s, Measured %s)" % (sample["_id"], str(fit_params["when"])) return result