Esempio n. 1
0
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"))
Esempio n. 2
0
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]))
Esempio n. 3
0
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