diff --git a/experimental/analysis/bubble_statistics.py b/experimental/analysis/bubble_statistics.py index bdbd7ad28e36195b7690dda6af0346f9fa5cca7f..fbd8a6335b96eb16948dea96f231bf3048f0f692 100644 --- a/experimental/analysis/bubble_statistics.py +++ b/experimental/analysis/bubble_statistics.py @@ -2,24 +2,38 @@ import os import sys import numpy as np import importlib +import matplotlib.pyplot as plt from experimental.util.analysis_utils import load_readings +from common.util.plotting_utils import initialize_plt -root_dirs = ["C:/Users/eda1g15/OneDrive - University of Southampton/Research/Porous Materials/Data/Steel plates/", - "C:/Users/eda1g15/OneDrive - University of Southampton/Research/Slot Geometries/Data/SlotSweeps/"] +root_dirs = ["C:/Users/eda1g15/OneDrive - University of Southampton/Research/Slot Geometries/Data/SlotSweeps/", + "C:/Users/eda1g15/OneDrive - University of Southampton/Research/Porous Materials/Data/Steel plates/"] + +labels = ["Slots (MO)", "Porous plates (OAPM)"] totals = [] -for root_dir in root_dirs: +initialize_plt(font_size=10, dpi=300) +fig, ((r_ax, r_off_ax), (disp_ax, ecc_ax)) = plt.subplots(2, 2, figsize=(5.5, 4.2)) + +for n, root_dir in enumerate(root_dirs): print(root_dir) total = 0 all_radii = [] all_radii_offsets = [] all_eccs = [] + all_mm_per_px = [] + all_disp_stds = [] + all_radii_stds = [] + + all_disp_offsets = [] + all_grpd_radii_offsets = [] + for root, dirs, files in os.walk(root_dir): if "readings_dump.csv" in files: - readings = load_readings(root + "/readings_dump.csv", include_invalid=True) + readings = load_readings(root + "/readings_dump.csv", include_invalid=False) sys.path.append(root) import params @@ -27,22 +41,76 @@ for root_dir in root_dirs: importlib.reload(params) sys.path.remove(root) + all_mm_per_px.append(params.mm_per_px) + radii = np.array([r.get_max_radius(params.mm_per_px) for r in readings]) all_radii.extend(radii) radii_offsets = radii - np.mean(radii) all_radii_offsets.extend(radii_offsets) - eccs = [r.ecc_at_max for r in readings] + eccs = [float(r.ecc_at_max) for r in readings] all_eccs.extend(eccs) total += len(readings) + max_idx = np.max([r.idx for r in readings]) + sorted_readings = [] + for i in range(max_idx + 1): + sorted_readings.append([]) + + for r in readings: + sorted_readings[r.idx].append(r) + + for i, group in enumerate(sorted_readings): + if len(group) == 0: + continue + group_disps = np.array([np.linalg.norm(r.get_disp_mm(params.mm_per_px)) for r in group]) + all_disp_offsets.extend(group_disps - np.mean(group_disps)) + all_disp_stds.append(np.std(group_disps)) + + group_radii = np.array([r.get_max_radius(params.mm_per_px) for r in group]) + all_grpd_radii_offsets.extend(group_radii - np.mean(group_radii)) + totals.append(total) print("Mean radius = ", np.mean(all_radii), "Std = ", np.std(all_radii_offsets)) + print("Grouped displacement std = ", np.std(all_disp_offsets)) + print("Grouped radius std = ", np.std(all_grpd_radii_offsets)) print("Mean eccentricity = ", np.mean(all_eccs)) + print("Mean mm/px = ", np.mean(all_mm_per_px)) + + # r_ax.hist(all_radii_offsets, bins=100, label=labels[n], density=True, + # alpha=0.5, histtype='stepfilled', edgecolor=f"C{n}") + + r_ax.hist(all_radii, bins=100, label=labels[n], density=True, + alpha=0.5, histtype='stepfilled', edgecolor=f"C{n}") + r_off_ax.hist(all_grpd_radii_offsets, bins=100, label=labels[n], density=True, + alpha=0.5, histtype='stepfilled', edgecolor=f"C{n}") + disp_ax.hist(all_disp_offsets, bins=100, label=labels[n], density=True, + alpha=0.5, histtype='stepfilled', edgecolor=f"C{n}") + ecc_ax.hist(all_eccs, bins=100, label=labels[n], density=True, + alpha=0.5, histtype='stepfilled', edgecolor=f"C{n}") for d, t in zip(root_dirs, totals): print(d, t) print(sum(totals)) +r_ax.legend(frameon=False, loc="upper left", fontsize="x-small") + +r_ax.set_ylabel("Probability density") +r_ax.set_xlabel("Radius (mm)") + +# r_off_ax.set_ylabel("Probability density") +r_off_ax.set_xlabel("Radius offset from mean (mm)") + +disp_ax.set_ylabel("Probability density") +disp_ax.set_xlabel("Displacement offset from mean (mm)") + +# ecc_ax.set_ylabel("Probability density") +ecc_ax.set_xlabel("Eccentricity") + +plt.tight_layout() + +plt.savefig("C:/Users/eda1g15/OneDrive - University of Southampton/Research/Porous Materials/" + "paper figures/supp_mat/bubble_statistics.pdf") +plt.show()