Skip to content
Snippets Groups Projects

sieic_vis bug fixes and fine tuning

Merged David Blyth requested to merge sieic_vis into master
1 file
+ 65
32
Compare changes
  • Side-by-side
  • Inline
@@ -11,8 +11,9 @@ def run(args):
kernel.loadGeometry('file:' + args.compact_path)
dd = kernel.detectorDescription()
manager = dd.manager()
manager.CheckOverlaps(0.01)
manager.PrintOverlaps()
if not args.nocheck:
manager.CheckOverlaps(0.01)
manager.PrintOverlaps()
if args.input_file == None:
manager.SetVisDensity()
manager.SetVisLevel(2)
@@ -22,6 +23,8 @@ def run(args):
viewer = ROOT.gPad.GetViewer3D()
viewer.SetCurrentCamera(ROOT.TGLViewer.kCameraOrthoZOY)
viewer.ToggleOrthoRotate()
if args.dark_theme:
viewer.SwitchColorSet()
if args.input_file == None:
overlay = viewer.GetCameraOverlay()
@@ -40,13 +43,19 @@ def run(args):
marker.Draw('same')
for line in lines:
line.Draw('same')
args.output_prefix += '_' + args.input_file + '_' + str(args.input_event)
viewer.UpdateScene()
if args.interactive:
ROOT.gApplication.Run()
else:
save_picture(viewer, args.output_prefix + '.png')
save_picture(viewer, args.output_prefix + '_perp.png')
camera = viewer.CurrentCamera()
camera.RotateRad(-0.25, -0.4)
camera.RotateRad(0, ROOT.TMath.Pi() / 2.)
save_picture(viewer, args.output_prefix + '_long.png')
camera.RotateRad(0, -ROOT.TMath.Pi() / 2.)
camera.RotateRad(-0.25, 0.4)
save_picture(viewer, args.output_prefix + '_angled.png')
if args.input_file == None:
overlay.SetShowOrthographic(False)
@@ -76,7 +85,7 @@ def draw_event(input_file, input_event):
type_name = coll.getTypeName()
if type_name == "SimTrackerHit":
n_hits = coll.getNumberOfElements()
tracker_hit_markers = ROOT.TPolyMarker3D(n_hits)
tracker_hit_markers = ROOT.TPolyMarker3D()
markers.append(tracker_hit_markers)
tracker_hit_markers.SetMarkerSize(10)
tracker_hit_markers.SetMarkerColor(3)
@@ -84,50 +93,62 @@ def draw_event(input_file, input_event):
for i in range(0, n_hits):
hit = coll.getElementAt(i)
hit.__class__ = ROOT.IMPL.SimTrackerHitImpl
energy = hit.getEDep()
if energy == 0:
continue
pos = hit.getPosition()
tracker_hit_markers.SetPoint(i, pos[0] / 10., pos[1] / 10., pos[2] / 10.)
tracker_hit_markers.SetNextPoint(pos[0] / 10., pos[1] / 10., pos[2] / 10.)
elif type_name == "SimCalorimeterHit":
n_hits = coll.getNumberOfElements()
calo_hit_markers = ROOT.TPolyMarker3D()
markers.append(calo_hit_markers)
calo_hit_markers.SetMarkerSize(5)
calo_hit_markers.SetMarkerColor(3)
calo_hit_markers.SetMarkerStyle(4)
for i in range(0, n_hits):
hit = coll.getElementAt(i)
hit.__class__ = ROOT.IMPL.SimCalorimeterHitImpl
energy = hit.getEnergy()
if energy == 0:
continue
marker_size = math.log(energy * 1e12) * 0.25
if(marker_size <= 0):
continue
pos = hit.getPosition()
calo_hit_markers.SetPoint(i, pos[0] / 10., pos[1] / 10., pos[2] / 10.)
calo_hit_markers = ROOT.TPolyMarker3D(1)
markers.append(calo_hit_markers)
calo_hit_markers.SetMarkerSize(marker_size)
calo_hit_markers.SetMarkerColor(6)
if coll_name.startswith("Hcal"):
calo_hit_markers.SetMarkerColor(7)
calo_hit_markers.SetMarkerStyle(4)
calo_hit_markers.SetPoint(0, pos[0] / 10., pos[1] / 10., pos[2] / 10.)
elif type_name == "MCParticle":
n_parts = coll.getNumberOfElements()
for i in range(0, n_parts):
part = coll.getElementAt(i)
part.__class__ = ROOT.IMPL.MCParticleImpl
vertex = part.getVertex()
vertex_marker = ROOT.TPolyMarker3D(1)
markers.append(vertex_marker)
vertex_marker.SetMarkerColor(3)
vertex_marker.SetMarkerStyle(7)
vertex_marker.SetPoint(0, vertex[0] / 10., vertex[1] / 10., vertex[2] / 10.)
vertex_marker.Draw('same')
momentum = part.getMomentum()
mag = math.sqrt(pow(momentum[0], 2) + pow(momentum[1], 2) + pow(momentum[2], 2))
line_len = 50
line_vec = array('d')
line_vec.extend([momentum[0] * line_len / mag, momentum[1] * line_len / mag, momentum[2] * line_len / mag])
part_line = ROOT.TPolyLine3D(2)
lines.append(part_line)
part_line.SetLineColor(1)
part_line.SetLineWidth(2)
part_line.SetPoint(0, vertex[0] / 10., vertex[1] / 10., vertex[2] / 10.)
part_line.SetPoint(1, line_vec[0], line_vec[1], line_vec[2])
part_line.Draw('same')
if part.getGeneratorStatus() == 1:
vertex = part.getVertex()
vertex_marker = ROOT.TPolyMarker3D(1)
markers.append(vertex_marker)
vertex_marker.SetMarkerColor(3)
vertex_marker.SetMarkerStyle(7)
vertex_marker.SetPoint(0, vertex[0] / 10., vertex[1] / 10., vertex[2] / 10.)
vertex_marker.Draw('same')
momentum = part.getMomentum()
mag = math.sqrt(pow(momentum[0], 2) + pow(momentum[1], 2) + pow(momentum[2], 2))
line_len = 50
line_vec = array('d')
line_vec.extend([momentum[0] * line_len / mag, momentum[1] * line_len / mag, momentum[2] * line_len / mag])
part_line = ROOT.TPolyLine3D(2)
lines.append(part_line)
part_line.SetLineColor(1)
part_line.SetLineWidth(2)
part_line.SetPoint(0, vertex[0] / 10., vertex[1] / 10., vertex[2] / 10.)
part_line.SetPoint(1, line_vec[0], line_vec[1], line_vec[2])
part_line.Draw('same')
reader.close()
return markers, lines
def save_picture(viewer, filename):
viewer.SavePictureUsingFBO(filename, 1920, 1080)
viewer.SavePictureUsingFBO(filename, 1360, 720)
print("Saved file: " + filename)
def define_args(parser):
@@ -161,6 +182,18 @@ def define_args(parser):
default=0,
help='event to visualize'
)
parser.add_argument(
'-n', '--nocheck',
action='store_true',
dest='nocheck',
help='do not check geometry for overlaps'
)
parser.add_argument(
'-d', '--dark',
action='store_true',
dest='dark_theme',
help='use a black background'
)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='sieic_vis')
Loading