From d4231f521c65711777c0cd6345fd0a3b497d0508 Mon Sep 17 00:00:00 2001 From: Alexander Puck Neuwirth Date: Fri, 18 Oct 2024 13:51:20 +0200 Subject: [PATCH] docs: LHE file writing examples (#256) * File LHEFile members * Add LHEFile fieldnames * Add write and filter example * Fix tests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * pre-commit fixes * Add lhe_file read tests * docs: Add writing example to README.md * Spelling in README.md * Update README.md Co-authored-by: Eduardo Rodrigues * Deprecate write_lhe_file and write_lhe_string * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * chore: ruff adjustments * Cleanup write function --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Eduardo Rodrigues --- README.md | 74 + examples/filter_events_example.ipynb | 2106 ++++++++++++++++++++++ examples/write_monte_carlo_example.ipynb | 736 ++++++++ src/pylhe/__init__.py | 118 +- tests/test_api.py | 5 + tests/test_lhe_reader.py | 21 + 6 files changed, 3041 insertions(+), 19 deletions(-) create mode 100644 examples/filter_events_example.ipynb create mode 100644 examples/write_monte_carlo_example.ipynb diff --git a/README.md b/README.md index dabd547..1a7fa98 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,8 @@ The visualization capabilities require the external dependency of [Graphviz](htt The example below provides a simple overview. Full functionality can be inspected from the functions provided in the `pylhe` module. +### Reading + ```python import itertools @@ -59,6 +61,78 @@ 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](examples/write_monte_carlo_example.ipynb) or [filter](examples/filter_events_example.ipynb). +The values in the sketch below are intentionally left empty since they depend on the use-case. +The data structure of `pylhe` is: + +```python +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 diff --git a/examples/filter_events_example.ipynb b/examples/filter_events_example.ipynb new file mode 100644 index 0000000..1b98288 --- /dev/null +++ b/examples/filter_events_example.ipynb @@ -0,0 +1,2106 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "a69095ea-7aff-4efa-bcde-928be2559aba", + "metadata": {}, + "outputs": [], + "source": [ + "import gzip\n", + "\n", + "import hist\n", + "from skhep_testdata import data_path\n", + "\n", + "import pylhe" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "1e6bce3e-b076-4862-8a30-7dd9a08c3284", + "metadata": {}, + "outputs": [], + "source": [ + "def plot(data):\n", + " lheevents = pylhe.read_lhe_file(data).events\n", + " events = pylhe.to_awkward(lheevents)\n", + " mass_hist = hist.Hist.new.Reg(30, 50, 150).Weight()\n", + " mass_hist.fill(\n", + " (events.particles.vector[:, -1] + events.particles.vector[:, -2]).mass,\n", + " weight=events.eventinfo.weight,\n", + " )\n", + " artists = mass_hist.plot()\n", + " ax = artists[0].stairs.axes\n", + " ax.set_yscale(\"log\")\n", + " ax.set_xlabel(\"Mass [GeV]\")\n", + " ax.set_ylabel(\"Count\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7649faa3-9ecc-4761-96ce-857c6ee92868", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "b'\\n'\n", + "b'
\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b'3.1.0\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b' l+ l-\\n'\n", + "b'define p = g u c d s u~ c~ d~ s~\\n'\n", + "b'define j = g u c d s u~ c~ d~ s~\\n'\n", + "b'define l+ = e+ mu+\\n'\n", + "b'define l- = e- mu-\\n'\n", + "b'define vl = ve vm vt\\n'\n", + "b'define vl~ = ve~ vm~ vt~\\n'\n", + "b'output drell-yan_output\\n'\n", + "b']]>\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b'#*********************************************************************\\n'\n", + "b'# MadGraph/MadEvent *\\n'\n", + "b'# http://madgraph.hep.uiuc.edu *\\n'\n", + "b'# *\\n'\n", + "b'# proc_card.dat *\\n'\n", + "b'#*********************************************************************\\n'\n", + "b'# *\\n'\n", + "b'# This Files is generated by MADGRAPH 5 *\\n'\n", + "b'# *\\n'\n", + "b'# WARNING: This Files is generated for MADEVENT (compatibility issue)*\\n'\n", + "b'# This files is NOT a valid MG4 proc_card.dat *\\n'\n", + "b'# Running this in MG4 will NEVER reproduce the result of MG5*\\n'\n", + "b'# *\\n'\n", + "b'#*********************************************************************\\n'\n", + "b'#*********************************************************************\\n'\n", + "b'# Process(es) requested : mg2 input *\\n'\n", + "b'#*********************************************************************\\n'\n", + "b'# Begin PROCESS # This is TAG. Do not modify this line\\n'\n", + "b'p p > l+ l- #Process\\n'\n", + "b'# Be carefull the coupling are here in MG5 convention\\n'\n", + "b' \\n'\n", + "b'end_coup # End the couplings input\\n'\n", + "b'\\n'\n", + "b'done # this tells MG there are no more procs\\n'\n", + "b'# End PROCESS # This is TAG. Do not modify this line\\n'\n", + "b'#*********************************************************************\\n'\n", + "b'# Model information *\\n'\n", + "b'#*********************************************************************\\n'\n", + "b'# Begin MODEL # This is TAG. Do not modify this line\\n'\n", + "b'sm\\n'\n", + "b'# End MODEL # This is TAG. Do not modify this line\\n'\n", + "b'#*********************************************************************\\n'\n", + "b'# Start multiparticle definitions *\\n'\n", + "b'#*********************************************************************\\n'\n", + "b'# Begin MULTIPARTICLES # This is TAG. Do not modify this line\\n'\n", + "b'\\n'\n", + "b'# End MULTIPARTICLES # This is TAG. Do not modify this line\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b'######################################################################\\n'\n", + "b'## PARAM_CARD AUTOMATICALY GENERATED BY MG5 FOLLOWING UFO MODEL ####\\n'\n", + "b'######################################################################\\n'\n", + "b'## ##\\n'\n", + "b'## Width set on Auto will be computed following the information ##\\n'\n", + "b'## present in the decay.py files of the model. ##\\n'\n", + "b'## See arXiv:1402.1178 for more details. ##\\n'\n", + "b'## ##\\n'\n", + "b'######################################################################\\n'\n", + "b'\\n'\n", + "b'###################################\\n'\n", + "b'## INFORMATION FOR MASS\\n'\n", + "b'###################################\\n'\n", + "b'Block mass \\n'\n", + "b' 5 4.700000e+00 # MB \\n'\n", + "b' 6 1.730000e+02 # MT \\n'\n", + "b' 15 1.777000e+00 # MTA \\n'\n", + "b' 23 9.118800e+01 # MZ \\n'\n", + "b' 25 1.250000e+02 # MH \\n'\n", + "b'## Dependent parameters, given by model restrictions.\\n'\n", + "b'## Those values should be edited following the \\n'\n", + "b'## analytical expression. MG5 ignores those values \\n'\n", + "b'## but they are important for interfacing the output of MG5\\n'\n", + "b'## to external program such as Pythia.\\n'\n", + "b' 1 0.000000e+00 # d : 0.0 \\n'\n", + "b' 2 0.000000e+00 # u : 0.0 \\n'\n", + "b' 3 0.000000e+00 # s : 0.0 \\n'\n", + "b' 4 0.000000e+00 # c : 0.0 \\n'\n", + "b' 11 0.000000e+00 # e- : 0.0 \\n'\n", + "b' 12 0.000000e+00 # ve : 0.0 \\n'\n", + "b' 13 0.000000e+00 # mu- : 0.0 \\n'\n", + "b' 14 0.000000e+00 # vm : 0.0 \\n'\n", + "b' 16 0.000000e+00 # vt : 0.0 \\n'\n", + "b' 21 0.000000e+00 # g : 0.0 \\n'\n", + "b' 22 0.000000e+00 # a : 0.0 \\n'\n", + "b' 24 8.041900e+01 # w+ : cmath.sqrt(MZ__exp__2/2. + cmath.sqrt(MZ__exp__4/4. - (aEW*cmath.pi*MZ__exp__2)/(Gf*sqrt__2))) \\n'\n", + "b'\\n'\n", + "b'###################################\\n'\n", + "b'## INFORMATION FOR SMINPUTS\\n'\n", + "b'###################################\\n'\n", + "b'Block sminputs \\n'\n", + "b' 1 1.325070e+02 # aEWM1 \\n'\n", + "b' 2 1.166390e-05 # Gf \\n'\n", + "b' 3 1.180000e-01 # aS (Note that Parameter not used if you use a PDF set) \\n'\n", + "b'\\n'\n", + "b'###################################\\n'\n", + "b'## INFORMATION FOR YUKAWA\\n'\n", + "b'###################################\\n'\n", + "b'Block yukawa \\n'\n", + "b' 5 4.700000e+00 # ymb \\n'\n", + "b' 6 1.730000e+02 # ymt \\n'\n", + "b' 15 1.777000e+00 # ymtau \\n'\n", + "b'\\n'\n", + "b'###################################\\n'\n", + "b'## INFORMATION FOR DECAY\\n'\n", + "b'###################################\\n'\n", + "b'DECAY 6 1.491500e+00 # WT \\n'\n", + "b'DECAY 23 2.441404e+00 # WZ \\n'\n", + "b'DECAY 24 2.047600e+00 # WW \\n'\n", + "b'DECAY 25 6.382339e-03 # WH \\n'\n", + "b'## Dependent parameters, given by model restrictions.\\n'\n", + "b'## Those values should be edited following the \\n'\n", + "b'## analytical expression. MG5 ignores those values \\n'\n", + "b'## but they are important for interfacing the output of MG5\\n'\n", + "b'## to external program such as Pythia.\\n'\n", + "b'DECAY 1 0.000000e+00 # d : 0.0 \\n'\n", + "b'DECAY 2 0.000000e+00 # u : 0.0 \\n'\n", + "b'DECAY 3 0.000000e+00 # s : 0.0 \\n'\n", + "b'DECAY 4 0.000000e+00 # c : 0.0 \\n'\n", + "b'DECAY 5 0.000000e+00 # b : 0.0 \\n'\n", + "b'DECAY 11 0.000000e+00 # e- : 0.0 \\n'\n", + "b'DECAY 12 0.000000e+00 # ve : 0.0 \\n'\n", + "b'DECAY 13 0.000000e+00 # mu- : 0.0 \\n'\n", + "b'DECAY 14 0.000000e+00 # vm : 0.0 \\n'\n", + "b'DECAY 15 0.000000e+00 # ta- : 0.0 \\n'\n", + "b'DECAY 16 0.000000e+00 # vt : 0.0 \\n'\n", + "b'DECAY 21 0.000000e+00 # g : 0.0 \\n'\n", + "b'DECAY 22 0.000000e+00 # a : 0.0\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b' MUR=0.5 MUF=0.5 \\n'\n", + "b' MUR=0.5 MUF=0.5 dyn_scale_choice=sum pt \\n'\n", + "b' MUR=0.5 MUF=0.5 dyn_scale_choice=HT \\n'\n", + "b' MUR=0.5 MUF=0.5 dyn_scale_choice=HT/2 \\n'\n", + "b' MUR=0.5 MUF=0.5 dyn_scale_choice=sqrts \\n'\n", + "b' MUR=0.5 \\n'\n", + "b' MUR=0.5 dyn_scale_choice=sum pt \\n'\n", + "b' MUR=0.5 dyn_scale_choice=HT \\n'\n", + "b' MUR=0.5 dyn_scale_choice=HT/2 \\n'\n", + "b' MUR=0.5 dyn_scale_choice=sqrts \\n'\n", + "b' MUR=0.5 MUF=2.0 \\n'\n", + "b' MUR=0.5 MUF=2.0 dyn_scale_choice=sum pt \\n'\n", + "b' MUR=0.5 MUF=2.0 dyn_scale_choice=HT \\n'\n", + "b' MUR=0.5 MUF=2.0 dyn_scale_choice=HT/2 \\n'\n", + "b' MUR=0.5 MUF=2.0 dyn_scale_choice=sqrts \\n'\n", + "b' MUF=0.5 \\n'\n", + "b' MUF=0.5 dyn_scale_choice=sum pt \\n'\n", + "b' MUF=0.5 dyn_scale_choice=HT \\n'\n", + "b' MUF=0.5 dyn_scale_choice=HT/2 \\n'\n", + "b' MUF=0.5 dyn_scale_choice=sqrts \\n'\n", + "b' dyn_scale_choice=sum pt \\n'\n", + "b' dyn_scale_choice=HT \\n'\n", + "b' dyn_scale_choice=HT/2 \\n'\n", + "b' dyn_scale_choice=sqrts \\n'\n", + "b' MUF=2.0 \\n'\n", + "b' MUF=2.0 dyn_scale_choice=sum pt \\n'\n", + "b' MUF=2.0 dyn_scale_choice=HT \\n'\n", + "b' MUF=2.0 dyn_scale_choice=HT/2 \\n'\n", + "b' MUF=2.0 dyn_scale_choice=sqrts \\n'\n", + "b' MUR=2.0 MUF=0.5 \\n'\n", + "b' MUR=2.0 MUF=0.5 dyn_scale_choice=sum pt \\n'\n", + "b' MUR=2.0 MUF=0.5 dyn_scale_choice=HT \\n'\n", + "b' MUR=2.0 MUF=0.5 dyn_scale_choice=HT/2 \\n'\n", + "b' MUR=2.0 MUF=0.5 dyn_scale_choice=sqrts \\n'\n", + "b' MUR=2.0 \\n'\n", + "b' MUR=2.0 dyn_scale_choice=sum pt \\n'\n", + "b' MUR=2.0 dyn_scale_choice=HT \\n'\n", + "b' MUR=2.0 dyn_scale_choice=HT/2 \\n'\n", + "b' MUR=2.0 dyn_scale_choice=sqrts \\n'\n", + "b' MUR=2.0 MUF=2.0 \\n'\n", + "b' MUR=2.0 MUF=2.0 dyn_scale_choice=sum pt \\n'\n", + "b' MUR=2.0 MUF=2.0 dyn_scale_choice=HT \\n'\n", + "b' MUR=2.0 MUF=2.0 dyn_scale_choice=HT/2 \\n'\n", + "b' MUR=2.0 MUF=2.0 dyn_scale_choice=sqrts \\n'\n", + "b' # scale\\n'\n", + "b' # 247000: LO QCD + LO QED PDF set, alphas(MZ)=0.130. mem=0 ; average on replicas; mem=1-100 ; PDF replicas\\n'\n", + "b' \\n'\n", + "b' PDF=247000 MemberID=1 \\n'\n", + "b' PDF=247000 MemberID=2 \\n'\n", + "b' PDF=247000 MemberID=3 \\n'\n", + "b' PDF=247000 MemberID=4 \\n'\n", + "b' PDF=247000 MemberID=5 \\n'\n", + "b' PDF=247000 MemberID=6 \\n'\n", + "b' PDF=247000 MemberID=7 \\n'\n", + "b' PDF=247000 MemberID=8 \\n'\n", + "b' PDF=247000 MemberID=9 \\n'\n", + "b' PDF=247000 MemberID=10 \\n'\n", + "b' PDF=247000 MemberID=11 \\n'\n", + "b' PDF=247000 MemberID=12 \\n'\n", + "b' PDF=247000 MemberID=13 \\n'\n", + "b' PDF=247000 MemberID=14 \\n'\n", + "b' PDF=247000 MemberID=15 \\n'\n", + "b' PDF=247000 MemberID=16 \\n'\n", + "b' PDF=247000 MemberID=17 \\n'\n", + "b' PDF=247000 MemberID=18 \\n'\n", + "b' PDF=247000 MemberID=19 \\n'\n", + "b' PDF=247000 MemberID=20 \\n'\n", + "b' PDF=247000 MemberID=21 \\n'\n", + "b' PDF=247000 MemberID=22 \\n'\n", + "b' PDF=247000 MemberID=23 \\n'\n", + "b' PDF=247000 MemberID=24 \\n'\n", + "b' PDF=247000 MemberID=25 \\n'\n", + "b' PDF=247000 MemberID=26 \\n'\n", + "b' PDF=247000 MemberID=27 \\n'\n", + "b' PDF=247000 MemberID=28 \\n'\n", + "b' PDF=247000 MemberID=29 \\n'\n", + "b' PDF=247000 MemberID=30 \\n'\n", + "b' PDF=247000 MemberID=31 \\n'\n", + "b' PDF=247000 MemberID=32 \\n'\n", + "b' PDF=247000 MemberID=33 \\n'\n", + "b' PDF=247000 MemberID=34 \\n'\n", + "b' PDF=247000 MemberID=35 \\n'\n", + "b' PDF=247000 MemberID=36 \\n'\n", + "b' PDF=247000 MemberID=37 \\n'\n", + "b' PDF=247000 MemberID=38 \\n'\n", + "b' PDF=247000 MemberID=39 \\n'\n", + "b' PDF=247000 MemberID=40 \\n'\n", + "b' PDF=247000 MemberID=41 \\n'\n", + "b' PDF=247000 MemberID=42 \\n'\n", + "b' PDF=247000 MemberID=43 \\n'\n", + "b' PDF=247000 MemberID=44 \\n'\n", + "b' PDF=247000 MemberID=45 \\n'\n", + "b' PDF=247000 MemberID=46 \\n'\n", + "b' PDF=247000 MemberID=47 \\n'\n", + "b' PDF=247000 MemberID=48 \\n'\n", + "b' PDF=247000 MemberID=49 \\n'\n", + "b' PDF=247000 MemberID=50 \\n'\n", + "b' PDF=247000 MemberID=51 \\n'\n", + "b' PDF=247000 MemberID=52 \\n'\n", + "b' PDF=247000 MemberID=53 \\n'\n", + "b' PDF=247000 MemberID=54 \\n'\n", + "b' PDF=247000 MemberID=55 \\n'\n", + "b' PDF=247000 MemberID=56 \\n'\n", + "b' PDF=247000 MemberID=57 \\n'\n", + "b' PDF=247000 MemberID=58 \\n'\n", + "b' PDF=247000 MemberID=59 \\n'\n", + "b' PDF=247000 MemberID=60 \\n'\n", + "b' PDF=247000 MemberID=61 \\n'\n", + "b' PDF=247000 MemberID=62 \\n'\n", + "b' PDF=247000 MemberID=63 \\n'\n", + "b' PDF=247000 MemberID=64 \\n'\n", + "b' PDF=247000 MemberID=65 \\n'\n", + "b' PDF=247000 MemberID=66 \\n'\n", + "b' PDF=247000 MemberID=67 \\n'\n", + "b' PDF=247000 MemberID=68 \\n'\n", + "b' PDF=247000 MemberID=69 \\n'\n", + "b' PDF=247000 MemberID=70 \\n'\n", + "b' PDF=247000 MemberID=71 \\n'\n", + "b' PDF=247000 MemberID=72 \\n'\n", + "b' PDF=247000 MemberID=73 \\n'\n", + "b' PDF=247000 MemberID=74 \\n'\n", + "b' PDF=247000 MemberID=75 \\n'\n", + "b' PDF=247000 MemberID=76 \\n'\n", + "b' PDF=247000 MemberID=77 \\n'\n", + "b' PDF=247000 MemberID=78 \\n'\n", + "b' PDF=247000 MemberID=79 \\n'\n", + "b' PDF=247000 MemberID=80 \\n'\n", + "b' PDF=247000 MemberID=81 \\n'\n", + "b' PDF=247000 MemberID=82 \\n'\n", + "b' PDF=247000 MemberID=83 \\n'\n", + "b' PDF=247000 MemberID=84 \\n'\n", + "b' PDF=247000 MemberID=85 \\n'\n", + "b' PDF=247000 MemberID=86 \\n'\n", + "b' PDF=247000 MemberID=87 \\n'\n", + "b' PDF=247000 MemberID=88 \\n'\n", + "b' PDF=247000 MemberID=89 \\n'\n", + "b' PDF=247000 MemberID=90 \\n'\n", + "b' PDF=247000 MemberID=91 \\n'\n", + "b' PDF=247000 MemberID=92 \\n'\n", + "b' PDF=247000 MemberID=93 \\n'\n", + "b' PDF=247000 MemberID=94 \\n'\n", + "b' PDF=247000 MemberID=95 \\n'\n", + "b' PDF=247000 MemberID=96 \\n'\n", + "b' PDF=247000 MemberID=97 \\n'\n", + "b' PDF=247000 MemberID=98 \\n'\n", + "b' PDF=247000 MemberID=99 \\n'\n", + "b' PDF=247000 MemberID=100 \\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b'# Number of Events : 10000\\n'\n", + "b'# Integrated weight (pb) : 1678.21\\n'\n", + "b'\\n'\n", + "b'
\\n'\n", + "b'\\n'\n", + "b'2212 2212 6.500000e+03 6.500000e+03 0 0 247000 247000 -4 1\\n'\n", + "b'1.678210e+03 5.178922e+00 1.678210e+03 1\\n'\n", + "b\"please cite 1405.0301 \\n\"\n", + "b'\\n'\n", + "b'\\n'\n", + "b' 4 1 +1.6782100e+03 8.93683800e+01 7.54677100e-03 1.30438800e-01\\n'\n", + "b' 2 -1 0 0 501 0 +0.0000000000e+00 +0.0000000000e+00 +7.4318030872e+01 7.4318030872e+01 0.0000000000e+00 0.0000e+00 -1.0000e+00\\n'\n", + "b' -2 -1 0 0 0 501 -0.0000000000e+00 -0.0000000000e+00 -2.6866655940e+01 2.6866655940e+01 0.0000000000e+00 0.0000e+00 1.0000e+00\\n'\n", + "b' -11 1 1 2 0 0 -6.9396665975e+00 +2.7744220552e+01 -1.5147179771e+01 3.2362598807e+01 0.0000000000e+00 0.0000e+00 1.0000e+00\\n'\n", + "b' 11 1 1 2 0 0 +6.9396665975e+00 -2.7744220552e+01 +6.2598554703e+01 6.8822088005e+01 0.0000000000e+00 0.0000e+00 -1.0000e+00\\n'\n", + "b'\\n'\n", + "b' 0 0.89368383E+02\\n'\n", + "b'0\\n'\n", + "b' 1 2 0.11433543E-01 0.89368383E+02\\n'\n", + "b' 1 -2 0.41333317E-02 0.89368383E+02\\n'\n", + "b' 0.11893024E+05\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b\" +1.4809482e+03 \\n\"\n", + "b\" +1.3469027e+03 \\n\"\n", + "b\" +1.3469027e+03 \\n\"\n", + "b\" +1.1295459e+03 \\n\"\n", + "b\" +1.4809482e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.5527937e+03 \\n\"\n", + "b\" +1.5527937e+03 \\n\"\n", + "b\" +1.3469027e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.8613709e+03 \\n\"\n", + "b\" +1.7450852e+03 \\n\"\n", + "b\" +1.7450852e+03 \\n\"\n", + "b\" +1.5527937e+03 \\n\"\n", + "b\" +1.8613709e+03 \\n\"\n", + "b\" +1.4809482e+03 \\n\"\n", + "b\" +1.3469027e+03 \\n\"\n", + "b\" +1.3469027e+03 \\n\"\n", + "b\" +1.1295459e+03 \\n\"\n", + "b\" +1.4809482e+03 \\n\"\n", + "b\" +1.5527937e+03 \\n\"\n", + "b\" +1.5527937e+03 \\n\"\n", + "b\" +1.3469027e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.8613709e+03 \\n\"\n", + "b\" +1.7450852e+03 \\n\"\n", + "b\" +1.7450852e+03 \\n\"\n", + "b\" +1.5527937e+03 \\n\"\n", + "b\" +1.8613709e+03 \\n\"\n", + "b\" +1.4809482e+03 \\n\"\n", + "b\" +1.3469027e+03 \\n\"\n", + "b\" +1.3469027e+03 \\n\"\n", + "b\" +1.1295459e+03 \\n\"\n", + "b\" +1.4809482e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.5527937e+03 \\n\"\n", + "b\" +1.5527937e+03 \\n\"\n", + "b\" +1.3469027e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.8613709e+03 \\n\"\n", + "b\" +1.7450852e+03 \\n\"\n", + "b\" +1.7450852e+03 \\n\"\n", + "b\" +1.5527937e+03 \\n\"\n", + "b\" +1.8613709e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.6553344e+03 \\n\"\n", + "b\" +1.6314370e+03 \\n\"\n", + "b\" +1.6461270e+03 \\n\"\n", + "b\" +1.6199311e+03 \\n\"\n", + "b\" +1.6842943e+03 \\n\"\n", + "b\" +1.6670860e+03 \\n\"\n", + "b\" +1.6093764e+03 \\n\"\n", + "b\" +1.7530965e+03 \\n\"\n", + "b\" +1.6819596e+03 \\n\"\n", + "b\" +1.6515737e+03 \\n\"\n", + "b\" +1.7195013e+03 \\n\"\n", + "b\" +1.6270690e+03 \\n\"\n", + "b\" +1.7513255e+03 \\n\"\n", + "b\" +1.6538338e+03 \\n\"\n", + "b\" +1.6744334e+03 \\n\"\n", + "b\" +1.7554777e+03 \\n\"\n", + "b\" +1.7073818e+03 \\n\"\n", + "b\" +1.6950924e+03 \\n\"\n", + "b\" +1.6950707e+03 \\n\"\n", + "b\" +1.6721252e+03 \\n\"\n", + "b\" +1.7156820e+03 \\n\"\n", + "b\" +1.6861468e+03 \\n\"\n", + "b\" +1.5079316e+03 \\n\"\n", + "b\" +1.5807264e+03 \\n\"\n", + "b\" +1.6787583e+03 \\n\"\n", + "b\" +1.7109969e+03 \\n\"\n", + "b\" +1.7204062e+03 \\n\"\n", + "b\" +1.7409654e+03 \\n\"\n", + "b\" +1.6151974e+03 \\n\"\n", + "b\" +1.5948440e+03 \\n\"\n", + "b\" +1.7636047e+03 \\n\"\n", + "b\" +1.6925935e+03 \\n\"\n", + "b\" +1.7551012e+03 \\n\"\n", + "b\" +1.7148596e+03 \\n\"\n", + "b\" +1.7482177e+03 \\n\"\n", + "b\" +1.6604952e+03 \\n\"\n", + "b\" +1.7277442e+03 \\n\"\n", + "b\" +1.6063368e+03 \\n\"\n", + "b\" +1.6893137e+03 \\n\"\n", + "b\" +1.6910564e+03 \\n\"\n", + "b\" +1.6646386e+03 \\n\"\n", + "b\" +1.7112986e+03 \\n\"\n", + "b\" +1.6774080e+03 \\n\"\n", + "b\" +1.6865639e+03 \\n\"\n", + "b\" +1.7343186e+03 \\n\"\n", + "b\" +1.5960589e+03 \\n\"\n", + "b\" +1.7313950e+03 \\n\"\n", + "b\" +1.6164131e+03 \\n\"\n", + "b\" +1.6859491e+03 \\n\"\n", + "b\" +1.6586816e+03 \\n\"\n", + "b\" +1.6679260e+03 \\n\"\n", + "b\" +1.7226055e+03 \\n\"\n", + "b\" +1.7132696e+03 \\n\"\n", + "b\" +1.7486811e+03 \\n\"\n", + "b\" +1.7295602e+03 \\n\"\n", + "b\" +1.5387633e+03 \\n\"\n", + "b\" +1.5822066e+03 \\n\"\n", + "b\" +1.6420998e+03 \\n\"\n", + "b\" +1.6702810e+03 \\n\"\n", + "b\" +1.7067868e+03 \\n\"\n", + "b\" +1.7466994e+03 \\n\"\n", + "b\" +1.7071306e+03 \\n\"\n", + "b\" +1.7314133e+03 \\n\"\n", + "b\" +1.7322694e+03 \\n\"\n", + "b\" +1.7468692e+03 \\n\"\n", + "b\" +1.7209840e+03 \\n\"\n", + "b\" +1.6840758e+03 \\n\"\n", + "b\" +1.6619731e+03 \\n\"\n", + "b\" +1.7204600e+03 \\n\"\n", + "b\" +1.6914023e+03 \\n\"\n", + "b\" +1.6383799e+03 \\n\"\n", + "b\" +1.6618700e+03 \\n\"\n", + "b\" +1.6116126e+03 \\n\"\n", + "b\" +1.7047949e+03 \\n\"\n", + "b\" +1.6773679e+03 \\n\"\n", + "b\" +1.7120135e+03 \\n\"\n", + "b\" +1.7478342e+03 \\n\"\n", + "b\" +1.7986132e+03 \\n\"\n", + "b\" +1.5957709e+03 \\n\"\n", + "b\" +1.5796458e+03 \\n\"\n", + "b\" +1.6807832e+03 \\n\"\n", + "b\" +1.6826222e+03 \\n\"\n", + "b\" +1.6532672e+03 \\n\"\n", + "b\" +1.6827477e+03 \\n\"\n", + "b\" +1.5799663e+03 \\n\"\n", + "b\" +1.6694572e+03 \\n\"\n", + "b\" +1.5943567e+03 \\n\"\n", + "b\" +1.6317081e+03 \\n\"\n", + "b\" +1.6428968e+03 \\n\"\n", + "b\" +1.6526160e+03 \\n\"\n", + "b\" +1.6842128e+03 \\n\"\n", + "b\" +1.7143852e+03 \\n\"\n", + "b\" +1.6288776e+03 \\n\"\n", + "b\" +1.5835530e+03 \\n\"\n", + "b\" +1.6704753e+03 \\n\"\n", + "b\" +1.6398635e+03 \\n\"\n", + "b\" +1.7582902e+03 \\n\"\n", + "b\" +1.7348300e+03 \\n\"\n", + "b\" +1.7595976e+03 \\n\"\n", + "b\" +1.7022906e+03 \\n\"\n", + "b'\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b' 5 1 +1.6782100e+03 9.16732600e+01 7.54677100e-03 1.29885000e-01\\n'\n", + "b' 2 -1 0 0 501 0 +0.0000000000e+00 +0.0000000000e+00 +2.2528790807e+02 2.2528790807e+02 0.0000000000e+00 0.0000e+00 -1.0000e+00\\n'\n", + "b' -2 -1 0 0 0 501 -0.0000000000e+00 -0.0000000000e+00 -9.3258299877e+00 9.3258299877e+00 0.0000000000e+00 0.0000e+00 1.0000e+00\\n'\n", + "b' 23 2 1 2 0 0 +0.0000000000e+00 +0.0000000000e+00 +2.1596207808e+02 2.3461373806e+02 9.1673261728e+01 0.0000e+00 0.0000e+00\\n'\n", + "b' -13 1 3 3 0 0 -3.2117860394e+01 -4.6108461100e+00 +2.5124142411e+01 4.1037048993e+01 0.0000000000e+00 0.0000e+00 1.0000e+00\\n'\n", + "b' 13 1 3 3 0 0 +3.2117860394e+01 +4.6108461100e+00 +1.9083793567e+02 1.9357668907e+02 0.0000000000e+00 0.0000e+00 -1.0000e+00\\n'\n", + "b'\\n'\n", + "b' 0 0.91673262E+02\\n'\n", + "b'0\\n'\n", + "b' 1 2 0.34659674E-01 0.91673262E+02\\n'\n", + "b' 1 -2 0.14347432E-02 0.91673262E+02\\n'\n", + "b' 0.15920076E+05\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b\" +1.4797373e+03 \\n\"\n", + "b\" +1.3759668e+03 \\n\"\n", + "b\" +1.3759668e+03 \\n\"\n", + "b\" +1.1596394e+03 \\n\"\n", + "b\" +1.4797373e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.5809763e+03 \\n\"\n", + "b\" +1.5809763e+03 \\n\"\n", + "b\" +1.3759668e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.8628616e+03 \\n\"\n", + "b\" +1.7725791e+03 \\n\"\n", + "b\" +1.7725791e+03 \\n\"\n", + "b\" +1.5809763e+03 \\n\"\n", + "b\" +1.8628616e+03 \\n\"\n", + "b\" +1.4797373e+03 \\n\"\n", + "b\" +1.3759668e+03 \\n\"\n", + "b\" +1.3759668e+03 \\n\"\n", + "b\" +1.1596394e+03 \\n\"\n", + "b\" +1.4797373e+03 \\n\"\n", + "b\" +1.5809763e+03 \\n\"\n", + "b\" +1.5809763e+03 \\n\"\n", + "b\" +1.3759668e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.8628616e+03 \\n\"\n", + "b\" +1.7725791e+03 \\n\"\n", + "b\" +1.7725791e+03 \\n\"\n", + "b\" +1.5809763e+03 \\n\"\n", + "b\" +1.8628616e+03 \\n\"\n", + "b\" +1.4797373e+03 \\n\"\n", + "b\" +1.3759668e+03 \\n\"\n", + "b\" +1.3759668e+03 \\n\"\n", + "b\" +1.1596394e+03 \\n\"\n", + "b\" +1.4797373e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.5809763e+03 \\n\"\n", + "b\" +1.5809763e+03 \\n\"\n", + "b\" +1.3759668e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.8628616e+03 \\n\"\n", + "b\" +1.7725791e+03 \\n\"\n", + "b\" +1.7725791e+03 \\n\"\n", + "b\" +1.5809763e+03 \\n\"\n", + "b\" +1.8628616e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.6505391e+03 \\n\"\n", + "b\" +1.5966108e+03 \\n\"\n", + "b\" +1.6772701e+03 \\n\"\n", + "b\" +1.6641707e+03 \\n\"\n", + "b\" +1.6234566e+03 \\n\"\n", + "b\" +1.7019117e+03 \\n\"\n", + "b\" +1.5674475e+03 \\n\"\n", + "b\" +1.7235693e+03 \\n\"\n", + "b\" +1.6792830e+03 \\n\"\n", + "b\" +1.6923323e+03 \\n\"\n", + "b\" +1.7390786e+03 \\n\"\n", + "b\" +1.6467857e+03 \\n\"\n", + "b\" +1.7388782e+03 \\n\"\n", + "b\" +1.6653197e+03 \\n\"\n", + "b\" +1.7134374e+03 \\n\"\n", + "b\" +1.7874925e+03 \\n\"\n", + "b\" +1.7295074e+03 \\n\"\n", + "b\" +1.6781383e+03 \\n\"\n", + "b\" +1.7137739e+03 \\n\"\n", + "b\" +1.6368330e+03 \\n\"\n", + "b\" +1.7568244e+03 \\n\"\n", + "b\" +1.6588736e+03 \\n\"\n", + "b\" +1.5083516e+03 \\n\"\n", + "b\" +1.6070216e+03 \\n\"\n", + "b\" +1.6595849e+03 \\n\"\n", + "b\" +1.7594656e+03 \\n\"\n", + "b\" +1.7681309e+03 \\n\"\n", + "b\" +1.7305205e+03 \\n\"\n", + "b\" +1.5991613e+03 \\n\"\n", + "b\" +1.5963959e+03 \\n\"\n", + "b\" +1.7571922e+03 \\n\"\n", + "b\" +1.7147748e+03 \\n\"\n", + "b\" +1.7526111e+03 \\n\"\n", + "b\" +1.7185473e+03 \\n\"\n", + "b\" +1.7406068e+03 \\n\"\n", + "b\" +1.6575406e+03 \\n\"\n", + "b\" +1.7406160e+03 \\n\"\n", + "b\" +1.5878548e+03 \\n\"\n", + "b\" +1.6334682e+03 \\n\"\n", + "b\" +1.6392840e+03 \\n\"\n", + "b\" +1.6191189e+03 \\n\"\n", + "b\" +1.6977026e+03 \\n\"\n", + "b\" +1.6717682e+03 \\n\"\n", + "b\" +1.6228405e+03 \\n\"\n", + "b\" +1.6865946e+03 \\n\"\n", + "b\" +1.6454314e+03 \\n\"\n", + "b\" +1.7344132e+03 \\n\"\n", + "b\" +1.6032781e+03 \\n\"\n", + "b\" +1.6507470e+03 \\n\"\n", + "b\" +1.6654721e+03 \\n\"\n", + "b\" +1.6258657e+03 \\n\"\n", + "b\" +1.7065981e+03 \\n\"\n", + "b\" +1.6883326e+03 \\n\"\n", + "b\" +1.7888981e+03 \\n\"\n", + "b\" +1.8002926e+03 \\n\"\n", + "b\" +1.5502967e+03 \\n\"\n", + "b\" +1.5898092e+03 \\n\"\n", + "b\" +1.5835438e+03 \\n\"\n", + "b\" +1.6640150e+03 \\n\"\n", + "b\" +1.6889330e+03 \\n\"\n", + "b\" +1.7654683e+03 \\n\"\n", + "b\" +1.7128100e+03 \\n\"\n", + "b\" +1.7757611e+03 \\n\"\n", + "b\" +1.7580019e+03 \\n\"\n", + "b\" +1.7506678e+03 \\n\"\n", + "b\" +1.7399736e+03 \\n\"\n", + "b\" +1.7433282e+03 \\n\"\n", + "b\" +1.7098484e+03 \\n\"\n", + "b\" +1.7462820e+03 \\n\"\n", + "b\" +1.6987584e+03 \\n\"\n", + "b\" +1.6599069e+03 \\n\"\n", + "b\" +1.6441628e+03 \\n\"\n", + "b\" +1.6224640e+03 \\n\"\n", + "b\" +1.6878609e+03 \\n\"\n", + "b\" +1.6673198e+03 \\n\"\n", + "b\" +1.7409397e+03 \\n\"\n", + "b\" +1.7359414e+03 \\n\"\n", + "b\" +1.7596464e+03 \\n\"\n", + "b\" +1.5766669e+03 \\n\"\n", + "b\" +1.5483232e+03 \\n\"\n", + "b\" +1.6550804e+03 \\n\"\n", + "b\" +1.6488183e+03 \\n\"\n", + "b\" +1.6913894e+03 \\n\"\n", + "b\" +1.6360688e+03 \\n\"\n", + "b\" +1.6231379e+03 \\n\"\n", + "b\" +1.6348874e+03 \\n\"\n", + "b\" +1.5943627e+03 \\n\"\n", + "b\" +1.6045374e+03 \\n\"\n", + "b\" +1.6687288e+03 \\n\"\n", + "b\" +1.6728018e+03 \\n\"\n", + "b\" +1.6806901e+03 \\n\"\n", + "b\" +1.7128673e+03 \\n\"\n", + "b\" +1.6707171e+03 \\n\"\n", + "b\" +1.5442689e+03 \\n\"\n", + "b\" +1.6675483e+03 \\n\"\n", + "b\" +1.6382448e+03 \\n\"\n", + "b\" +1.8170021e+03 \\n\"\n", + "b\" +1.7308880e+03 \\n\"\n", + "b\" +1.7507165e+03 \\n\"\n", + "b\" +1.6813896e+03 \\n\"\n", + "b'\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b' 5 1 +1.6782100e+03 9.33757300e+01 7.54677100e-03 1.29487700e-01\\n'\n", + "b' -2 -1 0 0 0 501 -0.0000000000e+00 +0.0000000000e+00 +6.3859886915e+01 6.3859886915e+01 0.0000000000e+00 0.0000e+00 1.0000e+00\\n'\n", + "b' 2 -1 0 0 501 0 +0.0000000000e+00 -0.0000000000e+00 -3.4133425006e+01 3.4133425006e+01 0.0000000000e+00 0.0000e+00 -1.0000e+00\\n'\n", + "b' 23 2 1 2 0 0 +0.0000000000e+00 +0.0000000000e+00 +2.9726461909e+01 9.7993311922e+01 9.3375728344e+01 0.0000e+00 0.0000e+00\\n'\n", + "b' -11 1 3 3 0 0 +1.7879950015e+01 -4.3280842501e+00 -3.0169517385e+01 3.5335884099e+01 0.0000000000e+00 0.0000e+00 -1.0000e+00\\n'\n", + "b' 11 1 3 3 0 0 -1.7879950015e+01 +4.3280842501e+00 +5.9895979294e+01 6.2657427823e+01 0.0000000000e+00 0.0000e+00 1.0000e+00\\n'\n", + "b'\\n'\n", + "b' 0 0.93375728E+02\\n'\n", + "b'0\\n'\n", + "b' 1 2 0.52512961E-02 0.93375728E+02\\n'\n", + "b' 1 -2 0.98245980E-02 0.93375728E+02\\n'\n", + "b' 0.85331228E+04\\n'\n", + "b'\\n'\n", + "b'\\n'\n", + "b\" +1.4883985e+03 \\n\"\n", + "b\" +1.2114790e+03 \\n\"\n", + "b\" +1.2114790e+03 \\n\"\n", + "b\" +9.9299050e+02 \\n\"\n", + "b\" +1.4883985e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.4198331e+03 \\n\"\n", + "b\" +1.4198331e+03 \\n\"\n", + "b\" +1.2114790e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.8531696e+03 \\n\"\n", + "b\" +1.6146484e+03 \\n\"\n", + "b\" +1.6146484e+03 \\n\"\n", + "b\" +1.4198331e+03 \\n\"\n", + "b\" +1.8531696e+03 \\n\"\n", + "b\" +1.4883985e+03 \\n\"\n", + "b\" +1.2114790e+03 \\n\"\n", + "b\" +1.2114790e+03 \\n\"\n", + "b\" +9.9299050e+02 \\n\"\n", + "b\" +1.4883985e+03 \\n\"\n", + "b\" +1.4198331e+03 \\n\"\n", + "b\" +1.4198331e+03 \\n\"\n", + "b\" +1.2114790e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.8531696e+03 \\n\"\n", + "b\" +1.6146484e+03 \\n\"\n", + "b\" +1.6146484e+03 \\n\"\n", + "b\" +1.4198331e+03 \\n\"\n", + "b\" +1.8531696e+03 \\n\"\n", + "b\" +1.4883985e+03 \\n\"\n", + "b\" +1.2114790e+03 \\n\"\n", + "b\" +1.2114790e+03 \\n\"\n", + "b\" +9.9299050e+02 \\n\"\n", + "b\" +1.4883985e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.4198331e+03 \\n\"\n", + "b\" +1.4198331e+03 \\n\"\n", + "b\" +1.2114790e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.8531696e+03 \\n\"\n", + "b\" +1.6146484e+03 \\n\"\n", + "b\" +1.6146484e+03 \\n\"\n", + "b\" +1.4198331e+03 \\n\"\n", + "b\" +1.8531696e+03 \\n\"\n", + "b\" +1.6782100e+03 \\n\"\n", + "b\" +1.6756355e+03 \\n\"\n", + "b\" +1.6361998e+03 \\n\"\n", + "b\" +1.6303713e+03 \\n\"\n", + "b\" +1.6025788e+03 \\n\"\n", + "b\" +1.6586893e+03 \\n\"\n", + "b\" +1.6492306e+03 \\n\"\n", + "b\" +1.6154644e+03 \\n\"\n", + "b\" +1.7549898e+03 \\n\"\n", + "b\" +1.6698530e+03 \\n\"\n", + "b\" +1.6125796e+03 \\n\"\n", + "b\" +1.7880179e+03 \\n\"\n", + "b\" +1.6069682e+03 \\n\"\n", + "b\" +1.7433293e+03 \\n\"\n", + "b\" +1.6409517e+03 \\n\"\n", + "b\" +1.6602141e+03 \\n\"\n", + "b\" +1.7573271e+03 \\n\"\n", + "b\" +1.7026889e+03 \\n\"\n", + "b\" +1.7251596e+03 \\n\"\n", + "b\" +1.6704608e+03 \\n\"\n", + "b\" +1.6768926e+03 \\n\"\n", + "b\" +1.7026783e+03 \\n\"\n", + "b\" +1.7205159e+03 \\n\"\n", + "b\" +1.4845312e+03 \\n\"\n", + "b\" +1.5523637e+03 \\n\"\n", + "b\" +1.6813983e+03 \\n\"\n", + "b\" +1.6851629e+03 \\n\"\n", + "b\" +1.6971995e+03 \\n\"\n", + "b\" +1.7452855e+03 \\n\"\n", + "b\" +1.5968393e+03 \\n\"\n", + "b\" +1.6141849e+03 \\n\"\n", + "b\" +1.7522634e+03 \\n\"\n", + "b\" +1.6797470e+03 \\n\"\n", + "b\" +1.7517570e+03 \\n\"\n", + "b\" +1.7070047e+03 \\n\"\n", + "b\" +1.7658384e+03 \\n\"\n", + "b\" +1.6692237e+03 \\n\"\n", + "b\" +1.7025974e+03 \\n\"\n", + "b\" +1.6140583e+03 \\n\"\n", + "b\" +1.7053940e+03 \\n\"\n", + "b\" +1.7140653e+03 \\n\"\n", + "b\" +1.6910241e+03 \\n\"\n", + "b\" +1.7080953e+03 \\n\"\n", + "b\" +1.6750669e+03 \\n\"\n", + "b\" +1.7555844e+03 \\n\"\n", + "b\" +1.8098533e+03 \\n\"\n", + "b\" +1.5708833e+03 \\n\"\n", + "b\" +1.7438875e+03 \\n\"\n", + "b\" +1.6318138e+03 \\n\"\n", + "b\" +1.7275750e+03 \\n\"\n", + "b\" +1.6557302e+03 \\n\"\n", + "b\" +1.6843102e+03 \\n\"\n", + "b\" +1.7396353e+03 \\n\"\n", + "b\" +1.7271012e+03 \\n\"\n", + "b\" +1.7353544e+03 \\n\"\n", + "b\" +1.7142687e+03 \\n\"\n", + "b\" +1.5204372e+03 \\n\"\n", + "b\" +1.5724589e+03 \\n\"\n", + "b\" +1.6755699e+03 \\n\"\n", + "b\" +1.6666335e+03 \\n\"\n", + "b\" +1.7045745e+03 \\n\"\n", + "b\" +1.7545989e+03 \\n\"\n", + "b\" +1.6874663e+03 \\n\"\n", + "b\" +1.7353972e+03 \\n\"\n", + "b\" +1.7173414e+03 \\n\"\n", + "b\" +1.7495491e+03 \\n\"\n", + "b\" +1.7122079e+03 \\n\"\n", + "b\" +1.6609661e+03 \\n\"\n", + "b\" +1.6467599e+03 \\n\"\n", + "b\" +1.6984213e+03 \\n\"\n", + "b\" +1.6933318e+03 \\n\"\n", + "b\" +1.6180121e+03 \\n\"\n", + "b\" +1.6804048e+03 \\n\"\n", + "b\" +1.5969053e+03 \\n\"\n", + "b\" +1.7142371e+03 \\n\"\n", + "b\" +1.6758778e+03 \\n\"\n", + "b\" +1.6946474e+03 \\n\"\n", + "b\" +1.7439471e+03 \\n\"\n", + "b\" +1.8105080e+03 \\n\"\n", + "b\" +1.5910868e+03 \\n\"\n", + "b\" +1.5705175e+03 \\n\"\n", + "b\" +1.6980770e+03 \\n\"\n", + "b\" +1.7072316e+03 \\n\"\n", + "b\" +1.6440392e+03 \\n\"\n", + "b\" +1.6651287e+03 \\n\"\n", + "b\" +1.5545586e+03 \\n\"\n", + "b\" +1.6787821e+03 \\n\"\n", + "b\" +1.5967667e+03 \\n\"\n", + "b\" +1.6781010e+03 \\n\"\n", + "b\" +1.6159887e+03 \\n\"\n", + "b\" +1.6230268e+03 \\n\"\n", + "b\" +1.6648668e+03 \\n\"\n", + "b\" +1.7231546e+03 \\n\"\n", + "b\" +1.6322453e+03 \\n\"\n" + ] + } + ], + "source": [ + "lhe_data = data_path(\"pylhe-drell-yan-ll-lhe.gz\")\n", + "with gzip.open(lhe_data) as f:\n", + " for _ in range(1000):\n", + " print(f.readline())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1b0954bf-4d67-4ddc-8496-052f508135d5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + " 2212 2212 6.5000000e+03 6.5000000e+03 0 0 247000 247000 -4 1\n", + " 1.6782100e+03 5.1789220e+00 1.6782100e+03 1\n", + "\n", + " \n", + " MUR=0.5 MUF=0.5\n", + " MUR=0.5 MUF=0.5 dyn_scale_choice=sum pt\n", + " MUR=0.5 MUF=0.5 dyn_scale_choice=HT\n", + " MUR=0.5 MUF=0.5 dyn_scale_choice=HT/2\n", + " MUR=0.5 MUF=0.5 dyn_scale_choice=sqrts\n", + " MUR=0.5\n", + " MUR=0.5 dyn_scale_choice=sum pt\n", + " MUR=0.5 dyn_scale_choice=HT\n", + " MUR=0.5 dyn_scale_choice=HT/2\n", + " MUR=0.5 dyn_scale_choice=sqrts\n", + " MUR=0.5 MUF=2.0\n", + " MUR=0.5 MUF=2.0 dyn_scale_choice=sum pt\n", + " MUR=0.5 MUF=2.0 dyn_scale_choice=HT\n", + " MUR=0.5 MUF=2.0 dyn_scale_choice=HT/2\n", + " MUR=0.5 MUF=2.0 dyn_scale_choice=sqrts\n", + " MUF=0.5\n", + " MUF=0.5 dyn_scale_choice=sum pt\n", + " MUF=0.5 dyn_scale_choice=HT\n", + " MUF=0.5 dyn_scale_choice=HT/2\n", + " MUF=0.5 dyn_scale_choice=sqrts\n", + " dyn_scale_choice=sum pt\n", + " dyn_scale_choice=HT\n", + " dyn_scale_choice=HT/2\n", + " dyn_scale_choice=sqrts\n", + " MUF=2.0\n", + " MUF=2.0 dyn_scale_choice=sum pt\n", + " MUF=2.0 dyn_scale_choice=HT\n", + " MUF=2.0 dyn_scale_choice=HT/2\n", + " MUF=2.0 dyn_scale_choice=sqrts\n", + " MUR=2.0 MUF=0.5\n", + " MUR=2.0 MUF=0.5 dyn_scale_choice=sum pt\n", + " MUR=2.0 MUF=0.5 dyn_scale_choice=HT\n", + " MUR=2.0 MUF=0.5 dyn_scale_choice=HT/2\n", + " MUR=2.0 MUF=0.5 dyn_scale_choice=sqrts\n", + " MUR=2.0\n", + " MUR=2.0 dyn_scale_choice=sum pt\n", + " MUR=2.0 dyn_scale_choice=HT\n", + " MUR=2.0 dyn_scale_choice=HT/2\n", + " MUR=2.0 dyn_scale_choice=sqrts\n", + " MUR=2.0 MUF=2.0\n", + " MUR=2.0 MUF=2.0 dyn_scale_choice=sum pt\n", + " MUR=2.0 MUF=2.0 dyn_scale_choice=HT\n", + " MUR=2.0 MUF=2.0 dyn_scale_choice=HT/2\n", + " MUR=2.0 MUF=2.0 dyn_scale_choice=sqrts\n", + " \n", + " \n", + " \n", + " PDF=247000 MemberID=1\n", + " PDF=247000 MemberID=2\n", + " PDF=247000 MemberID=3\n", + " PDF=247000 MemberID=4\n", + " PDF=247000 MemberID=5\n", + " PDF=247000 MemberID=6\n", + " PDF=247000 MemberID=7\n", + " PDF=247000 MemberID=8\n", + " PDF=247000 MemberID=9\n", + " PDF=247000 MemberID=10\n", + " PDF=247000 MemberID=11\n", + " PDF=247000 MemberID=12\n", + " PDF=247000 MemberID=13\n", + " PDF=247000 MemberID=14\n", + " PDF=247000 MemberID=15\n", + " PDF=247000 MemberID=16\n", + " PDF=247000 MemberID=17\n", + " PDF=247000 MemberID=18\n", + " PDF=247000 MemberID=19\n", + " PDF=247000 MemberID=20\n", + " PDF=247000 MemberID=21\n", + " PDF=247000 MemberID=22\n", + " PDF=247000 MemberID=23\n", + " PDF=247000 MemberID=24\n", + " PDF=247000 MemberID=25\n", + " PDF=247000 MemberID=26\n", + " PDF=247000 MemberID=27\n", + " PDF=247000 MemberID=28\n", + " PDF=247000 MemberID=29\n", + " PDF=247000 MemberID=30\n", + " PDF=247000 MemberID=31\n", + " PDF=247000 MemberID=32\n", + " PDF=247000 MemberID=33\n", + " PDF=247000 MemberID=34\n", + " PDF=247000 MemberID=35\n", + " PDF=247000 MemberID=36\n", + " PDF=247000 MemberID=37\n", + " PDF=247000 MemberID=38\n", + " PDF=247000 MemberID=39\n", + " PDF=247000 MemberID=40\n", + " PDF=247000 MemberID=41\n", + " PDF=247000 MemberID=42\n", + " PDF=247000 MemberID=43\n", + " PDF=247000 MemberID=44\n", + " PDF=247000 MemberID=45\n", + " PDF=247000 MemberID=46\n", + " PDF=247000 MemberID=47\n", + " PDF=247000 MemberID=48\n", + " PDF=247000 MemberID=49\n", + " PDF=247000 MemberID=50\n", + " PDF=247000 MemberID=51\n", + " PDF=247000 MemberID=52\n", + " PDF=247000 MemberID=53\n", + " PDF=247000 MemberID=54\n", + " PDF=247000 MemberID=55\n", + " PDF=247000 MemberID=56\n", + " PDF=247000 MemberID=57\n", + " PDF=247000 MemberID=58\n", + " PDF=247000 MemberID=59\n", + " PDF=247000 MemberID=60\n", + " PDF=247000 MemberID=61\n", + " PDF=247000 MemberID=62\n", + " PDF=247000 MemberID=63\n", + " PDF=247000 MemberID=64\n", + " PDF=247000 MemberID=65\n", + " PDF=247000 MemberID=66\n", + " PDF=247000 MemberID=67\n", + " PDF=247000 MemberID=68\n", + " PDF=247000 MemberID=69\n", + " PDF=247000 MemberID=70\n", + " PDF=247000 MemberID=71\n", + " PDF=247000 MemberID=72\n", + " PDF=247000 MemberID=73\n", + " PDF=247000 MemberID=74\n", + " PDF=247000 MemberID=75\n", + " PDF=247000 MemberID=76\n", + " PDF=247000 MemberID=77\n", + " PDF=247000 MemberID=78\n", + " PDF=247000 MemberID=79\n", + " PDF=247000 MemberID=80\n", + " PDF=247000 MemberID=81\n", + " PDF=247000 MemberID=82\n", + " PDF=247000 MemberID=83\n", + " PDF=247000 MemberID=84\n", + " PDF=247000 MemberID=85\n", + " PDF=247000 MemberID=86\n", + " PDF=247000 MemberID=87\n", + " PDF=247000 MemberID=88\n", + " PDF=247000 MemberID=89\n", + " PDF=247000 MemberID=90\n", + " PDF=247000 MemberID=91\n", + " PDF=247000 MemberID=92\n", + " PDF=247000 MemberID=93\n", + " PDF=247000 MemberID=94\n", + " PDF=247000 MemberID=95\n", + " PDF=247000 MemberID=96\n", + " PDF=247000 MemberID=97\n", + " PDF=247000 MemberID=98\n", + " PDF=247000 MemberID=99\n", + " PDF=247000 MemberID=100\n", + " \n", + "\n", + "\n", + "\n", + " 4 1 1.6782100000e+03 8.9368380000e+01 7.5467710000e-03 1.3043880000e-01\n", + " 2 -1 0 0 501 0 0.00000000e+00 0.00000000e+00 7.43180309e+01 7.43180309e+01 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + " -2 -1 0 0 0 501 -0.00000000e+00 -0.00000000e+00 -2.68666559e+01 2.68666559e+01 0.00000000e+00 0.0000e+00 1.0000e+00\n", + " -11 1 1 2 0 0 -6.93966660e+00 2.77442206e+01 -1.51471798e+01 3.23625988e+01 0.00000000e+00 0.0000e+00 1.0000e+00\n", + " 11 1 1 2 0 0 6.93966660e+00 -2.77442206e+01 6.25985547e+01 6.88220880e+01 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + "\n", + " 1.4809e+03\n", + " 1.3469e+03\n", + " 1.3469e+03\n", + " 1.1295e+03\n", + " 1.4809e+03\n", + " 1.6782e+03\n", + " 1.5528e+03\n", + " 1.5528e+03\n", + " 1.3469e+03\n", + " 1.6782e+03\n", + " 1.8614e+03\n", + " 1.7451e+03\n", + " 1.7451e+03\n", + " 1.5528e+03\n", + " 1.8614e+03\n", + " 1.4809e+03\n", + " 1.3469e+03\n", + " 1.3469e+03\n", + " 1.1295e+03\n", + " 1.4809e+03\n", + " 1.5528e+03\n", + " 1.5528e+03\n", + " 1.3469e+03\n", + " 1.6782e+03\n", + " 1.8614e+03\n", + " 1.7451e+03\n", + " 1.7451e+03\n", + " 1.5528e+03\n", + " 1.8614e+03\n", + " 1.4809e+03\n", + " 1.3469e+03\n", + " 1.3469e+03\n", + " 1.1295e+03\n", + " 1.4809e+03\n", + " 1.6782e+03\n", + " 1.5528e+03\n", + " 1.5528e+03\n", + " 1.3469e+03\n", + " 1.6782e+03\n", + " 1.8614e+03\n", + " 1.7451e+03\n", + " 1.7451e+03\n", + " 1.5528e+03\n", + " 1.8614e+03\n", + " 1.6782e+03\n", + " 1.6553e+03\n", + " 1.6314e+03\n", + " 1.6461e+03\n", + " 1.6199e+03\n", + " 1.6843e+03\n", + " 1.6671e+03\n", + " 1.6094e+03\n", + " 1.7531e+03\n", + " 1.6820e+03\n", + " 1.6516e+03\n", + " 1.7195e+03\n", + " 1.6271e+03\n", + " 1.7513e+03\n", + " 1.6538e+03\n", + " 1.6744e+03\n", + " 1.7555e+03\n", + " 1.7074e+03\n", + " 1.6951e+03\n", + " 1.6951e+03\n", + " 1.6721e+03\n", + " 1.7157e+03\n", + " 1.6861e+03\n", + " 1.5079e+03\n", + " 1.5807e+03\n", + " 1.6788e+03\n", + " 1.7110e+03\n", + " 1.7204e+03\n", + " 1.7410e+03\n", + " 1.6152e+03\n", + " 1.5948e+03\n", + " 1.7636e+03\n", + " 1.6926e+03\n", + " 1.7551e+03\n", + " 1.7149e+03\n", + " 1.7482e+03\n", + " 1.6605e+03\n", + " 1.7277e+03\n", + " 1.6063e+03\n", + " 1.6893e+03\n", + " 1.6911e+03\n", + " 1.6646e+03\n", + " 1.7113e+03\n", + " 1.6774e+03\n", + " 1.6866e+03\n", + " 1.7343e+03\n", + " 1.5961e+03\n", + " 1.7314e+03\n", + " 1.6164e+03\n", + " 1.6859e+03\n", + " 1.6587e+03\n", + " 1.6679e+03\n", + " 1.7226e+03\n", + " 1.7133e+03\n", + " 1.7487e+03\n", + " 1.7296e+03\n", + " 1.5388e+03\n", + " 1.5822e+03\n", + " 1.6421e+03\n", + " 1.6703e+03\n", + " 1.7068e+03\n", + " 1.7467e+03\n", + " 1.7071e+03\n", + " 1.7314e+03\n", + " 1.7323e+03\n", + " 1.7469e+03\n", + " 1.7210e+03\n", + " 1.6841e+03\n", + " 1.6620e+03\n", + " 1.7205e+03\n", + " 1.6914e+03\n", + " 1.6384e+03\n", + " 1.6619e+03\n", + " 1.6116e+03\n", + " 1.7048e+03\n", + " 1.6774e+03\n", + " 1.7120e+03\n", + " 1.7478e+03\n", + " 1.7986e+03\n", + " 1.5958e+03\n", + " 1.5796e+03\n", + " 1.6808e+03\n", + " 1.6826e+03\n", + " 1.6533e+03\n", + " 1.6827e+03\n", + " 1.5800e+03\n", + " 1.6695e+03\n", + " 1.5944e+03\n", + " 1.6317e+03\n", + " 1.6429e+03\n", + " 1.6526e+03\n", + " 1.6842e+03\n", + " 1.7144e+03\n", + " 1.6289e+03\n", + " 1.5836e+03\n", + " 1.6705e+03\n", + " 1.6399e+03\n", + " 1.7583e+03\n", + " 1.7348e+03\n", + " 1.7596e+03\n", + " 1.7023e+03\n", + "\n", + "\n", + "\n", + " 5 1 1.6782100000e+03 9.1673260000e+01 7.5467710000e-03 1.2988500000e-01\n", + " 2 -1 0 0 501 0 0.00000000e+00 0.00000000e+00 2.25287908e+02 2.25287908e+02 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + " -2 -1 0 0 0 501 -0.00000000e+00 -0.00000000e+00 -9.32582999e+00 9.32582999e+00 0.00000000e+00 0.0000e+00 1.0000e+00\n", + " 23 2 1 2 0 0 0.00000000e+00 0.00000000e+00 2.15962078e+02 2.34613738e+02 9.16732617e+01 0.0000e+00 0.0000e+00\n", + " -13 1 3 3 0 0 -3.21178604e+01 -4.61084611e+00 2.51241424e+01 4.10370490e+01 0.00000000e+00 0.0000e+00 1.0000e+00\n", + " 13 1 3 3 0 0 3.21178604e+01 4.61084611e+00 1.90837936e+02 1.93576689e+02 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + "\n", + " 1.4797e+03\n", + " 1.3760e+03\n", + " 1.3760e+03\n", + " 1.1596e+03\n", + " 1.4797e+03\n", + " 1.6782e+03\n", + " 1.5810e+03\n", + " 1.5810e+03\n", + " 1.3760e+03\n", + " 1.6782e+03\n", + " 1.8629e+03\n", + " 1.7726e+03\n", + " 1.7726e+03\n", + " 1.5810e+03\n", + " 1.8629e+03\n", + " 1.4797e+03\n", + " 1.3760e+03\n", + " 1.3760e+03\n", + " 1.1596e+03\n", + " 1.4797e+03\n", + " 1.5810e+03\n", + " 1.5810e+03\n", + " 1.3760e+03\n", + " 1.6782e+03\n", + " 1.8629e+03\n", + " 1.7726e+03\n", + " 1.7726e+03\n", + " 1.5810e+03\n", + " 1.8629e+03\n", + " 1.4797e+03\n", + " 1.3760e+03\n", + " 1.3760e+03\n", + " 1.1596e+03\n", + " 1.4797e+03\n", + " 1.6782e+03\n", + " 1.5810e+03\n", + " 1.5810e+03\n", + " 1.3760e+03\n", + " 1.6782e+03\n", + " 1.8629e+03\n", + " 1.7726e+03\n", + " 1.7726e+03\n", + " 1.5810e+03\n", + " 1.8629e+03\n", + " 1.6782e+03\n", + " 1.6505e+03\n", + " 1.5966e+03\n", + " 1.6773e+03\n", + " 1.6642e+03\n", + " 1.6235e+03\n", + " 1.7019e+03\n", + " 1.5674e+03\n", + " 1.7236e+03\n", + " 1.6793e+03\n", + " 1.6923e+03\n", + " 1.7391e+03\n", + " 1.6468e+03\n", + " 1.7389e+03\n", + " 1.6653e+03\n", + " 1.7134e+03\n", + " 1.7875e+03\n", + " 1.7295e+03\n", + " 1.6781e+03\n", + " 1.7138e+03\n", + " 1.6368e+03\n", + " 1.7568e+03\n", + " 1.6589e+03\n", + " 1.5084e+03\n", + " 1.6070e+03\n", + " 1.6596e+03\n", + " 1.7595e+03\n", + " 1.7681e+03\n", + " 1.7305e+03\n", + " 1.5992e+03\n", + " 1.5964e+03\n", + " 1.7572e+03\n", + " 1.7148e+03\n", + " 1.7526e+03\n", + " 1.7185e+03\n", + " 1.7406e+03\n", + " 1.6575e+03\n", + " 1.7406e+03\n", + " 1.5879e+03\n", + " 1.6335e+03\n", + " 1.6393e+03\n", + " 1.6191e+03\n", + " 1.6977e+03\n", + " 1.6718e+03\n", + " 1.6228e+03\n", + " 1.6866e+03\n", + " 1.6454e+03\n", + " 1.7344e+03\n", + " 1.6033e+03\n", + " 1.6507e+03\n", + " 1.6655e+03\n", + " 1.6259e+03\n", + " 1.7066e+03\n", + " 1.6883e+03\n", + " 1.7889e+03\n", + " 1.8003e+03\n", + " 1.5503e+03\n", + " 1.5898e+03\n", + " 1.5835e+03\n", + " 1.6640e+03\n", + " 1.6889e+03\n", + " 1.7655e+03\n", + " 1.7128e+03\n", + " 1.7758e+03\n", + " 1.7580e+03\n", + " 1.7507e+03\n", + " 1.7400e+03\n", + " 1.7433e+03\n", + " 1.7098e+03\n", + " 1.7463e+03\n", + " 1.6988e+03\n", + " 1.6599e+03\n", + " 1.6442e+03\n", + " 1.6225e+03\n", + " 1.6879e+03\n", + " 1.6673e+03\n", + " 1.7409e+03\n", + " 1.7359e+03\n", + " 1.7596e+03\n", + " 1.5767e+03\n", + " 1.5483e+03\n", + " 1.6551e+03\n", + " 1.6488e+03\n", + " 1.6914e+03\n", + " 1.6361e+03\n", + " 1.6231e+03\n", + " 1.6349e+03\n", + " 1.5944e+03\n", + " 1.6045e+03\n", + " 1.6687e+03\n", + " 1.6728e+03\n", + " 1.6807e+03\n", + " 1.7129e+03\n", + " 1.6707e+03\n", + " 1.5443e+03\n", + " 1.6675e+03\n", + " 1.6382e+03\n", + " 1.8170e+03\n", + " 1.7309e+03\n", + " 1.7507e+03\n", + " 1.6814e+03\n", + "\n", + "\n", + "\n", + " 5 1 1.6782100000e+03 9.3375730000e+01 7.5467710000e-03 1.2948770000e-01\n", + " -2 -1 0 0 0 501 -0.00000000e+00 0.00000000e+00 6.38598869e+01 6.38598869e+01 0.00000000e+00 0.0000e+00 1.0000e+00\n", + " 2 -1 0 0 501 0 0.00000000e+00 -0.00000000e+00 -3.41334250e+01 3.41334250e+01 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + " 23 2 1 2 0 0 0.00000000e+00 0.00000000e+00 2.97264619e+01 9.79933119e+01 9.33757283e+01 0.0000e+00 0.0000e+00\n", + " -11 1 3 3 0 0 1.78799500e+01 -4.32808425e+00 -3.01695174e+01 3.53358841e+01 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + " 11 1 3 3 0 0 -1.78799500e+01 4.32808425e+00 5.98959793e+01 6.26574278e+01 0.00000000e+00 0.0000e+00 1.0000e+00\n", + "\n", + " 1.4884e+03\n", + " 1.2115e+03\n", + " 1.2115e+03\n", + " 9.9299e+02\n", + " 1.4884e+03\n", + " 1.6782e+03\n", + " 1.4198e+03\n", + " 1.4198e+03\n", + " 1.2115e+03\n", + " 1.6782e+03\n", + " 1.8532e+03\n", + " 1.6146e+03\n", + " 1.6146e+03\n", + " 1.4198e+03\n", + " 1.8532e+03\n", + " 1.4884e+03\n", + " 1.2115e+03\n", + " 1.2115e+03\n", + " 9.9299e+02\n", + " 1.4884e+03\n", + " 1.4198e+03\n", + " 1.4198e+03\n", + " 1.2115e+03\n", + " 1.6782e+03\n", + " 1.8532e+03\n", + " 1.6146e+03\n", + " 1.6146e+03\n", + " 1.4198e+03\n", + " 1.8532e+03\n", + " 1.4884e+03\n", + " 1.2115e+03\n", + " 1.2115e+03\n", + " 9.9299e+02\n", + " 1.4884e+03\n", + " 1.6782e+03\n", + " 1.4198e+03\n", + " 1.4198e+03\n", + " 1.2115e+03\n", + " 1.6782e+03\n", + " 1.8532e+03\n", + " 1.6146e+03\n", + " 1.6146e+03\n", + " 1.4198e+03\n", + " 1.8532e+03\n", + " 1.6782e+03\n", + " 1.6756e+03\n", + " 1.6362e+03\n", + " 1.6304e+03\n", + " 1.6026e+03\n", + " 1.6587e+03\n", + " 1.6492e+03\n", + " 1.6155e+03\n", + " 1.7550e+03\n", + " 1.6699e+03\n", + " 1.6126e+03\n", + " 1.7880e+03\n", + " 1.6070e+03\n", + " 1.7433e+03\n", + " 1.6410e+03\n", + " 1.6602e+03\n", + " 1.7573e+03\n", + " 1.7027e+03\n", + " 1.7252e+03\n", + " 1.6705e+03\n", + " 1.6769e+03\n", + " 1.7027e+03\n", + " 1.7205e+03\n", + " 1.4845e+03\n", + " 1.5524e+03\n", + " 1.6814e+03\n", + " 1.6852e+03\n", + " 1.6972e+03\n", + " 1.7453e+03\n", + " 1.5968e+03\n", + " 1.6142e+03\n", + " 1.7523e+03\n", + " 1.6797e+03\n", + " 1.7518e+03\n", + " 1.7070e+03\n", + " 1.7658e+03\n", + " 1.6692e+03\n", + " 1.7026e+03\n", + " 1.6141e+03\n", + " 1.7054e+03\n", + " 1.7141e+03\n", + " 1.6910e+03\n", + " 1.7081e+03\n", + " 1.6751e+03\n", + " 1.7556e+03\n", + " 1.8099e+03\n", + " 1.5709e+03\n", + " 1.7439e+03\n", + " 1.6318e+03\n", + " 1.7276e+03\n", + " 1.6557e+03\n", + " 1.6843e+03\n", + " 1.7396e+03\n", + " 1.7271e+03\n", + " 1.7354e+03\n", + " 1.7143e+03\n", + " 1.5204e+03\n", + " 1.5725e+03\n", + " 1.6756e+03\n", + " 1.6666e+03\n", + " 1.7046e+03\n", + " 1.7546e+03\n", + " 1.6875e+03\n", + " 1.7354e+03\n", + " 1.7173e+03\n", + " 1.7495e+03\n", + " 1.7122e+03\n", + " 1.6610e+03\n", + " 1.6468e+03\n", + " 1.6984e+03\n", + " 1.6933e+03\n", + " 1.6180e+03\n", + " 1.6804e+03\n", + " 1.5969e+03\n", + " 1.7142e+03\n", + " 1.6759e+03\n", + " 1.6946e+03\n", + " 1.7439e+03\n", + " 1.8105e+03\n", + " 1.5911e+03\n", + " 1.5705e+03\n", + " 1.6981e+03\n", + " 1.7072e+03\n", + " 1.6440e+03\n", + " 1.6651e+03\n", + " 1.5546e+03\n", + " 1.6788e+03\n", + " 1.5968e+03\n", + " 1.6781e+03\n", + " 1.6160e+03\n", + " 1.6230e+03\n", + " 1.6649e+03\n", + " 1.7232e+03\n", + " 1.6322e+03\n", + " 1.6590e+03\n", + " 1.6470e+03\n", + " 1.6213e+03\n", + " 1.7461e+03\n", + " 1.7365e+03\n", + " 1.7717e+03\n", + " 1.7176e+03\n", + "\n", + "\n", + "\n", + " 4 1 1.6782100000e+03 9.1638730000e+01 7.5467710000e-03 1.2989310000e-01\n", + " 1 -1 0 0 501 0 0.00000000e+00 0.00000000e+00 4.46125101e+01 4.46125101e+01 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + " -1 -1 0 0 0 501 -0.00000000e+00 -0.00000000e+00 -4.70588647e+01 4.70588647e+01 0.00000000e+00 0.0000e+00 1.0000e+00\n", + " -11 1 1 2 0 0 1.28771854e+01 4.38209466e+01 -4.87369922e+00 4.59331058e+01 0.00000000e+00 0.0000e+00 1.0000e+00\n", + " 11 1 1 2 0 0 -1.28771854e+01 -4.38209466e+01 2.42734462e+00 4.57382691e+01 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + "\n", + " 1.4856e+03\n", + " 1.4847e+03\n", + " 1.4847e+03\n", + " 1.2781e+03\n", + " 1.4856e+03\n", + " 1.6782e+03\n", + " 1.6774e+03\n", + " 1.6774e+03\n", + " 1.4847e+03\n", + " 1.6782e+03\n", + " 1.8560e+03\n", + " 1.8552e+03\n", + " 1.8552e+03\n", + " 1.6774e+03\n", + " 1.8560e+03\n", + " 1.4856e+03\n", + " 1.4847e+03\n", + " 1.4847e+03\n", + " 1.2781e+03\n", + " 1.4856e+03\n", + " 1.6774e+03\n", + " 1.6774e+03\n", + " 1.4847e+03\n", + " 1.6782e+03\n", + " 1.8560e+03\n", + " 1.8552e+03\n", + " 1.8552e+03\n", + " 1.6774e+03\n", + " 1.8560e+03\n", + " 1.4856e+03\n", + " 1.4847e+03\n", + " 1.4847e+03\n", + " 1.2781e+03\n", + " 1.4856e+03\n", + " 1.6782e+03\n", + " 1.6774e+03\n", + " 1.6774e+03\n", + " 1.4847e+03\n", + " 1.6782e+03\n", + " 1.8560e+03\n", + " 1.8552e+03\n", + " 1.8552e+03\n", + " 1.6774e+03\n", + " 1.8560e+03\n", + " 1.6782e+03\n", + " 1.6429e+03\n", + " 1.6468e+03\n", + " 1.6162e+03\n", + " 1.6130e+03\n", + " 1.6856e+03\n", + " 1.6179e+03\n", + " 1.6689e+03\n", + " 1.7848e+03\n", + " 1.6704e+03\n", + " 1.6646e+03\n", + " 1.8328e+03\n", + " 1.5622e+03\n", + " 1.7942e+03\n", + " 1.5703e+03\n", + " 1.6517e+03\n", + " 1.7496e+03\n", + " 1.6967e+03\n", + " 1.7457e+03\n", + " 1.7115e+03\n", + " 1.7416e+03\n", + " 1.6420e+03\n", + " 1.7201e+03\n", + " 1.5384e+03\n", + " 1.5973e+03\n", + " 1.7240e+03\n", + " 1.6539e+03\n", + " 1.6980e+03\n", + " 1.7167e+03\n", + " 1.6108e+03\n", + " 1.6938e+03\n", + " 1.7726e+03\n", + " 1.7171e+03\n", + " 1.7419e+03\n", + " 1.7235e+03\n", + " 1.7931e+03\n", + " 1.7104e+03\n", + " 1.7226e+03\n", + " 1.5645e+03\n", + " 1.6474e+03\n", + " 1.7408e+03\n", + " 1.7017e+03\n", + " 1.7299e+03\n", + " 1.6401e+03\n", + " 1.6868e+03\n", + " 1.8030e+03\n", + " 1.5299e+03\n", + " 1.6931e+03\n", + " 1.6550e+03\n", + " 1.7837e+03\n", + " 1.6653e+03\n", + " 1.6500e+03\n", + " 1.7732e+03\n", + " 1.6635e+03\n", + " 1.7852e+03\n", + " 1.6770e+03\n", + " 1.5004e+03\n", + " 1.5982e+03\n", + " 1.6108e+03\n", + " 1.5672e+03\n", + " 1.7089e+03\n", + " 1.7370e+03\n", + " 1.7035e+03\n", + " 1.7673e+03\n", + " 1.7298e+03\n", + " 1.7556e+03\n", + " 1.7264e+03\n", + " 1.6840e+03\n", + " 1.6705e+03\n", + " 1.6938e+03\n", + " 1.6859e+03\n", + " 1.5958e+03\n", + " 1.6275e+03\n", + " 1.6093e+03\n", + " 1.7016e+03\n", + " 1.6733e+03\n", + " 1.6883e+03\n", + " 1.6874e+03\n", + " 1.7999e+03\n", + " 1.5355e+03\n", + " 1.5223e+03\n", + " 1.7132e+03\n", + " 1.7204e+03\n", + " 1.6315e+03\n", + " 1.6846e+03\n", + " 1.5239e+03\n", + " 1.7031e+03\n", + " 1.5787e+03\n", + " 1.7015e+03\n", + " 1.6418e+03\n", + " 1.6290e+03\n", + " 1.7311e+03\n", + " 1.6709e+03\n", + " 1.5711e+03\n", + " 1.6856e+03\n", + " 1.6782e+03\n", + " 1.6651e+03\n", + " 1.7950e+03\n", + " 1.7211e+03\n", + " 1.7342e+03\n", + " 1.6896e+03\n", + "\n", + "\n", + "\n", + " 4 1 1.6782100000e+03 9.4862500000e+01 7.5467710000e-03 1.2914860000e-01\n", + " 2 -1 0 0 501 0 0.00000000e+00 0.00000000e+00 1.87598540e+02 1.87598540e+02 0.00000000e+00 0.0000e+00 1.0000e+00\n", + " -2 -1 0 0 0 501 -0.00000000e+00 -0.00000000e+00 -1.19922238e+01 1.19922238e+01 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + " -11 1 1 2 0 0 -1.95431649e+01 -3.60928948e+01 3.77875936e+01 5.57900940e+01 0.00000000e+00 0.0000e+00 -1.0000e+00\n", + " 11 1 1 2 0 0 1.95431649e+01 3.60928948e+01 1.37818723e+02 1.43800670e+02 0.00000000e+00 0.0000e+00 1.0000e+00\n", + "\n", + " 1.4853e+03\n", + " 1.4434e+03\n", + " 1.4434e+03\n", + " 1.2349e+03\n", + " 1.4853e+03\n", + " 1.6782e+03\n", + " 1.6391e+03\n", + " 1.6391e+03\n", + " 1.4434e+03\n", + " 1.6782e+03\n", + " 1.8570e+03\n", + " 1.8209e+03\n", + " 1.8209e+03\n", + " 1.6391e+03\n", + " 1.8570e+03\n", + " 1.4853e+03\n", + " 1.4434e+03\n", + " 1.4434e+03\n", + " 1.2349e+03\n", + " 1.4853e+03\n", + " 1.6391e+03\n", + " 1.6391e+03\n", + " 1.4434e+03\n", + " 1.6782e+03\n", + " 1.8570e+03\n", + " 1.8209e+03\n", + " 1.8209e+03\n", + " 1.6391e+03\n", + " 1.8570e+03\n", + " 1.4853e+03\n", + " 1.4434e+03\n", + " 1.4434e+03\n", + " 1.2349e+03\n", + " 1.4853e+03\n", + " 1.6782e+03\n", + " 1.6391e+03\n", + " 1.6391e+03\n", + " 1.4434e+03\n", + " 1.6782e+03\n", + " 1.8570e+03\n", + " 1.8209e+03\n", + " 1.8209e+03\n", + " 1.6391e+03\n", + " 1.8570e+03\n", + " 1.6782e+03\n", + " 1.6499e+03\n", + " 1.6066e+03\n", + " 1.6708e+03\n", + " 1.6574e+03\n", + " 1.6404e+03\n", + " 1.6968e+03\n", + " 1.5766e+03\n", + " 1.7301e+03\n", + " 1.6813e+03\n", + " 1.6864e+03\n", + " 1.7276e+03\n", + " 1.6457e+03\n", + " 1.7422e+03\n", + " 1.6643e+03\n", + " 1.7046e+03\n", + " 1.7812e+03\n", + " 1.7269e+03\n", + " 1.6793e+03\n", + " 1.7117e+03\n", + " 1.6415e+03\n", + " 1.7508e+03\n", + " 1.6613e+03\n", + " 1.5098e+03\n", + " 1.6033e+03\n", + " 1.6635e+03\n", + " 1.7519e+03\n", + " 1.7578e+03\n", + " 1.7314e+03\n", + " 1.6045e+03\n", + " 1.5908e+03\n", + " 1.7609e+03\n", + " 1.7125e+03\n", + " 1.7523e+03\n", + " 1.7188e+03\n", + " 1.7395e+03\n", + " 1.6576e+03\n", + " 1.7401e+03\n", + " 1.5894e+03\n", + " 1.6494e+03\n", + " 1.6464e+03\n", + " 1.6246e+03\n", + " 1.7022e+03\n", + " 1.6742e+03\n", + " 1.6311e+03\n", + " 1.6913e+03\n", + " 1.6360e+03\n", + " 1.7300e+03\n", + " 1.6052e+03\n", + " 1.6524e+03\n", + " 1.6642e+03\n", + " 1.6335e+03\n", + " 1.7074e+03\n", + " 1.6903e+03\n", + " 1.7843e+03\n", + " 1.7860e+03\n", + " 1.5502e+03\n", + " 1.5893e+03\n", + " 1.5945e+03\n", + " 1.6666e+03\n", + " 1.6919e+03\n", + " 1.7579e+03\n", + " 1.7130e+03\n", + " 1.7634e+03\n", + " 1.7523e+03\n", + " 1.7510e+03\n", + " 1.7362e+03\n", + " 1.7321e+03\n", + " 1.6999e+03\n", + " 1.7430e+03\n", + " 1.6965e+03\n", + " 1.6589e+03\n", + " 1.6458e+03\n", + " 1.6210e+03\n", + " 1.6908e+03\n", + " 1.6696e+03\n", + " 1.7365e+03\n", + " 1.7383e+03\n", + " 1.7671e+03\n", + " 1.5845e+03\n", + " 1.5555e+03\n", + " 1.6596e+03\n", + " 1.6536e+03\n", + " 1.6854e+03\n", + " 1.6476e+03\n", + " 1.6182e+03\n", + " 1.6414e+03\n", + " 1.5937e+03\n", + " 1.6078e+03\n", + " 1.6649e+03\n", + " 1.6722e+03\n", + " 1.6840e+03\n", + " 1.7125e+03\n", + " 1.6588e+03\n", + " 1.5446e+03\n", + " 1.6702e+03\n", + " 1.6419e+03\n", + " 1.8054e+03\n", + " 1.7315e+03\n", + " 1.7515e+03\n", + " 1.6859e+03\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "lhe_file = pylhe.read_lhe_file(lhe_data)\n", + "print(\n", + " pylhe.write_lhe_string(\n", + " lhe_file.init, [lhe_file.events.__next__() for i in range(5)]\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "b2a72c22-5caa-4505-8c6e-708f9114900f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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a9myZXX2TUxM1IABA7R58+YGf15VVZXcbrffAwAAWJPpQacxHo9HRUVFys7O9tuenZ2trVu3SpIOHjzoCytut1ubN29W3759GzzmggULFB8f73skJye33xsAAACmCuqgc/jwYXm9XiUmJvptT0xM1IEDByRJ3377rYYNG6aBAwfq6quv1t13360BAwY0eMzZs2eroqLC99i/f3+7vgcAAGCekDi93Gaz+T03DMO3LSMjQ8XFxc0+VnR0tKKjowNZHgAACFJBPaKTkJAgu93uG72pdejQoTqjPAAAAGcL6qATFRWljIwM5efn+23Pz8/XkCFD2nRsl8slh8OhrKysNh0HAAAEL9Onro4fP669e/f6npeWlqq4uFjdunVTSkqKcnNzNWnSJGVmZurKK6/U8uXLVVZWpmnTprXp5zqdTjmdTrndbsXHx7f1bdThPfmjqsp2yDCym94ZAAALMgxDJ3d/qqNHsxTb43xTajA96BQWFmrEiBG+57m5uZKkyZMna9WqVZo4caKOHDmivLw8lZeXKz09XevXr1dqaqpZJTfq6NGjeva53+rA8sU6fapSO3f+sy4ffJnZZQEA0OGqD3+j/1v3lBybfq97771X9913n7p169ahNZg+dTV8+HAZhlHnsWrVKt8+06dP1759+1RVVaWioiINGzbMvIIbcPToUT3yyCNKS0vT719YrF+MzZEkVVdXm1wZAADmMLynJZ25LMyiRYuUlpamRx55REePHu2wGkwPOmYJ1BqdnwacRYsWadq0aSotLdXDDz8coEoBAAhtDz/8sEpLSzVt2rQODzw2I8zvgFlRUaGuXbtq//79iouLa9Hrfv/73+vFF1+U1+uV0+nU/fffr/PPPzMHuW3bNmVkZGjDxg/0j1kZ7VU+AABBqdJzWoPuXaGDr81SUVGRBg8eLOnMmdPPPfecXC6X7Ha7pk2bpnvuuafF62XdbreSk5P1ww8/NP5aI8zt37/fkNTqx3nnnWfs2LGjznGLioradFwePHjw4MHDKo+ioqI6n5M7duwwzjvvvDYfe//+/Y1+zpu+GNlsSUlJ2r9/v372s5/VuTBhY346onPFFVfUGdGp9fHHH2vQoEEBrrp91Kbjlo5uoWXo545DX3cM+rljhGI/FxcX65prrvHbdujQIS1cuFBLly6V3W7XAw880KoRHcMw9OOPPyopKanR/cI+6HTq1Em9evVq8evi4uL07LPPatasWXr++ef1wgsvyOVy+QJPrS5duoTML2StuLi4kKs5FNHPHYe+7hj0c8cIpX7u0qWL799nB5zc3Nw2n4XVnHAUtouRA6Vbt2564okntG/fPuXm5urFF19U79699dRTT5ldGgAAQeGpp55S79699dJLLyk3N1f79u3TE0880SGnmhN0AuTswPP+++9LkiIjI02uDAAAc9R+Br7//vsdHnBqhf3UVaDVBp777rtPH330kdLT080uqdmio6P12GOPcdPTdkY/dxz6umPQzx0jFPs5PT1db775poYPH97hFwqsFfanlwMAAOti6goAAFgWQQcAAFgWQQcAAFgWQQcAAFgWQScMfffdd7rlllvUvXt3xcbGatCgQSoqKvK1G4ahefPmKSkpSTExMRo+fLh27txpYsWh6fTp05o7d6569+6tmJgY9enTR3l5eaqpqfHtQ1+33ObNmzV+/HglJSXJZrNp3bp1fu3N6dOqqirdc889SkhI0DnnnKPrrrtO3377bQe+i+DXWD9XV1froYceUv/+/XXOOecoKSlJt956q77//nu/Y9DPTWvq9/mn7rrrLtlsNi1evNhvO/3cOIJOmDl27JiuuuoqRUZG6r//+79VUlKi3/72t+ratatvn2effVaLFi3SkiVLVFBQoB49eujnP/+5fvzxR/MKD0HPPPOMXnzxRS1ZskS7du3Ss88+q4ULF+r3v/+9bx/6uuVOnDihgQMHasmSJfW2N6dPZ86cqbfeekurV6/WX/7yFx0/flzjxo2T1+vtqLcR9Brr58rKSm3btk2PPPKItm3bprVr12r37t267rrr/Pajn5vW1O9zrXXr1umzzz6r93YH9HMTAnBfTISQhx56yLj66qsbbK+pqTF69OhhPP30075tp06dMuLj440XX3yxI0q0jLFjxxp33HGH37YJEyYYt9xyi2EY9HUgSDLeeust3/Pm9OkPP/xgREZGGqtXr/bt89133xmdOnUy3nvvvQ6rPZSc3c/1+fzzzw1JxjfffGMYBv3cGg3187fffmtccMEFxldffWWkpqYazz//vK+Nfm4aIzph5u2331ZmZqZ+9atf6fzzz9dll12mFStW+NpLS0t14MABZWdn+7ZFR0frmmuu0datW80oOWRdffXV2rRpk3bv3i1J+uKLL/SXv/xFY8aMkURft4fm9GlRUZGqq6v99klKSlJ6ejr93gYVFRWy2Wy+0WH6OTBqamo0adIkPfDAA7r00kvrtNPPTePKyGHmf//3f7Vs2TLl5ubq4Ycf1ueff64ZM2YoOjpat956qw4cOCBJSkxM9HtdYmKivvnmGzNKDlkPPfSQKioqdMkll8hut8vr9erJJ5/UzTffLEn0dTtoTp8eOHBAUVFROvfcc+vsU/t6tMypU6c0a9Ys/frXv/bdbJJ+DoxnnnlGERERmjFjRr3t9HPTCDphpqamRpmZmb6bjl522WXauXOnli1bpltvvdW3n81m83udYRh1tqFxa9as0auvvqrXXntNl156qYqLizVz5kwlJSVp8uTJvv3o68BrTZ/S761TXV2tm266STU1NVq6dGmT+9PPzVdUVKQXXnhB27Zta3Gf0c9/x9RVmOnZs6ccDofftn79+qmsrEyS1KNHD0mq803g0KFDdb4lo3EPPPCAZs2apZtuukn9+/fXpEmTdN9992nBggWS6Ov20Jw+7dGjhzwej44dO9bgPmie6upq3XjjjSotLVV+fr5vNEeinwNhy5YtOnTokFJSUhQREaGIiAh98803+s1vfqO0tDRJ9HNzEHTCzFVXXaWvv/7ab9vu3buVmpoqSerdu7d69Oih/Px8X7vH49HHH3+sIUOGdGitoa6yslKdOvn/L2a3232nl9PXgdecPs3IyFBkZKTfPuXl5frqq6/o9xaoDTl79uzRxo0b1b17d792+rntJk2apC+//FLFxcW+R1JSkh544AFt2LBBEv3cLGauhEbH+/zzz42IiAjjySefNPbs2WP8x3/8hxEbG2u8+uqrvn2efvppIz4+3li7dq2xY8cO4+abbzZ69uxpuN1uEysPPZMnTzYuuOAC47/+67+M0tJSY+3atUZCQoLx4IMP+vahr1vuxx9/NLZv325s377dkGQsWrTI2L59u+9sn+b06bRp04xevXoZGzduNLZt22Zce+21xsCBA43Tp0+b9baCTmP9XF1dbVx33XVGr169jOLiYqO8vNz3qKqq8h2Dfm5aU7/PZzv7rCvDoJ+bQtAJQ++8846Rnp5uREdHG5dccomxfPlyv/aamhrjscceM3r06GFER0cbw4YNM3bs2GFStaHL7XYb9957r5GSkmJ07tzZ6NOnjzFnzhy/DwL6uuU+/PBDQ1Kdx+TJkw3DaF6fnjx50rj77ruNbt26GTExMca4ceOMsrIyE95N8Gqsn0tLS+ttk2R8+OGHvmPQz01r6vf5bPUFHfq5cTbDMIyOGz8CAADoOKzRAQAAlkXQAQAAlkXQAQAAlkXQAQAAlkXQAQAAlkXQAQAAlkXQAQAAlkXQAQAAlkXQAWBp8+bNk81mk81m0+LFi02rY9++fb46Bg0aZFodQLgh6ABos9tuu002m03Tpk2r0zZ9+nTZbDbddtttHV/Y/3fppZeqvLxc//qv/+q3ffv27Zo4caJ69uyp6Ohopaamaty4cXrnnXfU3IvGjx8/XqNGjaq37dNPP5XNZtO2bduUnJys8vJy/eY3v2nz+wHQfAQdAAGRnJys1atX6+TJk75tp06d0uuvv66UlBQTK5MiIiLUo0cPxcbG+rb9+c9/1j/+4z/q+PHjeuWVV1RSUqI33nhD119/vebOnauKiopmHXvKlCn64IMP9M0339RpW7lypQYNGqTBgwfLbrerR48e6tKlS8DeF4CmEXQABMTgwYOVkpKitWvX+ratXbtWycnJuuyyy/z2fe+993T11Vera9eu6t69u8aNG6e//e1vvnaPx6O7775bPXv2VOfOnZWWlqYFCxb42ufNm6eUlBRFR0crKSlJM2bMaFGtJ06c0JQpUzR27Fi9++67ys7O1j/8wz/o8ssv19SpU/XFF18oPj7et39JSYnGjBmjLl26KDExUZMmTdLhw4clSePGjdP555+vVatW+f2MyspKrVmzRlOmTGlRbQACi6ADIGBuv/12vfzyy77nK1eu1B133FFnvxMnTig3N1cFBQXatGmTOnXqpBtuuEE1NTWSpN/97nd6++239ac//Ulff/21Xn31VaWlpUmS/vM//1PPP/+8XnrpJe3Zs0fr1q1T//79W1Tn+++/ryNHjujBBx9scB+bzSZJKi8v1zXXXKNBgwapsLBQ7733ng4ePKgbb7xR0pnRoltvvVWrVq3ym+5644035PF49C//8i8tqg1AYEWYXQAA65g0aZJmz57tW3j7ySefaPXq1froo4/89vvlL3/p9/zf//3fdf7556ukpETp6ekqKyvTRRddpKuvvlo2m02pqam+fcvKytSjRw+NGjVKkZGRSklJ0eWXX96iOnfv3i1J6tu3r29bQUGBRowY4Xu+evVqjRs3TsuWLdPgwYP11FNP+dpWrlyp5ORk7d69WxdffLHuuOMOLVy4UB999JHvGCtXrtSECRN07rnntqg2AIHFiA6AgElISNDYsWP1yiuv6OWXX9bYsWOVkJBQZ7+//e1v+vWvf60+ffooLi5OvXv3lnQmxEhnFjcXFxerb9++mjFjht5//33fa3/1q1/p5MmT6tOnj+6880699dZbOn36dJtrHzBggIqLi1VcXKwTJ074jllUVKQPP/xQXbp08T0uueQS3/uQpEsuuURDhgzRypUrfdu3bNlS72gWgI5F0AEQUHfccYdWrVqlV155pcEP+vHjx+vIkSNasWKFPvvsM3322WeSzqzNkc6s9yktLdUTTzyhkydP6sYbb9Q///M/Szqz6Pnrr7+Wy+VSTEyMpk+frmHDhqm6urrZNV500UWSpK+//tq3LTo6WhdeeKEuvPBCv31ramo0fvx4XwiqfezZs0fDhg3z7TdlyhS9+eabcrvdevnll5WamqqRI0c2uyYA7YOgAyCg/umf/kkej0cej0ejR4+u037kyBHt2rVLc+fO1ciRI9WvXz8dO3aszn5xcXGaOHGiVqxYoTVr1ujNN9/U0aNHJUkxMTG67rrr9Lvf/U4fffSRPv30U+3YsaPZNWZnZ6tbt2565plnmtx38ODB2rlzp9LS0nxBqPZxzjnn+Pa78cYbZbfb9dprr+mVV17R7bff7lvnA8A8rNEBEFB2u127du3y/fts5557rrp3767ly5erZ8+eKisr06xZs/z2ef7559WzZ08NGjRInTp10htvvKEePXqoa9euWrVqlbxer6644grFxsbqj3/8o2JiYvzW8TSlS5cu+sMf/qCJEydq7NixmjFjhi666CIdP35c7733nl/tTqdTK1as0M0336wHHnhACQkJ2rt3r1avXq0VK1b49uvSpYsmTpyohx9+WBUVFaZeNwjA3zGiAyDg4uLiFBcXV29bp06dtHr1ahUVFSk9PV333XefFi5c6LdPly5d9MwzzygzM1NZWVnat2+f1q9fr06dOqlr165asWKFrrrqKg0YMECbNm3SO++8o+7du7eoxhtuuEFbt25VbGysbr31VvXt21fXXnutPvjgA99CZElKSkrSJ598Iq/Xq9GjRys9PV333nuv4uPj1amT/5/QKVOm6NixYxo1apTp1w4CcIbNaO7lPwEgBM2bN0/r1q1TcXGx2aVICr56AKtjRAeA5e3YsUNdunTR0qVLTauhrKxMXbp08TtNHUD7Y0QHgKUdPXrUt4j5vPPO87vicUc6ffq09u3bJ+nMGV7Jycmm1AGEG4IOAACwLKauAACAZRF0AACAZRF0AACAZRF0AACAZRF0AACAZRF0AACAZRF0AACAZRF0AACAZf0/4fC3hMHDAZgAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(lhe_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e81691f4-31b1-41a2-a503-1393e3019faa", + "metadata": {}, + "outputs": [], + "source": [ + "# events were consumed so reload here\n", + "lhe_file = pylhe.read_lhe_file(lhe_data)\n", + "\n", + "\n", + "def filtered(events):\n", + " for e in events:\n", + " for p in e.particles:\n", + " # only keep Z bosons\n", + " if p.id == 23:\n", + " yield e\n", + "\n", + "\n", + "pylhe.write_lhe_file(lhe_file.init, filtered(lhe_file.events), \"filtered.lhe.gz\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ec72748b-b1c6-425b-b2e6-e485e3b2e39f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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ADAWQQcAABiLoAMAAIxF0AEAAMYi6AAAAGMRdAAYbd68eXI4HHI4HFq6dGnI6jhy5Ii/jkGDBoWsDsBuCDoA2uzBBx+Uw+HQtGnT6rRNnz5dDodDDz74YMcX9v/1799fpaWl+qd/+qeA9Xv27NH48ePVs2dPxcTEKD09XWPGjNFbb72l5t40fuzYsRoxYkS9be+//74cDod2796t1NRUlZaW6sc//nGbXw+A5iPoAAiK1NRUrV27VpWVlf5158+f17//+78rLS0thJVJkZGRSk5OVlxcnH/dH/7wB/3DP/yDzp49q1dffVUej0dvvPGG7rrrLs2dO1dlZWXN2veUKVP09ttv67PPPqvTtnr1ag0aNEg33HCDnE6nkpOTFR8fH7TXBaBpBB0AQXHDDTcoLS1N69ev969bv369UlNTdf311wdsu2XLFt18883q0qWLunfvrjFjxuivf/2rv93r9erRRx9Vz549dckllygjI0MLFizwt8+bN09paWmKiYlRSkqKZsyY0aJaz507pylTpmj06NHatGmTcnJy9O1vf1s33nijpk6dqo8//liJiYn+7T0ej0aNGqX4+HglJSVpwoQJ+vLLLyVJY8aM0eWXX641a9YEPEdFRYXWrVunKVOmtKg2AMFF0AEQNA899JBeeeUV//Lq1as1efLkOtudO3dOs2bNUn5+vnbs2KGIiAh973vfU21trSTp17/+td588039x3/8hz799FO99tprysjIkCT953/+p1588UW9/PLLOnTokDZu3Khrr722RXX+8Y9/1KlTp/TTn/60wW0cDockqbS0VLfddpsGDRqkgoICbdmyRV988YXuvfdeSV+PFk2cOFFr1qwJONz1xhtvyOv16h//8R9bVBuA4IoMdQEAzDFhwgTNmTPHf+Ltn//8Z61du1bvvvtuwHb33HNPwPJvf/tbXX755fJ4PBowYIBKSkp01VVX6eabb5bD4VB6erp/25KSEiUnJ2vEiBGKiopSWlqabrzxxhbVefDgQUlS3759/evy8/M1bNgw//LatWs1ZswYrVixQjfccIOef/55f9vq1auVmpqqgwcP6uqrr9bkyZO1ePFivfvuu/59rF69Wnfffbe6du3aotoABBcjOgCCpkePHho9erReffVVvfLKKxo9erR69OhRZ7u//vWv+uEPf6g+ffooISFBvXv3lvR1iJG+Prm5qKhIffv21YwZM/THP/7R/9gf/OAHqqysVJ8+ffTwww9rw4YNqqmpaXPt1113nYqKilRUVKRz587591lYWKh33nlH8fHx/p9rrrnG/zok6ZprrtGQIUO0evVq//r33nuv3tEsAB2LoAMgqCZPnqw1a9bo1VdfbfCLfuzYsTp16pRWrVqlDz/8UB9++KGkr8/Nkb4+36e4uFj/8i//osrKSt177736/ve/L+nrk54//fRTud1uxcbGavr06br11ltVXV3d7BqvuuoqSdKnn37qXxcTE6Mrr7xSV155ZcC2tbW1Gjt2rD8EXfg5dOiQbr31Vv92U6ZM0e9//3uVl5frlVdeUXp6uoYPH97smgC0D4IOgKD67ne/K6/XK6/Xq5EjR9ZpP3XqlA4cOKC5c+dq+PDh6tevn06fPl1nu4SEBI0fP16rVq3SunXr9Pvf/15fffWVJCk2Nlbjxo3Tr3/9a7377rt6//33tXfv3mbXmJOTo27dumnRokVNbnvDDTdo//79ysjI8AehCz+XXnqpf7t7771XTqdTr7/+ul599VU99NBD/vN8AIQO5+gACCqn06kDBw74f79Y165d1b17d61cuVI9e/ZUSUmJZs+eHbDNiy++qJ49e2rQoEGKiIjQG2+8oeTkZHXp0kVr1qyRz+fTd77zHcXFxel3v/udYmNjA87jaUp8fLz+9V//VePHj9fo0aM1Y8YMXXXVVTp79qy2bNkSULvL5dKqVat0//3364knnlCPHj10+PBhrV27VqtWrfJvFx8fr/Hjx+upp55SWVlZSO8bBODvGNEBEHQJCQlKSEioty0iIkJr165VYWGhBgwYoMcff1yLFy8O2CY+Pl6LFi1SVlaWsrOzdeTIEW3evFkRERHq0qWLVq1apaFDh+q6667Tjh079NZbb6l79+4tqvF73/uedu3apbi4OE2cOFF9+/bVHXfcobffftt/IrIkpaSk6M9//rN8Pp9GjhypAQMG6LHHHlNiYqIiIgI/QqdMmaLTp09rxIgRIb93EICvOazm3v4TADqhefPmaePGjSoqKgp1KZLCrx7AdIzoADDe3r17FR8fr+XLl4eshpKSEsXHxwdcpg6g/TGiA8BoX331lf8k5m9961sBdzzuSDU1NTpy5Iikr6/wSk1NDUkdgN0QdAAAgLE4dAUAAIxF0AEAAMYi6AAAAGMRdAAAgLEIOgAAwFgEHQAAYCyCDgAAMBZBBwAAGOv/AdBFlDqFjIIPAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# continue with modified lhe, rivet, pythia ,...\n", + "plot(\"filtered.lhe.gz\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "67370f77-f471-4901-8daf-9f8979fdb4bf", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/write_monte_carlo_example.ipynb b/examples/write_monte_carlo_example.ipynb new file mode 100644 index 0000000..30a74bf --- /dev/null +++ b/examples/write_monte_carlo_example.ipynb @@ -0,0 +1,736 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f40b7065-5763-4abc-91ff-40437cf86517", + "metadata": {}, + "source": [ + "# Simple $e^+e^- \\to \\mu^+ \\mu^- $ Monte Carlo Event Genrator example" + ] + }, + { + "cell_type": "markdown", + "id": "215df39b-69fc-4f74-b882-3c96f5526783", + "metadata": {}, + "source": [ + "Differential cross section:\n", + "$$\n", + "\\frac{d \\sigma}{ d \\Omega} = \\frac{\\alpha^2}{4 s } ( 1+ \\cos^2(\\theta))\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f7124c5f-9f86-4a0a-ac08-6e30cc55e01d", + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import random\n", + "\n", + "import hist\n", + "import numpy as np\n", + "\n", + "import pylhe" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f2553a00-1d72-4d4b-ba6d-c552ca0a7b59", + "metadata": {}, + "outputs": [], + "source": [ + "alpha = 1 / 127.4 # alpha QED\n", + "aqcd = 0.1075 # alpha QCD\n", + "EB = 209\n", + "s = (2 * EB) ** 2\n", + "theta_min = 0\n", + "theta_max = math.pi\n", + "phi_min = 0\n", + "phi_max = 2 * math.pi" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7242869e-7fbb-4eee-9d49-8a9d63724e35", + "metadata": {}, + "outputs": [], + "source": [ + "# https://equation-database.readthedocs.io/en/latest/_autosummary/equation_database.isbn_9780471887416.html#equation_database.isbn_9780471887416.equation_6_32\n", + "\n", + "\n", + "def dsigma(s, theta, _phi):\n", + " return (math.cos(theta) ** 2 + 1) / 4 * alpha**2 / s" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "147dfe17-a5d9-4b68-a07f-6f8d8aa390a1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Estimated integral: 1.4735464978545061e-09\n", + "Real integral: 1.477056777521761e-09\n" + ] + } + ], + "source": [ + "# Monte Carlo integration\n", + "\n", + "\n", + "def monte_carlo_integration(\n", + " func, s, theta_min, theta_max, phi_min, phi_max, num_samples\n", + "):\n", + " theta_samples = [random.uniform(theta_min, theta_max) for _ in range(num_samples)]\n", + " phi_samples = [random.uniform(phi_min, phi_max) for _ in range(num_samples)]\n", + " func_values = [\n", + " (phi_max - phi_min)\n", + " * (theta_max - theta_min)\n", + " * func(s, theta, phi)\n", + " * math.sin(theta)\n", + " for theta, phi in zip(theta_samples, phi_samples)\n", + " ]\n", + " maximum = np.max(func_values)\n", + " integral = np.mean(func_values)\n", + " return integral, maximum\n", + "\n", + "\n", + "# Parameters\n", + "\n", + "num_samples = 100000\n", + "\n", + "# Perform integration\n", + "result, maximum = monte_carlo_integration(\n", + " dsigma, s, theta_min, theta_max, phi_min, phi_max, num_samples\n", + ")\n", + "print(f\"Estimated integral: {result}\")\n", + "\n", + "# https://equation-database.readthedocs.io/en/latest/_autosummary/equation_database.isbn_9780471887416.html#equation_database.isbn_9780471887416.equation_6_33\n", + "sigma = 4 * math.pi / 3 * alpha**2 / s\n", + "print(f\"Real integral: {sigma}\")" + ] + }, + { + "cell_type": "markdown", + "id": "692b7fad-a519-49b8-9dbc-d7d8c27eaba9", + "metadata": {}, + "source": [ + "## Weighted Events\n", + "\n", + "The information about the distribution is carried by the weights of the events." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "5c26e5e3-8e1e-470f-96a6-376a6e294bf9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + " 11 -11 2.0900000e+02 2.0900000e+02 0 0 0 0 3 1\n", + " 1.4757931e-09 0.0000000e+00 1.0000000e+00 1\n", + "\n", + "\n", + " 5 0 1.7661008451e-14 1.7472400000e+05 7.8492935636e-03 1.0750000000e-01\n", + " 11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 -2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 22 2 1 2 0 0 0.00000000e+00 0.00000000e+00 0.00000000e+00 4.18000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 13 1 3 3 0 0 -1.81383801e+02 -9.70727770e+01 -3.68482397e+01 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -13 1 3 3 0 0 1.81383801e+02 9.70727770e+01 3.68482397e+01 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + "\n", + "\n", + " 5 0 9.7193310495e-15 1.7472400000e+05 7.8492935636e-03 1.0750000000e-01\n", + " 11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 -2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 22 2 1 2 0 0 0.00000000e+00 0.00000000e+00 0.00000000e+00 4.18000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 13 1 3 3 0 0 6.83511907e+00 6.05767423e+01 1.99911829e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -13 1 3 3 0 0 -6.83511907e+00 -6.05767423e+01 -1.99911829e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + "\n", + "\n", + " 5 0 1.8625711578e-14 1.7472400000e+05 7.8492935636e-03 1.0750000000e-01\n", + " 11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 -2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 22 2 1 2 0 0 0.00000000e+00 0.00000000e+00 0.00000000e+00 4.18000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 13 1 3 3 0 0 1.16076229e+02 -1.48397753e+02 -9.04732882e+01 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -13 1 3 3 0 0 -1.16076229e+02 1.48397753e+02 9.04732882e+01 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + "\n", + "\n" + ] + } + ], + "source": [ + "num_samples = 100000\n", + "integ = 0.0\n", + "lheevents = []\n", + "for _i in range(num_samples):\n", + " theta = random.uniform(theta_min, theta_max)\n", + " phi = random.uniform(phi_min, phi_max)\n", + " sig = (\n", + " (phi_max - phi_min)\n", + " * (theta_max - theta_min)\n", + " * dsigma(s, theta, phi)\n", + " * math.sin(theta)\n", + " / num_samples\n", + " )\n", + " integ += sig\n", + " # Fill the LHE event\n", + " e = pylhe.LHEEvent(\n", + " eventinfo=pylhe.LHEEventInfo(\n", + " nparticles=5,\n", + " pid=0,\n", + " weight=sig, # The individual weight per event\n", + " scale=s,\n", + " aqed=alpha,\n", + " aqcd=aqcd,\n", + " ),\n", + " particles=[\n", + " pylhe.LHEParticle(\n", + " id=11,\n", + " status=-1,\n", + " mother1=0,\n", + " mother2=0,\n", + " color1=0,\n", + " color2=0,\n", + " px=0.0,\n", + " py=0.0,\n", + " pz=EB,\n", + " e=EB,\n", + " m=0.0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " pylhe.LHEParticle(\n", + " id=-11,\n", + " status=-1,\n", + " mother1=0,\n", + " mother2=0,\n", + " color1=0,\n", + " color2=0,\n", + " px=0.0,\n", + " py=0.0,\n", + " pz=-EB,\n", + " e=EB,\n", + " m=0.0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " pylhe.LHEParticle(\n", + " id=22,\n", + " status=2,\n", + " mother1=1,\n", + " mother2=2,\n", + " color1=0,\n", + " color2=0,\n", + " px=0.0,\n", + " py=0.0,\n", + " pz=EB - EB,\n", + " e=EB + EB,\n", + " m=0.0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " pylhe.LHEParticle(\n", + " id=13,\n", + " status=1,\n", + " mother1=3,\n", + " mother2=3,\n", + " color1=0,\n", + " color2=0,\n", + " px=EB * math.sin(theta) * math.cos(phi),\n", + " py=EB * math.sin(theta) * math.sin(phi),\n", + " pz=EB * math.cos(theta),\n", + " e=EB,\n", + " m=0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " pylhe.LHEParticle(\n", + " id=-13,\n", + " status=1,\n", + " mother1=3,\n", + " mother2=3,\n", + " color1=0,\n", + " color2=0,\n", + " px=-EB * math.sin(theta) * math.cos(phi),\n", + " py=-EB * math.sin(theta) * math.sin(phi),\n", + " pz=-EB * math.cos(theta),\n", + " e=EB,\n", + " m=0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " ],\n", + " )\n", + " lheevents.append(e)\n", + "# Fill the LHE init\n", + "lheinit = pylhe.LHEInit(\n", + " initInfo=pylhe.LHEInitInfo(\n", + " beamA=11,\n", + " beamB=-11,\n", + " energyA=EB,\n", + " energyB=EB,\n", + " PDFgroupA=0,\n", + " PDFgroupB=0,\n", + " PDFsetA=0,\n", + " PDFsetB=0,\n", + " weightingStrategy=3,\n", + " numProcesses=1,\n", + " ),\n", + " procInfo=[\n", + " pylhe.LHEProcInfo(\n", + " xSection=integ,\n", + " error=0,\n", + " unitWeight=1,\n", + " procId=1,\n", + " )\n", + " ],\n", + " weightgroup={},\n", + " LHEVersion=3,\n", + ")\n", + "print(pylhe.write_lhe_string(lheinit, lheevents[0:3], rwgt=False, weights=False))\n", + "pylhe.write_lhe_file(\n", + " lheinit, lheevents, filepath=\"weighted.lhe.gz\", rwgt=False, weights=False\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2fca49b0-2d93-476a-9b6b-835b72a24bb0", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c94b9451-e7cc-4f40-9c1e-63dd8e180595", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "\n", + "3.14\n", + "\n", + "\n", + "Axis 0\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "Regular(20, 0, 3.14159, label='Axis 0')
\n", + "
\n", + "Weight() Σ=WeightedSum(value=1.47579e-09, variance=2.45707e-23)\n", + "\n", + "
\n", + "
\n", + "" + ], + "text/plain": [ + "Hist(Regular(20, 0, 3.14159, label='Axis 0'), storage=Weight()) # Sum: WeightedSum(value=1.47579e-09, variance=2.45707e-23)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr = pylhe.to_awkward(pylhe.read_lhe_with_attributes(\"weighted.lhe.gz\"))\n", + "hist1 = hist.Hist.new.Reg(20, 0, math.pi).Weight()\n", + "hist1.fill(arr.particles.vector[:, -1].theta, weight=arr.eventinfo.weight)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b43498cd-1fe7-49c1-a24c-5b66cf4e257f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[StairsArtists(stairs=, errorbar=, legend_artist=)]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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rzA7ldva2tTT06PY2Ng+5bGxsWppafG6zsyZM7V9+3bl5ubq73//u7q7u3XbbbfpF7/4xYD7KS0t1Zo1a+w0DQAQpNLXvmGj7pu2tn2wJFtREbZ+CuEHPk1gdTgcfV5bltWvrNfBgwe1cuVKPfLII6qvr9dvf/tbHT58WHl5eQNuv7i4WMeOHfMsTU1NvjQTNliWZeuviV7Dq99j8JMBAMY6W3Fw0qRJcjqd/UZBWltb+42W9CotLdUNN9ygH/zgB5KkK6+8Uuecc44yMzO1du1axcfH91vH5XLJ5XLZaRrO0henejT9kddtr2f3rxAAGI7x4U4dLMkeVt2Orm7Pd1Hdw7OHHOno6OqxNdoC/7MVRiIiIpSWlia3263bb7/dU+52u7VgwQKv63R0dCgsrO9unE6nJHGuDgDglcPh8On0SVREGKddApDt/2OFhYVatGiR0tPTlZGRoU2bNqmxsdFz2qW4uFiffvqptm3bJkmaP3++vv/976uiokLZ2dlqbm5WQUGBrrvuOiUkJIzsp8GIqHt4jqIinAO+b/evkC8bHz7wdgEAocl2GMnNzdXRo0dVUlKi5uZmpaamqrq6WklJSZKk5ubmPvccufvuu3X8+HE99dRT+td//Vedd955uvnmm1VWVjZynwIjKirCOeyAwV8hAEyLigjTkccGvkITY59PvyL5+fnKz8/3+t7WrVv7la1YsUIrVqzwZVcAACDI8SctbOOvEADASOJBeQAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAAygo6tbyUWvKbnoNXV0dZtu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SOnp6crIyNCmTZvU2NiovLw8SWdGNT799FNt27ZN48aNU2pqap/1L7roIkVGRvYrD1ZREc5BOycdEgAQ6myHkdzcXB09elQlJSVqbm5WamqqqqurlZSUJElqbm4e8p4jAAAAvRxWAFwj1N7erpiYGB07dkzR0dGmmzOkjq5uzwTWYJz1DAAYXYH6uzLc32+eTQMAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKN8CiMbNmxQSkqKIiMjlZaWpr179w5Y9+WXX9bcuXN14YUXKjo6WhkZGXr99dd9bjAAAAgutsNIVVWVCgoKtHr1ajU0NCgzM1M5OTlqbGz0Wn/Pnj2aO3euqqurVV9fr29961uaP3++GhoazrrxAAAg8NkOI+vWrdPSpUu1bNkyTZs2TeXl5UpMTFRFRYXX+uXl5frhD3+oa6+9VpMnT9ajjz6qyZMn69e//vVZNx4AAAQ+W2Gkq6tL9fX1ysrK6lOelZWl2traYW3j9OnTOn78uC644AI7uwYAAEEqzE7ltrY29fT0KDY2tk95bGysWlpahrWNJ554QidPntTChQsHrNPZ2anOzk7P6/b2djvNBAAAAcSnCawOh6PPa8uy+pV589xzz+nHP/6xqqqqdNFFFw1Yr7S0VDExMZ4lMTHRl2YCAIAAYCuMTJo0SU6ns98oSGtra7/Rkq+qqqrS0qVL9cILL2jOnDmD1i0uLtaxY8c8S1NTk51mAgCAAGIrjERERCgtLU1ut7tPudvt1syZ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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "hist1.plot()" + ] + }, + { + "cell_type": "markdown", + "id": "77d19d7a-07c7-4da3-81c6-31e716f3b15d", + "metadata": {}, + "source": [ + "## Unweighted Events\n", + "\n", + "The information about the distribution is carried by the distribution/number of the events." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a43da3e7-5263-4557-8024-cb08ae00f01b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + " 11 -11 2.0900000e+02 2.0900000e+02 0 0 0 0 3 1\n", + " 1.4735465e-09 0.0000000e+00 1.0000000e+00 1\n", + "\n", + "\n", + " 5 0 1.4735464979e-14 1.7472400000e+05 7.8492935636e-03 1.0750000000e-01\n", + " 11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 -2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 22 2 1 2 0 0 0.00000000e+00 0.00000000e+00 0.00000000e+00 4.18000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 13 1 3 3 0 0 -9.71832976e+01 -1.05925675e+02 -1.51710771e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -13 1 3 3 0 0 9.71832976e+01 1.05925675e+02 1.51710771e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + "\n", + "\n", + " 5 0 1.4735464979e-14 1.7472400000e+05 7.8492935636e-03 1.0750000000e-01\n", + " 11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 -2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 22 2 1 2 0 0 0.00000000e+00 0.00000000e+00 0.00000000e+00 4.18000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 13 1 3 3 0 0 -1.95033954e+02 -5.97356676e+01 -4.55456570e+01 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -13 1 3 3 0 0 1.95033954e+02 5.97356676e+01 4.55456570e+01 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + "\n", + "\n", + " 5 0 1.4735464979e-14 1.7472400000e+05 7.8492935636e-03 1.0750000000e-01\n", + " 11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -11 -1 0 0 0 0 0.00000000e+00 0.00000000e+00 -2.09000000e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 22 2 1 2 0 0 0.00000000e+00 0.00000000e+00 0.00000000e+00 4.18000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " 13 1 3 3 0 0 1.16000482e+02 -9.74154245e+01 1.43996956e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + " -13 1 3 3 0 0 -1.16000482e+02 9.74154245e+01 -1.43996956e+02 2.09000000e+02 0.00000000e+00 0.0000e+00 9.0000e+00\n", + "\n", + "\n" + ] + } + ], + "source": [ + "num_samples = 100000\n", + "integ = 0.0\n", + "lheevents = []\n", + "while len(lheevents) < num_samples:\n", + " theta = random.uniform(theta_min, theta_max)\n", + " phi = random.uniform(phi_min, phi_max)\n", + " sig = (\n", + " (phi_max - phi_min)\n", + " * (theta_max - theta_min)\n", + " * dsigma(s, theta, phi)\n", + " * math.sin(theta)\n", + " )\n", + " if sig / maximum > random.uniform(\n", + " 0, 1\n", + " ): # Pick events randomly according to their contribution\n", + " e = pylhe.LHEEvent(\n", + " eventinfo=pylhe.LHEEventInfo(\n", + " nparticles=5,\n", + " pid=0,\n", + " weight=result / num_samples, # The same weight per event\n", + " scale=s,\n", + " aqed=alpha,\n", + " aqcd=aqcd,\n", + " ),\n", + " particles=[\n", + " pylhe.LHEParticle(\n", + " id=11,\n", + " status=-1,\n", + " mother1=0,\n", + " mother2=0,\n", + " color1=0,\n", + " color2=0,\n", + " px=0.0,\n", + " py=0.0,\n", + " pz=EB,\n", + " e=EB,\n", + " m=0.0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " pylhe.LHEParticle(\n", + " id=-11,\n", + " status=-1,\n", + " mother1=0,\n", + " mother2=0,\n", + " color1=0,\n", + " color2=0,\n", + " px=0.0,\n", + " py=0.0,\n", + " pz=-EB,\n", + " e=EB,\n", + " m=0.0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " pylhe.LHEParticle(\n", + " id=22,\n", + " status=2,\n", + " mother1=1,\n", + " mother2=2,\n", + " color1=0,\n", + " color2=0,\n", + " px=0.0,\n", + " py=0.0,\n", + " pz=EB - EB,\n", + " e=EB + EB,\n", + " m=0.0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " pylhe.LHEParticle(\n", + " id=13,\n", + " status=1,\n", + " mother1=3,\n", + " mother2=3,\n", + " color1=0,\n", + " color2=0,\n", + " px=EB * math.sin(theta) * math.cos(phi),\n", + " py=EB * math.sin(theta) * math.sin(phi),\n", + " pz=EB * math.cos(theta),\n", + " e=EB,\n", + " m=0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " pylhe.LHEParticle(\n", + " id=-13,\n", + " status=1,\n", + " mother1=3,\n", + " mother2=3,\n", + " color1=0,\n", + " color2=0,\n", + " px=-EB * math.sin(theta) * math.cos(phi),\n", + " py=-EB * math.sin(theta) * math.sin(phi),\n", + " pz=-EB * math.cos(theta),\n", + " e=EB,\n", + " m=0,\n", + " lifetime=0,\n", + " spin=9.0,\n", + " ),\n", + " ],\n", + " )\n", + " lheevents.append(e)\n", + "lheinit = pylhe.LHEInit(\n", + " initInfo=pylhe.LHEInitInfo(\n", + " beamA=11,\n", + " beamB=-11,\n", + " energyA=EB,\n", + " energyB=EB,\n", + " PDFgroupA=0,\n", + " PDFgroupB=0,\n", + " PDFsetA=0,\n", + " PDFsetB=0,\n", + " weightingStrategy=3,\n", + " numProcesses=1,\n", + " ),\n", + " procInfo=[\n", + " pylhe.LHEProcInfo(\n", + " xSection=result,\n", + " error=0,\n", + " unitWeight=1,\n", + " procId=1,\n", + " )\n", + " ],\n", + " weightgroup={},\n", + " LHEVersion=3,\n", + ")\n", + "print(pylhe.write_lhe_string(lheinit, lheevents[0:3], rwgt=False, weights=False))\n", + "pylhe.write_lhe_file(\n", + " lheinit, lheevents, filepath=\"unweighted.lhe\", rwgt=False, weights=False\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e840fba3-e797-497c-9ad8-e48451928614", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "\n", + "3.14\n", + "\n", + "\n", + "Axis 0\n", + "\n", + "\n", + "\n", + "
\n", + "
\n", + "Regular(20, 0, 3.14159, label='Axis 0')
\n", + "
\n", + "Weight() Σ=WeightedSum(value=1.47355e-09, variance=2.17134e-23)\n", + "\n", + "
\n", + "
\n", + "" + ], + "text/plain": [ + "Hist(Regular(20, 0, 3.14159, label='Axis 0'), storage=Weight()) # Sum: WeightedSum(value=1.47355e-09, variance=2.17134e-23)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr = pylhe.to_awkward(pylhe.read_lhe_with_attributes(\"unweighted.lhe\"))\n", + "hist2 = hist.Hist.new.Reg(20, 0, math.pi).Weight()\n", + "hist2.fill(arr.particles.vector[:, -1].theta, weight=arr.eventinfo.weight)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c9ab56a1-50bc-405a-b7e5-c7d6b61881de", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[StairsArtists(stairs=, errorbar=, legend_artist=)]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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N2I4nZ2diouLU0dHh2JjY003Z1gXJt5AIUkDwPgyFvt+Kbj2/yP9/ObeNAAAwKjgiFZBrHb9XMW4nIO+3tXTq8yN7/z/unNGnHajIwdfJwBg7EVHOtVYnDuiunb3/V09fcrc+PZFt3G8IowEWIzLOeKAEeOKCJqpNwCAN4fDYWt/f+yphQFuUfDgk88wBiQAINxxzggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACj/AojmzdvVlpamqKiopSRkaGDBw8OWve1117TvHnz9JWvfEWxsbHKysrSW2+95XeDAQBAaLEdRioqKlRQUKB169apvr5e2dnZmj9/vpqamnzWP3DggObNm6fKykrV1dXpm9/8phYtWqT6+vqLbjwAAAh+tsPIpk2btHz5cq1YsULTp09XWVmZkpOTtWXLFp/1y8rK9L3vfU833XSTpkyZoieffFJTpkzRL37xi4tuPAAACH62wkhPT4/q6uqUk5PjVZ6Tk6OampoRrePcuXM6efKkLr/88kHrdHd3q7Oz0+sBAABCk60w0t7err6+PsXHx3uVx8fHq7W1dUTreOaZZ3T69GktXrx40DolJSWKi4vzPJKTk+00EwAABBG/TmB1OBxezy3LGlDmy0svvaQf/vCHqqio0BVXXDFovaKiInV0dHgezc3N/jQTAAAEgQg7lSdPniyn0zlgFqStrW3AbMmXVVRUaPny5XrllVc0d+7cIeu63W653W47TQMAAEHK1syIy+VSRkaGqqqqvMqrqqo0a9asQZd76aWXdP/9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dBixLMt6/vnnrZSUFMvlcllf//rXvb4+tmzZMuuOO+7wqr9//35r5syZlsvlslJTU60tW7aMcYvHlp3+KS0tta699lorKirKuuyyy6zZs2dbb775poFWB17/Vwm//Fi2bJllWYwdu/0TTmPHV79Isnbs2OGpE87jx5/+Cafx8+CDD3r2yV/5ylesOXPmeIKIZYXu2OGuvQAAwKiQPWcEAAAEB8IIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwCMcTgcev311003A4BhhBEAfqupqZHT6dRdd93l1/ItLS2aP3++39vfs2ePZsyYIbfbrRkzZmjv3r1+rwuAOYQRAH7bvn27Hn30UR06dEhNTU22l09ISJDb7fZr24cPH1ZeXp6WLFmi9957T0uWLNHixYv1n//5n36tD4A5hBEAfjl9+rR+/vOf6+GHH9Zf//Vfa+fOnV6vFxcXKykpSSdOnPCU/c3f/I1uv/12nTt3TpL3YZqenh6tWrVKiYmJioqKUmpqqkpKSgbdfllZmebNm6eioiJNmzZNRUVFmjNnjsrKykb7rQIIMMIIAL9UVFRo6tSpmjp1qu677z7t2LFDF953c926dUpNTdWKFSskSVu3btWBAwf0r//6r5owYeCu59lnn9Ubb7yhn//85/rwww/1s5/9TKmpqYNu//Dhw8rJyfEqy83NVU1Nzei8QQBjJsJ0AwAEp/Lyct13332SpLvuukunTp3SO++8o7lz50qSnE6nfvazn+nGG2/U2rVr9dOf/lTbtm1TSkqKz/U1NTVpypQpmj17thwOx6D1+rW2tio+Pt6rLD4+Xq2traPw7gCMJWZGANj24Ycf6r/+67/093//95KkiIgI5eXlafv27V71rrnmGj399NMqLS3VokWL9J3vfGfQdd5///1qaGjQ1KlTtXr1au3bt2/YdjgcDq/nlmUNKAMw/jEzAsC28vJy9fb26sorr/SUWZalyMhIffHFF7rssss85QcOHJDT6dSxY8fU29uriAjfu52vf/3rOnr0qH75y1/q7bff1uLFizV37ly9+uqrPusnJCQMmAVpa2sbMFsCYPxjZgSALb29vdq1a5eeeeYZNTQ0eB7vvfeeUlJStHv3bk/diooKvfbaa9q/f7+am5v1z//8z0OuOzY2Vnl5efqXf/kXVVRUaM+ePfr888991s3KylJVVZVX2b59+zRr1qyLf5MAxhQzIwBs+Y//+A998cUXWr58ueLi4rxe+9u//VuVl5dr1apV+uyzz/Twww+rtLRUs2fP1s6dO7Vw4ULNnz9ft95664D1/vjHP1ZiYqJuvPFGTZgwQa+88ooSEhJ06aWX+mzHP/7jP+r2229XaWmp7r77bv37v/+73n77bR06dCgQbxtAADEzAsCW8vJyzZ07d0AQkaR77rlHDQ0Nqqur0/3336+bb75Zq1atkiTNmzdPq1at0n333adTp04NWHbixIkqLS1VZmambrrpJh07dkyVlZU+v3kjSbNmzdLLL7+sHTt26Prrr9fOnTtVUVGhW265ZXTfMICAc1gXfhcPAABgjDEzAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMOr/AXPZX+wf5rbVAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "hist2.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c9be8352-6ab8-45c2-a4ac-fa458ee41652", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(([StairsArtists(stairs=, errorbar=, legend_artist=)],\n", + " [StairsArtists(stairs=, errorbar=, legend_artist=)]),\n", + " RatioErrorbarArtists(line=, errorbar=))" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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48aNc01PT0/XFVfUfeX4eeedp/Xr16uwsFBt2lQ9hOirr75SSEiIunbtWucyERERioiw7k39Dntog2GFc7QAgNYkoKelZs6cqWeeeUYrV67U/v37NWPGDGVmZmrKlCmSqnpdJk6c6Cp/7bXXqkOHDrrxxhu1b98+bd++XX/605900003taoLigEAwIn51HPz0UcfKTw8XP3795ckvfbaa1q1apX69u2refPmyW63e7Se8ePH68iRI1qwYIGysrLUr18/bdq0Sd26dZMkZWVlKTMz01W+TZs2Sk9P15133qnBgwerQ4cOuuaaa7Rw4UJfNgMAAFiQzRhjvF3o7LPP1uzZs3XVVVfpu+++0xlnnKFx48bpww8/1GWXXaalS5c2QVP9Iz8/X7GxscrLy1NMTP3XqgSr4sI8OR6seshh8axMOdrENrAEAKC1sspvhje/3z6dlvrqq680cOBASdL69et1wQUX6IUXXtDq1au1YcMGX1YJAADgFz6FG2OMKisrJUlvv/22xowZI0lKSEhQbm6u/1oHAADgJZ/CzeDBg7Vw4UI9++yz2rZtmy67rOpOnAMHDpzwNm4AAIDm4FO4efjhh/XRRx9p6tSpmjt3rrp37y5JevnllzVs2DC/NhAAAMAbPt0tNWDAAH366adu0//xj38oLIxBGQEAQOD41HNz2mmn6ciRI27TS0pK1LNnz0Y3CgAAwFc+hZuDBw+qosJ91OjS0lL98MMPjW4UAACAr7w6h/T666+73r/11lu1xniqqKjQO++8o6SkJP+1DgAAwEtehZsrr7xSUtVI3pMmTao1Lzw8XImJiXrooYf81jgAAABveRVuqp9tk5SUpA8//FAdO3ZskkYBAAD4yqdbmw4cOODvdgAAAPiFz/dtv/POO3rnnXeUk5Pj6tGptnLlykY3DAAAwBc+hZv58+drwYIFGjx4sDp37iybzebvdgEAAPjEp3DzxBNPaPXq1ZowYYK/2wMAANAoPj3nxul0MswCAAAISj6Fm5tvvlkvvPCCv9sCAADQaD6dliopKdFTTz2lt99+W2eeeabCw8NrzV+yZIlfGgcAAOAtn8LNJ598ooEDB0qSPvvss1rzuLgYAAAEkk/hZsuWLf5uBwAAgF/4dM0NAABAsPKp52b48OH1nn569913fW4QAABAY/gUbqqvt6lWVlamvXv36rPPPnMbUBMAAKA5+RRuHn744Tqnz5s3T4WFhY1qEAAAQGP49Zqb66+/nnGlAABAQPk13OzatUuRkZH+XCUAAIBXfDot9fvf/77WZ2OMsrKytHv3bv2///f//NIwAAAAX/gUbmJjY2t9DgkJUa9evbRgwQKlpqb6pWEAAAC+8CncrFq1yt/tAAAA8Aufwk21jIwM7d+/XzabTX379tWgQYP81S4AAACf+BRucnJy9Mc//lFbt25Vu3btZIxRXl6ehg8frrVr1+rkk0/2dzsBAAA84tPdUnfeeafy8/P1+eef6+jRo/r555/12WefKT8/X9OmTfN3GwEAADzmU8/Nm2++qbffflt9+vRxTevbt68ef/xxLigGAAAB5VPPTWVlpcLDw92mh4eHq7KystGNAgAA8JVP4ebiiy/WXXfdpR9//NE17fDhw5oxY4YuueQSvzUOAADAWz6Fm2XLlqmgoECJiYk6/fTT1b17dyUlJamgoECPPfaYv9sIAADgMZ+uuUlISNBHH32k9PR0ffHFFzLGqG/fvhoxYoS/2wcAAOAVr3pu3n33XfXt21f5+fmSpJEjR+rOO+/UtGnTdPbZZ+uMM87Qjh07mqShAAAAnvAq3CxdulS33HKLYmJi3ObFxsbq1ltv1ZIlS/zWOAAAAG95FW4+/vhjXXrppSecn5qaqoyMjEY3CgAAwFdehZuffvqpzlvAq4WFhek///lPoxsFAADgK6/CTZcuXfTpp5+ecP4nn3yizp07N7pRAAAAvvIq3IwZM0b33nuvSkpK3OYdP35c9913n373u9/5rXEAAADe8upW8HvuuUcbN25Uz549NXXqVPXq1Us2m0379+/X448/roqKCs2dO7ep2goAANAgr8JNXFycdu7cqdtuu01z5syRMUaSZLPZNGrUKC1fvlxxcXFN0lAAAABPeP2E4m7dumnTpk3Kzc3Vv//9b33wwQfKzc3Vpk2blJiY6HUDli9frqSkJEVGRio5Odnj5+S8//77CgsL08CBA72uEwAAWJdPwy9IUvv27XX22WdryJAhat++vU/rWLdunaZPn665c+dqz549SklJ0ejRo5WZmVnvcnl5eZo4cSLjWAEAADc+hxt/WLJkiSZPnqybb75Zffr00dKlS5WQkKAVK1bUu9ytt96qa6+9VkOHDm2mlgIAgJbCp7Gl/MHpdCojI0OzZ8+uNT01NVU7d+484XKrVq3St99+q+eee04LFy5s6mYCAGAZxc4KyVnepHVEhYfKZrM1aR0NCVi4yc3NVUVFhdsFyHFxccrOzq5zma+//lqzZ8/Wjh07FBbmWdNLS0tVWlrq+lw9LlZTMcboeFmFV8sUO8s1eOE7kqTd91wih73+bSt2VsjhcwsBAK1VygNbdFyRTVrHvgWjGvwda2qBrV1yS3fGmDoTX0VFha699lrNnz9fPXv29Hj9ixYt0vz58xvdTk8dL6tQ33vf8nn56pBTnyiVaH/THpsAALRYAQs3HTt2VGhoqFsvTU5OTp23kxcUFGj37t3as2ePpk6dKkmqrKyUMUZhYWHavHmzLr74Yrfl5syZo5kzZ7o+5+fnKyEhwc9bAwBAcIoKD3W9z7hnhGSPrre8t2cTqpap0OCFbzeuoX4UsHBjt9uVnJys9PR0jRs3zjU9PT1dV1xxhVv5mJgYt6Efli9frnfffVcvv/yykpKS6qwnIiJCERER/m28h3bfM0IOe2iD5bw+kJxF0oNVb2setAAA/FbNsyEOOdXQT79DxToYee0vn76RPLoQolxR+mX0gl+egRdIAT0tNXPmTE2YMEGDBw/W0KFD9dRTTykzM1NTpkyRVNXrcvjwYa1Zs0YhISHq169freVPOeUURUZGuk0PKGNc/8AOlcjhwS72/kByut4F+qItAEAL8mD3JinvkFyXSxSXZUoRsd7V42cBDTfjx4/XkSNHtGDBAmVlZalfv37atGmTunXrJknKyspq8Jk3QaesWPsjb6p6/6APy3t74AEAgFpsxgRB/1Ezys/PV2xsrPLy8hQTE+P39RcX5snx4Kl+X+8J3f1jg+dPAQCtmDFSWbHn5Z3Fv/6hPesbyd7waanionw5Huld9X5Wphxt/N9z483vd8DvlrKy4ru+kCPagwDlw4HkEs5N4QCAethsvv8RbHd4tmwTPzvHW4SbphTu4UFhj5bm5TV9ewAAaIgFfpMCOvwCAACAvxFuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBuAACApRBu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Vei5ubmqqKhQXFxcrelxcXHKzs52K19aWqrS0lLX5/z8fEnS3r17XVfNS1L79u2VlJSkkpISrVmzRj/88MMJ22CM0aFDh5SWlqbBgwcrMTFRJ510kv7zn//o0KFDtcq2bdtWPXr0UEVFhT7++GPX9N27d3tUx44dOzRgwAAdOHCg1vyoqCj16dNHkrRnzx4ZY2rN/89//uPVNlQLDw9X//79JUmffvqpysrKai3Xo0cPtW3bVocPH9Ybb7zhcR1nn3226zqs/fv36/jx47XKJiUlqX379vrpp59qjS7vzX7q0qWLCgoKas1PSEjQySefrKNHj+rgwYO15kVHR6tXr17asWOH1/uqc+fO6ty5s/Lz8/XNN9/UKh8REaEzzjhDUtUF+OXl5R5vx8svv6zx48eruLhYX3zxRa0yISEhGjhwoCRp3759Kikpcc3zdP3vvvuuOnTo4DZ/4MCBCgkJ0VdffaXCwsJa80499VR17NhR//u//+v1furXr5/sdru+++47HTt2rFb5+Ph4derUSceOHdN3333n1Xakp6fr0ksvVWZmpusawGqnnHKKunbtqsLCQn311Ve15oWFheno0aM+/d+o+R2xb98+t+XOOussSdKXX36pbdu2eVzH8OHD6/yOqNa/f3+Fh4fr22+/VV5eniTv/l9cdNFFdX5H9OnTR1FRUfr+++915MiRWvPi4uL09ddf+7Sfan5H/PTTT7WW6dChg7p166bjx49r//79Hm9HWlqarr766jq/IyQpNjZWp59+usrKyvTpp5/WmudpHW+88Ya6du1aa171d4QkffTRR27L9u3bV5GRkXrppZe82ld1fUfU1LNnT7Vp00Y//PCDcnJyPN6GVatW6eabb5bk/h0hSaeddpratWun7Oxs/fjjj7XmffHFFx7V8cILL7jaXq36OyI3N1eZmZm15rVp00Y9e/ZUZWWl0tLSvNpPv/2O+O13U718SV/jxo0z48aNMyEhIWbMmDGuz+PGjTOXX365SUxMNKNGjfJl1Q06fPiwkWR27txZa/rChQtNr1693Mrfd999J0yJNV/XXXedMcaYr7/+2qPyNV/PPvusMcaYZcuWuc1LTU01xvyaOL19vfDCC+all15ymz5o0CDXNtrtdrf5DzzwgE/1denSxbXe354TlWS2bNlijDFm9uzZXq3Xbre71jto0CC3+S+9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AACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACW0uIe4tdY1Y/1yc/PD3BLAACAp6p/tz15PF+rCzdHjhyRJCUkJAS4JQAAwFsFBQWKjY2tt0yrCzcnnXSSpKoxqhraOagtPz9fCQkJOnToEE939hL7znfsO9+x73zHvvNdU+07Y4wKCgoUHx/fYNlWF25CQqouM4qNjeWA9VFMTAz7zkfsO9+x73zHvvMd+853TbHvPO2U4IJiAABgKYQbAABgKa0u3EREROi+++5TREREoJvS4rDvfMe+8x37znfsO9+x73wXDPvOZjy5pwoAAKCFaHU9NwAAwNoINwAAwFIINwAAwFIsGW6WL1+upKQkRUZGKjk5WTt27Ki3/LZt25ScnKzIyEiddtppeuKJJ5qppcHHm323detW2Ww2t9cXX3zRjC0ODtu3b9fYsWMVHx8vm82mV199tcFlOO6qeLvvOO6qLFq0SGeffbbatm2rU045RVdeeaW+/PLLBpfjuPNt33HcVVmxYoXOPPNM1zNshg4dqn/961/1LhOIY85y4WbdunWaPn265s6dqz179iglJUWjR49WZmZmneUPHDigMWPGKCUlRXv27NHdd9+tadOmacOGDc3c8sDzdt9V+/LLL5WVleV69ejRo5laHDyKioo0YMAALVu2zKPyHHe/8nbfVWvtx922bdt0xx136IMPPlB6errKy8uVmpqqoqKiEy7DcVfFl31XrbUfd127dtXf//537d69W7t379bFF1+sK664Qp9//nmd5QN2zBmLGTJkiJkyZUqtab179zazZ8+us/yf//xn07t371rTbr31VnPuuec2WRuDlbf7bsuWLUaS+fnnn5uhdS2HJPPKK6/UW4bjrm6e7DuOu7rl5OQYSWbbtm0nLMNxVzdP9h3H3Ym1b9/ePPPMM3XOC9QxZ6meG6fTqYyMDKWmptaanpqaqp07d9a5zK5du9zKjxo1Srt371ZZWVmTtTXY+LLvqg0aNEidO3fWJZdcoi1btjRlMy2D467xOO5qy8vLk/Tr+Hl14birmyf7rhrH3a8qKiq0du1aFRUVaejQoXWWCdQxZ6lwk5ubq4qKCsXFxdWaHhcXp+zs7DqXyc7OrrN8eXm5cnNzm6ytwcaXfde5c2c99dRT2rBhgzZu3KhevXrpkksu0fbt25ujyS0ax53vOO7cGWM0c+ZMnX/++erXr98Jy3HcufN033Hc/erTTz9VmzZtFBERoSlTpuiVV15R37596ywbqGPOkgNn2my2Wp+NMW7TGipf1/TWwJt916tXL/Xq1cv1eejQoTp06JAefPBBXXDBBU3aTivguPMNx527qVOn6pNPPtF7773XYFmOu9o83Xccd7/q1auX9u7dq2PHjmnDhg2aNGmStm3bdsKAE4hjzlI9Nx07dlRoaKhbT0NOTo5bcqzWqVOnOsuHhYWpQ4cOTdbWYOPLvqvLueeeq6+//trfzbMcjjv/as3H3Z133qnXX39dW7ZsUdeuXesty3FXmzf7ri6t9biz2+3q3r27Bg8erEWLFmnAgAF65JFH6iwbqGPOUuHGbrcrOTlZ6enptaanp6dr2LBhdS4zdOhQt/KbN2/W4MGDFR4e3mRtDTa+7Lu67NmzR507d/Z38yyH486/WuNxZ4zR1KlTtXHjRr377rtKSkpqcBmOuyq+7Lu6tMbjri7GGJWWltY5L2DHXJNerhwAa9euNeHh4SYtLc3s27fPTJ8+3URHR5uDBw8aY4yZPXu2mTBhgqv8d999ZxwOh5kxY4bZt2+fSUtLM+Hh4ebll18O1CYEjLf77uGHHzavvPKK+eqrr8xnn31mZs+ebSSZDRs2BGoTAqagoMDs2bPH7Nmzx0gyS5YsMXv27DHff/+9MYbjrj7e7juOuyq33XabiY2NNVu3bjVZWVmuV3FxsasMx13dfNl3HHdV5syZY7Zv324OHDhgPvnkE3P33XebkJAQs3nzZmNM8Bxzlgs3xhjz+OOPm27duhm73W7OOuusWrf3TZo0yVx44YW1ym/dutUMGjTI2O12k5iYaFasWNHMLQ4e3uy7xYsXm9NPP91ERkaa9u3bm/PPP9+88cYbAWh14FXfJvrb16RJk4wxHHf18XbfcdxVqWufSTKrVq1yleG4q5sv+47jrspNN93k+o04+eSTzSWXXOIKNsYEzzHHqOAAAMBSLHXNDQAAAOEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGgCXYbDa9+uqrgW4GgCBAuAEQFHbu3KnQ0FBdeumlPi2flZWl0aNH+1z/hg0b1LdvX0VERKhv37565ZVXfF4XgMAi3AAICitXrtSdd96p9957T5mZmV4v36lTJ0VERPhU965duzR+/HhNmDBBH3/8sSZMmKBrrrlG//73v31aH4DAItwACLiioiK99NJLuu222/S73/1Oq1evrjV/wYIFio+P15EjR1zTLr/8cl1wwQWqrKyUVPu0lNPp1NSpU9W5c2dFRkYqMTFRixYtOmH9S5cu1ciRIzVnzhz17t1bc+bM0SWXXKKlS5f6e1MBNAPCDYCAW7dunXr16qVevXrp+uuv16pVq1RzTN+5c+cqMTFRN998syTpiSee0Pbt2/Xss88qJMT9a+zRRx/V66+/rpdeeklffvmlnnvuOSUmJp6w/l27dik1NbXWtFGjRmnnzp3+2UAAzSos0A0AgLS0NF1//fWSpEsvvVSFhYV65513NGLECElSaGionnvuOQ0cOFCzZ8/WY489pqeeekrdunWrc32ZmZnq0aOHzj//fNlsthOWq5adna24uLha0+Li4pSdne2HrQPQ3Oi5ARBQX375pf7v//5Pf/zjHyVJYWFhGj9+vFauXFmr3GmnnaYHH3xQixcv1tixY3XdddedcJ033HCD9u7dq169emnatGnavHlzg+2w2Wy1Phtj3KYBaBnouQEQUGlpaSovL1eXLl1c04wxCg8P188//6z27du7pm/fvl2hoaE6ePCgysvLFRZW91fYWWedpQMHDuhf//qX3n77bV1zzTUaMWKEXn755TrLd+rUya2XJicnx603B0DLQM8NgIApLy/XmjVr9NBDD2nv3r2u18cff6xu3brp+eefd5Vdt26dNm7cqK1bt+rQoUP661//Wu+6Y2JiNH78eD399NNat26dNmzYoKNHj9ZZdujQoUpPT681bfPmzRo2bFjjNxJAs6PnBkDA/O///q9+/vlnTZ48WbGxsbXm/eEPf1BaWpqmTp2qH374QbfddpsWL16s888/X6tXr9Zll12m0aNH69xzz3Vb78MPP6zOnTtr4MCBCgkJ0fr169WpUye1a9euznbcdddduuCCC7R48WJdccUVeu211/T222/rvffea4rNBtDE6LkBEDBpaWkaMWKEW7CRpKuuukp79+5VRkaGbrjhBg0ZMkRTp06VJI0cOVJTp07V9ddfr8LCQrdl27Rpo8WLF2vw4ME6++yzdfDgQW3atKnOO6skadiwYVq7dq1WrVqlM888U6tXr9a6det0zjnn+HeDATQLm6l5vyUAAEALR88NAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwlP8PN+mylVdrPSoAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "hist1.plot_ratio(hist2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f964bc54-a958-4b2f-b3de-7f142d878472", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "651a1ba9-727e-4533-8186-a5e46fb08a87", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/pylhe/__init__.py b/src/pylhe/__init__.py index 5f37498..d781211 100644 --- a/src/pylhe/__init__.py +++ b/src/pylhe/__init__.py @@ -1,5 +1,7 @@ import gzip +import io import xml.etree.ElementTree as ET +from typing import Iterable, Optional import graphviz from particle import latex_to_html_name @@ -19,9 +21,14 @@ "LHEParticle", "LHEProcInfo", "read_lhe", + "read_lhe_file", "read_lhe_init", "read_lhe_with_attributes", "read_num_events", + "write_lhe_file_path", + "write_lhe_file", + "write_lhe_file_string", + "write_lhe_string", "to_awkward", ] @@ -34,11 +41,6 @@ def __dir__(): _PDGID2LaTeXNameMap, _ = DirectionalMaps("PDGID", "LATEXNAME", converters=(int, str)) -class LHEFile: - def __init__(self): - pass - - class LHEEvent: def __init__( self, eventinfo, particles, weights=None, attributes=None, optional=None @@ -364,6 +366,44 @@ def fromstring(cls, string): return cls(**dict(zip(cls.fieldnames, map(float, string.split())))) +class LHEFile: + def __init__( + self, init: LHEInit = None, events: Optional[Iterable[LHEEvent]] = None + ): + self.init = init + self.events = events + + def write(self, output_stream, rwgt=True, weights=False): + """ + Write the LHE file to an output stream. + """ + output_stream.write( + f"\n" + ) + output_stream.write(self.init.tolhe() + "\n") + for e in self.events: + output_stream.write(e.tolhe(rwgt=rwgt, weights=weights) + "\n") + output_stream.write("") + return output_stream + + def tolhe(self, rwgt=True, weights=False) -> str: + """ + Return the LHE file as a string. + """ + return self.write(io.StringIO(), rwgt=rwgt, weights=weights).getvalue() + + +def read_lhe_file(filepath, with_attributes=True) -> LHEFile: + """ + Read an LHE file and return an LHEFile object. + """ + lheinit = read_lhe_init(filepath) + lheevents = ( + read_lhe_with_attributes(filepath) if with_attributes else read_lhe(filepath) + ) + return LHEFile(init=lheinit, events=lheevents) + + def _extract_fileobj(filepath): """ Checks to see if a file is compressed, and if so, extract it with gzip @@ -432,7 +472,7 @@ def read_lhe_init(filepath): raise _temp["weights"][wg_id] = { "attrib": w.attrib, - "name": w.text.strip(), + "name": w.text.strip() if w.text else "", "index": index, } index += 1 @@ -446,6 +486,9 @@ def read_lhe_init(filepath): def read_lhe(filepath): + """ + Read and yield the events in the LHE file. + """ try: with _extract_fileobj(filepath) as fileobj: for _event, element in ET.iterparse(fileobj, events=["end"]): @@ -548,26 +591,63 @@ def read_num_events(filepath): return -1 +def write_lhe_file_string( + lhefile: LHEFile, rwgt: bool = True, weights: bool = False +) -> str: + """ + Return the LHE file as a string. + """ + return lhefile.tolhe(rwgt=rwgt, weights=weights) + + def write_lhe_string(lheinit, lheevents, rwgt=True, weights=False): """ Return the LHE file as a string. + + .. deprecated:: 0.9.1 + Instead of :func:`~pylhe.write_lhe_string` use :func:`~pylhe.write_lhe_file_string` + .. warning:: :func:`~pylhe.write_lhe_string` will be removed in + ``pylhe`` ``v0.11.0``. """ - s = f"\n" - s += lheinit.tolhe() + "\n" - for e in lheevents: - s += e.tolhe(rwgt=rwgt, weights=weights) + "\n" - s += "" - return s + return write_lhe_file_string( + LHEFile(init=lheinit, events=lheevents), rwgt=rwgt, weights=weights + ) -def write_lhe_file(lheinit, lheevents, filepath, gz=False, rwgt=True, weights=False): +def _open_write_file(filepath: str, gz: bool = False): + if filepath.endswith((".gz", ".gzip")) or gz: + return gzip.open(filepath, "wt") + return open(filepath, "w") + + +def write_lhe_file_path( + lhefile: LHEFile, + filepath: str, + gz: bool = False, + rwgt: bool = True, + weights: bool = False, +): """ Write the LHE file. """ # if filepath suffix is gz, write as gz - if filepath.endswith((".gz", ".gzip")) or gz: - with gzip.open(filepath, "wt") as f: - f.write(write_lhe_string(lheinit, lheevents, rwgt=rwgt, weights=weights)) - else: - with open(filepath, "w") as f: - f.write(write_lhe_string(lheinit, lheevents, rwgt=rwgt, weights=weights)) + with _open_write_file(filepath, gz=gz) as f: + lhefile.write(f, rwgt=rwgt, weights=weights) + + +def write_lhe_file(lheinit, lheevents, filepath, gz=False, rwgt=True, weights=False): + """ + Write the LHE file. + + .. deprecated:: 0.9.1 + Instead of :func:`~pylhe.write_lhe_file` use :func:`~pylhe.write_lhe_file_path` + .. warning:: :func:`~pylhe.write_lhe_file` will be removed in + ``pylhe`` ``v0.11.0``. + """ + write_lhe_file_path( + LHEFile(init=lheinit, events=lheevents), + filepath, + gz=gz, + rwgt=rwgt, + weights=weights, + ) diff --git a/tests/test_api.py b/tests/test_api.py index c95fac2..cba3d95 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -12,10 +12,15 @@ def test_top_level_api(): "LHEProcInfo", "__version__", "read_lhe", + "read_lhe_file", "read_lhe_init", "read_lhe_with_attributes", "read_num_events", "to_awkward", + "write_lhe_file", + "write_lhe_file_path", + "write_lhe_file_string", + "write_lhe_string", ] diff --git a/tests/test_lhe_reader.py b/tests/test_lhe_reader.py index 653c7ee..ed97a38 100644 --- a/tests/test_lhe_reader.py +++ b/tests/test_lhe_reader.py @@ -165,6 +165,27 @@ def test_read_lhe_with_attributes_powheg(file): assert isinstance(e, LHEEvent) +@pytest.mark.parametrize( + "file", [TEST_FILE_LHE_INITRWGT_WEIGHTS, TEST_FILE_LHE_RWGT_WGT] +) +def test_read_lhe_file(file): + """ + Test that the read_lhe_file function works as the individual reads. + """ + lhefile = pylhe.read_lhe_file(file, with_attributes=False) + lheinit = pylhe.read_lhe_init(file) + lheevents = pylhe.read_lhe(file) + + assert lheinit == lhefile.init + assert next(lheevents).tolhe() == next(lhefile.events).tolhe() + + lhefile = pylhe.read_lhe_file(file, with_attributes=True) + lheevents = pylhe.read_lhe_with_attributes(file) + + assert lheinit == lhefile.init + assert next(lheevents).tolhe() == next(lhefile.events).tolhe() + + def test_read_lhe_initrwgt_weights(): """ Test the weights from initrwgt with a weights list.