From d8f1295253d29b29ab873807da7f0df37a79daa8 Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Mon, 13 Jan 2025 08:51:38 +0100 Subject: [PATCH] Update of histogram plotting and bin limits --- scripts/create_histogram_summary.py | 52 +++++++++++++---------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/scripts/create_histogram_summary.py b/scripts/create_histogram_summary.py index 3e403a69a4..f2895b511b 100644 --- a/scripts/create_histogram_summary.py +++ b/scripts/create_histogram_summary.py @@ -71,17 +71,17 @@ if __name__ == "__main__": CATEGORIES = IVAS_CATEGORIES if args.diff: limits_per_measure = { - "MLD": ("MLD", [-math.inf, 0, 0.1, 0.2, 0.3, 0.4, math.inf]), - "DIFF": ("MAXIMUM ABS DIFF", [-32768, 0, 128, 256, 512, 32767]), - "SSNR": ("MIN_SSNR", [-math.inf, -0.4, -0.3, -0.2, -0.1, 0, math.inf]), - "ODG": ("MIN_ODG", [-5.0, -0.3, -0.2, -0.1, 0, math.inf]), + "MLD": ("MLD", None), + "DIFF": ("MAXIMUM ABS DIFF", None), + "SSNR": ("MIN_SSNR", None), + "ODG": ("MIN_ODG", None), } else: limits_per_measure = { - "MLD": ("MLD", [0, 5, 10, math.inf]), - "DIFF": ("MAXIMUM ABS DIFF", [0, 1024, 16384, 32769]), - "SSNR": ("MIN_SSNR", [-math.inf, 0, 20, 40, 60, 100]), - "ODG": ("MIN_ODG", [-5, -4, -3, -2, -1, 0]), + "MLD": ("MLD", [0, 1, 2, 3, 4, 5, 10, 20, math.inf]), + "DIFF": ("MAXIMUM ABS DIFF", [0, 16, 256, 1024, 2048, 4096, 8192, 16384, 32769]), + "SSNR": ("MIN_SSNR", [-math.inf, 0, 10, 20, 30, 40, 40, 50, 60, 100]), + "ODG": ("MIN_ODG", [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]), } (measure_label, limits) = limits_per_measure[measure] @@ -97,14 +97,19 @@ if __name__ == "__main__": for k, val in zip(keys, row[1:]): results_sorted[testcase][k] = val + if limits is None: + vals = [float(x) for x in [m[measure_label] for m in results_sorted.values() if m[measure_label] != "None" and m[measure_label] != ""]] + start = min(vals) + f = 10 ** (2 - int(np.floor(np.log10(abs(start)))) - 1) + start = np.floor(start*f)/f + step = (max(vals) - start)/10 + f = 10 ** (2 - int(np.floor(np.log10(abs(step)))) - 1) + step = np.ceil(step*f)/f + limits = np.arange(start, 10*step, step) + # Output CSV file with open(csv_summary, "w") as fp: - limits_labels = [ - f"{str(a)} -- {str(b)}" for (a, b) in zip(limits[0:-1], limits[1:]) - ] + ["None"] - # Zero difference is treated as a special category for MLD and MAXIMUM ABS DIFF - if (measure_label == "MLD" or measure_label == "MAXIMUM ABS DIFF") and not args.diff: - limits_labels = ["0"] + limits_labels + limits_labels = [f"{a:g}" for a in limits] + ["","None"] # Put None cases in separate bin headerline = f"Format;Category;" + ";".join(limits_labels) + "\n" fp.write(headerline) @@ -120,27 +125,18 @@ if __name__ == "__main__": if m["Format"] == fmt and m["Category"] == cat ] ] - # Zero difference is treated as a special category for MLD and MAXIMUM ABS DIFF - if (measure_label == "MLD" or measure_label == "MAXIMUM ABS DIFF") and not args.diff: - val = [ - float(x) for x in values if x != "None" and x != "0" and x != "" - ] - zero = [sum([1 for x in values if x == "0"])] - none = [sum([1 for x in values if x == "None" or x == ""])] - else: - val = [float(x) for x in values if x != "None" and x != ""] - zero = [] - none = [sum([1 for x in values if x == "None" or x == ""])] + # Create separate bin for None (errors) + val = [float(x) for x in values if x != "None" and x != ""] + none = [sum([1 for x in values if x == "None" or x == ""])] hist, _ = np.histogram(val, limits) - data = np.array(zero + list(hist) + none) + data = np.array(list(hist) + [0] + none + [0]) # CSV output line = f"{fmt};{cat};{'; '.join(map(str,data))}\n" fp.write(line) # Matplotlib histogram - labels = [x if len(x) < 10 else x.replace('--','--\n') for x in limits_labels] - ax.bar(labels, data, 0.5, label=cat, bottom=bottom) + ax.bar(limits_labels, data, 1, align='edge', edgecolor='black', linewidth=0.5, label=cat, bottom=bottom) bottom += data # Histogram layout -- GitLab