From 56ad9ae3af7f7d13ccafb39ad35de346e35c1123 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin <dmitry.kalinkin@gmail.com> Date: Sun, 13 Oct 2024 02:22:41 -0400 Subject: [PATCH] Delete benchmarks/femc_photon/analysis/femc_photon_plots.py~ --- .../analysis/femc_photon_plots.py~ | 171 ------------------ 1 file changed, 171 deletions(-) delete mode 100644 benchmarks/femc_photon/analysis/femc_photon_plots.py~ diff --git a/benchmarks/femc_photon/analysis/femc_photon_plots.py~ b/benchmarks/femc_photon/analysis/femc_photon_plots.py~ deleted file mode 100644 index 4227b4e3..00000000 --- a/benchmarks/femc_photon/analysis/femc_photon_plots.py~ +++ /dev/null @@ -1,171 +0,0 @@ -import numpy as np, pandas as pd, matplotlib.pyplot as plt, matplotlib as mpl, awkward as ak, sys, uproot as ur -import mplhep as hep -hep.style.use("CMS") - -plt.rcParams['figure.facecolor']='white' -plt.rcParams['savefig.facecolor']='white' -plt.rcParams['savefig.bbox']='tight' - -plt.rcParams["figure.figsize"] = (7, 7) - -config=sys.argv[1].split("/")[1] #results/{config}/{benchmark_name} -outdir=sys.argv[1]+"/" -try: - import os - os.mkdir(outdir[:-1]) -except: - pass - -import uproot as ur -arrays_sim={p:ur.open(f'sim_output/femc_photon/epic_craterlake_rec_e-_{p}GeV.edm4hep.root:events').arrays() for p in (20, 30, 40, 50, 60,70,80)} - -for p in arrays_sim: - array=arrays_sim[p] - tilt=-.025 - px=array['MCParticles.momentum.x'][:,2] - py=array['MCParticles.momentum.y'][:,2] - pz=array['MCParticles.momentum.z'][:,2] - p=np.sqrt(px**2+py**2+pz**2) - - pxp=px*np.cos(tilt)-pz*np.sin(tilt) - pyp=py - pzp=pz*np.cos(tilt)+px*np.sin(tilt) - - array['eta_truth']=1/2*np.log((p+pzp)/(p-pzp)) - array['nclust_endcap']=[len(array['EcalEndcapPClusters.energy'][i]) for i in range(len(array))] - -for array in arrays_sim.values(): - tilt=-0.025 - px=array['MCParticles.momentum.x'][:,2] - py=array['MCParticles.momentum.y'][:,2] - pz=array['MCParticles.momentum.z'][:,2] - p=np.sqrt(px**2+py**2+pz**2) - - pxp=px*np.cos(tilt)-pz*np.sin(tilt) - pyp=py - pzp=pz*np.cos(tilt)+px*np.sin(tilt) - - array['eta_truth']=1/2*np.log((p+pzp)/(p-pzp)) - array['phi_truth']=np.arctan2(pyp,pxp) - -#number of clusters -plt.figure() -for eta_min, eta_max, field in (1.5, 2.8, 'nclust_endcap'),: - for p in arrays_sim: - array=arrays_sim[p] - plt.hist(array[field][(array['eta_truth']>eta_min)&(array['eta_truth']<eta_max)], - bins=np.linspace(0,10,11), histtype='step', label=f'{p} GeV', density=True) - plt.ylabel("events") - plt.xlabel("# of Ecal clusters") - plt.legend() - plt.savefig(outdir+f"/{field}.pdf") - -fig, axs=plt.subplots(1,2, figsize=(16,8)) -avgs=[] -stds=[] -pvals=[] - -#number of hits per cluster -fig, axs=plt.subplots(1,2, figsize=(16,8)) -avgs=[] -stds=[] -pvals=[] - -for p in arrays_sim: - - a=arrays_sim[p] - n=[] - nn=-a['EcalEndcapPClusters.hits_begin']+a['EcalEndcapPClusters.hits_end'] - E=a['EcalEndcapPClusters.energy'] - for evt in range(len(array)): - maxE=np.max(E[evt]) - found=False - for i in range(len(E[evt])): - if E[evt][i]==maxE: - n.append(nn[evt][i]) - found=True - break - #if not found: - # n.append(0) - - if p ==50: - plt.sca(axs[0]) - y,x,_=plt.hist(n, range=(0,100), bins=100, histtype='step', label=f"E={p} GeV") - plt.ylabel("events") - plt.xlabel("# hits in cluster") - plt.title(f"e-, E={p} GeV") - pvals.append(p) - avgs.append(np.mean(n)) - stds.append(np.std(n)) - -plt.sca(axs[1]) -plt.errorbar(pvals, avgs, stds, marker='o',ls='') -plt.xlabel("E [GeV]") -plt.ylabel("# hits in cluster [mean$\\pm$std]") -plt.ylim(0) -plt.savefig(outdir+"/nhits_per_cluster.pdf") - - -#energy resolution -def gauss(x, A,mu, sigma): - return A * np.exp(-(x-mu)**2/(2*sigma**2)) -from scipy.optimize import curve_fit - -fig, axs=plt.subplots(1,3, figsize=(24,8)) -pvals=[] -res=[] -dres=[] -scale=[] -dscale=[] -for p in arrays_sim: - bins=np.linspace(15*p/20,22*p/20, 50) - if p==50: - plt.sca(axs[0]) - plt.title(f"E={p} GeV") - y,x,_=plt.hist(ak.flatten(arrays_sim[p]['EcalEndcapPClusters.energy']), bins=bins, histtype='step') - plt.ylabel("events") - plt.xlabel("$E^{rec}_e$ [GeV]") - else: - y,x=np.histogram(ak.flatten(arrays_sim[p]['EcalEndcapPClusters.energy']), bins=bins) - bcs=(x[1:]+x[:-1])/2 - - fnc=gauss - slc=abs(bcs-p)<3 - sigma=np.sqrt(y[slc])+0.5*(y[slc]==0) - p0=(100, p, 3) - - coeff, var_matrix = curve_fit(fnc, list(bcs[slc]), list(y[slc]), p0=p0,sigma=list(sigma)) - #res=np.abs(coeff[2]/coeff[1]) - if p==50: - xx=np.linspace(15*p/20,22*p/20, 100) - - plt.plot(xx, fnc(xx,*coeff), label=f"$\\sigma_E/E={abs(coeff[2])/coeff[1]*100:.1f}\%$") - plt.axvline(p, color='g', ls='--', alpha=0.7) - plt.legend() - #plt.xlim(0,60) - #plt.show() - pvals.append(p) - res.append(abs(coeff[2])/coeff[1]) - dres.append(np.sqrt(var_matrix[2][2])/coeff[1]) - scale.append(abs(coeff[1])/p) - dscale.append(np.sqrt(var_matrix[1][1])/p) -plt.sca(axs[1]) -plt.errorbar(pvals, 100*np.array(res), 100*np.array(dres), ls='', marker='o') -fnc = lambda E, a, b: np.hypot(a,b/np.sqrt(E)) -p0=(.05, .12) -coeff, var_matrix = curve_fit(fnc, pvals, res, p0=p0,sigma=dres) -xx=np.linspace(15, 85, 100) -plt.plot(xx, 100*fnc(xx,*coeff), label=f'fit:{100*coeff[0]:.0f}%$\\oplus\\frac{{{100*coeff[1]:.1f}\\%}}{{\\sqrt{{E}}}}$') -plt.legend() -plt.ylim(0) -plt.ylabel("E resolution [%]") -plt.xlabel("E truth [GeV]") -plt.sca(axs[2]) - -plt.errorbar(pvals, 100*np.array(scale), 100*np.array(dscale), ls='', marker='o') -plt.ylabel("energy scale [%]") -plt.xlabel("E truth [GeV]") -plt.axhline(100, color='0.5', alpha=0.5, ls='--') -plt.ylim(0, 110) -plt.tight_layout() -plt.savefig(outdir+"/energy_res.pdf") -- GitLab