Skip to content

scikit-hep/pylhe

Repository files navigation

pylhe: Python LHE interface

pylhe logo

GitHub Project DOI Scikit-HEP

PyPI version Conda-forge version Supported Python versions

GitHub Actions Status Code Coverage pre-commit.ci status Code style: black

Small and thin Python interface to read Les Houches Event (LHE) files

Install

To install pylhe from PyPI you can just do

python -m pip install pylhe

The visualization capabilities require the external dependency of Graphviz.

Get started

The example below provides a simple overview. Full functionality can be inspected from the functions provided in the pylhe module.

Reading

import itertools

# You can use LHE files from scikit-hep-testdata
from skhep_testdata import data_path

import pylhe

lhe_file = data_path("pylhe-testlhef3.lhe")
events = pylhe.read_lhe_with_attributes(lhe_file)
print(f"Number of events: {pylhe.read_num_events(lhe_file)}")

# Get event 1
event = next(itertools.islice(events, 1, 2))

# A DOT language graph of the event can be inspected as follows
print(event.graph.source)

# The graph is nicely displayed as SVG in Jupyter notebooks
event

# To save a DOT graph render the graph to a supported image format
# (refer to the Graphviz documentation for more)
event.graph.render(filename="test", format="png", cleanup=True)
event.graph.render(filename="test", format="pdf", cleanup=True)

Writing

For a full example see write or filter. The values in the sketch below are intentionally left empty since they depend on the use-case. The data structure of pylhe is:

import pylhe

file=pylhe.LHEFile(
    init=pylhe.LHEInit(
        initInfo=pylhe.LHEInitInfo(
            beamA=,
            beamB=,
            energyA=,
            energyB=,
            PDFgroupA=,
            PDFgroupB=,
            PDFsetA=,
            PDFsetB=,
            weightinStrategy=,
            numProcesses=,
        ),
        procInfo=pylhe.LHEProcInfo(
            xSection=,
            error=,
            unitWeight=,
            procId=,
        ),
    ),
    events=[
        pylhe.LHEEvent(
            eventinfo=pylhe.LHEEventInfo(
                nparticles=,
                pid=,
                weight=,
                scale=,
                aqed=,
                aqcd=,
            ),
            particles=[
                pylhe.LHEParticle(
                    id=,
                    status=,
                    mother1=,
                    mother2=,
                    color1=,
                    color2=,
                    px=,
                    py=,
                    pz=,
                    e=,
                    m=,
                    lifetime=,
                    spin=,
                ),
                ...
            ],
            weights=None,
            attributes=None,
            optional=None,
        ),
        ...
    ]
)

# write to file, compressed if gz/gzip suffix
write_lhe_file(file.init, file.events, "myevents.lhe.gz", rwgt=True, weights=False)

Citation

The preferred BibTeX entry for citation of pylhe is

@software{pylhe,
  author = {Lukas Heinrich and Matthew Feickert and Eduardo Rodrigues and Alexander Puck Neuwirth},
  title = "{pylhe: v0.9.1}",
  version = {v0.9.1},
  doi = {10.5281/zenodo.1217031},
  url = {https://github.com/scikit-hep/pylhe},
}

Contributors

We hereby acknowledge the contributors that made this project possible (emoji key):

Matthew Feickert
Matthew Feickert

🚧 🎨 πŸ’» πŸ“–
Lukas
Lukas

🚧 🎨 πŸ’» πŸ“–
Eduardo Rodrigues
Eduardo Rodrigues

🚧 πŸ’» πŸ“–
Johannes Schumann
Johannes Schumann

πŸ’»
Henry Schreiner
Henry Schreiner

πŸ’»
ariaradick
ariaradick

πŸ’»
Junghwan John Goh
Junghwan John Goh

πŸ’»
fuenfundachtzig
fuenfundachtzig

πŸ’»
Shantanu Gontia
Shantanu Gontia

πŸ’»
Tom Eichlersmith
Tom Eichlersmith

πŸ’»
Alexander Puck Neuwirth
Alexander Puck Neuwirth

πŸ’»

This project follows the all-contributors specification.