From 14e6600d33fa667552c611f803937adf24ab4d3b Mon Sep 17 00:00:00 2001 From: Hans Dembinski Date: Fri, 2 Sep 2022 01:12:40 +0200 Subject: [PATCH] update docs with example notebook (#37) --- .github/workflows/docs.yml | 6 +- .gitignore | 6 +- docs/build.py | 4 +- docs/conf.py | 3 +- docs/examples.rst | 7 + docs/examples/basics.ipynb | 1474 ++++++++++++++++++++++++++++++ docs/examples/event.png | Bin 0 -> 25671 bytes docs/examples/event.svg | 391 ++++++++ docs/examples/modified_event.dat | 57 ++ docs/generate_about.py | 8 - docs/generate_index.py | 12 + docs/{index.rst => index.rst.in} | 3 +- docs/reference.rst | 7 + examples/visualization.ipynb | 91 -- setup.cfg | 3 + src/pyhepmc/_autodoc.py | 9 +- 16 files changed, 1965 insertions(+), 116 deletions(-) create mode 100644 docs/examples.rst create mode 100644 docs/examples/basics.ipynb create mode 100644 docs/examples/event.png create mode 100644 docs/examples/event.svg create mode 100644 docs/examples/modified_event.dat delete mode 100644 docs/generate_about.py create mode 100644 docs/generate_index.py rename docs/{index.rst => index.rst.in} (66%) delete mode 100644 examples/visualization.ipynb diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 15f294b..b5e5529 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,4 +1,4 @@ -name: docs +name: Docs on: pull_request: @@ -21,7 +21,9 @@ jobs: - uses: actions/setup-python@v2 with: python-version: "3.9" - - run: python -m pip install -v -e .[doc] + - run: sudo apt-get install pandoc + - run: python -m pip install --prefer-binary -v -e .[doc] + - run: python -m ipykernel install --user --name python3 - run: python docs/build.py - uses: actions/upload-pages-artifact@v1 with: diff --git a/.gitignore b/.gitignore index 1bb9508..b3054fe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store var build dist @@ -20,5 +21,8 @@ src/pyhepmc/_version.py .vscode docs/xml docs/_build -docs/about.rst.in +docs/index.rst docs/generated_reference.rst.in +examples/event.png +examples/event.svg +examples/modified_event.dat diff --git a/docs/build.py b/docs/build.py index cd94a0c..174e4c8 100644 --- a/docs/build.py +++ b/docs/build.py @@ -7,8 +7,8 @@ sys.path.append(cdir) os.chdir(cdir) -import generate_about # noqa +import generate_index # noqa -cmd = "sphinx-build -W -b html -d _build/doctrees . _build/html" +cmd = "sphinx-build -W -a -E -b html -d _build/doctrees . _build/html" sys.exit(subp.call(cmd.split())) diff --git a/docs/conf.py b/docs/conf.py index 619d522..ba75b21 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -18,9 +18,8 @@ extensions = [ "sphinx.ext.autodoc", - "sphinx.ext.coverage", - "sphinx.ext.githubpages", "sphinx.ext.napoleon", + "nbsphinx", ] # templates_path = ["_templates"] diff --git a/docs/examples.rst b/docs/examples.rst new file mode 100644 index 0000000..9abbaa9 --- /dev/null +++ b/docs/examples.rst @@ -0,0 +1,7 @@ +Examples +======== + +.. toctree:: + :maxdepth: 1 + + examples/basics diff --git a/docs/examples/basics.ipynb b/docs/examples/basics.ipynb new file mode 100644 index 0000000..eea618f --- /dev/null +++ b/docs/examples/basics.ipynb @@ -0,0 +1,1474 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Basic IO, event inspection, and visualization\n", + "\n", + "We load an event from a file using `pyhepmc.open` and demonstrate how it renders in Jupyter (this requires graphviz)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "event number = 0\n", + "\n", + "\n", + "\n", + "-1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-1->-3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "d 0.76 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-1->-8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "(uu)₁ 50 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-2->-4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "d 6 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-2->-9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "(uu)₁ 44 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-3->-5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "d 0.76 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-4->-5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "d 6 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-5->-6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "d 5.9 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-5->-7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "d 0.81 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-6->-8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "d 5.9 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-7->-9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "d 0.81 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-8->-10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Internal(92) 56 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-10->-13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "η'(958) 3.5 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-10->-12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁰ 0.46 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-10->out_16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁻ 2.3 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-10->out_17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁺ 8.1 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-10->out_18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "n 6.2 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-10->out_19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁺ 35 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-9->-11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Internal(92) 44 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-11->-14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ρ(770)⁰ 3.5 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-11->-15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "η 12 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-11->-16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Δ(1232)⁺ 20 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-11->-17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁰ 8.4 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-13->-18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "ρ(770)⁰ 2.8 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-13->out_25\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 0.7 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-12->out_27\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 0.16 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-12->out_28\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 0.3 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-14->out_29\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁺ 0.59 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-14->out_30\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁻ 2.9 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-15->out_31\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 7.7 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-15->out_32\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 4.6 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-16->-19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁰ 3.3 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-16->out_33\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p 17 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-17->out_35\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 5.8 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-17->out_36\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 2.6 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-18->out_37\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁻ 0.97 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-18->out_38\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁺ 1.9 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-19->out_39\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 1.5 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-19->out_40\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 1.8 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "in_1->-1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p 50 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "in_2->-2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p 50 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "GenEvent(momentum_unit=1, length_unit=0, event_number=0, particles=[GenParticle(FourVector(0, 0, 50, 50), mass=0.93827, pid=2212, status=3), GenParticle(FourVector(0, 0, -50, 50), mass=0.93827, pid=2212, status=3), GenParticle(FourVector(-0.0218, 0.588, -0.485, 0.762), mass=-0, pid=1, status=3), GenParticle(FourVector(-2.14, 0.631, -5.56, 5.99), mass=-0, pid=1, status=3), GenParticle(FourVector(-0.0218, 0.588, -0.485, 0.762), mass=0, pid=1, status=3), GenParticle(FourVector(-2.14, 0.631, -5.56, 5.99), mass=0, pid=1, status=3), GenParticle(FourVector(-2.24, 0.809, -5.43, 5.94), mass=0.33, pid=1, status=3), GenParticle(FourVector(0.0811, 0.41, -0.611, 0.81), mass=0.33, pid=1, status=3), GenParticle(FourVector(-2.24, 0.809, -5.43, 5.94), mass=0.33, pid=1, status=2), GenParticle(FourVector(0.0218, -0.588, 49.6, 49.6), mass=0.77133, pid=2203, status=2), GenParticle(FourVector(0.0811, 0.41, -0.611, 0.81), mass=0.33, pid=1, status=2), GenParticle(FourVector(2.14, -0.631, -43.6, 43.6), mass=0.77133, pid=2203, status=2), GenParticle(FourVector(-2.22, 0.221, 44.2, 55.6), mass=33.625, pid=92, status=2), GenParticle(FourVector(-1.17, 0.808, -3.08, 3.53), mass=0.958206, pid=331, status=2), GenParticle(FourVector(-0.315, -0.036, 0.299, 0.456), mass=0.13498, pid=111, status=2), GenParticle(FourVector(-0.706, 0.031, -2.17, 2.28), mass=0.13957, pid=-211, status=1), GenParticle(FourVector(-0.456, -0.475, 8.12, 8.15), mass=0.13957, pid=211, status=1), GenParticle(FourVector(0.9, -0.251, 6.08, 6.23), mass=0.93957, pid=2112, status=1), GenParticle(FourVector(-0.47, 0.145, 34.9, 34.9), mass=0.13957, pid=211, status=1), GenParticle(FourVector(2.22, -0.221, -44.2, 44.4), mass=4.28236, pid=92, status=2), GenParticle(FourVector(0.6, 0.345, -3.38, 3.51), mass=0.653977, pid=113, status=2), GenParticle(FourVector(0.108, -0.42, -12.3, 12.4), mass=0.54745, pid=221, status=2), GenParticle(FourVector(1.28, 0.4, -20, 20.1), mass=1.34722, pid=2214, status=2), GenParticle(FourVector(0.234, -0.546, -8.42, 8.44), mass=0.13498, pid=111, status=2), GenParticle(FourVector(-0.379, 0.138, -0.573, 0.7), mass=0, pid=22, status=1), GenParticle(FourVector(-0.795, 0.67, -2.51, 2.83), mass=0.786756, pid=113, status=2), GenParticle(FourVector(-0.0654, -0.0409, 0.141, 0.161), mass=0, pid=22, status=1), GenParticle(FourVector(-0.25, 0.00494, 0.158, 0.296), mass=0, pid=22, status=1), GenParticle(FourVector(-0.0997, 0.0618, -0.556, 0.585), mass=0.13957, pid=211, status=1), GenParticle(FourVector(0.699, 0.283, -2.83, 2.93), mass=0.13957, pid=-211, status=1), GenParticle(FourVector(-0.0757, -0.486, -7.71, 7.72), mass=0, pid=22, status=1), GenParticle(FourVector(0.184, 0.0653, -4.62, 4.63), mass=0, pid=22, status=1), GenParticle(FourVector(1.31, 0.505, -16.8, 16.8), mass=0.93827, pid=2212, status=1), GenParticle(FourVector(-0.0357, -0.105, -3.29, 3.3), mass=0.13498, pid=111, status=2), GenParticle(FourVector(0.102, -0.397, -5.81, 5.82), mass=0, pid=22, status=1), GenParticle(FourVector(0.132, -0.149, -2.61, 2.62), mass=0, pid=22, status=1), GenParticle(FourVector(-0.463, -0.0591, -0.837, 0.968), mass=0.13957, pid=-211, status=1), GenParticle(FourVector(-0.332, 0.729, -1.67, 1.86), mass=0.13957, pid=211, status=1), GenParticle(FourVector(-0.0744, -0.0138, -1.47, 1.47), mass=0, pid=22, status=1), GenParticle(FourVector(0.0387, -0.0909, -1.82, 1.82), mass=0, pid=22, status=1)], vertices=[GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(-4.17e-06, -4.76e-07, 3.96e-06, 6.04e-06)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(3.91e-05, -9.13e-05, -0.00141, 0.00141)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(-1.19e-06, -3.51e-06, -0.00011, 0.00011))], run_info=GenRunInfo(tools=[], weight_names=[], attributes={}))" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pyhepmc\n", + "\n", + "# pyhepmc.open can read most HepMC formats using auto-detection\n", + "with pyhepmc.open(\"../tests/pythia6_simple.dat\") as f:\n", + " event = f.read()\n", + "\n", + "event" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The rendered SVG has tooltips that provide extra information on each particle and vertex.\n", + "\n", + "Not all events have beam particles. The Sibyll-2.1 stack does not contain beam particles." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "SIBYLL-2.1\n", + "event number = 0\n", + "\n", + "\n", + "\n", + "-1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-1->out_8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p 1.5 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-1->out_9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁺ 0.88 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-2->out_10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 2 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-2->out_11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 1.5 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-3->-6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "η 1.8 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-3->out_12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁺ 0.28 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-3->out_13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁻ 0.22 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-4->out_15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 1.5 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-4->out_16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 0.51 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-5->out_17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 1.6 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-5->out_18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 0.32 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-6->-7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁰ 1.1 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-6->out_19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁺ 0.36 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-6->out_20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁻ 0.32 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-7->out_22\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 0.55 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "-7->out_23\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "γ 0.58 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "in_1->-1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Δ(1232)⁺⁺ 2.4 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "in_2->-2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁰ 3.5 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "in_3->-3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "η'(958) 2.3 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "in_4->-4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "η 2.1 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "in_5->out_5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁻ 0.3 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "in_6->-5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "π⁰ 1.9 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "in_7->out_7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "p 7.6 GeV\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "GenEvent(momentum_unit=1, length_unit=0, event_number=0, particles=[GenParticle(FourVector(-0.0892, 0.135, 2.03, 2.38), mass=1.231, pid=2224, status=2), GenParticle(FourVector(0.0895, -0.449, 3.42, 3.45), mass=0.13497, pid=111, status=2), GenParticle(FourVector(0.15, 0.46, 2.04, 2.31), mass=0.9575, pid=331, status=2), GenParticle(FourVector(-0.162, -0.244, 1.95, 2.05), mass=0.5488, pid=221, status=2), GenParticle(FourVector(-0.0529, 0.253, -0.0519, 0.299), mass=0.13957, pid=-211, status=1), GenParticle(FourVector(-0.0249, 0.366, -1.89, 1.93), mass=0.13497, pid=111, status=2), GenParticle(FourVector(0.0898, -0.521, -7.5, 7.58), mass=0.93827, pid=2212, status=1), GenParticle(FourVector(-0.11, 0.0929, 1.17, 1.51), mass=0.93827, pid=2212, status=1), GenParticle(FourVector(0.0211, 0.0421, 0.864, 0.876), mass=0.13957, pid=211, status=1), GenParticle(FourVector(-0.0159, -0.26, 1.94, 1.96), mass=0, pid=22, status=1), GenParticle(FourVector(0.105, -0.189, 1.48, 1.49), mass=0, pid=22, status=1), GenParticle(FourVector(0.013, 0.0959, 0.226, 0.283), mass=0.13957, pid=211, status=1), GenParticle(FourVector(0.0956, 0.0602, 0.122, 0.218), mass=0.13957, pid=-211, status=1), GenParticle(FourVector(0.0413, 0.304, 1.69, 1.81), mass=0.5488, pid=221, status=2), GenParticle(FourVector(-0.135, 0.0444, 1.53, 1.54), mass=0, pid=22, status=1), GenParticle(FourVector(-0.027, -0.289, 0.421, 0.512), mass=0, pid=22, status=1), GenParticle(FourVector(-0.045, 0.262, -1.59, 1.61), mass=0, pid=22, status=1), GenParticle(FourVector(0.0201, 0.104, -0.307, 0.325), mass=0, pid=22, status=1), GenParticle(FourVector(0.0162, 0.112, 0.307, 0.357), mass=0.13957, pid=211, status=1), GenParticle(FourVector(-0.0502, 0.0778, 0.268, 0.317), mass=0.13957, pid=-211, status=1), GenParticle(FourVector(0.0753, 0.114, 1.11, 1.13), mass=0.13497, pid=111, status=2), GenParticle(FourVector(0.0689, -0.0035, 0.546, 0.551), mass=0, pid=22, status=1), GenParticle(FourVector(0.00639, 0.118, 0.569, 0.582), mass=0, pid=22, status=1)], vertices=[GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0)), GenVertex(FourVector(0, 0, 0, 0))], run_info=GenRunInfo(tools=[ToolInfo(name='SIBYLL', version='2.1', description='')], weight_names=[], attributes={}))" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with pyhepmc.open(\"../tests/sibyll21.dat\") as f:\n", + " event2 = f.read()\n", + " \n", + "event2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Customize the visualization with `pyhepmc.view.to_dot`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": "\n\n\n\n\n\nSIBYLL-2.1\nevent number = 0\n\n\n\n-1\n\n\n\n\n\n\n\n\n-1->out_8\n\n\n\n\n\n\np 1.5 GeV\n\n\n\n\n\n\n-1->out_9\n\n\n\n\n\n\nπ⁺ 0.88 GeV\n\n\n\n\n\n-2\n\n\n\n\n\n\n\n\n-2->out_10\n\n\n\n\n\n\nγ 2 GeV\n\n\n\n\n\n\n-2->out_11\n\n\n\n\n\n\nγ 1.5 GeV\n\n\n\n\n\n-3\n\n\n\n\n\n\n\n-6\n\n\n\n\n\n\n\n-3->-6\n\n\n\n\n\nη 1.8 GeV\n\n\n\n\n\n\n-3->out_12\n\n\n\n\n\n\nπ⁺ 0.28 GeV\n\n\n\n\n\n\n-3->out_13\n\n\n\n\n\n\nπ⁻ 0.22 GeV\n\n\n\n\n\n-4\n\n\n\n\n\n\n\n\n-4->out_15\n\n\n\n\n\n\nγ 1.5 GeV\n\n\n\n\n\n\n-4->out_16\n\n\n\n\n\n\nγ 0.51 GeV\n\n\n\n\n\n-5\n\n\n\n\n\n\n\n\n-5->out_17\n\n\n\n\n\n\nγ 1.6 GeV\n\n\n\n\n\n\n-5->out_18\n\n\n\n\n\n\nγ 0.32 GeV\n\n\n\n\n\n-7\n\n\n\n\n\n\n\n-6->-7\n\n\n\n\n\nπ⁰ 1.1 GeV\n\n\n\n\n\n\n-6->out_19\n\n\n\n\n\n\nπ⁺ 0.36 GeV\n\n\n\n\n\n\n-6->out_20\n\n\n\n\n\n\nπ⁻ 0.32 GeV\n\n\n\n\n\n\n-7->out_22\n\n\n\n\n\n\nγ 0.55 GeV\n\n\n\n\n\n\n-7->out_23\n\n\n\n\n\n\nγ 0.58 GeV\n\n\n\n\n\n\nin_1->-1\n\n\n\n\n\n\nΔ(1232)⁺⁺ 2.4 GeV\n\n\n\n\n\n\nin_2->-2\n\n\n\n\n\n\nπ⁰ 3.5 GeV\n\n\n\n\n\n\nin_3->-3\n\n\n\n\n\n\nη'(958) 2.3 GeV\n\n\n\n\n\n\nin_4->-4\n\n\n\n\n\n\nη 2.1 GeV\n\n\n\n\n\n\n\nin_5->out_5\n\n\n\n\n\n\nπ⁻ 0.3 GeV\n\n\n\n\n\n\nin_6->-5\n\n\n\n\n\n\nπ⁰ 1.9 GeV\n\n\n\n\n\n\n\nin_7->out_7\n\n\n\n\n\n\np 7.6 GeV\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pyhepmc.view import to_dot\n", + "\n", + "# see help(pyhepmc.view.to_dot) for details\n", + "g = to_dot(event2, size=(4, 4)) \n", + "g" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can save these images like this." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"event.svg\", \"w\") as f:\n", + " f.write(g._repr_image_svg_xml()) # as svg (recommended)\n", + "\n", + "with open(\"event.png\", \"wb\") as f:\n", + " f.write(g._repr_image_png()) # as png" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look at a few particles and vertices." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[GenParticle(FourVector(0, 0, 50, 50), mass=0.93827, pid=2212, status=3),\n", + " GenParticle(FourVector(0, 0, -50, 50), mass=0.93827, pid=2212, status=3),\n", + " GenParticle(FourVector(-0.0218, 0.588, -0.485, 0.762), mass=-0, pid=1, status=3),\n", + " GenParticle(FourVector(-2.14, 0.631, -5.56, 5.99), mass=-0, pid=1, status=3),\n", + " GenParticle(FourVector(-0.0218, 0.588, -0.485, 0.762), mass=0, pid=1, status=3)]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# first five particles in the record\n", + "event.particles[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[GenParticle(FourVector(-0.0654, -0.0409, 0.141, 0.161), mass=0, pid=22, status=1),\n", + " GenParticle(FourVector(-0.25, 0.00494, 0.158, 0.296), mass=0, pid=22, status=1),\n", + " GenParticle(FourVector(-0.0997, 0.0618, -0.556, 0.585), mass=0.13957, pid=211, status=1),\n", + " GenParticle(FourVector(-0.379, 0.138, -0.573, 0.7), mass=0, pid=22, status=1),\n", + " GenParticle(FourVector(-0.463, -0.0591, -0.837, 0.968), mass=0.13957, pid=-211, status=1),\n", + " GenParticle(FourVector(-0.0744, -0.0138, -1.47, 1.47), mass=0, pid=22, status=1),\n", + " GenParticle(FourVector(0.0387, -0.0909, -1.82, 1.82), mass=0, pid=22, status=1),\n", + " GenParticle(FourVector(-0.332, 0.729, -1.67, 1.86), mass=0.13957, pid=211, status=1),\n", + " GenParticle(FourVector(-0.706, 0.031, -2.17, 2.28), mass=0.13957, pid=-211, status=1),\n", + " GenParticle(FourVector(0.132, -0.149, -2.61, 2.62), mass=0, pid=22, status=1),\n", + " GenParticle(FourVector(0.699, 0.283, -2.83, 2.93), mass=0.13957, pid=-211, status=1),\n", + " GenParticle(FourVector(0.184, 0.0653, -4.62, 4.63), mass=0, pid=22, status=1),\n", + " GenParticle(FourVector(0.102, -0.397, -5.81, 5.82), mass=0, pid=22, status=1),\n", + " GenParticle(FourVector(0.9, -0.251, 6.08, 6.23), mass=0.93957, pid=2112, status=1),\n", + " GenParticle(FourVector(-0.0757, -0.486, -7.71, 7.72), mass=0, pid=22, status=1),\n", + " GenParticle(FourVector(-0.456, -0.475, 8.12, 8.15), mass=0.13957, pid=211, status=1),\n", + " GenParticle(FourVector(1.31, 0.505, -16.8, 16.8), mass=0.93827, pid=2212, status=1),\n", + " GenParticle(FourVector(-0.47, 0.145, 34.9, 34.9), mass=0.13957, pid=211, status=1)]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# final state particles sorted by energy\n", + "[p for p in sorted(event.particles, key=lambda p:p.momentum.e) if p.status == 1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All particles which produce photons." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[GenParticle(FourVector(-1.17, 0.808, -3.08, 3.53), mass=0.958206, pid=331, status=2),\n", + " GenParticle(FourVector(-0.315, -0.036, 0.299, 0.456), mass=0.13498, pid=111, status=2),\n", + " GenParticle(FourVector(0.108, -0.42, -12.3, 12.4), mass=0.54745, pid=221, status=2),\n", + " GenParticle(FourVector(0.234, -0.546, -8.42, 8.44), mass=0.13498, pid=111, status=2),\n", + " GenParticle(FourVector(-0.0357, -0.105, -3.29, 3.3), mass=0.13498, pid=111, status=2)]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def has_photon_children(p):\n", + " return p.end_vertex and any(q.pid == 22 for q in p.end_vertex.particles_out)\n", + "\n", + "[p for p in event.particles if has_photon_children(p)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This event has no attached metadata. HepMC3 supports metadata attached to individual particles and vertices, events, and the whole run. We use this to add information about the generator, Pythia-6.4.28. We add this information to the RunInfo. We further mark all vertices that have photon children as \"sparkly\".\n", + "\n", + "Then, we save the modified event." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "GenRunInfo(tools=[], weight_names=[], attributes={})" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# run info is empty\n", + "event.run_info" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "event.run_info.tools = [pyhepmc.GenRunInfo.ToolInfo(\"Pythia\", \"6.4.28\", \"Legacy Pythia 6 event\")]\n", + "\n", + "# this equivalent shortcut is also supported:\n", + "# event.run_info.tools = [(\"Pythia\", \"6.4.28\", \"Legacy Pythia 6 event\")]\n", + "\n", + "for v in event.vertices:\n", + " if any(q.pid == 22 for q in v.particles_out):\n", + " v.attributes[\"sparkly\"] = True" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# save event with reduced precision\n", + "with pyhepmc.open(\"modified_event.dat\", \"w\", precision=3) as f:\n", + " f.write(event)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The HepMC3 format is human-readable ASCII." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "HepMC::Version 3.02.05\n", + "HepMC::Asciiv3-START_EVENT_LISTING\n", + "T Pythia\\|6.4.28\\|Legacy Pythia 6 event\n", + "E 0 19 40\n", + "U GEV MM\n", + "A -19 sparkly 1\n", + "A -17 sparkly 1\n", + "A -15 sparkly 1\n", + "A -13 sparkly 1\n", + "A -12 sparkly 1\n", + "P 1 0 2212 0.000e+00 0.000e+00 4.999e+01 5.000e+01 9.383e-01 3\n", + "P 2 0 2212 0.000e+00 0.000e+00 -4.999e+01 5.000e+01 9.383e-01 3\n", + "P 3 1 1 -2.181e-02 5.881e-01 -4.847e-01 7.624e-01 -0.000e+00 3\n", + "P 4 2 1 -2.140e+00 6.307e-01 -5.560e+00 5.991e+00 -0.000e+00 3\n", + "P 5 3 1 -2.181e-02 5.881e-01 -4.847e-01 7.624e-01 0.000e+00 3\n", + "P 6 4 1 -2.140e+00 6.307e-01 -5.560e+00 5.991e+00 0.000e+00 3\n", + "V -5 0 [5,6]\n", + "P 7 -5 1 -2.243e+00 8.092e-01 -5.434e+00 5.943e+00 3.300e-01 3\n", + "P 8 -5 1 8.114e-02 4.095e-01 -6.109e-01 8.102e-01 3.300e-01 3\n", + "P 9 7 1 -2.243e+00 8.092e-01 -5.434e+00 5.943e+00 3.300e-01 2\n", + "P 10 1 2203 2.181e-02 -5.881e-01 4.961e+01 4.962e+01 7.713e-01 2\n", + "P 11 8 1 8.114e-02 4.095e-01 -6.109e-01 8.102e-01 3.300e-01 2\n", + "P 12 2 2203 2.140e+00 -6.307e-01 -4.356e+01 4.363e+01 7.713e-01 2\n", + "V -8 0 [9,10]\n", + "P 13 -8 92 -2.221e+00 2.212e-01 4.418e+01 5.556e+01 3.363e+01 2\n", + "P 14 13 331 -1.174e+00 8.077e-01 -3.080e+00 3.526e+00 9.582e-01 2\n", + "P 15 13 111 -3.152e-01 -3.598e-02 2.990e-01 4.564e-01 1.350e-01 2\n", + "P 16 13 -211 -7.064e-01 3.103e-02 -2.166e+00 2.283e+00 1.396e-01 1\n", + "P 17 13 211 -4.561e-01 -4.751e-01 8.121e+00 8.149e+00 1.396e-01 1\n", + "P 18 13 2112 9.004e-01 -2.513e-01 6.083e+00 6.226e+00 9.396e-01 1\n", + "P 19 13 211 -4.700e-01 1.449e-01 3.492e+01 3.492e+01 1.396e-01 1\n", + "V -9 0 [11,12]\n", + "P 20 -9 92 2.221e+00 -2.212e-01 -4.418e+01 4.444e+01 4.282e+00 2\n", + "P 21 20 113 5.997e-01 3.451e-01 -3.381e+00 3.512e+00 6.540e-01 2\n", + "P 22 20 221 1.084e-01 -4.203e-01 -1.233e+01 1.235e+01 5.474e-01 2\n", + "P 23 20 2214 1.279e+00 4.004e-01 -2.004e+01 2.013e+01 1.347e+00 2\n", + "P 24 20 111 2.340e-01 -5.463e-01 -8.419e+00 8.441e+00 1.350e-01 2\n", + "P 25 14 22 -3.787e-01 1.380e-01 -5.727e-01 7.003e-01 0.000e+00 1\n", + "P 26 14 113 -7.951e-01 6.696e-01 -2.507e+00 2.826e+00 7.868e-01 2\n", + "V -12 0 [15] @ -4.174e-06 -4.765e-07 3.960e-06 6.044e-06\n", + "P 27 -12 22 -6.540e-02 -4.092e-02 1.411e-01 1.608e-01 0.000e+00 1\n", + "P 28 -12 22 -2.498e-01 4.942e-03 1.579e-01 2.956e-01 0.000e+00 1\n", + "P 29 21 211 -9.967e-02 6.182e-02 -5.559e-01 5.850e-01 1.396e-01 1\n", + "P 30 21 -211 6.993e-01 2.833e-01 -2.825e+00 2.927e+00 1.396e-01 1\n", + "P 31 22 22 -7.565e-02 -4.856e-01 -7.709e+00 7.725e+00 0.000e+00 1\n", + "P 32 22 22 1.840e-01 6.534e-02 -4.622e+00 4.626e+00 0.000e+00 1\n", + "P 33 23 2212 1.315e+00 5.050e-01 -1.675e+01 1.684e+01 9.383e-01 1\n", + "P 34 23 111 -3.566e-02 -1.047e-01 -3.292e+00 3.296e+00 1.350e-01 2\n", + "V -17 0 [24] @ 3.911e-05 -9.133e-05 -1.407e-03 1.411e-03\n", + "P 35 -17 22 1.023e-01 -3.972e-01 -5.805e+00 5.820e+00 0.000e+00 1\n", + "P 36 -17 22 1.317e-01 -1.492e-01 -2.614e+00 2.621e+00 0.000e+00 1\n", + "P 37 26 -211 -4.627e-01 -5.907e-02 -8.370e-01 9.683e-01 1.396e-01 1\n", + "P 38 26 211 -3.324e-01 7.287e-01 -1.670e+00 1.858e+00 1.396e-01 1\n", + "V -19 0 [34] @ -1.194e-06 -3.506e-06 -1.102e-04 1.104e-04\n", + "P 39 -19 22 -7.436e-02 -1.377e-02 -1.472e+00 1.474e+00 0.000e+00 1\n", + "P 40 -19 22 3.870e-02 -9.092e-02 -1.820e+00 1.822e+00 0.000e+00 1\n", + "HepMC::Asciiv3-END_EVENT_LISTING\n" + ] + } + ], + "source": [ + "with open(\"modified_event.dat\") as f:\n", + " print(f.read().strip())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.8.13 ('venv': venv)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "2823bbbd586457dd2baf8a4897a7755406355dbefbb621fc69dbf8fa62fd6e40" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/examples/event.png b/docs/examples/event.png new file mode 100644 index 0000000000000000000000000000000000000000..189d667dedbc593e68f1316845ae6acb45382abe GIT binary patch literal 25671 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𝔡`orlbdr2| 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 literal 0 HcmV?d00001 diff --git a/docs/examples/event.svg b/docs/examples/event.svg new file mode 100644 index 0000000..4dab98e --- /dev/null +++ b/docs/examples/event.svg @@ -0,0 +1,391 @@ + + + + + + +SIBYLL-2.1 +event number = 0 + + + +-1 + + + + + + + + +-1->out_8 + + + + + + +p 1.5 GeV + + + + + + +-1->out_9 + + + + + + +π⁺ 0.88 GeV + + + + + +-2 + + + + + + + + +-2->out_10 + + + + + + +γ 2 GeV + + + + + + +-2->out_11 + + + + + + +γ 1.5 GeV + + + + + +-3 + + + + + + + +-6 + + + + + + + +-3->-6 + + + + + +η 1.8 GeV + + + + + + +-3->out_12 + + + + + + +π⁺ 0.28 GeV + + + + + + +-3->out_13 + + + + + + +π⁻ 0.22 GeV + + + + + +-4 + + + + + + + + +-4->out_15 + + + + + + +γ 1.5 GeV + + + + + + +-4->out_16 + + + + + + +γ 0.51 GeV + + + + + +-5 + + + + + + + + +-5->out_17 + + + + + + +γ 1.6 GeV + + + + + + +-5->out_18 + + + + + + +γ 0.32 GeV + + + + + +-7 + + + + + + + +-6->-7 + + + + + +π⁰ 1.1 GeV + + + + + + +-6->out_19 + + + + + + +π⁺ 0.36 GeV + + + + + + +-6->out_20 + + + + + + +π⁻ 0.32 GeV + + + + + + +-7->out_22 + + + + + + +γ 0.55 GeV + + + + + + +-7->out_23 + + + + + + +γ 0.58 GeV + + + + + + +in_1->-1 + + + + + + +Δ(1232)⁺⁺ 2.4 GeV + + + + + + +in_2->-2 + + + + + + +π⁰ 3.5 GeV + + + + + + +in_3->-3 + + + + + + +η'(958) 2.3 GeV + + + + + + +in_4->-4 + + + + + + +η 2.1 GeV + + + + + + + +in_5->out_5 + + + + + + +π⁻ 0.3 GeV + + + + + + +in_6->-5 + + + + + + +π⁰ 1.9 GeV + + + + + + + +in_7->out_7 + + + + + + +p 7.6 GeV + + + + + diff --git a/docs/examples/modified_event.dat b/docs/examples/modified_event.dat new file mode 100644 index 0000000..9f51346 --- /dev/null +++ b/docs/examples/modified_event.dat @@ -0,0 +1,57 @@ +HepMC::Version 3.02.05 +HepMC::Asciiv3-START_EVENT_LISTING +T Pythia\|6.4.28\|Legacy Pythia 6 event +E 0 19 40 +U GEV MM +A -19 sparkly 1 +A -17 sparkly 1 +A -15 sparkly 1 +A -13 sparkly 1 +A -12 sparkly 1 +P 1 0 2212 0.000e+00 0.000e+00 4.999e+01 5.000e+01 9.383e-01 3 +P 2 0 2212 0.000e+00 0.000e+00 -4.999e+01 5.000e+01 9.383e-01 3 +P 3 1 1 -2.181e-02 5.881e-01 -4.847e-01 7.624e-01 -0.000e+00 3 +P 4 2 1 -2.140e+00 6.307e-01 -5.560e+00 5.991e+00 -0.000e+00 3 +P 5 3 1 -2.181e-02 5.881e-01 -4.847e-01 7.624e-01 0.000e+00 3 +P 6 4 1 -2.140e+00 6.307e-01 -5.560e+00 5.991e+00 0.000e+00 3 +V -5 0 [5,6] +P 7 -5 1 -2.243e+00 8.092e-01 -5.434e+00 5.943e+00 3.300e-01 3 +P 8 -5 1 8.114e-02 4.095e-01 -6.109e-01 8.102e-01 3.300e-01 3 +P 9 7 1 -2.243e+00 8.092e-01 -5.434e+00 5.943e+00 3.300e-01 2 +P 10 1 2203 2.181e-02 -5.881e-01 4.961e+01 4.962e+01 7.713e-01 2 +P 11 8 1 8.114e-02 4.095e-01 -6.109e-01 8.102e-01 3.300e-01 2 +P 12 2 2203 2.140e+00 -6.307e-01 -4.356e+01 4.363e+01 7.713e-01 2 +V -8 0 [9,10] +P 13 -8 92 -2.221e+00 2.212e-01 4.418e+01 5.556e+01 3.363e+01 2 +P 14 13 331 -1.174e+00 8.077e-01 -3.080e+00 3.526e+00 9.582e-01 2 +P 15 13 111 -3.152e-01 -3.598e-02 2.990e-01 4.564e-01 1.350e-01 2 +P 16 13 -211 -7.064e-01 3.103e-02 -2.166e+00 2.283e+00 1.396e-01 1 +P 17 13 211 -4.561e-01 -4.751e-01 8.121e+00 8.149e+00 1.396e-01 1 +P 18 13 2112 9.004e-01 -2.513e-01 6.083e+00 6.226e+00 9.396e-01 1 +P 19 13 211 -4.700e-01 1.449e-01 3.492e+01 3.492e+01 1.396e-01 1 +V -9 0 [11,12] +P 20 -9 92 2.221e+00 -2.212e-01 -4.418e+01 4.444e+01 4.282e+00 2 +P 21 20 113 5.997e-01 3.451e-01 -3.381e+00 3.512e+00 6.540e-01 2 +P 22 20 221 1.084e-01 -4.203e-01 -1.233e+01 1.235e+01 5.474e-01 2 +P 23 20 2214 1.279e+00 4.004e-01 -2.004e+01 2.013e+01 1.347e+00 2 +P 24 20 111 2.340e-01 -5.463e-01 -8.419e+00 8.441e+00 1.350e-01 2 +P 25 14 22 -3.787e-01 1.380e-01 -5.727e-01 7.003e-01 0.000e+00 1 +P 26 14 113 -7.951e-01 6.696e-01 -2.507e+00 2.826e+00 7.868e-01 2 +V -12 0 [15] @ -4.174e-06 -4.765e-07 3.960e-06 6.044e-06 +P 27 -12 22 -6.540e-02 -4.092e-02 1.411e-01 1.608e-01 0.000e+00 1 +P 28 -12 22 -2.498e-01 4.942e-03 1.579e-01 2.956e-01 0.000e+00 1 +P 29 21 211 -9.967e-02 6.182e-02 -5.559e-01 5.850e-01 1.396e-01 1 +P 30 21 -211 6.993e-01 2.833e-01 -2.825e+00 2.927e+00 1.396e-01 1 +P 31 22 22 -7.565e-02 -4.856e-01 -7.709e+00 7.725e+00 0.000e+00 1 +P 32 22 22 1.840e-01 6.534e-02 -4.622e+00 4.626e+00 0.000e+00 1 +P 33 23 2212 1.315e+00 5.050e-01 -1.675e+01 1.684e+01 9.383e-01 1 +P 34 23 111 -3.566e-02 -1.047e-01 -3.292e+00 3.296e+00 1.350e-01 2 +V -17 0 [24] @ 3.911e-05 -9.133e-05 -1.407e-03 1.411e-03 +P 35 -17 22 1.023e-01 -3.972e-01 -5.805e+00 5.820e+00 0.000e+00 1 +P 36 -17 22 1.317e-01 -1.492e-01 -2.614e+00 2.621e+00 0.000e+00 1 +P 37 26 -211 -4.627e-01 -5.907e-02 -8.370e-01 9.683e-01 1.396e-01 1 +P 38 26 211 -3.324e-01 7.287e-01 -1.670e+00 1.858e+00 1.396e-01 1 +V -19 0 [34] @ -1.194e-06 -3.506e-06 -1.102e-04 1.104e-04 +P 39 -19 22 -7.436e-02 -1.377e-02 -1.472e+00 1.474e+00 0.000e+00 1 +P 40 -19 22 3.870e-02 -9.092e-02 -1.820e+00 1.822e+00 0.000e+00 1 +HepMC::Asciiv3-END_EVENT_LISTING diff --git a/docs/generate_about.py b/docs/generate_about.py deleted file mode 100644 index b6eee56..0000000 --- a/docs/generate_about.py +++ /dev/null @@ -1,8 +0,0 @@ -# Generate about.rst from README.rst: must change paths to images -with open("../README.rst") as f: - content = f.read() - -content = content.replace("image:: docs/", "image:: ./") - -with open("about.rst.in", "w") as f: - f.write(content) diff --git a/docs/generate_index.py b/docs/generate_index.py new file mode 100644 index 0000000..7292917 --- /dev/null +++ b/docs/generate_index.py @@ -0,0 +1,12 @@ +# Generate about.rst from README.rst: must change paths to images +with open("../README.rst") as f: + content = f.read() + +content1 = content.replace("image:: docs/", "image:: ./") + +with open("index.rst.in") as f: + content2 = f.read() + +with open("index.rst", "w") as f: + f.write(content1 + "\n\n") + f.write(content2) diff --git a/docs/index.rst b/docs/index.rst.in similarity index 66% rename from docs/index.rst rename to docs/index.rst.in index 87ce5f8..cecb2d1 100644 --- a/docs/index.rst +++ b/docs/index.rst.in @@ -1,7 +1,6 @@ -.. include:: about.rst.in - .. toctree:: :hidden: reference + examples citation diff --git a/docs/reference.rst b/docs/reference.rst index e7f6900..68136c9 100644 --- a/docs/reference.rst +++ b/docs/reference.rst @@ -14,3 +14,10 @@ pyhepmc.io .. automodule:: pyhepmc.io :members: :undoc-members: + +pyhepmc.view +------------ + +.. automodule:: pyhepmc.view + :members: + :undoc-members: diff --git a/examples/visualization.ipynb b/examples/visualization.ipynb deleted file mode 100644 index 8821859..0000000 --- a/examples/visualization.ipynb +++ /dev/null @@ -1,91 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\n\nevent 0\n\n\n\n-1\n\n\n\n\n\n\n\n-3\n\n\n\n\n\n\n\n-1->-3\n\n\n\n\n\nd 0.76 GeV\n\n\n\n\n\n-8\n\n\n\n\n\n\n\n-1->-8\n\n\n\n\n\n(uu)₁ 50 GeV\n\n\n\n\n\n-2\n\n\n\n\n\n\n\n-4\n\n\n\n\n\n\n\n-2->-4\n\n\n\n\n\nd 6 GeV\n\n\n\n\n\n-9\n\n\n\n\n\n\n\n-2->-9\n\n\n\n\n\n(uu)₁ 44 GeV\n\n\n\n\n\n-5\n\n\n\n\n\n\n\n-3->-5\n\n\n\n\n\nd 0.76 GeV\n\n\n\n\n\n-4->-5\n\n\n\n\n\nd 6 GeV\n\n\n\n\n\n-6\n\n\n\n\n\n\n\n-5->-6\n\n\n\n\n\nd 5.9 GeV\n\n\n\n\n\n-7\n\n\n\n\n\n\n\n-5->-7\n\n\n\n\n\nd 0.81 GeV\n\n\n\n\n\n-6->-8\n\n\n\n\n\nd 5.9 GeV\n\n\n\n\n\n-7->-9\n\n\n\n\n\nd 0.81 GeV\n\n\n\n\n\n-10\n\n\n\n\n\n\n\n-8->-10\n\n\n\n\n\nInternal(92) 56 GeV\n\n\n\n\n\n-13\n\n\n\n\n\n\n\n-10->-13\n\n\n\n\n\nη'(958) 3.5 GeV\n\n\n\n\n\n-12\n\n\n\n\n\n\n\n-10->-12\n\n\n\n\n\nπ⁰ 0.46 GeV\n\n\n\n\n\n\n-10->out_16\n\n\n\n\n\n\nπ⁻ 2.3 GeV\n\n\n\n\n\n\n-10->out_17\n\n\n\n\n\n\nπ⁺ 8.1 GeV\n\n\n\n\n\n\n-10->out_18\n\n\n\n\n\n\nn 6.2 GeV\n\n\n\n\n\n\n-10->out_19\n\n\n\n\n\n\nπ⁺ 35 GeV\n\n\n\n\n\n-11\n\n\n\n\n\n\n\n-9->-11\n\n\n\n\n\nInternal(92) 44 GeV\n\n\n\n\n\n-14\n\n\n\n\n\n\n\n-11->-14\n\n\n\n\n\nρ(770)⁰ 3.5 GeV\n\n\n\n\n\n-15\n\n\n\n\n\n\n\n-11->-15\n\n\n\n\n\nη 12 GeV\n\n\n\n\n\n-16\n\n\n\n\n\n\n\n-11->-16\n\n\n\n\n\nΔ(1232)⁺ 20 GeV\n\n\n\n\n\n-17\n\n\n\n\n\n\n\n-11->-17\n\n\n\n\n\nπ⁰ 8.4 GeV\n\n\n\n\n\n-18\n\n\n\n\n\n\n\n-13->-18\n\n\n\n\n\nρ(770)⁰ 2.8 GeV\n\n\n\n\n\n\n-13->out_25\n\n\n\n\n\n\nγ 0.7 GeV\n\n\n\n\n\n\n-12->out_27\n\n\n\n\n\n\nγ 0.16 GeV\n\n\n\n\n\n\n-12->out_28\n\n\n\n\n\n\nγ 0.3 GeV\n\n\n\n\n\n\n-14->out_29\n\n\n\n\n\n\nπ⁺ 0.59 GeV\n\n\n\n\n\n\n-14->out_30\n\n\n\n\n\n\nπ⁻ 2.9 GeV\n\n\n\n\n\n\n-15->out_31\n\n\n\n\n\n\nγ 7.7 GeV\n\n\n\n\n\n\n-15->out_32\n\n\n\n\n\n\nγ 4.6 GeV\n\n\n\n\n\n-19\n\n\n\n\n\n\n\n-16->-19\n\n\n\n\n\nπ⁰ 3.3 GeV\n\n\n\n\n\n\n-16->out_33\n\n\n\n\n\n\np 17 GeV\n\n\n\n\n\n\n-17->out_35\n\n\n\n\n\n\nγ 5.8 GeV\n\n\n\n\n\n\n-17->out_36\n\n\n\n\n\n\nγ 2.6 GeV\n\n\n\n\n\n\n-18->out_37\n\n\n\n\n\n\nπ⁻ 0.97 GeV\n\n\n\n\n\n\n-18->out_38\n\n\n\n\n\n\nπ⁺ 1.9 GeV\n\n\n\n\n\n\n-19->out_39\n\n\n\n\n\n\nγ 1.5 GeV\n\n\n\n\n\n\n-19->out_40\n\n\n\n\n\n\nγ 1.8 GeV\n\n\n\n\n\n\nin_1->-1\n\n\n\n\n\n\np 50 GeV\n\n\n\n\n\n\nin_2->-2\n\n\n\n\n\n\np 50 GeV\n\n\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pyhepmc\n", - "from pyhepmc.view import to_dot\n", - "\n", - "with pyhepmc.open(\"../tests/pythia6_simple.dat\") as f:\n", - " event = f.read()\n", - "\n", - "g = to_dot(event)\n", - "g.graph_attr[\"size\"] = \"10,10\"\n", - "g" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n\n\n\nevent 0\n\n\n\n\n\nin_1->out_1\n\n\n\n\n\nInvalid(0) 1.9 GeV\n\n\n\n\n\n\n\nin_2->out_2\n\n\n\n\n\nInvalid(0) 2.1 GeV\n\n\n\n\n\n\n\nin_3->out_3\n\n\n\n\n\n\nπ⁺ 8.7 GeV\n\n\n\n\n\n\n\nin_4->out_4\n\n\n\n\n\n\np 25 GeV\n\n\n\n\n\n\n\nin_5->out_5\n\n\n\n\n\nInvalid(0) 6 GeV\n\n\n\n\n\n\n\nin_6->out_6\n\n\n\n\n\n\nK⁺ 0.92 GeV\n\n\n\n\n\n\n\nin_7->out_7\n\n\n\n\n\nInvalid(0) 2.5 GeV\n\n\n\n\n\n\n\nin_8->out_8\n\n\n\n\n\nInvalid(0) 3.6 GeV\n\n\n\n\n\n\n\nin_9->out_9\n\n\n\n\n\n\nπ⁺ 3.9 GeV\n\n\n\n\n\n\n\nin_10->out_10\n\n\n\n\n\n\nn 45 GeV\n\n\n\n\n\n\n\nin_11->out_11\n\n\n\n\n\n\nπ⁻ 0.22 GeV\n\n\n\n\n\n\n\nin_12->out_12\n\n\n\n\n\n\nπ⁰ 1.7 GeV\n\n\n\n\n\n\n\nin_13->out_13\n\n\n\n\n\n\nπ⁺ 1.8 GeV\n\n\n\n\n\n\n\nin_14->out_14\n\n\n\n\n\n\nπ⁻ 0.31 GeV\n\n\n\n\n\n\n\nin_15->out_15\n\n\n\n\n\n\nΛ 4.6 GeV\n\n\n\n\n\n\n\nin_16->out_16\n\n\n\n\n\n\nπ⁺ 1.4 GeV\n\n\n\n\n\n\n\nin_17->out_17\n\n\n\n\n\n\nπ⁻ 2.1 GeV\n\n\n\n\n\n\n\nin_18->out_18\n\n\n\n\n\n\nπ⁰ 0.36 GeV\n\n\n\n\n\n\n\nin_19->out_19\n\n\n\n\n\n\nπ⁺ 2.4 GeV\n\n\n\n\n\n\n\nin_20->out_20\n\n\n\n\n\n\nπ⁻ 0.27 GeV\n\n\n\n\n\n\n\nin_21->out_21\n\n\n\n\n\n\nπ⁰ 0.92 GeV\n\n\n\n\n\n", - "text/plain": [ - "" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "with pyhepmc.open(\"../tests/sibyll21.dat\") as f:\n", - " event = f.read()\n", - " \n", - "to_dot(event)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.8.13 ('venv': venv)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.13" - }, - "orig_nbformat": 4, - "vscode": { - "interpreter": { - "hash": "2823bbbd586457dd2baf8a4897a7755406355dbefbb621fc69dbf8fa62fd6e40" - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/setup.cfg b/setup.cfg index a47c0bf..8bda006 100644 --- a/setup.cfg +++ b/setup.cfg @@ -35,6 +35,9 @@ test = doc = sphinx sphinx-rtd-theme + nbsphinx + ipython + ipykernel [flake8] max-line-length = 90 diff --git a/src/pyhepmc/_autodoc.py b/src/pyhepmc/_autodoc.py index 1bfc631..6f40b91 100644 --- a/src/pyhepmc/_autodoc.py +++ b/src/pyhepmc/_autodoc.py @@ -253,8 +253,7 @@ Constructor based on particle data.""", "GenParticle.add_attribute": """Add an attribute to this particle. -This will overwrite existing attribute if an attribute with the same name is present. The attribute will be stored in the parent_event(). - false if there is no parent_event();.""", +This will overwrite existing attribute if an attribute with the same name is present. The attribute will be stored in the parent_event(). false if there is no parent_event();.""", "GenParticle.attribute": """Get attribute of type T.""", "GenParticle.attribute_as_string": """Get attribute of any type as string.""", "GenParticle.attribute_names": """Get list of names of attributes assigned to this particle.""", @@ -378,7 +377,6 @@ ---------- evt: Event to be filled.""", - "ReaderAscii.run_info": """Get the global GenRunInfo object.""", "ReaderAscii.skip": """skip events.""", "ReaderAsciiHepMC2": """Parser for HepMC2 I/O files.""", "ReaderAsciiHepMC2.__init__": """Default constructor. @@ -390,7 +388,6 @@ "ReaderAsciiHepMC2.failed": """Return status of the stream.""", "ReaderAsciiHepMC2.options": """Access options.""", "ReaderAsciiHepMC2.read_event": """Implementation of Reader::read_event.""", - "ReaderAsciiHepMC2.run_info": """Get the global GenRunInfo object.""", "ReaderAsciiHepMC2.skip": """skip events.""", "ReaderGZ": """GenEvent I/O parsing for compressed files.""", "ReaderGZ.__init__": """Constructor. @@ -405,7 +402,6 @@ ---------- evt: Event to be filled.""", - "ReaderGZ.run_info": """Get the global GenRunInfo object.""", "ReaderGZ.skip": """skip events.""", "ReaderHEPEVT": """GenEvent I/O parsing and serialization for HEPEVT files.""", "ReaderHEPEVT.__init__": """Default constructor. @@ -425,7 +421,6 @@ ---------- i: Particle id.""", - "ReaderHEPEVT.run_info": """Get the global GenRunInfo object.""", "ReaderHEPEVT.skip": """skip events.""", "ReaderLHEF": """GenEvent I/O parsing and serialization for LHEF files.""", "ReaderLHEF.__init__": """The ctor to read from stream. @@ -437,14 +432,12 @@ "ReaderLHEF.failed": """State.""", "ReaderLHEF.options": """Access options.""", "ReaderLHEF.read_event": """Reading event.""", - "ReaderLHEF.run_info": """Get the global GenRunInfo object.""", "ReaderLHEF.skip": """skip events.""", "ReaderMT": """Multithreader GenEvent I/O parsing.""", "ReaderMT.close": """Close file and/or stream.""", "ReaderMT.failed": """Get file and/or stream error state.""", "ReaderMT.options": """Access options.""", "ReaderMT.read_event": """Fill next event from input into evt.""", - "ReaderMT.run_info": """Get the global GenRunInfo object.""", "ReaderMT.skip": """skip or fast forward reading of some events.""", "Setup": """Configuration for HepMC.