Пример #1
0
 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
Пример #2
0
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)
Пример #3
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]))