Skip to main content

The interface between PYTHIA and NumPy

Project description

https://img.shields.io/pypi/v/numpythia.svg https://zenodo.org/badge/DOI/10.5281/zenodo.1471492.svg https://travis-ci.org/scikit-hep/numpythia.svg?branch=master https://coveralls.io/repos/github/scikit-hep/numpythia/badge.svg?branch=master

numpythia provides an interface between PYTHIA and NumPy allowing you to generate events as NumPy arrays of particle four-momenta. By default numpythia only depends on NumPy and builds internal copies of the PYTHIA and HepMC source code.

Standalone Installation

To simply use the built-in PYTHIA and HepMC:

pip install -v numpythia

And you’re good to go!

Support for building against an external PYTHIA is on the wishlist.

Strict dependencies

Getting started

>>> from numpythia import Pythia, hepmc_write, hepmc_read
>>> from numpythia import STATUS, HAS_END_VERTEX, ABS_PDG_ID
>>> from numpythia.testcmnd import get_cmnd
>>> from numpy.testing import assert_array_equal

>>> pythia = Pythia(get_cmnd('w'), random_state=1)

>>> selection = ((STATUS == 1) & ~HAS_END_VERTEX &
            (ABS_PDG_ID != 12) & (ABS_PDG_ID != 14) & (ABS_PDG_ID != 16))

>>> # generate events while writing to ascii hepmc
>>> for event in hepmc_write('events.hepmc', pythia(events=1)):
>>>    array1 = event.all(selection)

>>> # read the same event back from ascii hepmc
>>> for event in hepmc_read('events.hepmc'):
>>>    array2 = event.all(selection)

>>> assert_array_equal(array1, array2)
True

The dtype of any array of particle information is:

np.dtype([('E', 'f8'), ('px', 'f8'), ('py', 'f8'), ('pz', 'f8'), ('pt', 'f8'),
          ('mass', 'f8'), ('rap', 'f8'), ('eta', 'f8'), ('theta', 'f8'),
          ('phi', 'f8'), ('prodx', 'f8'), ('prody', 'f8'), ('prodz', 'f8'),
          ('prodt', 'f8'), ('pdgid', 'i4'), ('status', 'i4')])

Also see pyjet for jet clustering.

Tutorial

Setting PYTHIA

PYTHIA settings can be passed in one of three ways: through the **kwargs arguments of the constructor Pythia(…, **kwargs):

>>> pythia = Pythia(..., Beams_eCM=13000.)

Or as a dictionary:

>>> pythia = Pythia(..., params={'Beams:eCM':  13000.})

Or via a Python command file:

>>> pythia = Pythia(config='path/to/config.cmd')

The full list of settings can be found on the PYTHIA homepage.

Note that the “:” in settings names is replaced by a “_” if using kwargs. kwargs take precedence over params and they both take precedence over config. Example config files can be found under the numpythia.testcmnd directory.

Generate events

To generate events do

>>> events = pythia(events=100)
>>> events
<generator at 0x10cf06f78>

where events is a generator of GenEvent containing all the generated particles.

Generated particles can be accessed through the all, first and last methods which have two optional arguments selection and return_hepmc. Selection is a filter or a combination of filters with bitwise operations (as shown in the getting started example) applied on the particles in the event. The available filters are

STATUS, PDG_ID, ABS_PDG_ID, HAS_END_VERTEX, HAS_PRODUCTION_VERTEX,
HAS_SAME_PDG_ID_DAUGHTER, IS_STABLE, IS_BEAM

return_hepmc is by default set to False when using all:

>>> for e in events:
>>>     array = e.all(selection)

returns an array of particles, with the dtype described above. return_hepmc is by default set to True for first and last:

>>> for e in events:
>>>     gen_part_f = e.first(selection)
>>>     gen_part_l = e.last(selection)

returns a GenParticle.

Generated particle

GenParticle is the numpythia interface of HepMC::GenParticle, and has the following attributes

pid, status, e, px, py, pz, pt, eta, phi, mass, theta, rap

GenParticle also has the following methods parents, children, ancestors, descendants and siblings both with the two optional arguments selection and return_hepmc described before. For instance:

>>> for e in events:
>>>     w = e.last((ABS_PDG_ID == 24) & HAS_END_VERTEX))
>>>     w.children()
array([(240.60708981, 115.76101664, 126.16766767, -169.03439984, 171.22760682, 0.5, -0.87228439, -0.87228739, 2.34974894, 0.82838703, 0., 0., 0., 0.,  3, 23),
   ( 52.59241372,   9.21296404,  50.77873929,  -10.01763001,  51.60774235, 1.5, -0.19283178, -0.19291222, 1.76252302, 1.39131523, 0., 0., 0., 0., -4, 23)],
  dtype=[('E', '<f8'), ('px', '<f8'), ('py', '<f8'), ('pz', '<f8'), ('pT', '<f8'), ('mass', '<f8'), ('rap', '<f8'), ('eta', '<f8'), ('theta', '<f8'), ('phi', '<f8'), ('prodx', '<f8'), ('prody', '<f8'), ('prodz', '<f8'), ('prodt', '<f8'), ('pdgid', '<i4'), ('status', '<i4')])

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

numpythia-1.1.0.tar.gz (6.5 MB view details)

Uploaded Source

File details

Details for the file numpythia-1.1.0.tar.gz.

File metadata

  • Download URL: numpythia-1.1.0.tar.gz
  • Upload date:
  • Size: 6.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for numpythia-1.1.0.tar.gz
Algorithm Hash digest
SHA256 5b1db27e58e5762fca695359923a85c01ef8716b5403a680ee1b1cb73078021d
MD5 ffb405f588017076812f08642f5e0f5a
BLAKE2b-256 d1dc93aad915b14663fdfb457cf121e96893e253e06dbc19e766fa975feed84b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page