#!/usr/bin/env python
"""Main script to run PythiaPlotter."""
from __future__ import absolute_import
import sys
from pythiaplotter.utils.logging_config import get_logger
import pythiaplotter.parsers as parsers
import pythiaplotter.printers as printers
from pythiaplotter.graphers import assign_particles_to_graph
import pythiaplotter.cli as cli
from pythiaplotter.utils.common import open_pdf
log = get_logger(__name__)
[docs]def choose_parser(opts):
"""Choose parser & configure"""
if opts.inputFormat == "PYTHIA":
return parsers.Pythia8Parser(filename=opts.input,
event_num=opts.eventNumber)
elif opts.inputFormat == "HEPMC":
return parsers.HepMCParser(filename=opts.input,
event_num=opts.eventNumber)
elif opts.inputFormat == "LHE":
return parsers.LHEParser(filename=opts.input,
event_num=opts.eventNumber)
elif opts.inputFormat == "CMSSW":
return parsers.CMSSWParticleListParser(filename=opts.input)
elif opts.inputFormat == "HEPPY":
return parsers.HeppyParser(filename=opts.input,
event_num=opts.eventNumber,
**opts.HEPPY_PARSER_OPTS)
else:
raise NotImplementedError("Cannot parse input format %s" % opts.inputFormat)
[docs]def main(in_args=None):
"""Main entry point to run the whole thing."""
opts = cli.get_args(in_args)
# Parse input into a set of particles
parser = choose_parser(opts)
event, particles = parser.parse()
event.source = opts.input
event.event_num = opts.eventNumber
event.title = opts.title
# Assign particles to graph
default_repr = parsers.parser_opts[opts.inputFormat].default_representation
graph = assign_particles_to_graph(particles, default_repr,
desired_repr=opts.representation,
remove_redundants=(not opts.redundants))
event.graph = graph
if opts.stats:
event.print_stats()
# Print the graph
printer = printers.printer_opts_checked[opts.printer].printer(opts)
printer.print_event(event)
if opts.open and not opts.noOutput:
open_pdf(opts.output)
return 0
if __name__ == "__main__":
sys.exit(main())