c802a59033
One-off script mirroring export_validation_plots.py, used to export the new event-level and pdg-contribution-share plots into the knowledge-base attachments folder. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
75 lines
3.1 KiB
Python
75 lines
3.1 KiB
Python
"""One-off export of Tier 4 event-level/pdg-share plots for
|
|
checkpoints/scan/h1024_n8_d0.1_lr0.0003/best.pt into the knowledge-base
|
|
attachments folder. Not part of the package; run manually."""
|
|
|
|
from pathlib import Path
|
|
|
|
import giant.analysis as a
|
|
|
|
FILE = "/home/lars/Programming/giant/pbwo4_10k_9_predicted_local.parquet"
|
|
OUT = Path("/home/lars/knowledge-base/meta/attachments")
|
|
PREFIX = "giant-h1024n8d0.1lr3e-4"
|
|
|
|
print("=== computing event observables ===")
|
|
obs = a.compute_event_observables_pl(FILE)
|
|
table = obs.event_table
|
|
print("n events:", table.height)
|
|
|
|
print("=== total energy / total length ===")
|
|
fig = a.plot_total_energy(obs)
|
|
fig.savefig(OUT / f"{PREFIX}-event-total-energy.png", dpi=150, bbox_inches="tight")
|
|
fig = a.plot_total_length(obs)
|
|
fig.savefig(OUT / f"{PREFIX}-event-total-length.png", dpi=150, bbox_inches="tight")
|
|
|
|
print("=== mean/median energy & length per step ===")
|
|
fig = a.plot_mean_energy_per_step(obs)
|
|
fig.savefig(OUT / f"{PREFIX}-event-mean-energy-per-step.png", dpi=150, bbox_inches="tight")
|
|
fig = a.plot_mean_length_per_step(obs)
|
|
fig.savefig(OUT / f"{PREFIX}-event-mean-length-per-step.png", dpi=150, bbox_inches="tight")
|
|
|
|
print("=== longitudinal / transverse profiles ===")
|
|
fig = a.plot_longitudinal_profile(obs)
|
|
fig.savefig(OUT / f"{PREFIX}-event-longitudinal-profile.png", dpi=150, bbox_inches="tight")
|
|
fig = a.plot_transverse_profile(obs)
|
|
fig.savefig(OUT / f"{PREFIX}-event-transverse-profile.png", dpi=150, bbox_inches="tight")
|
|
|
|
print("=== shower-max depth ===")
|
|
fig = a.plot_shower_max_depth(obs)
|
|
fig.savefig(OUT / f"{PREFIX}-event-shower-max-depth.png", dpi=150, bbox_inches="tight")
|
|
|
|
print("=== pdg contribution shares ===")
|
|
pdg_table = a.pdg_contribution_table_pl(FILE)
|
|
fig = a.plot_pdg_energy_share(pdg_table)
|
|
fig.savefig(OUT / f"{PREFIX}-pdg-energy-share.png", dpi=150, bbox_inches="tight")
|
|
fig = a.plot_pdg_length_share(pdg_table)
|
|
fig.savefig(OUT / f"{PREFIX}-pdg-length-share.png", dpi=150, bbox_inches="tight")
|
|
|
|
print("=== summary stats ===")
|
|
import numpy as np # noqa: E402
|
|
|
|
for label, real_col, gen_col in [
|
|
("total_edep", "real_total_edep", "gen_total_edep"),
|
|
("total_length", "real_total_length", "gen_total_length"),
|
|
("mean_edep", "real_mean_edep", "gen_mean_edep"),
|
|
("mean_length", "real_mean_length", "gen_mean_length"),
|
|
("median_edep", "real_median_edep", "gen_median_edep"),
|
|
("median_length", "real_median_length", "gen_median_length"),
|
|
("centroid_depth", "real_centroid_depth", "gen_centroid_depth"),
|
|
("transverse_rms", "real_transverse_rms", "gen_transverse_rms"),
|
|
("max_depth", "real_max_depth", "gen_max_depth"),
|
|
]:
|
|
real = table[real_col].to_numpy()
|
|
gen = table[gen_col].to_numpy()
|
|
print(
|
|
f"{label}: real mean={real.mean():.4g} std={real.std():.4g} sigma/mu={real.std() / real.mean():.4f} | "
|
|
f"gen mean={gen.mean():.4g} std={gen.std():.4g} sigma/mu={gen.std() / gen.mean():.4f} | "
|
|
f"mean_diff%={100 * (gen.mean() - real.mean()) / real.mean():.2f}"
|
|
)
|
|
|
|
print("n_steps per event: mean", table["n_steps"].to_numpy().mean())
|
|
|
|
print("=== pdg shares table ===")
|
|
print(pdg_table.to_pandas().to_string())
|
|
|
|
print("DONE")
|