Beispiel #1
0
def exp_border(exp_range=[],
               fx_f=None,
               fy_f=None,
               mask=None,
               young=1,
               out_folder="",
               method="binary_dilation"):
    tensor_folder = createFolder(os.path.join(out_folder, "stress_tensors"))
    mask_folder = createFolder(os.path.join(out_folder, "masks"))
    stress_tensors = []
    mask_exp_list = []
    mask = mask.astype(int)
    for i in tqdm(exp_range):
        mask_exp = expand_mask(mask, i, mask.shape, method=method)
        UG_sol, stress_tensor_f = stress_wrapper(mask_exp.astype(bool),
                                                 fx_f,
                                                 fy_f,
                                                 young,
                                                 sigma=0.5)
        np.save(os.path.join(tensor_folder, "stress_tensor_f%s.npy" % str(i)),
                stress_tensor_f)
        np.save(os.path.join(mask_folder, "%s.npy" % str(i)), mask_exp)
        stress_tensors.append(stress_tensor_f)
        mask_exp_list.append(mask_exp)
    mean_normal_list = [(st[:, :, 0, 0] + st[:, :, 1, 1]) / 2
                        for st in stress_tensors]
    return stress_tensors, mean_normal_list, mask_exp_list
Beispiel #2
0
def cut_images(folder, files_dict, names=["after_shift.tif", "before_shift.tif", "bf_before_shift.tif"]):
    for exp, frames_dict in files_dict.items():
        new_folder = os.path.join(folder, exp + "_shift")
        createFolder(new_folder)
        for frame, img_files in frames_dict.items():
            print("experiment", exp)
            print("frame", frame)
            print("image_file", img_files)

            img_b = np.asarray(Image.open(img_files["before"]))
            img_a = np.asarray(Image.open(img_files["after"]))
            imb_b_BF = np.asarray(Image.open(img_files["bf"]))

            shift_values = register_translation(img_b, img_a, upsample_factor=100)
            shift_y = shift_values[0][0]
            shift_x = shift_values[0][1]

            # using interpolation to shift subpixel precision
            img_shift_b = shift(img_b, shift=(-shift_y, -shift_x), order=5)
            img_shift_bf = shift(imb_b_BF, shift=(-shift_y, -shift_x), order=5)

            b = normalizing(croping_after_shift(img_shift_b, shift_x, shift_y))
            a = normalizing(croping_after_shift(img_a, shift_x, shift_y))
            bf = normalizing(croping_after_shift(img_shift_bf, shift_x, shift_y))

            b_save = Image.fromarray(b * 255)
            a_save = Image.fromarray(a * 255)
            bf_save = Image.fromarray(bf * 255)

            b_save.save(os.path.join(new_folder, frame + "after_shift.tif"))
            a_save.save(os.path.join(new_folder, frame + "before_shift.tif"))
            bf_save.save(os.path.join(new_folder, frame + "bf_before_shift.tif"))
Beispiel #3
0
def def_test():
    for i in np.linspace(0, 0.5, 5):
        out_folder = "/media/user/GINA1-BK/data_traction_force_microscopy/ev_square_square_edge_no_filter"
        createFolder(out_folder)
        print(i)
        young = 1
        h = 100
        pixelsize = 1
        f_type = "circular"  # display_option
        filter = None
        mask = setup_geometry(im_shape=(100, 100),
                              shape_size=50,
                              shape="rectangle")
        stress_tensor_b = setup_stress_field(mask,
                                             distribution="uniform",
                                             sigma_n=1,
                                             sigma_shear=0,
                                             sigma_gf=6)

        fx_b, fy_b = force_from_stress_field(stress_tensor_b,
                                             pixelsize,
                                             plot=False,
                                             grad_type="diff1")

        u_b, v_b = finite_thickness_convolution(
            fx_b,
            fy_b,
            pixelsize,
            h,
            young,
            sigma=0.5,
            kernel_size=None,
            force_shift=i)  # somwhat of an approximationn
        fx_f, fy_f = traction_wrapper(u_b,
                                      v_b,
                                      pixelsize,
                                      h,
                                      young,
                                      mask=mask,
                                      filter=filter)  # assuming pixelsize == 1
        save_def_test(fx_b,
                      fy_b,
                      fx_f,
                      fy_f,
                      out_folder,
                      iteration=str(int(i * 10)))
Beispiel #4
0
def exp_border(exp_range=[],
               fx=None,
               fy=None,
               mask=None,
               young=1,
               out_folder="",
               method="binary_dilation",
               verbose=False):

    tensor_folder = createFolder(os.path.join(out_folder, "stress_tensors"))
    mask_folder = createFolder(os.path.join(out_folder, "masks"))
    stress_tensors = []
    mask_exp_list = []
    mask = mask.astype(int)
    for i in tqdm(exp_range):
        mask_exp = expand_mask(mask, i, mask.shape, method=method)
        fx_f = fx.copy()
        fy_f = fy.copy()
        fx_f[~mask_exp.astype(
            bool)] = np.nan  # setting all values outside of mask area to zero
        fy_f[~mask_exp.astype(bool)] = np.nan
        fx_f2 = fx_f - np.nanmean(
            fx_f
        )  # normalizing traction force to sum up to zero (no displacement)
        fy_f2 = fy_f - np.nanmean(fy_f)
        fx_f2, fy_f2, p = correct_torque(fx_f2, fy_f2,
                                         mask.astype(bool))  # correct forces
        #if np.any(np.isnan(fx_f2[mask_exp.astype(bool)])):
        #    print("####")
        #    print("####", np.any(np.isnan(fy_f2[mask_exp.astype(bool)])))

        UG_sol, stress_tensor_f = stress_wrapper(mask_exp.astype(bool),
                                                 fx_f2,
                                                 fy_f2,
                                                 young,
                                                 sigma=0.5,
                                                 verbose=verbose)
        np.save(os.path.join(tensor_folder, "stress_tensor_f%s.npy" % str(i)),
                stress_tensor_f)
        np.save(os.path.join(mask_folder, "%s.npy" % str(i)), mask_exp)
        stress_tensors.append(stress_tensor_f)
        mask_exp_list.append(mask_exp)
    mean_normal_list = [(st[:, :, 0, 0] + st[:, :, 1, 1]) / 2
                        for st in stress_tensors]
    return stress_tensors, mean_normal_list, mask_exp_list
Beispiel #5
0
def cut_images(folder, files_dict, names=["after_shift.tif", "before_shift.tif", "bf_before_shift.tif"]):
    for exp, frames_dict in files_dict.items():
        new_folder = os.path.join(folder, exp + "_shift")
        createFolder(new_folder)
        for frame, img_files in frames_dict.items():
            print("experiment", exp)
            print("frame", frame)
            print("image_file", img_files)

            img_b = np.asarray(Image.open(img_files["before"]))
            img_a = np.asarray(Image.open(img_files["after"]))
            imb_b_BF = np.asarray(Image.open(img_files["bf"]))

            b, a [bf], (shift_x, shift_y) = correct_stage_drift(img_b, img_a, additional_images=[imb_b_BF])

            b_save.save(os.path.join(new_folder, frame + "after_shift.tif"))
            a_save.save(os.path.join(new_folder, frame + "before_shift.tif"))
            bf_save.save(os.path.join(new_folder, frame + "bf_before_shift.tif"))
Beispiel #6
0
def general_display(plot_types=[],
                    pixelsize=1,
                    display_type="outline",
                    f_type="not circular",
                    cmap="coolwarm",
                    max_dict=defaultdict(lambda: None),
                    mean_normal_list=None,
                    mask_exp_list=None,
                    out_folder="",
                    fields={},
                    border_ex_test=None,
                    be_avm_list=None,
                    scalar_comaprisons=None,
                    strain_energies=None,
                    contractilities=None,
                    key_values=None,
                    plot_gt_exp=True,
                    dm=True,
                    at=True,
                    cb=True,
                    do=True):
    '''
    plot_types=["deformation_forward","deformation_backwards","mask","forces_forward","forces_forward","shear_forward","mean_normal_stress_forward",
    "shear_backward","mean_normal_stress_backward","full_stress_tensor_forward","full_stress_tensor_backward"]

    :param plot_types:
    :param pixelsize:
    :return:
    '''
    u_b, v_b, fx_b, fy_b, fx_f, fy_f, stress_tensor_f, stress_tensor_b, mask_fm, mask_fem, mask = \
        [fields[x] for x in
         ["u_b", "v_b", "fx_b", "fy_b", "fx_f", "fy_f", "stress_tensor_f", "stress_tensor_b", "mask_fm", "mask_fem",
          "mask"]]
    figs = {}
    createFolder(out_folder)
    types = {
        "def_f": "deformation_forward",
        "def_b": "deformation_backwards",
        "mask": "mask",
        "f_f": "forces_forward",
        "f_b": "forces_backward",
        "st_f": "full_stress_tensor_forward",
        "st_b": "full_stress_tensor_backward",
        "sh_f": "shear_forward",
        "sh_b": "shear_backward",
        "norm_f": "mean_normal_stress_forward",
        "norm_b": "mean_normal_stress_backward",
        "m": "key measures",
        "r": "correlation",
        "exp_test1": "be1",
        "exp_test2": "be2",
        "exp_test2A": "be2A",
        "exp_test3": "be3",
        "exp_test4": "be4",
        "exp_test5": "be5",
        "mask_outline": "mask_outline",
        "cbars": "cbars_only"
    }

    figsize = (7, 7)
    arrow_scale = 0.13  # 0.1
    arrow_width = 0.004
    headlength = 4
    headwidth = 4  # 6
    headaxislength = 3
    ext = ".svg"
    mask_fm_color = "C2"
    mask_fem_color = "#666666"
    mask_outline_color = "#FFEF00"
    mask_lw = 4
    mask_line_dashes = (2, 1)

    ps_new_ex = pixelsize  # pixelsize when using windowsize 20, overlap 19.25
    vmax_x_ep = 65 * 0.845
    pd = {
        "figsize": figsize,
        "arrow_scale": arrow_scale,
        "arrow_width": arrow_width,
        "headlength": headlength,
        "headwidth": headwidth,
        "headaxislength": headaxislength,
        "ext": ext,
        "mask_fm_color": mask_fm_color,
        "mask_fem_color": mask_fem_color,
        "mask_outline_color": mask_outline_color,
        "dashes": mask_line_dashes,
        "mask_lw": mask_lw
    }
    paras = {**locals(), **pd}

    if isinstance(mask_fem, np.ndarray):
        mask_fem = mask_fem.astype(bool)

    if types["def_b"] in plot_types or plot_types == "all":
        fig, ax = show_quiver(u_b,
                              v_b,
                              scale_ratio=arrow_scale,
                              filter=[0, 5],
                              width=arrow_width,
                              headlength=headlength,
                              headwidth=headwidth,
                              headaxislength=2,
                              cbar_tick_label_size=30,
                              cmap=cmap,
                              cbar_style="not-clickpoints",
                              vmin=0,
                              vmax=max_dict["def"],
                              plot_cbar=cb)
        draw_outline(ax, do=do)
        add_title(fig, types["def_b"], at=at)
        display_mask(fig,
                     mask,
                     display_type=display_type,
                     dm=dm,
                     color=mask_outline_color,
                     lw=mask_lw,
                     dashes=mask_line_dashes)
        display_mask(fig,
                     mask_fm,
                     display_type=display_type,
                     color=mask_fm_color,
                     d=np.sqrt(2),
                     dm=dm,
                     lw=mask_lw,
                     dashes=mask_line_dashes)
        fig.savefig(
            os.path.join(out_folder,
                         types["def_b"] + name_add(cb=cb, dm=dm) + ext))

    if types["cbars"] in plot_types or plot_types == "all":
        # cbar for stress
        fig = plt.figure(figsize=(3.2, 4.75))
        plt.gca().set_axis_off()
        cbar = add_colorbar(vmin=0,
                            vmax=1 + 0.01,
                            aspect=8,
                            shrink=1,
                            cbar_axes_fraction=1.2,
                            cmap=cmap,
                            cbar_style="not-clickpoints")
        set_axis_attribute(cbar.ax, "set_color", "black")
        cbar.ax.tick_params(axis="both",
                            which="both",
                            color="black",
                            length=4,
                            width=2,
                            labelsize=20,
                            labelcolor="black")
        fig.savefig(
            os.path.join(
                out_folder,
                types["cbars"] + "force" + name_add(cb=cb, dm=dm) + ext))

        # cbar for stress
        fig = plt.figure(figsize=(3.2, 4.75))
        plt.gca().set_axis_off()
        cbar = add_colorbar(vmin=0,
                            vmax=1 + 0.01,
                            aspect=8,
                            shrink=1,
                            cbar_axes_fraction=1.2,
                            cmap=cmap,
                            cbar_style="not-clickpoints")
        set_axis_attribute(cbar.ax, "set_color", "black")
        cbar.ax.tick_params(axis="both",
                            which="both",
                            color="black",
                            length=4,
                            width=2,
                            labelsize=20,
                            labelcolor="black")
        fig.savefig(
            os.path.join(
                out_folder,
                types["cbars"] + "stress" + name_add(cb=cb, dm=dm) + ext))

    if types["mask"] in plot_types or plot_types == "all":
        fig = plt.figure()
        plt.imshow(mask)
        add_title(fig, types["mask"], at=at)
        fig.savefig(os.path.join(out_folder, types["mask"] + ext))

    if types["mask_outline"] in plot_types or plot_types == "all":
        fig = plt.figure()
        plt.imshow(np.zeros(fx_f.shape), cmap=cmap, vmin=0, vmax=1)
        draw_outline(plt.gca(), do=do)
        try:
            display_mask(fig,
                         mask,
                         display_type="outline",
                         dm=True,
                         color=mask_outline_color,
                         lw=mask_lw,
                         dashes=mask_line_dashes)
            display_mask(fig,
                         mask_fm,
                         display_type="outline",
                         color=mask_fm_color,
                         d=np.sqrt(2),
                         dm=True,
                         lw=mask_lw,
                         dashes=mask_line_dashes)
            display_mask(fig,
                         mask_fem,
                         display_type="outline",
                         color=mask_fem_color,
                         d=np.sqrt(2),
                         dm=True,
                         lw=mask_lw,
                         dashes=mask_line_dashes)
        except RecursionError as e:
            print(e)

    if types["f_f"] in plot_types or plot_types == "all":
        show_forces_forward(**paras)

    if types["f_b"] in plot_types or plot_types == "all":

        if f_type == "circular":
            fx_filtered, fy_filtered = filter_arrows_for_square(
                fx_b, fy_b,
                filter=12)  # only works when initial forces are circular
            fig, ax = show_quiver(fx_filtered,
                                  fy_filtered,
                                  figsize=figsize,
                                  scale_ratio=arrow_scale,
                                  filter=[0, 0],
                                  width=arrow_width,
                                  headlength=headlength,
                                  headwidth=headwidth,
                                  headaxislength=headaxislength,
                                  cbar_tick_label_size=30,
                                  cmap=cmap,
                                  cbar_style="not-clickpoints",
                                  vmin=0,
                                  vmax=max_dict["force"],
                                  plot_cbar=cb)
            im = fig.axes[0].imshow(np.sqrt(fx_b**2 + fy_b**2),
                                    cmap=cmap,
                                    vmin=0,
                                    vmax=max_dict["force"])
            if cb:
                fig.axes[1].remove()
                cb = plt.colorbar(im)
                cb.ax.tick_params(labelsize=30)

            plt.tight_layout()
        else:
            fx_filtered, fy_filtered = fx_b, fy_b
            fig, ax = show_quiver(fx_filtered,
                                  fy_filtered,
                                  figsize=figsize,
                                  scale_ratio=arrow_scale - 0.03,
                                  filter=[0, 10],
                                  width=arrow_width,
                                  headlength=headlength,
                                  headwidth=headwidth,
                                  headaxislength=headaxislength,
                                  cbar_tick_label_size=30,
                                  cmap=cmap,
                                  cbar_style="not-clickpoints",
                                  vmin=0,
                                  vmax=max_dict["force"],
                                  plot_cbar=cb)
        draw_outline(ax, do=do)
        add_title(fig, types["f_b"], at=at)
        display_mask(fig,
                     mask,
                     display_type=display_type,
                     dm=dm,
                     color=mask_outline_color,
                     lw=mask_lw,
                     dashes=mask_line_dashes)
        # display_mask(fig, mask_fm, display_type=display_type, color=mask_fm_color,d=np.sqrt(2), dm=dm)
        plt.tight_layout()
        fig.savefig(
            os.path.join(out_folder,
                         types["f_b"] + name_add(cb=cb, dm=dm) + ext))

    if types["sh_f"] in plot_types or plot_types == "all":
        shear = stress_tensor_f[:, :, 0,
                                1]  # shear component of the stress tensor
        fig, ax = show_map_clickpoints(shear,
                                       show_mask=mask_fem,
                                       figsize=figsize,
                                       cbar_style="out",
                                       cmap=cmap,
                                       cbar_tick_label_size=30,
                                       vmin=0,
                                       vmax=max_dict["stress"],
                                       plot_cbar=cb)
        draw_outline(ax, do=do)
        add_title(fig, types["sh_f"], at=at)
        display_mask(fig,
                     mask,
                     display_type=display_type,
                     dm=dm,
                     color=mask_outline_color,
                     lw=mask_lw,
                     dashes=mask_line_dashes)
        plt.tight_layout()
        fig.savefig(
            os.path.join(out_folder,
                         types["sh_f"] + name_add(cb=cb, dm=dm) + ext))
    if types["norm_f"] in plot_types or plot_types == "all":
        mean_normal_stress = (
            (stress_tensor_f[:, :, 0, 0] + stress_tensor_f[:, :, 1, 1]) / 2)
        mean_normal_stress[~mask_fem] = np.nan
        fig, ax = show_map_clickpoints(mean_normal_stress,
                                       show_mask=mask_fem,
                                       figsize=figsize,
                                       cbar_style="out",
                                       background_color="white",
                                       cmap=cmap,
                                       cbar_tick_label_size=30,
                                       vmin=0,
                                       vmax=max_dict["stress"],
                                       plot_cbar=cb)
        draw_outline(ax, do=do)
        add_title(fig, types["norm_f"], at=at)
        display_mask(fig,
                     mask,
                     display_type=display_type,
                     dm=dm,
                     color=mask_outline_color,
                     lw=mask_lw,
                     dashes=mask_line_dashes)
        plt.tight_layout()
        # display_mask(fig, mask_fem, display_type=display_type, color=mask_fem_color, d=np.sqrt(2), dm=dm)
        fig.savefig(
            os.path.join(out_folder,
                         types["norm_f"] + name_add(cb=cb, dm=dm) + ext))

    if types["sh_b"] in plot_types or plot_types == "all":
        shear = stress_tensor_b[:, :, 0,
                                1]  # shear component of the stress tensor
        fig, ax = show_map_clickpoints(shear,
                                       show_mask=mask_fem,
                                       figsize=figsize,
                                       cbar_style="out",
                                       cmap=cmap,
                                       cbar_tick_label_size=30,
                                       vmin=0,
                                       vmax=max_dict["stress"],
                                       plot_cbar=cb)
        display_mask(fig,
                     mask,
                     display_type=display_type,
                     dm=dm,
                     color=mask_outline_color,
                     lw=mask_lw,
                     dashes=mask_line_dashes)
        draw_outline(ax, do=do)
        add_title(fig, types["sh_b"], at=at)
        plt.tight_layout()
        fig.savefig(
            os.path.join(out_folder,
                         types["sh_b"] + name_add(cb=cb, dm=dm) + ext))

    if types["norm_b"] in plot_types or plot_types == "all":
        mean_normal_stress = (
            (stress_tensor_b[:, :, 0, 0] + stress_tensor_b[:, :, 1, 1]) / 2)
        mean_normal_stress[~mask_fem] = np.nan
        fig, ax = show_map_clickpoints(mean_normal_stress,
                                       show_mask=np.ones(
                                           mean_normal_stress.shape),
                                       figsize=figsize,
                                       cbar_style="out",
                                       background_color="white",
                                       cmap=cmap,
                                       cbar_tick_label_size=30,
                                       vmin=0,
                                       vmax=max_dict["stress"],
                                       plot_cbar=cb)
        draw_outline(ax, do=do)
        add_title(fig, types["norm_b"], at=at)
        display_mask(fig,
                     mask,
                     display_type=display_type,
                     dm=dm,
                     color=mask_outline_color,
                     lw=mask_lw,
                     dashes=mask_line_dashes)
        # display_mask(fig, mask_fem, display_type=display_type, color=mask_fem_color, d=np.sqrt(2), dm=dm)
        plt.tight_layout()
        fig.savefig(
            os.path.join(out_folder,
                         types["norm_b"] + name_add(cb=cb, dm=dm) + ext))

    if types["st_f"] in plot_types or plot_types == "all":
        fig = display_stress_tensor(stress_tensor_f,
                                    mask,
                                    title_str=types["st_f"])
        display_mask(fig,
                     mask,
                     display_type=display_type,
                     type=2,
                     dm=dm,
                     color=mask_outline_color,
                     lw=mask_lw,
                     dashes=mask_line_dashes)
        plt.tight_layout()
        fig.savefig(
            os.path.join(out_folder,
                         types["st_f"] + name_add(cb=cb, dm=dm) + ext))

    if types["st_b"] in plot_types or plot_types == "all":
        fig = display_stress_tensor(stress_tensor_b,
                                    mask,
                                    title_str=types["st_b"])
        display_mask(fig,
                     mask,
                     display_type=display_type,
                     type=2,
                     dm=dm,
                     color=mask_outline_color,
                     lw=mask_lw,
                     dashes=mask_line_dashes)
        plt.tight_layout()
        fig.savefig(
            os.path.join(out_folder,
                         types["st_b"] + name_add(cb=cb, dm=dm) + ext))

    if types["m"] in plot_types or plot_types == "all":
        fig = bar_plots_pylu(key_values)
        fig.savefig(os.path.join(out_folder, types["m"] + ext))
        # values1 = [key_values["contractile_force_b"],key_values["contractile_force_f"]]
        # labels1 = ["contractility", "contractility"]
        # values2 =[key_values['mean_normal_stress_b'],key_values['mean_normal_stress_f'], key_values["mean_shear_b"], key_values["mean_shear_f"]]
        # labels2 =["mean normal stress", "mean normal stress", "meanshear stress", "mean shear stress"]
        # values3 = [key_values["cv_b"], key_values["cv_f"]]
        # lables3 = ["cv", "cv"]

    # fig1, ax1 = bar_plot(ax, values1, labels1, at=False, types=types)
    # fig1.savefig(os.path.join(out_folder, types["m"] + "1" + ext))
    # fig2, ax2 = bar_plot(values2, labels2, at=False, types=types)
    # fig2.savefig(os.path.join(out_folder, types["m"] + "2" + ext))
    # fig3, ax3 = bar_plot(values3, lables3, at=False, types=types, vmax=1)
    #  fig3.savefig(os.path.join(out_folder, types["m"] + "3" + ext))

    if types["r"] in plot_types or plot_types == "all":
        rs = {
            key: value['r_squared']
            for key, value in scalar_comaprisons.items()
            if not np.isnan(value['r_squared'])
            and key in ["forces", "mean normal stress"]
        }
        fig = plt.figure(figsize=(3.2, 4.75))
        pos = [1, 1.7]
        plt.bar(pos, list(rs.values()), width=0.4, color="C5")
        # plt.xticks(rotation="70",fontsize=15)
        # plt.xticks(rotation="70",fontsize=15)
        plt.xticks(pos)
        plt.gca().tick_params(axis="both",
                              which="both",
                              color="black",
                              length=4,
                              width=2,
                              labelsize=20,
                              labelcolor="black",
                              labelbottom=False)
        set_axis_attribute(plt.gca(), "set_color", "black")
        set_axis_attribute(plt.gca(), "set_linewidth", 2)
        if at:
            plt.title(types["r"])
        plt.ylim((0, 1))
        plt.tight_layout()
        fig.savefig(os.path.join(out_folder, types["r"] + ext))

    if types["exp_test1"] in plot_types or plot_types == "all" and len(
            mean_normal_list) > 0:
        fig = show_exp_test(mean_normal_list=mean_normal_list,
                            max_dict=max_dict,
                            mask_exp_list=mask_exp_list)
        fig.savefig(os.path.join(out_folder, "expansion1" + ext))

    if types["exp_test2"] in plot_types or plot_types == "all":
        # average normal stress relative to groundtruth stress
        fig = plt.figure()
        be = np.array(border_ex_test) * ps_new_ex
        if plot_gt_exp:
            plt.plot(be, be_avm_list, color="C3", linewidth=5)
            plt.plot(be, [1] * (len(be_avm_list)), color="C4", linewidth=5)
            plt.ylim((0, max_dict["stress"] * 1.2))
        else:
            plt.plot(be, be_avm_list, color="C3", linewidth=5)
            plt.ylim((0, max_dict["stress"] * 1.2))
        plt.xlim(0, vmax_x_ep)
        plt.gca().tick_params(axis="both",
                              which="both",
                              color="black",
                              length=4,
                              width=2,
                              labelsize=20,
                              labelcolor="black")
        set_axis_attribute(plt.gca(), "set_color", "black")
        set_axis_attribute(plt.gca(), "set_linewidth", 2)

        # plt.title(types["exp_test2"])
        plt.tight_layout()
        fig.savefig(
            os.path.join(out_folder, "avg_normal_stress_expansion" + ext))

    if types["exp_test2A"] in plot_types or plot_types == "all":
        # average normal stress relative to groundtruth stress
        fig = plt.figure()
        be = np.array(border_ex_test) * ps_new_ex
        be_avm_listN = np.array(be_avm_list) / np.max(
            be_avm_list)  # normalizing
        contractilitiesN = contractilities / contractilities.max()
        strain_energiesN = strain_energies / strain_energies.max()
        plt.plot(be, be_avm_listN, color="C3", linewidth=5, label="stress")
        plt.plot(be,
                 contractilitiesN,
                 color="C2",
                 linewidth=5,
                 label="contractility")
        #plt.plot(be, strain_energiesN, color="C4", linewidth=5, label="strain energy")
        plt.legend()
        plt.ylim((0, 1 * 1.1))
        plt.xlim(0, vmax_x_ep)
        plt.gca().tick_params(axis="both",
                              which="both",
                              color="black",
                              length=4,
                              width=2,
                              labelsize=20,
                              labelcolor="black")
        set_axis_attribute(plt.gca(), "set_color", "black")
        set_axis_attribute(plt.gca(), "set_linewidth", 2)

        # plt.title(types["exp_test2"])
        plt.tight_layout()
        fig.savefig(
            os.path.join(out_folder,
                         "stress_force_expansion_normalized1" + ext))

        fig = plt.figure()
        be = np.array(border_ex_test) * ps_new_ex
        be_avm_listN = np.array(be_avm_list) / key_values[
            "mean_normal_stress_b"]  # normalizing
        contractilitiesN = contractilities / key_values["contractile_force_b"]
        strain_energiesN = strain_energies / key_values["cont_energy_b"]
        plt.plot(be, be_avm_listN, color="C3", linewidth=5, label="stress")
        plt.plot(be,
                 contractilitiesN,
                 color="C2",
                 linewidth=5,
                 label="contractility")
        #plt.plot(be, strain_energiesN, color="C4", linewidth=5, label="strain energy")
        plt.legend()
        plt.ylim((0, 1 * 1.1))
        plt.xlim(0, vmax_x_ep)
        plt.gca().tick_params(axis="both",
                              which="both",
                              color="black",
                              length=4,
                              width=2,
                              labelsize=20,
                              labelcolor="black")
        set_axis_attribute(plt.gca(), "set_color", "black")
        set_axis_attribute(plt.gca(), "set_linewidth", 2)

        # plt.title(types["exp_test2"])
        plt.tight_layout()
        fig.savefig(
            os.path.join(out_folder,
                         "stress_force_expansion_normalized_gt" + ext))

    if types["exp_test2"] in plot_types or plot_types == "all":
        # average normal stress relative to groundtruth stress
        if len(be_avm_list) > 0:
            fig = plt.figure()
            be = np.array(border_ex_test) * ps_new_ex
            be_avm_list = np.array(be_avm_list) / np.max(
                be_avm_list)  # normalizing
            if plot_gt_exp:
                plt.plot(be, be_avm_list, color="C3", linewidth=5)
                plt.plot(be, [1] * (len(be_avm_list)), color="C4", linewidth=5)
                plt.ylim((0, 1.1))
            else:
                plt.plot(be, be_avm_list, color="C3", linewidth=5)
                plt.ylim((0, 1.1))
            plt.xlim(0, vmax_x_ep)
            plt.gca().tick_params(axis="both",
                                  which="both",
                                  color="black",
                                  length=4,
                                  width=2,
                                  labelsize=20,
                                  labelcolor="black")
            set_axis_attribute(plt.gca(), "set_color", "black")
            set_axis_attribute(plt.gca(), "set_linewidth", 2)

            # plt.title(types["exp_test2"])
            plt.tight_layout()
            fig.savefig(
                os.path.join(out_folder,
                             "avg_normal_stress_expansion_normalized" + ext))

    if types["exp_test3"] in plot_types or plot_types == "all" and len(
            mean_normal_list) > 0:
        # displaying forces and masks
        nf = createFolder(os.path.join(out_folder, "exp_plots_forces"))
        max_dict_local = {"force": None}
        for i, m_exp in enumerate(mask_exp_list):
            pl = copy.deepcopy(paras)
            pl.update({
                "dm": True,
                "show_fm": True,
                "mask_fm": m_exp.astype(bool),
                "add_name": "_exp" + str(i),
                "out_folder": nf,
                "max_dict": max_dict_local,
                "fx_f": fields["fx_f_exp"],
                "fy_f": fields["fy_f_exp"],
                "mask": fields["mask_exp"]
            })
            try:
                fig, ax = show_forces_forward(**pl)
            except RecursionError:
                pass

    if types["exp_test4"] in plot_types or plot_types == "all" and len(
            mean_normal_list) > 0:
        sub_folder_stress = createFolder(os.path.join(out_folder, "stresses"))
        sub_folder_force = createFolder(os.path.join(out_folder, "forces"))
        for i, (ms,
                mask_expand) in enumerate(zip(mean_normal_list,
                                              mask_exp_list)):
            fig, ax = show_map_clickpoints(ms,
                                           cbar_style="out",
                                           figsize=figsize,
                                           cmap=cmap,
                                           cbar_tick_label_size=30,
                                           vmin=0,
                                           vmax=max_dict["stress"])
            add_title(fig, types["norm_b"], at=at)
            display_mask(fig,
                         mask,
                         display_type=display_type,
                         color=mask_outline_color,
                         lw=mask_lw,
                         dashes=mask_line_dashes)
            display_mask(fig,
                         mask_expand,
                         display_type=display_type,
                         color="C3",
                         lw=mask_lw,
                         dashes=mask_line_dashes)
            fig.savefig(
                os.path.join(sub_folder_stress,
                             types["exp_test4"] + "%s" % str(i) + ext))

            fig, ax = show_quiver(fx_f,
                                  fy_f,
                                  figsize=figsize,
                                  scale_ratio=arrow_scale,
                                  filter=[0, 10],
                                  width=arrow_width,
                                  headlength=3,
                                  headwidth=4,
                                  headaxislength=2,
                                  cbar_tick_label_size=30,
                                  cmap=cmap,
                                  cbar_style="not-clickpoints",
                                  vmin=0,
                                  vmax=1600)
            add_title(fig, types["f_f"], at=at)
            display_mask(fig,
                         mask,
                         display_type=display_type,
                         color=mask_outline_color,
                         lw=mask_lw,
                         dashes=mask_line_dashes,
                         dm=dm)
            display_mask(fig,
                         mask_expand,
                         display_type=display_type,
                         color="C3",
                         dm=dm,
                         lw=mask_lw,
                         dashes=mask_line_dashes)
            plt.tight_layout()
            fig.savefig(
                os.path.join(sub_folder_force,
                             types["exp_test4"] + "%s" % str(i) + ext))

    if types["exp_test5"] in plot_types or plot_types == "all" and len(
            mean_normal_list) > 0:

        pl = copy.deepcopy(paras)
        pl["dm"] = False

        pl["figsize"] = (np.mean(paras["figsize"]) *
                         fields["mask_exp"].shape[1] /
                         fields["mask_exp"].shape[0],
                         np.mean(paras["figsize"]) * 1.022 * mask.shape[0] /
                         fields["mask_exp"].shape[1])
        pl["fx_f"] = fields["fx_f_exp"]
        pl["fy_f"] = fields["fy_f_exp"]
        pl["max_dict"] = {"force": None}
        pl["filter"] = [0, 7]
        pl["filter_method"] = "local_maxima"
        pl["filter_radius"] = 9
        fig, ax = show_forces_forward(**pl)
        ax.set_xlim(-0.5, 0.5 + fields["mask_exp"].shape[1])
        ax.set_ylim(0.5 + fields["mask_exp"].shape[0], -0.5)
        add_title(fig, types["f_f"], at=at)
        be = np.array(border_ex_test) * ps_new_ex
        # display_mask(fig, mask_exp_list[0], display_type=display_type, color=mask_fm_color, d=np.sqrt(2), dm=True, lw=7)
        max_id = np.argmax(be_avm_list)

        try:
            # max_id=23
            # max_id_disp = max_id + 4 if len(mask_exp_list) > max_id + 4 else len(mask_exp_list) - 1
            display_mask(fig,
                         mask_exp_list[max_id],
                         display_type=display_type,
                         color=mask_fm_color,
                         d=np.sqrt(2),
                         dm=True,
                         lw=mask_lw,
                         dashes=mask_line_dashes)  # mask_exp_list[max_id+6]
            display_mask(fig,
                         fields["mask_exp"],
                         display_type=display_type,
                         color=mask_outline_color,
                         lw=mask_lw,
                         dashes=mask_line_dashes,
                         dm=True)
            end_id = np.argmin(np.abs(be - vmax_x_ep))
            display_mask(fig,
                         mask_exp_list[end_id],
                         display_type=display_type,
                         color=mask_fm_color,
                         d=np.sqrt(2),
                         dm=True,
                         lw=mask_lw,
                         dashes=mask_line_dashes)
        except RecursionError as e:
            print(e)

        ax.set_position([0, 0, 1, 1])
        fig.set_frameon(False)
        if ext == ".svg":
            print(out_folder)
            fig.savefig(os.path.join(out_folder, "exp_forces_example" + ext))
        else:
            fig.savefig(os.path.join(out_folder, "exp_forces_example" + ext),
                        dpi=300)
    fig, ax = show_quiver(x, y, figsize=figsize, scale_ratio=arrow_scale - 0.03, filter=filter,
                          width=arrow_width,
                          headlength=headlength, headwidth=headwidth,
                          headaxislength=headaxislength, cbar_tick_label_size=30, cmap=cmap,
                          cbar_style="not-clickpoints",
                          vmin=0, vmax=vmax, plot_cbar=cb)
    return fig,ax


pixelsize=1
h=1000
young=1
new_calculation = False

output_folder = "/home/user/Desktop/backup_from_harddrive/data_traction_force_microscopy/gaussfilter_strain_energy"
createFolder(output_folder)
#fx_b, fy_b = np.zeros((200,200)), np.zeros((200,200))
#l1 = np.array([np.arange(35,45),np.arange(35,45)])
#l2 = np.array([np.arange(55,65),np.arange(55,65)])



out_folder2=createFolder(os.path.join(output_folder,"force_plots"))
cont_input = []
cont_output_filtered = []
cont_output_unfiltered = []
rs=list(range(1,12,2))
ar_size=600
mask=np.ones((ar_size,ar_size))
mask = binary_erosion(np.ones((ar_size, ar_size)), iterations=20).astype(bool)
Beispiel #8
0
def exp_border_real_data():
    out_folder = "/home/user/Desktop/backup_from_harddrive/data_traction_force_microscopy/ev_paper_rd_expansion_fs3"
    createFolder(out_folder)
    border_ex_test = (list(range(0, 100, 2)))
    f_type = "non-circular"
    young = 1
    h = 100
    pixelsize = 1
    filter = "gaussian"
    #  retrieving clickpoints mask and traction forces
    folder = "/home/user/Desktop/backup_from_harddrive/data_traction_force_microscopy/WT_vs_KO_images/KOshift/"
    db = clickpoints.DataFile(os.path.join(folder, "database.cdb"), "r")
    mask = db.getMask(frame=2).data == 3
    db.db.close()
    u, v = np.load(os.path.join(out_folder, "u.npy")), np.load(
        os.path.join(out_folder, "v.npy"))
    fx_f, fy_f = traction_wrapper(
        u, v, pixelsize, h, young, mask=mask, filter="gaussian",
        fs=3)  # this filtersize is equal to 3*0.85 ~3.5 µm for real data
    mask = interpolation(mask, dims=fx_f.shape, min_cell_size=100)
    mask = binary_fill_holes(mask)
    np.save(os.path.join(out_folder, "mask.npy"), mask)
    stress_tensors, mean_normal_list, mask_exp_list = exp_border(
        exp_range=border_ex_test,
        fx_f=fx_f,
        fy_f=fy_f,
        mask=mask,
        out_folder=out_folder,
        method="binary_dilation")

    stress_tensor_b = stress_tensors[0]
    max_dict = get_max_values(fx_f=fx_f,
                              fy_f=fy_f,
                              stress_tensor_b=stress_tensor_b,
                              exp_test=len(border_ex_test) > 0,
                              mean_normal_list=mean_normal_list)
    # getting comparison scalar fields
    mask_fm = standard_measures(mask=mask,
                                mean_normal_list=mean_normal_list,
                                stress_tensor_b=stress_tensor_b)
    save_arr = np.array([
        np.round(np.array(avg_normal_stress_be), 5),
        np.array(border_ex_test)
    ]).T
    np.savetxt(os.path.join(out_folder, "avg_norm_stress.txt"),
               save_arr,
               fmt="%.5f",
               delimiter=",")

    mask_exp = binary_dilation(mask, iterations=15)
    scalar_comaprisons = full_field_comparision(
    )  # r gives  mostly the spatial distribution
    with suppress(KeyError):
        del scalar_comaprisons["forces"]
    plot_types = ["test for border expansion"]
    plot_types.extend(
        ["forces_forward", "correlation", "test for border expansion"])
    # plot_types = [ "forces_backward", "full_stress_tensor_backward"]
    general_display(plot_types=plot_types,
                    mask=mask,
                    pixelsize=pixelsize,
                    max_dict=max_dict,
                    f_type=f_type,
                    mean_normal_list=mean_normal_list,
                    mask_exp_list=mask_exp_list,
                    out_folder=out_folder,
                    fx_f=fx_f,
                    fy_f=fy_f,
                    mask_exp=mask_exp,
                    scalar_comaprisons=scalar_comaprisons,
                    border_ex_test=border_ex_test,
                    plot_gt_exp=False)
    plt.close("all")
Beispiel #9
0
        method="manual")  # highest aggreement (not completely sure
    stress_tensor_b = setup_stress_field(mask,
                                         distribution="uniform",
                                         sigma_n=1,
                                         sigma_shear=0,
                                         sigma_gf=6)
    fx_b, fy_b = traction_from_stress(stress_tensor_b,
                                      pixelsize,
                                      plot=False,
                                      grad_type="diff1")

    u_b, v_b = finite_thickness_convolution(
        fx_b, fy_b, pixelsize, h, young, sigma=0.5,
        kernel_size=None)  # somwhat of an approximation

    createFolder(out_folder)
    np.save(os.path.join(out_folder, "u_b.npy"), u_b)
    np.save(os.path.join(out_folder, "v_b.npy"), v_b)
    u_b, v_b = np.load(os.path.join(out_folder, "u_b.npy")), np.load(
        os.path.join(out_folder, "v_b.npy"))
    # compare_scalar_fields(u,u1)
    # u2,v2,z1=finite_thickenss_convolution_exact(fx, fy,pixelsize, h, young, sigma=0.5,kernel_size=None) # best solution possible

    ##forward worklow
    # tractions from deformationa
    fx_f, fy_f = traction_wrapper(u_b,
                                  v_b,
                                  pixelsize,
                                  h,
                                  young,
                                  mask=mask,
times = np.arange(1, 23)

# keep these values for our nk cells stacks
win_um = 12
fac_overlap = 0.4
signoise_filter = 1.3
# windowsize for stacks
window_size = (int(win_um / du), int(win_um / dv), int(win_um / dw))
overlap = (int(fac_overlap * win_um / du), int(fac_overlap * win_um / dv), int(fac_overlap * win_um / dw))
search_area = (int(win_um / du), int(win_um / dv), int(win_um / dw))

# specify output folder and image stacks within the loop !

# loop through time
times = [2]
out_put = createFolder("out")
for t in tqdm(times):
    print(t)
    # create output folder
    out_folder = r"pos02_ref21/t{}".format(str(t))
    # create output folder if it does not exist, print warning otherwise
    if not os.path.exists(out_folder):
        os.makedirs(out_folder)

    """
    load alive stacks
    """
    folder = r"/home/user/Desktop/biophysDS/dboehringer/Platte_4/Measurements_NK_TFM/18.05.20-NK-TFM/Sample1_MarkandFind_001/Mark_and_Find_001"
    images = glob.glob(
        os.path.join(folder, "Mark_and_Find_001_Pos002_S001_t{}_z*_RAW_ch00.tif".format(str(t).zfill(2))))[30:-30]
    im_shape = plt.imread(images[0]).shape