Skip to content
Snippets Groups Projects
Commit 2f34f9fc authored by Chao Peng's avatar Chao Peng
Browse files

update draw_clusters

parent cbfe2274
No related branches found
No related tags found
1 merge request!81remove compact files from barrel emcal benchmarks
...@@ -132,21 +132,38 @@ if __name__ == '__main__': ...@@ -132,21 +132,38 @@ if __name__ == '__main__':
# read data # read data
load_root_macros(args.macros) load_root_macros(args.macros)
df = get_hits_data(args.file, args.iev, branch=args.branch) df = get_hits_data(args.file, args.iev, branch=args.branch)
dfmcp = get_mcp_simple(args.file, args.iev, 'mcparticles2') df = df[df['cluster'] == args.icl]
vec = dfmcp[['px', 'py', 'pz']].values[0]
vec = vec/np.linalg.norm(vec)
# df = df[df['cluster'] == args.icl]
if not len(df): if not len(df):
print("Error: do not find any hits for cluster {:d} in event {:d}".format(args.icl, args.iev)) print("Error: do not find any hits for cluster {:d} in event {:d}".format(args.icl, args.iev))
exit(-1) exit(-1)
# convert to polar coordinates (mrad), and stack all r values
df['r'] = np.sqrt(df['x'].values**2 + df['y'].values**2 + df['z'].values**2)
df['phi'] = np.arctan2(df['y'].values, df['x'].values)*1000.
df['theta'] = np.arccos(df['z'].values/df['r'].values)*1000.
df['eta'] = -np.log(np.tan(df['theta'].values/1000./2.))
# truth
dfmcp = get_mcp_simple(args.file, args.iev, 'mcparticles2').iloc[0]
pdgbase = ROOT.TDatabasePDG()
inpart = pdgbase.GetParticle(int(dfmcp['pid']))
print("Incoming particle = {}, pdgcode = {}, charge = {}, mass = {}"\
.format(inpart.GetName(), inpart.PdgCode(), inpart.Charge(), inpart.Mass()))
# neutral particle, no need to consider magnetic field
if np.isclose(inpart.Charge(), 0., rtol=1e-5):
vec = dfmcp[['px', 'py', 'pz']].values
# charge particle, use the cluster center
else:
flayer = df[df['layer'] == df['layer'].min()]
vec = flayer[['x', 'y', 'z']].mean().values
vec = vec/np.linalg.norm(vec)
# particle line from (0, 0, 0) to the inner Ecal surface # particle line from (0, 0, 0) to the inner Ecal surface
length = rmin/np.sqrt(vec[0]**2 + vec[1]**2) length = rmin/np.sqrt(vec[0]**2 + vec[1]**2)
pline = np.transpose(vec*np.mgrid[0:length:2j][:, np.newaxis]) pline = np.transpose(vec*np.mgrid[0:length:2j][:, np.newaxis])
cmap = truncate_colormap(plt.get_cmap('jet'), 0.1, 0.9)
os.makedirs(args.outdir, exist_ok=True) os.makedirs(args.outdir, exist_ok=True)
# cluster plot # cluster plot
cmap = truncate_colormap(plt.get_cmap('jet'), 0.1, 0.9)
fig = plt.figure(figsize=(15, 12), dpi=160) fig = plt.figure(figsize=(15, 12), dpi=160)
ax = fig.add_subplot(111, projection='3d') ax = fig.add_subplot(111, projection='3d')
# draw particle line # draw particle line
...@@ -183,12 +200,6 @@ if __name__ == '__main__': ...@@ -183,12 +200,6 @@ if __name__ == '__main__':
# projection plot # projection plot
# convert to polar coordinates (mrad), and stack all r values
df['r'] = np.sqrt(df['x'].values**2 + df['y'].values**2 + df['z'].values**2)
df['phi'] = np.arctan2(df['y'].values, df['x'].values)*1000.
df['theta'] = np.arccos(df['z'].values/df['r'].values)*1000.
df['eta'] = -np.log(np.tan(df['theta'].values/1000./2.))
# convert to mrad # convert to mrad
vecp = np.asarray([np.arccos(vec[2]), np.arctan2(vec[1], vec[0])])*1000. vecp = np.asarray([np.arccos(vec[2]), np.arctan2(vec[1], vec[0])])*1000.
phi_rg = np.asarray([vecp[1] - args.topo_range, vecp[1] + args.topo_range]) phi_rg = np.asarray([vecp[1] - args.topo_range, vecp[1] + args.topo_range])
......
...@@ -87,15 +87,21 @@ if __name__ == '__main__': ...@@ -87,15 +87,21 @@ if __name__ == '__main__':
load_root_macros(args.macros) load_root_macros(args.macros)
df = get_hits_data(args.file, args.iev, args.branch) df = get_hits_data(args.file, args.iev, args.branch)
df = df[df['cluster'] == args.icl] df = df[df['cluster'] == args.icl]
if not len(df):
print("Error: do not find any hits for cluster {:d} in event {:d}".format(args.icl, args.iev))
exit(-1)
# convert to polar coordinates (mrad), and stack all r values # convert to polar coordinates (mrad), and stack all r values
df['r'] = np.sqrt(df['x'].values**2 + df['y'].values**2 + df['z'].values**2) df['r'] = np.sqrt(df['x'].values**2 + df['y'].values**2 + df['z'].values**2)
df['phi'] = np.arctan2(df['y'].values, df['x'].values)*1000. df['phi'] = np.arctan2(df['y'].values, df['x'].values)*1000.
df['theta'] = np.arccos(df['z'].values/df['r'].values)*1000. df['theta'] = np.arccos(df['z'].values/df['r'].values)*1000.
df['eta'] = -np.log(np.tan(df['theta'].values/1000./2.)) df['eta'] = -np.log(np.tan(df['theta'].values/1000./2.))
# truth
dfmcp = get_mcp_simple(args.file, args.iev, 'mcparticles2').iloc[0] dfmcp = get_mcp_simple(args.file, args.iev, 'mcparticles2').iloc[0]
pdgbase = ROOT.TDatabasePDG() pdgbase = ROOT.TDatabasePDG()
inpart = pdgbase.GetParticle(int(dfmcp['pid'])) inpart = pdgbase.GetParticle(int(dfmcp['pid']))
print("Incoming particle = {}, pdgcode = {}, charge = {}, mass = {}".format(inpart.GetName(), inpart.PdgCode(), inpart.Charge(), inpart.Mass())) print("Incoming particle = {}, pdgcode = {}, charge = {}, mass = {}"\
.format(inpart.GetName(), inpart.PdgCode(), inpart.Charge(), inpart.Mass()))
# neutral particle, no need to consider magnetic field # neutral particle, no need to consider magnetic field
if np.isclose(inpart.Charge(), 0., rtol=1e-5): if np.isclose(inpart.Charge(), 0., rtol=1e-5):
vec = dfmcp[['px', 'py', 'pz']].values vec = dfmcp[['px', 'py', 'pz']].values
...@@ -105,15 +111,11 @@ if __name__ == '__main__': ...@@ -105,15 +111,11 @@ if __name__ == '__main__':
vec = flayer[['x', 'y', 'z']].mean().values vec = flayer[['x', 'y', 'z']].mean().values
vec = vec/np.linalg.norm(vec) vec = vec/np.linalg.norm(vec)
if not len(df):
print("Error: do not find any hits for cluster {:d} in event {:d}".format(args.icl, args.iev))
exit(-1)
# particle line from (0, 0, 0) to the inner Ecal surface # particle line from (0, 0, 0) to the inner Ecal surface
length = rmin/np.sqrt(vec[0]**2 + vec[1]**2) length = rmin/np.sqrt(vec[0]**2 + vec[1]**2)
pline = np.transpose(vec*np.mgrid[0:length:2j][:, np.newaxis]) pline = np.transpose(vec*np.mgrid[0:length:2j][:, np.newaxis])
cmap = truncate_colormap(plt.get_cmap('jet'), 0.1, 0.9) cmap = truncate_colormap(plt.get_cmap('jet'), 0.1, 0.9)
# convert truth to mrad # convert truth to mrad
vecp = np.asarray([np.arccos(vec[2]), np.arctan2(vec[1], vec[0])])*1000. vecp = np.asarray([np.arccos(vec[2]), np.arctan2(vec[1], vec[0])])*1000.
phi_rg = np.asarray([vecp[1] - args.topo_range, vecp[1] + args.topo_range]) phi_rg = np.asarray([vecp[1] - args.topo_range, vecp[1] + args.topo_range])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment