def plotPathList(paths):
    global ax
    paths = list(paths)
    print(paths)
    fit_data = []

    data_list = []
    for index, file in enumerate(paths):
        output_file = Path(str(file).replace("_result.txt", "_evaluated.csv"))

        # load the data and the config
        data = getData(file)
        config = getConfig(file)
        """ evaluating data"""
        if not output_file.exists():
            #refetchTimestamps(data, config)

            getVelocity(data, config)

            # take the mean of all values of each cell
            data = data.groupby(['cell_id']).mean()

            correctCenter(data, config)

            data = filterCells(data, config)

            # reset the indices
            data.reset_index(drop=True, inplace=True)

            getStressStrain(data, config)

            #data = data[(data.stress < 50)]
            data.reset_index(drop=True, inplace=True)

            data["area"] = data.long_axis * data.short_axis * np.pi
            data.to_csv(output_file, index=False)

        data = pd.read_csv(output_file)

        #data = data[(data.area > 0) * (data.area < 2000) * (data.stress < 250)]
        #data.reset_index(drop=True, inplace=True)

        data_list.append(data)

    data = pd.concat(data_list)
    data.reset_index(drop=True, inplace=True)

    fitStiffness(data, config)

    plotDensityScatter(data.stress, data.strain)
    #plotStressStrainFit(data, config)
    plotBinnedData(data.stress, data.strain,
                   [0, 10, 20, 30, 40, 50, 75, 100, 125, 150, 200, 250])
    #plt.title(f'{config["fit"]["p"][0] * config["fit"]["p"][1]:.2f}')
    fit_data.append(config["fit"]["p"][0] * config["fit"]["p"][1])

    return fit_data
示例#2
0
                        (v / (np.pi * 2 * config["imaging_pos_mm"])))**p[1])
    return k


for i in range(3):
    data, config = position_list[i]

    plt.subplot(1, 3, 1 + i)
    k = get_k(data, config)

    #plotStressStrain(data, config)

    plotDensityScatter(np.abs(data.rp), k, skip=1, y_factor=0.33)
    plotBinnedData(np.abs(data.rp),
                   k,
                   np.arange(0, 90, 10),
                   bin_func=np.median,
                   error_func="quantiles")

    plt.xlim(0, 100)
    plt.ylim(0, 200)

#% start: automatic generated code from pylustrator
plt.figure(1).ax_dict = {ax.get_label(): ax for ax in plt.figure(1).axes}
import matplotlib as mpl
plt.figure(1).set_size_inches(16.250000 / 2.54, 5.000000 / 2.54, forward=True)
plt.figure(1).axes[0].set_position([0.124970, 0.226507, 0.245158, 0.648012])
plt.figure(1).axes[0].set_ylim(0.0, 220.0)
plt.figure(1).axes[0].set_yticklabels(["0", "50", "100", "150", "200"],
                                      fontsize=10.0,
                                      fontweight="normal",
示例#3
0
datafile = getInputFile(filetype="csv file (*_evaluated_new.csv)", settings_name=settings_name, video=file)
print("evaluate file", datafile)
# load the data and the config
data, config = load_all_data_new(datafile)

plt.figure(0, (10, 8))

plt.subplot(2, 3, 1)
plt.cla()
plot_velocity_fit(data)
plt.text(0.9, 0.9, f"$\\eta_0$ {data.eta0[0]:.2f}\n$\\delta$ {data.delta[0]:.2f}\n$\\tau$ {data.tau[0]:.2f}", transform=plt.gca().transAxes, va="top", ha="right")

plt.subplot(2, 3, 2)
plt.cla()
plotDensityScatter(data.stress, data.epsilon)
plotBinnedData(data.stress, data.epsilon, bins=np.arange(0, 300, 10))
plt.xlabel("stress (Pa)")
plt.ylabel("strain")

plt.subplot(2, 3, 3)
plt.cla()
plotDensityScatter(data.rp, data.angle)
plotBinnedData(data.rp, data.angle, bins=np.arange(-300, 300, 10))
plt.xlabel("radial position (µm)")
plt.ylabel("angle (deg)")

plt.subplot(2, 3, 4)
plt.loglog(data.omega, data.Gp1, "o", alpha=0.25)
plt.loglog(data.omega, data.Gp2, "o", alpha=0.25)
plt.ylabel("G' / G''")
plt.xlabel("angular frequency")
    def selected(self, name):
        plt.clf()
        if name.endswith(".tif"):
            data, config = load_all_data_new(name.replace(
                ".tif", "_evaluated_new.csv"),
                                             do_excude=False)

            def get_mode_stats(x):
                from scipy import stats
                from deformationcytometer.evaluation.helper_functions import bootstrap_error
                x = np.array(x)
                print("a", x.shape)
                if len(x.shape) == 1:
                    x = x[~np.isnan(x)]
                print("b", x.shape)

                def get_mode(x):
                    kde = stats.gaussian_kde(x)
                    print(x.shape)
                    print(np.argmax(kde(x)))
                    return x[..., np.argmax(kde(x))]

                mode = get_mode(x)
                # err = bootstrap_error(x, get_mode, repetitions=2)
                return mode

            from scipy.special import gamma

            def fit(omega, k, alpha):
                omega = np.array(omega)
                G = k * (1j * omega)**alpha * gamma(1 - alpha)
                return np.real(G), np.imag(G)

            def cost(p):
                Gp1, Gp2 = fit(data.omega_weissenberg, *p)
                #return np.sum(np.abs(np.log10(data.w_Gp1) - np.log10(Gp1))) + np.sum(
                #    np.abs(np.log10(data.w_Gp2) - np.log10(Gp2)))
                return np.sum(
                    (np.log10(data.w_Gp1) - np.log10(Gp1))**2) + np.sum(
                        (np.log10(data.w_Gp2) - np.log10(Gp2))**2)

            from scipy.optimize import minimize
            res = minimize(
                cost,
                [np.median(data.w_k_cell),
                 np.mean(data.w_alpha_cell)])  #, bounds=([0, np.inf], [0, 1]))
            print(res)

            pair_median_mean = [
                np.median(data.w_k_cell),
                np.mean(data.w_alpha_cell)
            ]
            pair_fit = [res.x[0], res.x[1]]
            pair_2dmode = get_mode_stats(
                [np.log10(data.w_k_cell), data.w_alpha_cell])
            pair_2dmode[0] = 10**pair_2dmode[0]
            print("pair_median_mean", pair_median_mean)
            print("pair_fit", pair_fit)
            print("pair_2dmode", pair_2dmode)

            plt.subplot(3, 3, 1)
            plot_velocity_fit(data)
            if "vel_fit_error" in data.iloc[0]:
                plt.text(0.8,
                         0.8,
                         f'{data.iloc[0]["vel_fit_error"]:.0f}',
                         transform=plt.gca().transAxes)

            plt.subplot(3, 3, 2)
            plt.axline([0, 0], slope=1, color="k")
            plt.plot(data.omega, data.omega_weissenberg, "o", ms=1)
            plt.xlabel("omega")
            plt.ylabel("omega weissenberg")

            plt.subplot(3, 3, 3)
            plotDensityScatter(data.stress, data.epsilon)
            plotBinnedData(data.stress,
                           data.epsilon,
                           bins=np.arange(0, 300, 10))
            plt.xlabel("stress (Pa)")
            plt.ylabel("strain")

            plt.subplot(3, 3, 4)
            plt.loglog(data.omega_weissenberg,
                       data.w_Gp1,
                       "o",
                       alpha=0.25,
                       ms=1)
            plt.loglog(data.omega_weissenberg,
                       data.w_Gp2,
                       "o",
                       alpha=0.25,
                       ms=1)

            xx = [
                10**np.floor(np.log10(np.min(data.w_Gp1))),
                10**np.ceil(np.log10(np.max(data.w_Gp1)))
            ]
            plt.plot(xx, fit(xx, *pair_fit)[0], "k-", lw=0.8)
            plt.plot(xx, fit(xx, *pair_fit)[1], "k--", lw=0.8)

            plt.plot(xx, fit(xx, *pair_median_mean)[0], "r-", lw=0.8)
            plt.plot(xx, fit(xx, *pair_median_mean)[1], "r--", lw=0.8)

            plt.plot(xx, fit(xx, *pair_2dmode)[0], "c-", lw=0.8)
            plt.plot(xx, fit(xx, *pair_2dmode)[1], "c--", lw=0.8)

            plt.ylabel("G' / G''")
            plt.xlabel("angular frequency")

            logk, a = get_mode_stats(
                [np.log10(data.w_k_cell), data.w_alpha_cell])

            plt.subplot(3, 3, 5)
            plt.cla()
            plt.xlim(0, 4)
            plot_density_hist(np.log10(data.w_k_cell), color="C0")
            plt.axvline(np.log10(pair_fit[0]), color="k")
            plt.axvline(np.log10(pair_median_mean[0]), color="r")
            plt.axvline(np.log10(pair_2dmode[0]), color="c")
            plt.xlabel("log10(k)")
            plt.ylabel("relative density")
            plt.text(
                0.9,
                0.9,
                f"mean(log10(k)) {np.mean(np.log10(data.w_k_cell)):.2f}\nstd(log10(k)) {np.std(np.log10(data.w_k_cell)):.2f}\nmean(k) {np.mean(data.k_cell):.2f}\nstd(k) {np.std(data.k_cell):.2f}\n",
                transform=plt.gca().transAxes,
                va="top",
                ha="right")

            plt.subplot(3, 3, 6)
            plt.cla()
            plt.xlim(0, 1)
            plot_density_hist(data.w_alpha_cell, color="C1")
            plt.xlabel("alpha")
            plt.axvline(pair_fit[1], color="k")
            plt.axvline(pair_median_mean[1], color="r")
            plt.axvline(pair_2dmode[1], color="c")
            plt.text(
                0.9,
                0.9,
                f"mean($\\alpha$) {np.mean(data.w_alpha_cell):.2f}\nstd($\\alpha$) {np.std(data.w_alpha_cell):.2f}\n",
                transform=plt.gca().transAxes,
                va="top",
                ha="right")

            plt.subplot(3, 3, 7)
            plt.cla()
            plotDensityScatter(np.log10(data.w_k_cell), data.w_alpha_cell)
            plt.axvline(np.log10(pair_fit[0]), color="k")
            plt.axhline(pair_fit[1], color="k", label="fit")
            plt.axvline(np.log10(pair_median_mean[0]), color="r")
            plt.axhline(pair_median_mean[1], color="r", label="median")
            plt.axvline(np.log10(pair_2dmode[0]), color="c")
            plt.axhline(pair_2dmode[1], color="c", label="2dmode")
            plt.legend()

            print("doublemode",
                  get_mode_stats([np.log10(data.w_k_cell), data.w_alpha_cell]))
            plt.xlim(1, 3)
            plt.ylim(0, .5)

            plt.tight_layout()
            #plt.plot(data.rp, data.vel)
            """"""
            from deformationcytometer.includes.RoscoeCoreInclude import getRatio
            from deformationcytometer.includes.fit_velocity import getFitXYDot
            eta0 = data.iloc[0].eta0
            alpha = data.iloc[0].delta
            tau = data.iloc[0].tau

            pressure = data.iloc[0].pressure

            def func(x, a, b):
                return x / 2 * 1 / (1 + a * x**b)

            def getFitLine(pressure, p):
                config = {
                    "channel_length_m": 5.8e-2,
                    "channel_width_m": 186e-6
                }
                x, y = getFitXYDot(config, np.mean(pressure), p)
                return x, y

            channel_pos, vel_grad = getFitLine(pressure, [eta0, alpha, tau])
            vel_grad = -vel_grad
            vel_grad = vel_grad[channel_pos > 0]
            channel_pos = channel_pos[channel_pos > 0]

            omega = func(np.abs(vel_grad), *[0.113, 0.45])
            import scipy

            k_cell, alpha_cell = pair_fit

            mu1_ = k_cell * omega**alpha_cell * scipy.special.gamma(
                1 - alpha_cell) * np.cos(np.pi / 2 * alpha_cell)
            eta1_ = k_cell * omega**alpha_cell * scipy.special.gamma(
                1 - alpha_cell) * np.sin(np.pi / 2 * alpha_cell) / omega

            ratio, alpha1, alpha2, strain, stress, theta, ttfreq, eta, vdot = getRatio(
                eta0, alpha, tau, vel_grad, mu1_, eta1_)
            plt.subplot(3, 3, 3)
            plt.plot(stress, strain, "-k")

            k_cell, alpha_cell = pair_median_mean

            mu1_ = k_cell * omega**alpha_cell * scipy.special.gamma(
                1 - alpha_cell) * np.cos(np.pi / 2 * alpha_cell)
            eta1_ = k_cell * omega**alpha_cell * scipy.special.gamma(
                1 - alpha_cell) * np.sin(np.pi / 2 * alpha_cell) / omega

            ratio, alpha1, alpha2, strain, stress, theta, ttfreq, eta, vdot = getRatio(
                eta0, alpha, tau, vel_grad, mu1_, eta1_)
            plt.subplot(3, 3, 3)
            plt.plot(stress, strain, "-r")

            k_cell, alpha_cell = pair_2dmode

            mu1_ = k_cell * omega**alpha_cell * scipy.special.gamma(
                1 - alpha_cell) * np.cos(np.pi / 2 * alpha_cell)
            eta1_ = k_cell * omega**alpha_cell * scipy.special.gamma(
                1 - alpha_cell) * np.sin(np.pi / 2 * alpha_cell) / omega

            ratio, alpha1, alpha2, strain, stress, theta, ttfreq, eta, vdot = getRatio(
                eta0, alpha, tau, vel_grad, mu1_, eta1_)
            plt.subplot(3, 3, 3)
            plt.plot(stress, strain, "-c")

        self.canvas.draw()
示例#5
0
position_list = []
for position in ["inlet", "middle", "outlet"]:
    pressure = 3
    data, config = load_all_data([
        fr"\\131.188.117.96\biophysDS\emirzahossein\microfluidic cell rhemeter data\microscope4\2020_july\2020_07_29_aslginate2%_NIH_diff_x_position_2\{position}\[0-9]\*_result.txt",
        fr"\\131.188.117.96\biophysDS\emirzahossein\microfluidic cell rhemeter data\microscope4\2020_july\2020_07_29_aslginate2%_NIH_diff_x_position_3\{position}\[0-9]\*_result.txt",
                ], pressure=pressure)
    position_list.append([data, config])

for i in range(3):
    data, config = position_list[i]

    plt.subplot(2, 3, 1+i)
    plt.title(["inlet", "middle", "outlet"][i])
    plotDensityScatter(np.abs(data.rp), np.log10(data.k_cell), skip=1, y_factor=0.33)
    plotBinnedData(np.abs(data.rp), np.log10(data.k_cell), np.arange(0, 90, 10), bin_func=np.median, error_func="quantiles")

    plt.subplot(2, 3, 3+1+i)

    plotDensityScatter(np.abs(data.rp), data.alpha_cell, skip=1, y_factor=0.33)
    plotBinnedData(np.abs(data.rp), data.alpha_cell, np.arange(0, 90, 10), bin_func=np.median, error_func="quantiles")

#% start: automatic generated code from pylustrator
plt.figure(1).ax_dict = {ax.get_label(): ax for ax in plt.figure(1).axes}
import matplotlib as mpl
plt.figure(1).set_size_inches(16.250000/2.54, 8.000000/2.54, forward=True)
plt.figure(1).axes[0].set_xlim(-4.183295591939136, 88.04517013968203)
plt.figure(1).axes[0].set_ylim(1.0, 3.0)
plt.figure(1).axes[0].set_yticks([1.0, 2.0, 3.0])
plt.figure(1).axes[0].set_xticklabels([])
plt.figure(1).axes[0].set_yticklabels(["1.0", "2.0", "3.0"], fontsize=10.0, fontweight="normal", color="black", fontstyle="normal", fontname="Arial", horizontalalignment="right")
    print("data0.beta.loc[i]", data0.beta)
    xx = np.array([getTorque(data0.a.loc[i]/data0.r.loc[i], data0.b.loc[i]/data0.r.loc[i], data0.beta.loc[i]/180*np.pi) for i in data0.index])

    individual_slope = -data0.freq / data0.grad
    p, = plt.plot(x, individual_slope, "o", ms=2)
    #plotBinnedData(x, individual_slope, np.arange(0, 1, 0.1), color=p.get_color())
    plt.xlabel("$\\frac{b}{r_0}$")
    plt.ylabel("slope $\\frac{f}{\dot \gamma}$")
    plt.ylim(0, 0.1)
    plt.xlim(0.6, 1)
    xl.extend(x)
    yl.extend(individual_slope)


xf, yf = plotBinnedData(xl, yl, np.arange(0, 1, 0.05))
index = ~np.isnan(xf) & ~np.isnan(yf)
xf = xf[index]
yf = yf[index]


def curve(x, a):
    return 1/(np.pi*4) * x **a

import scipy.optimize
if 0:
    p, popt = scipy.optimize.curve_fit(curve, xf, yf)
    x = np.arange(0.5, 1, 0.01)
    plt.plot(x, curve(x, *p), "-k")

plt.show()
示例#7
0
    "#d40000",
    "#b00038",
]

for index, pressure in enumerate([1, 2, 3]):
    ax = plt.subplot(2, 3, index+1)
    data = data_list[index]
    config = config_list[index]

    plotDensityScatter(data.rp, data.strain)

    ax = plt.subplot(2, 3, 3+index+1)
    plotDensityScatter(data.stress, data.strain)
    for i in range(3):
        if i != index:
            plotBinnedData(data_list[i].stress, data_list[i].strain, ranges[i], error_func="quantiles", alpha=0.5, mec="none", mfc=colors[i])
    plotBinnedData(data.stress, data.strain, ranges[index], error_func="quantiles", mfc=colors[index])
    numbers.append(len(data.rp))
    print(config)

print("numbers", numbers)

#% start: automatic generated code from pylustrator
plt.figure(1).ax_dict = {ax.get_label(): ax for ax in plt.figure(1).axes}
import matplotlib as mpl
plt.figure(1).set_size_inches(16.260000/2.54, 10.890000/2.54, forward=True)
plt.figure(1).axes[0].set_xlim(-90.22751034357464, 89.45098813781398)
plt.figure(1).axes[0].set_ylim(-0.05093250462193348, 1.156151079632439)
plt.figure(1).axes[0].set_position([0.111408, 0.621312, 0.269192, 0.340314])
plt.figure(1).axes[0].spines['right'].set_visible(False)
plt.figure(1).axes[0].spines['top'].set_visible(False)