{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "Original jupyter notebook by Iason Krommydas: https://github.com/ikrommyd/coffea-virtual-array-demo/blob/main/coffea_ADL_and_docs.ipynb" ], "metadata": { "id": "hkjBmKMpozZp" } }, { "cell_type": "code", "source": [ "# to get the test root file manually\n", "# !wget {'https://github.com/ikrommyd/coffea-virtual-array-demo/raw/de75f6d8a17be5cb1c71dbbf962b366fc92dc251/data/DYto2E.root'}" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "YevcDoZsUvwF", "outputId": "73e73d7c-70bb-4972-d9ef-f4f64103fde1" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "--2025-07-14 14:29:35-- https://github.com/ikrommyd/coffea-virtual-array-demo/raw/de75f6d8a17be5cb1c71dbbf962b366fc92dc251/data/DYto2E.root\n", "Resolving github.com (github.com)... 140.82.116.3\n", "Connecting to github.com (github.com)|140.82.116.3|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: https://media.githubusercontent.com/media/ikrommyd/coffea-virtual-array-demo/de75f6d8a17be5cb1c71dbbf962b366fc92dc251/data/DYto2E.root [following]\n", "--2025-07-14 14:29:35-- https://media.githubusercontent.com/media/ikrommyd/coffea-virtual-array-demo/de75f6d8a17be5cb1c71dbbf962b366fc92dc251/data/DYto2E.root\n", "Resolving media.githubusercontent.com (media.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n", "Connecting to media.githubusercontent.com (media.githubusercontent.com)|185.199.108.133|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 3376397 (3.2M) [application/octet-stream]\n", "Saving to: ‘DYto2E.root’\n", "\n", "DYto2E.root 100%[===================>] 3.22M --.-KB/s in 0.05s \n", "\n", "2025-07-14 14:29:35 (60.3 MB/s) - ‘DYto2E.root’ saved [3376397/3376397]\n", "\n" ] } ] }, { "cell_type": "markdown", "source": [ "## Install libraries" ], "metadata": { "id": "V95KTuykfxfB" } }, { "cell_type": "code", "source": [ "!pip install awkward hist" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GK_LAspSbWOH", "outputId": "657c4388-f95f-40de-8405-1a17c4aae989" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting awkward\n", " Downloading awkward-2.8.5-py3-none-any.whl.metadata (6.9 kB)\n", "Collecting hist\n", " Downloading hist-2.8.1-py3-none-any.whl.metadata (16 kB)\n", "Collecting awkward-cpp==47 (from awkward)\n", " Downloading awkward_cpp-47-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (2.1 kB)\n", "Requirement already satisfied: fsspec>=2022.11.0 in /usr/local/lib/python3.11/dist-packages (from awkward) (2025.3.2)\n", "Requirement already satisfied: importlib-metadata>=4.13.0 in /usr/local/lib/python3.11/dist-packages (from awkward) (8.7.0)\n", "Requirement already satisfied: numpy>=1.18.0 in /usr/local/lib/python3.11/dist-packages (from awkward) (2.0.2)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from awkward) (24.2)\n", "Collecting boost-histogram<1.6,>=1.3.1 (from hist)\n", " Downloading boost_histogram-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (23 kB)\n", "Collecting histoprint>=2.2.0 (from hist)\n", " Downloading histoprint-2.6.0-py3-none-any.whl.metadata (17 kB)\n", "Requirement already satisfied: click>=7.0.0 in /usr/local/lib/python3.11/dist-packages (from histoprint>=2.2.0->hist) (8.2.1)\n", "Collecting uhi>=0.2.1 (from histoprint>=2.2.0->hist)\n", " Downloading uhi-0.5.0-py3-none-any.whl.metadata (7.5 kB)\n", "Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.11/dist-packages (from importlib-metadata>=4.13.0->awkward) (3.23.0)\n", "Downloading awkward-2.8.5-py3-none-any.whl (886 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m886.8/886.8 kB\u001b[0m \u001b[31m23.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading awkward_cpp-47-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (638 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m638.8/638.8 kB\u001b[0m \u001b[31m40.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading hist-2.8.1-py3-none-any.whl (40 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m40.9/40.9 kB\u001b[0m \u001b[31m3.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading boost_histogram-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m55.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading histoprint-2.6.0-py3-none-any.whl (16 kB)\n", "Downloading uhi-0.5.0-py3-none-any.whl (13 kB)\n", "Installing collected packages: uhi, boost-histogram, awkward-cpp, histoprint, awkward, hist\n", "Successfully installed awkward-2.8.5 awkward-cpp-47 boost-histogram-1.5.2 hist-2.8.1 histoprint-2.6.0 uhi-0.5.0\n" ] } ] }, { "cell_type": "code", "source": [ "!pip install git+https://github.com/scikit-hep/coffea.git@master" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "414sJa7AdrT0", "outputId": "c5d90e40-3054-425f-cc57-f075c410c96f" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting git+https://github.com/scikit-hep/coffea.git@master\n", " Cloning https://github.com/scikit-hep/coffea.git (to revision master) to /tmp/pip-req-build-tjuiov85\n", " Running command git clone --filter=blob:none --quiet https://github.com/scikit-hep/coffea.git /tmp/pip-req-build-tjuiov85\n", " Resolved https://github.com/scikit-hep/coffea.git to commit 12ef1a59c815af36bdafdd36f1090c7123331fec\n", " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", "Requirement already satisfied: aiohttp in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (3.11.15)\n", "Requirement already satisfied: awkward>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (2.8.5)\n", "Requirement already satisfied: cachetools in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (5.5.2)\n", "Requirement already satisfied: cloudpickle>=1.2.3 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (3.1.1)\n", "Collecting correctionlib>=2.6.0 (from coffea==2025.7.0rc1.dev3+g12ef1a5)\n", " Downloading correctionlib-2.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.3 kB)\n", "Collecting dask-awkward>=2025.5.0 (from coffea==2025.7.0rc1.dev3+g12ef1a5)\n", " Downloading dask_awkward-2025.5.0-py3-none-any.whl.metadata (3.9 kB)\n", "Collecting dask-histogram>=2025.2.0 (from coffea==2025.7.0rc1.dev3+g12ef1a5)\n", " Downloading dask_histogram-2025.2.0-py3-none-any.whl.metadata (3.8 kB)\n", "Requirement already satisfied: dask>=2024.3.0 in /usr/local/lib/python3.11/dist-packages (from dask[array]>=2024.3.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (2024.12.1)\n", "Collecting fsspec-xrootd>=0.2.3 (from coffea==2025.7.0rc1.dev3+g12ef1a5)\n", " Downloading fsspec_xrootd-0.5.1-py3-none-any.whl.metadata (4.0 kB)\n", "Requirement already satisfied: hist>=2 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (2.8.1)\n", "Collecting lz4 (from coffea==2025.7.0rc1.dev3+g12ef1a5)\n", " Downloading lz4-4.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)\n", "Requirement already satisfied: matplotlib>=3 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (3.10.0)\n", "Collecting mplhep>=0.1.18 (from coffea==2025.7.0rc1.dev3+g12ef1a5)\n", " Downloading mplhep-0.4.0-py3-none-any.whl.metadata (10 kB)\n", "Requirement already satisfied: numba>=0.58.1 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (0.60.0)\n", "Requirement already satisfied: numpy>=1.22 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (2.0.2)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (24.2)\n", "Requirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (2.2.2)\n", "Requirement already satisfied: pyarrow>=6.0.0 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (18.1.0)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (2.32.3)\n", "Requirement already satisfied: scipy>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (1.15.3)\n", "Requirement already satisfied: toml>=0.10.2 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (0.10.2)\n", "Requirement already satisfied: tqdm>=4.27.0 in /usr/local/lib/python3.11/dist-packages (from coffea==2025.7.0rc1.dev3+g12ef1a5) (4.67.1)\n", "Collecting uproot>=5.6.0 (from coffea==2025.7.0rc1.dev3+g12ef1a5)\n", " Downloading uproot-5.6.3-py3-none-any.whl.metadata (33 kB)\n", "Collecting vector!=1.6.0,>=1.4.1 (from coffea==2025.7.0rc1.dev3+g12ef1a5)\n", " Downloading vector-1.6.2-py3-none-any.whl.metadata (15 kB)\n", "Requirement already satisfied: awkward-cpp==47 in /usr/local/lib/python3.11/dist-packages (from awkward>=2.8.2->coffea==2025.7.0rc1.dev3+g12ef1a5) (47)\n", "Requirement already satisfied: fsspec>=2022.11.0 in /usr/local/lib/python3.11/dist-packages (from awkward>=2.8.2->coffea==2025.7.0rc1.dev3+g12ef1a5) (2025.3.2)\n", "Requirement already satisfied: importlib-metadata>=4.13.0 in /usr/local/lib/python3.11/dist-packages (from awkward>=2.8.2->coffea==2025.7.0rc1.dev3+g12ef1a5) (8.7.0)\n", "Requirement already satisfied: pydantic>=2 in /usr/local/lib/python3.11/dist-packages (from correctionlib>=2.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (2.11.7)\n", "Requirement already satisfied: rich in /usr/local/lib/python3.11/dist-packages (from correctionlib>=2.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (13.9.4)\n", "Requirement already satisfied: click>=8.1 in /usr/local/lib/python3.11/dist-packages (from dask>=2024.3.0->dask[array]>=2024.3.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (8.2.1)\n", "Requirement already satisfied: partd>=1.4.0 in /usr/local/lib/python3.11/dist-packages (from dask>=2024.3.0->dask[array]>=2024.3.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (1.4.2)\n", "Requirement already satisfied: pyyaml>=5.3.1 in /usr/local/lib/python3.11/dist-packages (from dask>=2024.3.0->dask[array]>=2024.3.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (6.0.2)\n", "Requirement already satisfied: toolz>=0.10.0 in /usr/local/lib/python3.11/dist-packages (from dask>=2024.3.0->dask[array]>=2024.3.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (0.12.1)\n", "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.11/dist-packages (from dask-awkward>=2025.5.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (4.14.1)\n", "Requirement already satisfied: boost-histogram>=1.3.2 in /usr/local/lib/python3.11/dist-packages (from dask-histogram>=2025.2.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (1.5.2)\n", "Requirement already satisfied: histoprint>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from hist>=2->coffea==2025.7.0rc1.dev3+g12ef1a5) (2.6.0)\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3->coffea==2025.7.0rc1.dev3+g12ef1a5) (1.3.2)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3->coffea==2025.7.0rc1.dev3+g12ef1a5) (0.12.1)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3->coffea==2025.7.0rc1.dev3+g12ef1a5) (4.58.5)\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3->coffea==2025.7.0rc1.dev3+g12ef1a5) (1.4.8)\n", "Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3->coffea==2025.7.0rc1.dev3+g12ef1a5) (11.2.1)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3->coffea==2025.7.0rc1.dev3+g12ef1a5) (3.2.3)\n", "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3->coffea==2025.7.0rc1.dev3+g12ef1a5) (2.9.0.post0)\n", "Collecting mplhep-data>=0.0.4 (from mplhep>=0.1.18->coffea==2025.7.0rc1.dev3+g12ef1a5)\n", " Downloading mplhep_data-0.0.4-py3-none-any.whl.metadata (3.4 kB)\n", "Requirement already satisfied: uhi>=0.2.0 in /usr/local/lib/python3.11/dist-packages (from mplhep>=0.1.18->coffea==2025.7.0rc1.dev3+g12ef1a5) (0.5.0)\n", "Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /usr/local/lib/python3.11/dist-packages (from numba>=0.58.1->coffea==2025.7.0rc1.dev3+g12ef1a5) (0.43.0)\n", "Requirement already satisfied: cramjam>=2.5.0 in /usr/local/lib/python3.11/dist-packages (from uproot>=5.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (2.10.0)\n", "Requirement already satisfied: xxhash in /usr/local/lib/python3.11/dist-packages (from uproot>=5.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (3.5.0)\n", "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->coffea==2025.7.0rc1.dev3+g12ef1a5) (2.6.1)\n", "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.11/dist-packages (from aiohttp->coffea==2025.7.0rc1.dev3+g12ef1a5) (1.4.0)\n", "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->coffea==2025.7.0rc1.dev3+g12ef1a5) (25.3.0)\n", "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from aiohttp->coffea==2025.7.0rc1.dev3+g12ef1a5) (1.7.0)\n", "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.11/dist-packages (from aiohttp->coffea==2025.7.0rc1.dev3+g12ef1a5) (6.6.3)\n", "Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->coffea==2025.7.0rc1.dev3+g12ef1a5) (0.3.2)\n", "Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->coffea==2025.7.0rc1.dev3+g12ef1a5) (1.20.1)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas->coffea==2025.7.0rc1.dev3+g12ef1a5) (2025.2)\n", "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas->coffea==2025.7.0rc1.dev3+g12ef1a5) (2025.2)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->coffea==2025.7.0rc1.dev3+g12ef1a5) (3.4.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->coffea==2025.7.0rc1.dev3+g12ef1a5) (3.10)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests->coffea==2025.7.0rc1.dev3+g12ef1a5) (2.4.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->coffea==2025.7.0rc1.dev3+g12ef1a5) (2025.7.9)\n", "Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.11/dist-packages (from importlib-metadata>=4.13.0->awkward>=2.8.2->coffea==2025.7.0rc1.dev3+g12ef1a5) (3.23.0)\n", "Requirement already satisfied: locket in /usr/local/lib/python3.11/dist-packages (from partd>=1.4.0->dask>=2024.3.0->dask[array]>=2024.3.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (1.0.0)\n", "Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic>=2->correctionlib>=2.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (0.7.0)\n", "Requirement already satisfied: pydantic-core==2.33.2 in /usr/local/lib/python3.11/dist-packages (from pydantic>=2->correctionlib>=2.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (2.33.2)\n", "Requirement already satisfied: typing-inspection>=0.4.0 in /usr/local/lib/python3.11/dist-packages (from pydantic>=2->correctionlib>=2.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (0.4.1)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.7->matplotlib>=3->coffea==2025.7.0rc1.dev3+g12ef1a5) (1.17.0)\n", "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich->correctionlib>=2.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (3.0.0)\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from rich->correctionlib>=2.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (2.19.2)\n", "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich->correctionlib>=2.6.0->coffea==2025.7.0rc1.dev3+g12ef1a5) (0.1.2)\n", "Downloading correctionlib-2.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (436 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m436.1/436.1 kB\u001b[0m \u001b[31m17.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading dask_awkward-2025.5.0-py3-none-any.whl (90 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m90.1/90.1 kB\u001b[0m \u001b[31m7.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading dask_histogram-2025.2.0-py3-none-any.whl (27 kB)\n", "Downloading fsspec_xrootd-0.5.1-py3-none-any.whl (13 kB)\n", "Downloading mplhep-0.4.0-py3-none-any.whl (48 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m48.4/48.4 kB\u001b[0m \u001b[31m3.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading uproot-5.6.3-py3-none-any.whl (382 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m382.8/382.8 kB\u001b[0m \u001b[31m28.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading vector-1.6.2-py3-none-any.whl (177 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m177.8/177.8 kB\u001b[0m \u001b[31m14.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading lz4-4.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m61.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading mplhep_data-0.0.4-py3-none-any.whl (9.1 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.1/9.1 MB\u001b[0m \u001b[31m110.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hBuilding wheels for collected packages: coffea\n", " Building wheel for coffea (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for coffea: filename=coffea-2025.7.0rc1.dev3+g12ef1a5-py3-none-any.whl size=281743 sha256=d5a0d2aff5d60f2558fa396fc75d4c3d13900216d149792e5754164d0f555a9c\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-20nkjrt_/wheels/d3/ef/55/413cff710a7e9fbe7df5ea9455e638b150caacab96d52a8f9a\n", "Successfully built coffea\n", "Installing collected packages: vector, mplhep-data, lz4, fsspec-xrootd, uproot, mplhep, dask-awkward, correctionlib, dask-histogram, coffea\n", "Successfully installed coffea-2025.7.0rc1.dev3+g12ef1a5 correctionlib-2.7.0 dask-awkward-2025.5.0 dask-histogram-2025.2.0 fsspec-xrootd-0.5.1 lz4-4.4.4 mplhep-0.4.0 mplhep-data-0.0.4 uproot-5.6.3 vector-1.6.2\n" ] } ] }, { "cell_type": "code", "source": [ "!pip install git+https://github.com/maxymnaumchyk/awkward-zipper.git" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "KegyQ0aWfi-w", "outputId": "d76f64ff-b5fc-4274-fcc3-18a4a039e532" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting git+https://github.com/maxymnaumchyk/awkward-zipper.git\n", " Cloning https://github.com/maxymnaumchyk/awkward-zipper.git to /tmp/pip-req-build-69lhrk1w\n", " Running command git clone --filter=blob:none --quiet https://github.com/maxymnaumchyk/awkward-zipper.git /tmp/pip-req-build-69lhrk1w\n", " Resolved https://github.com/maxymnaumchyk/awkward-zipper.git to commit 7d7c94e3cd01bc78bf137d190431109a33fbdc9c\n", " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", "Collecting awkward@ git+https://github.com/scikit-hep/awkward@main (from awkward-zipper==0.0.1)\n", " Cloning https://github.com/scikit-hep/awkward (to revision main) to /tmp/pip-install-pgawn305/awkward_a506a61a23f0411ea76b466d984bf4b9\n", " Running command git clone --filter=blob:none --quiet https://github.com/scikit-hep/awkward /tmp/pip-install-pgawn305/awkward_a506a61a23f0411ea76b466d984bf4b9\n", " Resolved https://github.com/scikit-hep/awkward to commit 03688c265934e69cd0d255d0eeb8716dbaffc145\n", " Running command git submodule update --init --recursive -q\n", " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", "Requirement already satisfied: numba in /usr/local/lib/python3.11/dist-packages (from awkward-zipper==0.0.1) (0.60.0)\n", "Requirement already satisfied: vector in /usr/local/lib/python3.11/dist-packages (from awkward-zipper==0.0.1) (1.6.2)\n", "Requirement already satisfied: awkward-cpp==47 in /usr/local/lib/python3.11/dist-packages (from awkward@ git+https://github.com/scikit-hep/awkward@main->awkward-zipper==0.0.1) (47)\n", "Requirement already satisfied: fsspec>=2022.11.0 in /usr/local/lib/python3.11/dist-packages (from awkward@ git+https://github.com/scikit-hep/awkward@main->awkward-zipper==0.0.1) (2025.3.2)\n", "Requirement already satisfied: importlib-metadata>=4.13.0 in /usr/local/lib/python3.11/dist-packages (from awkward@ git+https://github.com/scikit-hep/awkward@main->awkward-zipper==0.0.1) (8.7.0)\n", "Requirement already satisfied: numpy>=1.18.0 in /usr/local/lib/python3.11/dist-packages (from awkward@ git+https://github.com/scikit-hep/awkward@main->awkward-zipper==0.0.1) (2.0.2)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from awkward@ git+https://github.com/scikit-hep/awkward@main->awkward-zipper==0.0.1) (24.2)\n", "Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /usr/local/lib/python3.11/dist-packages (from numba->awkward-zipper==0.0.1) (0.43.0)\n", "Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.11/dist-packages (from importlib-metadata>=4.13.0->awkward@ git+https://github.com/scikit-hep/awkward@main->awkward-zipper==0.0.1) (3.23.0)\n", "Building wheels for collected packages: awkward-zipper\n", " Building wheel for awkward-zipper (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for awkward-zipper: filename=awkward_zipper-0.0.1-py3-none-any.whl size=24548 sha256=f46e70a2016aabaff10dea18aadc1731b58bea784877a25f351344a876334852\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-7kpi1ltd/wheels/13/ff/6a/a86ac1ebbfd7f56ba74dec9ccffa35df23b6890fac28284fed\n", "Successfully built awkward-zipper\n", "Installing collected packages: awkward-zipper\n", "Successfully installed awkward-zipper-0.0.1\n" ] } ] }, { "cell_type": "markdown", "source": [ "Use a branch from main to load virtual arrays with uproot" ], "metadata": { "id": "PtX568RfhWJc" } }, { "cell_type": "code", "source": [ "!pip install uproot@git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "SinQ4-BphQTt", "outputId": "a6efc9a5-62ae-40d8-d2ae-2bbc6e7dfb39" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy\n", " Cloning https://github.com/scikit-hep/uproot5 (to revision pfackeldey/uproot_lazy) to /tmp/pip-install-_849_ubv/uproot_3c48d46d02014551a8a1ab101baee933\n", " Running command git clone --filter=blob:none --quiet https://github.com/scikit-hep/uproot5 /tmp/pip-install-_849_ubv/uproot_3c48d46d02014551a8a1ab101baee933\n", " Running command git checkout -b pfackeldey/uproot_lazy --track origin/pfackeldey/uproot_lazy\n", " Switched to a new branch 'pfackeldey/uproot_lazy'\n", " Branch 'pfackeldey/uproot_lazy' set up to track remote branch 'pfackeldey/uproot_lazy' from 'origin'.\n", " Resolved https://github.com/scikit-hep/uproot5 to commit f8a3461cdeba7ae5a909898ff14e881aa380d986\n", " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", "Requirement already satisfied: awkward>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy) (2.8.5)\n", "Requirement already satisfied: cramjam>=2.5.0 in /usr/local/lib/python3.11/dist-packages (from uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy) (2.10.0)\n", "Requirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages (from uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy) (2025.3.2)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy) (2.0.2)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy) (24.2)\n", "Requirement already satisfied: xxhash in /usr/local/lib/python3.11/dist-packages (from uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy) (3.5.0)\n", "Requirement already satisfied: awkward-cpp==47 in /usr/local/lib/python3.11/dist-packages (from awkward>=2.8.2->uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy) (47)\n", "Requirement already satisfied: importlib-metadata>=4.13.0 in /usr/local/lib/python3.11/dist-packages (from awkward>=2.8.2->uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy) (8.7.0)\n", "Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.11/dist-packages (from importlib-metadata>=4.13.0->awkward>=2.8.2->uproot@ git+https://github.com/scikit-hep/uproot5@pfackeldey/uproot_lazy) (3.23.0)\n", "Building wheels for collected packages: uproot\n", " Building wheel for uproot (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for uproot: filename=uproot-5.6.3.dev29+gf8a3461-py3-none-any.whl size=377233 sha256=04d5b597d5f7b0ff30ce100a94a88b11027b16608b0f4265a9766dd893936f1f\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-vmpxod2y/wheels/6d/4a/38/cca594ce698fdd158d6039640034edca9dda20c890c171703a\n", "Successfully built uproot\n", "Installing collected packages: uproot\n", " Attempting uninstall: uproot\n", " Found existing installation: uproot 5.6.3\n", " Uninstalling uproot-5.6.3:\n", " Successfully uninstalled uproot-5.6.3\n", "Successfully installed uproot-5.6.3.dev29+gf8a3461\n" ] } ] }, { "cell_type": "markdown", "source": [ "## Helper functions for data loading" ], "metadata": { "id": "-Ym5kbHDf5e2" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "o-jv4wUFbFCy" }, "outputs": [], "source": [ "import awkward as ak\n", "import numpy as np\n", "import hist\n", "from matplotlib import pyplot as plt\n", "from coffea.nanoevents import NanoEventsFactory, NanoAODSchema, BaseSchema\n", "\n", "import awkward_zipper\n", "import uproot\n", "\n", "\n", "def make_events_coffea(file, schemaclass=NanoAODSchema):\n", " access_log = []\n", " events = NanoEventsFactory.from_root(\n", " {file: \"Events\"},\n", " mode=\"virtual\",\n", " schemaclass=schemaclass,\n", " metadata={\"dataset\": file.removeprefix(\"data/\").removesuffix(\".root\")},\n", " access_log=access_log\n", " ).events()\n", " return events, access_log\n", "\n", "def make_events_zipper(file):\n", " access_log = []\n", " # Create a TTree from root\n", " tree = uproot.open(file)[\"Events\"]\n", " # TTree -> awkward.Array[awkward.Record[str, awkward.Array]]\n", " array = tree.virtual_arrays(ak_add_doc=True, access_log=access_log)\n", "\n", " # construct an awkward array using awkward-zipper\n", " restructure = awkward_zipper.NanoAOD(version=\"latest\")\n", " zipper_array = restructure(array)\n", " return zipper_array, access_log" ] }, { "cell_type": "code", "source": [ "root_file = \"DYto2E.root\"\n", "events_coffea, access_log_coffea = make_events_coffea(root_file)\n", "access_log_coffea" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "91n3mqWpbqYt", "outputId": "a7c12020-28f3-4f72-99a5-be16059dc2ca" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "[]" ] }, "metadata": {}, "execution_count": 23 } ] }, { "cell_type": "code", "source": [ "events_zipper, access_log_zipper = make_events_zipper(root_file)\n", "access_log_zipper" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sg8nHFrHglUF", "outputId": "c6b5eeeb-380c-44ae-9b57-081aba31a6e8" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "[]" ] }, "metadata": {}, "execution_count": 24 } ] }, { "cell_type": "markdown", "source": [ "## Plot the diagrams" ], "metadata": { "id": "6dV4PVEigAD9" } }, { "cell_type": "markdown", "source": [ "Here we will plot two histograms on top of each other to see if there are any differencies between zipper and coffea" ], "metadata": { "id": "WC1JcdqupOgl" } }, { "cell_type": "code", "source": [ "events_coffea, access_log_coffea = make_events_coffea(root_file)\n", "events_zipper, access_log_zipper = make_events_zipper(root_file)\n", "\n", "q1_hist = hist.Hist.new.Reg(100, 0, 200, name=\"met\", label=\"$E_{T}^{miss}$ [GeV]\").Double().fill(events_coffea.MET.pt)\n", "q12_hist = hist.Hist.new.Reg(100, 0, 200, name=\"met\", label=\"$E_{T}^{miss}$ [GeV]\").Double().fill(events_zipper.MET.pt)\n", "\n", "q1_hist.plot1d(flow=\"none\")\n", "q12_hist.plot1d(flow=\"none\")\n", "plt.show()\n", "print('access_log_coffea:', access_log_coffea)\n", "print('access_log_zipper:', access_log_zipper)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 492 }, "id": "Ye5RG8lmcegV", "outputId": "61179c5c-654d-4ce2-a6d3-59008646eb75" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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MQETgubn56u+vl47duwIa30Rv6ttd/v73/+uI0eOtJtdNT09XV999VWEqgofr9ere+65RxMnTtTo0aP97f/yL/+iIUOGKDMzU1988YUWLlyoqqoq/eUvf4lgtR2Tk5OjlStXavjw4dq3b58efPBB/eIXv9D27dtVU1Oj+Pj4dv+op6enq6amJjIFd8Grr76quro6zZ49298WzccumLbjEux3sG1ZTU2NBg4cGLC8T58+6tevX9Qd10OHDmnhwoWaMWNGwE277rrrLp1//vnq16+fPv30U5WUlGjfvn164oknIlhtx1x99dWaPn26hg4dqq+//lq/+c1vNHnyZFVUVOi0006LqeMnSS+88IKcTme707nRcgyDfS905N/OmpqaoL+nbcvCKebDR6wrLCzU9u3bA66JkBRwrnXMmDEaNGiQrrjiCn399dc666yzrC4zJJMnT/Y/Hzt2rHJycjRkyBD96U9/UmJiYgQrC7/ly5dr8uTJAbegjuZj19sdPnxY119/vYwxKi8vD1hWVFTkfz527FjFx8frl7/8pUpLS3v8VN433nij//mYMWM0duxYnXXWWfrwww91xRVXRLCy7vH8889r5syZSkhICGiPlmN4ou+FniTmT7v0799fp512Wrsremtra5WRkRGhqsLjzjvv1BtvvKEPPvhAgwcPPum6OTk5kqRdu3ZZUVpYpaam6mc/+5l27dqljIwMtba2qq6uLmCdaDye3377rd577z3927/920nXi+ZjJ8l/XE72O5iRkdHuAvAff/xRP/zwQ9Qc17bg8e233+rdd9895a3Kc3Jy9OOPP+pvf/ubNQWG0bBhw9S/f3//z2QsHL82H330kaqqqk75eyn1zGN4ou+FjvzbmZGREfT3tG1ZOMV8+IiPj9eECRO0du1af5vX69XatWuVm5sbwco6zxijO++8U2vWrNH777+voUOHnvI9W7dulSQNGjSom6sLv8bGRn399dcaNGiQJkyYoL59+wYcz6qqKlVXV0fd8VyxYoUGDhyoa6655qTrRfOxk6ShQ4cqIyMj4JjV19dr48aN/mOWm5ururo6VVZW+td5//335fV6/eGrJ2sLHjt37tR7772ntLS0U75n69atiouLa3e6Ihp89913OnDggP9nMtqP37GWL1+uCRMmaNy4cadctycdw1N9L3Tk387c3Fxt27YtIEi2Belzzz037AXHvJdfftnY7XazcuVK8+WXX5rbb7/dpKamBlzRG03mzp1rXC6X+fDDD82+ffv8D4/HY4wxZteuXWbJkiXm888/N7t37zavvfaaGTZsmJk0aVKEK++Ye++913z44Ydm9+7d5pNPPjF5eXmmf//+Zv/+/cYYY+644w6TnZ1t3n//ffP555+b3Nxck5ubG+GqQ3PkyBGTnZ1tFi5cGNAerceuoaHBbNmyxWzZssVIMk888YTZsmWLf7THI488YlJTU81rr71mvvjiCzN16lQzdOhQ09zc7N/G1VdfbcaPH282btxoPv74Y3POOeeYGTNmRGqXApxs/1pbW821115rBg8ebLZu3RrwO9k2QuDTTz81Tz75pNm6dav5+uuvzUsvvWQGDBhgbr755gjvmc/J9q+hocEUFxebiooKs3v3bvPee++Z888/35xzzjnm0KFD/m305ONnzKl/Ro0xxu12G4fDYcrLy9u9v6cfw1N9Lxhz6n87f/zxRzN69Ghz1VVXma1bt5q3337bDBgwwJSUlIS93l4RPowx5j/+4z9Mdna2iY+PNxdddJHZsGFDpEvqNElBHytWrDDGGFNdXW0mTZpk+vXrZ+x2uzn77LPNfffdZ9xud2QL76AbbrjBDBo0yMTHx5szzjjD3HDDDWbXrl3+5c3NzWbevHnm9NNPNw6Hw/zzP/+z2bdvXwQrDt0777xjJJmqqqqA9mg9dh988EHQn8lZs2YZY3zDbe+//36Tnp5u7Ha7ueKKK9rt+4EDB8yMGTNMcnKySUlJMbfccotpaGiIwN60d7L927179wl/Jz/44ANjjDGVlZUmJyfHuFwuk5CQYEaOHGkefvjhgC/vSDrZ/nk8HnPVVVeZAQMGmL59+5ohQ4aY2267rd0fbz35+Blz6p9RY4x55plnTGJioqmrq2v3/p5+DE/1vWBMx/7t/Nvf/mYmT55sEhMTTf/+/c29995rDh8+HPZ6bUeLBgAAsETMX/MBAAB6FsIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABLET4AAIClCB8AAMBShA8AAGApwgcAALAU4QNAh73//vv63e9+F+kyAEQ57u0CAAAsRc8HAF177bW6++67dfHFF2v48OH67LPPNHXqVA0ZMkRLly4NWG/btm167rnndP7552v06NG64YYbJCloWzCXXXaZbDabbDabtm7d2t27dkKzZ8/21/Hqq69GrA6gNyJ8AL3ApZde6v+iPfZx8803S5K2bdumsWPHasOGDbriiit033336aWXXtIHH3ygFStW+Lfz1VdfKSMjQ2VlZdq0aZO2b9+uZ555RgcPHmzXdjK33Xab9u3bp9GjRwe019TU6O6779bZZ5+thIQEpaena+LEiSovL5fH4+nQvk6ZMkVXX3110GUfffSRbDabvvjiC/3+97/Xvn37OrRNAOHVJ9IFAOhexhht2bJFjz/+uGbOnBmwLDk5WQ0NDTLGaM6cOf72u+66S06nU/v371dKSookqaGhQQkJCUpISNDBgwf1q1/9SrfeeqtGjRqlhoaGdm0n43A4lJGREdD2zTffaOLEiUpNTdXDDz+sMWPGyG63a9u2bXr22Wd1xhln6Nprrz3l/s6ZM0cFBQX67rvvNHjw4IBlK1as0AUXXKCxY8dKklwu1ym3ByD86PkAYtzOnTvV0NCgSZMmKSMjI+CRnJysHTt26MILL/Svv23bNuXk5EiStm/frjFjxkiSduzYoVGjRsnpdGr79u0677zzdP311+vVV18N2haqefPmqU+fPvr88891/fXXa+TIkRo2bJimTp2qN998U1OmTJEkeb1elZaWaujQoUpMTNS4ceP05z//2b+df/qnf9KAAQO0cuXKgO03NjZq9erVASELQGQQPoAYV1lZqT59+vj/2j9e2ymXNsf2GGzbts0fPtqe79y5U06nU//6r/+qSy+9VC0tLUHbQnHgwAH9z//8jwoLC5WUlBR0HZvNJkkqLS3Viy++qGXLlmnHjh1asGCBbrrpJq1bt06S1KdPH918881auXKljr2efvXq1Tpy5IhmzJgRUm0Awo/wAcS4zZs368iRI0pLS1NycrL/8ctf/lJSYPjYs2ePsrKy/O89PnyMHj1aDz30kIYPH67x48fLZrPpuuuuC9oWil27dskYo+HDhwe09+/f31/vwoUL1dLSoocffljPP/+88vPzNWzYMM2ePVs33XRTwHUmt956q77++mt/IJF8p1wKCgo41QL0AFzzAcS4zZs3a8aMGXrwwQcD2vv16ydJevrpp/1tWVlZWr9+vf/1K6+84n/etl6w6y5eeOGFsNbc5rPPPpPX69XMmTPV0tKiXbt2yePx6MorrwxYr7W1VePHj/e/HjFihH7+85/r+eef12WXXaZdu3bpo48+0pIlS7qlTgChIXwAMW7z5s367W9/q7PPPrvdsmXLlmnZsmU6cuSIqqqqdO6550ryjUYpLCy0rMazzz5bNptNVVVVAe3Dhg2TJCUmJkryXbchSW+++abOOOOMgHXtdnvA6zlz5mj+/PkqKyvTihUrdNZZZ+nSSy/trl0AEAJOuwAx7JtvvlFdXZ3GjRsXdPkdd9yhrVu36g9/+IPGjx+vrVu3auvWrZYGD0lKS0vTlVdeqf/8z/9UU1PTCdc799xzZbfbVV1drbPPPjvgcezpIkm6/vrrFRcXp1WrVunFF1/Urbfe6r9uBEBk0fMBxLDKykpJUnp6umpqagKWDRw4UHFxvr8/2kayRNLSpUs1ceJEXXDBBVq8eLHGjh2ruLg4bdq0SV999ZUmTJggp9Op4uJiLViwQF6vV5dcconcbrc++eQTpaSkaNasWf7tJScn64YbblBJSYnq6+s1e/bsyO0cgACEDyCGbd68WZJ0zjnnBLTb7XbV19crPj5ekm9IbaTDx1lnnaUtW7bo4YcfVklJib777jvZ7Xade+65Ki4u1rx58yRJ//7v/64BAwaotLRU33zzjVJTU3X++efrN7/5TbttzpkzR8uXL9c//uM/KjMz0+pdAnAC3NsFgKZNm6a5c+cqPz+/2z/rsssu03nnnaennnqq2z+rI2w2m9asWaNp06ZFuhSg1+CaDwCW93wsXbpUycnJ2rZtm2Wfebw77rhDycnJEft8oDej5wPo5ZqbmzV48GAdOHDAks/7/vvv1dzcLEnKzs72n/qx2v79+1VfXy9JGjRo0AknNwMQflzzAfRyf/3rXzVixAjLPu/4IbKRMnDgQA0cODDSZQC9Ej0fAADAUlzzAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACWInwAAABL/X91cVPN0PEVBwAAAABJRU5ErkJggg==\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "access_log_coffea: ['MET_pt']\n", "access_log_zipper: [Accessed(branch='MET_pt', buffer_key=\"('', 'MET_pt')-data\")]\n" ] } ] }, { "cell_type": "code", "source": [ "def plot_two_hists(make_events):\n", " events, access_log = make_events(root_file)\n", "\n", " q2_hist = hist.Hist.new.Reg(100, 0, 200, name=\"ptj\", label=\"Jet $p_{T}$ [GeV]\").Double().fill(ak.flatten(events.Jet.pt))\n", "\n", " return access_log, q2_hist\n", "\n", "access_log_coffea, q2_hist = plot_two_hists(make_events_coffea)\n", "access_log_zipper, q21_hist = plot_two_hists(make_events_zipper)\n", "\n", "q2_hist.plot1d(flow=\"none\")\n", "q21_hist.plot1d(flow=\"none\")\n", "\n", "plt.show()\n", "print('access_log_coffea:', access_log_coffea)\n", "print('access_log_zipper:', access_log_zipper)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 488 }, "id": "6I9b4Js_e5oI", "outputId": "21786945-d0f6-4117-d95e-b08b4f148231" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "access_log_coffea: ['nJet', 'Jet_pt']\n", "access_log_zipper: [Accessed(branch='nJet', buffer_key=\"('', 'nJet')-data\"), Accessed(branch='Jet_pt', buffer_key=\"('', 'Jet_pt', None)-data\")]\n" ] } ] }, { "cell_type": "code", "source": [ "def plot_two_hists(make_events):\n", " events, access_log = make_events(root_file)\n", "\n", " q3_hist = (\n", " hist.Hist.new.Reg(100, 0, 200, name=\"ptj\", label=\"Jet $p_{T}$ [GeV]\")\n", " .Double()\n", " .fill(ak.flatten(events.Jet[abs(events.Jet.eta) < 1].pt))\n", " )\n", "\n", " return access_log, q3_hist\n", "\n", "access_log_coffea, q3_hist = plot_two_hists(make_events_coffea)\n", "access_log_zipper, q31_hist = plot_two_hists(make_events_zipper)\n", "\n", "q3_hist.plot1d(flow=\"none\")\n", "q31_hist.plot1d(flow=\"none\")\n", "\n", "plt.show()\n", "print('access_log_coffea:', access_log_coffea)\n", "print('access_log_zipper:', access_log_zipper)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 508 }, "id": "lFlY98C3fHE6", "outputId": "4735da48-513e-4d41-d51d-44f6df5ba627" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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SRozZkxA7a+++mrA/Ejeh5ICtu3gwYNauXKlXC6Xxo8fH9DOxH3YnO+FU31uHj16VFdffbXq6uq0detWvfDCC1q9erXmzp0bmqKDcve/KHDhhRfaubm5zuujR4/a6enpdkFBQRirCo5Dhw7ZkuzNmzc70y699FL77rvvDl9Rp+nBBx+0hwwZ0ui88vJyu1OnTvaaNWucaZ9//rktyS4sLGyjCoPr7rvvtvv06WP7/X7btiN7/0my165d67z2+/12Wlqa/fjjjzvTysvL7bi4OPvVV1+1bdu2P/vsM1uSvX37dqfNn//8Z9vlctnffvttm9XeXMdvY2O2bdtmS7K//vprZ9rZZ59tP/nkk6EtLgga276JEyfaY8eOPeky0bgPx44da1922WUB0yJlHx7/vdCcz83//u//tmNiYuzS0lKnzfLly+3k5GS7trY26DVyBEVSXV2dduzYoZycHGdaTEyMcnJyVFhYGMbKgsPr9UqSOnfuHDD95ZdfVteuXTVw4EDl5+fL5/OFo7xW27Nnj9LT09W7d29NmDBBJSUlkqQdO3boyJEjAfuzX79+ysjIiMj9WVdXp5deekm33357wM0xI33/Ndi3b59KS0sD9pfH41FWVpazvwoLC5WSkqIRI0Y4bXJychQTE6OioqI2rzkYvF6vXC7XCfcVe/TRR9WlSxcNGzZMjz/+eMgOn4fCpk2b1K1bN5177rm688479d133znzom0flpWV6a233tLkyZNPmBcJ+/D474XmfG4WFhZq0KBBARdUHT16tCoqKrR79+6g1xgRdzMOtX/+8586evToCVexTU1N1d///vcwVRUcfr9fM2bM0MiRIzVw4EBn+r//+7/r7LPPVnp6uj7++GPNnj1bxcXF+tOf/hTGapsvKytLq1ev1rnnnquDBw/qoYce0r/+67/q008/VWlpqWJjY0/44E9NTVVpaWl4Cj4N69atU3l5uSZNmuRMi/T9d6yGfdLY/7+GeaWlperWrVvA/I4dO6pz584RuU8PHz6s2bNn6+abbw64Eduvf/1rnX/++ercubO2bt2q/Px8HTx4UE888UQYq22eMWPG6Prrr1dmZqa++OIL/eY3v9GVV16pwsJCdejQIer24QsvvCC3231C13Ek7MPGvhea87lZWlra6P/ThnnBRkCJcrm5ufr0008DxmdICuj3HTRokLp3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5eDBg+rZs2ej62oYK7Jy5UotXrxYu3btUkZGhiZMmCC/33/atX733Xf6n//5H+Xm5ioxMbHRNi6Xq1nb1bFjR916661avXq1bNt2ll+zZo2OHj2qm2+++bTrBdA6BBSgnautrdWCBQu0cuVKjR49Wr1799akSZN0yy236Nlnn5VU370RGxvrdLekpaWpQ4cOja7vb3/7mzp16qTXX39dl156qfr166eHH35YJSUleuSRRzR06FANGjRIsbGxGjp0qIYOHaqlS5c2u969e/fKtm2de+65AdO7du2qpKQkJSUlafbs2c3aLkm6/fbb9cUXXzihRarv3hk/fjzdOkAYMQYFaOf27t0rn8+nn//85wHT6+rqNGzYsBavb9euXbr++uvVq1cvZ1pycrKk+q6iOXPm6OOPP9aUKVNUVFR0WrUfa9u2bfL7/ZowYYJqa2ubvV39+vXTRRddpJUrV2rUqFHau3ev3nvvPc2fPz9otQFoOQIK0M5VVVVJkt566y2dddZZAfPi4uJavL5du3Zp4sSJAdMKCwvVtWtXZ/27d+/WgAEDWlXvOeecI5fLpeLi4oDpvXv3liQlJCRIatl2TZ48WXfddZeWLl2qVatWqU+fPrr00ktbVR+A4KCLB2jn+vfvr7i4OJWUlOicc84JeBw7ziQ2NlZHjx5tcl01NTXas2dPQDu/36/Fixdr4sSJiomp/8j59NNPWx1QunTpop///Od65plnVF1dfdrbJUk33HCDYmJi9Morr+jFF1/U7bff7oxjARAeHEEB2jm32628vDzNnDlTfr9fF198sbxer/76178qOTnZORrSq1cvFRUV6auvvlJSUpI6d+7sBI4Gn3zyiVwul1566SVddtllSklJ0dy5c1VeXq4HHnjAabd7927deeedra552bJlGjlypEaMGKF58+Zp8ODBiomJ0fbt2/X3v/9dw4cPb/Z2SVJSUpJuvPFG5efnq6KiQpMmTWp1bQCCg4ACtEN+v18dO/7/f//f/va3OvPMM1VQUKAvv/xSKSkpOv/88/Wb3/zGaZOXl6eJEyeqf//+qqmp0b59+wLGmUj13Tv9+vXTfffdp/Hjx8vr9Wr06NHavHmzUlJSnHancwRFkvr06aOdO3dqwYIFys/P1zfffKO4uDj1799feXl5mjZtWrO3q8HkyZP1/PPP66qrrlJ6enqrawMQHC772HPrALQLY8aM0TnnnKNnnnkmqOvNzc3VDz/8oFdeeeWkbWpqatSjRw999913p1zfqFGjNHToUC1evDiIVbaey+XS2rVrW3wVXgAtxxgUoB354Ycf9Oabb2rTpk3KyckJ+vp37drlXHn1ZD7//HP169ev2etctmyZkpKS9Mknn5xuea12xx13KCkpKWzvD7RHHEEB2pFf/OIX2r59uyZOnKiHH344qANBbduWx+PRa6+9pquuuioo6/z2229VU1MjScrIyFBsbGxQ1ttShw4dUkVFhSSpe/fuJ71AHIDgIaAAAADj0MUDAACMQ0ABAADGIaAAAADjEFAAAIBxCCgAAMA4BBQAAGAcAgoAADAOAQUAABiHgAIAAIxDQAEAAMb5P0xotjRCL1iHAAAAAElFTkSuQmCC\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "access_log_coffea: ['nJet', 'Jet_eta', 'Jet_pt']\n", "access_log_zipper: [Accessed(branch='nJet', buffer_key=\"('', 'nJet')-data\"), Accessed(branch='Jet_eta', buffer_key=\"('', 'Jet_eta', None)-data\"), Accessed(branch='Jet_pt', buffer_key=\"('', 'Jet_pt', None)-data\")]\n" ] } ] }, { "cell_type": "code", "source": [ "def plot_two_hists(make_events):\n", " events, access_log = make_events(root_file)\n", "\n", " has2jets = ak.sum(events.Jet.pt > 40, axis=1) >= 2\n", " q4_hist = (\n", " hist.Hist.new.Reg(100, 0, 200, name=\"met\", label=\"$E_{T}^{miss}$ [GeV]\").Double().fill(events[has2jets].MET.pt)\n", " )\n", "\n", " return access_log, q4_hist\n", "\n", "access_log_coffea, q4_hist = plot_two_hists(make_events_coffea)\n", "access_log_zipper, q41_hist = plot_two_hists(make_events_zipper)\n", "\n", "q4_hist.plot1d(flow=\"none\")\n", "q41_hist.plot1d(flow=\"none\")\n", "\n", "plt.show()\n", "print('access_log_coffea:', access_log_coffea)\n", "print('access_log_zipper:', access_log_zipper)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 512 }, "id": "MdGZ-nNbgkX8", "outputId": "8a9e17c1-2259-4d03-cdd3-cef4f6d714b8" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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sNp/+9vfhs1P5P0ndb2N7bft0KFDeuqpp+RwOFRSUhK2XKLuw+58L3T1b+exY8d01VVXqa2tTR988IGefvpprVu3Tvfcc0/sC47J3eQS3EUXXWRKS0tDr48dO2aGDh1qKioq4lhV7Bw+fNhIMps2bQpNu+SSS8wdd9wRv6J64d577zUTJ06MOK++vt7079/frF+/PjTtT3/6k5FktmzZYqnC2LrjjjvMWWedZfx+vzEmufedMcZIMi+99FLotd/vN4WFhebhhx8OTauvrzdOp9P89re/NcYY88knnxhJZvv27aFl/vCHPxiHw2G++uora7V3R8fti+TDDz80kswXX3wRmnbGGWeYxx57rG+Li4FI2zd//nwze/bsE74nmfafMd3bh7NnzzaXXnpp2LRk2YfGdP5e6M6/nf/zP/9jMjIyTG1tbWiZVatWmby8PNPa2hrT+lL+yEdbW5sqKys1Y8aM0LSMjAzNmDFDW7ZsiWNlseP1eiVJAwYMCJv+3HPPadCgQRo3bpzKysrk8/niUV6P7N27V0OHDtXIkSM1b9481dTUSJIqKyt19OjRsP05ZswYFRUVJeX+bGtr07PPPqubbrop7EaKybzvOtq/f79qa2vD9pnH49GUKVNC+2zLli3Kz8/XBRdcEFpmxowZysjI0LZt26zX3Fter1cOh6PTfaoefPBBDRw4UJMmTdLDDz/cJ4ez+8q7776rwYMHa/To0brtttv09ddfh+al2v6rq6vTa6+9poULF3aalyz7sOP3Qnf+7dyyZYvGjx8f1hB05syZamho0J49e2JaX9zvatvX/vKXv+jYsWOduqsWFBTo008/jVNVseP3+3XnnXfq4osv1rhx40LT//mf/1lnnHGGhg4dqo8//ljLly9XdXW1fv/738ex2u6ZMmWK1q1bp9GjR+vQoUO677779Hd/93favXu3amtrlZmZ2ekf9YKCAtXW1san4F7YsGGD6uvrtWDBgtC0ZN53kQT3S6TfweC82tpaDR48OGx+v379NGDAgKTbr0eOHNHy5ct1/fXXh92068c//rHOP/98DRgwQB988IHKysp06NAhPfroo3GstnuuvPJKXXvttRoxYoQ+++wz/exnP9OsWbO0ZcsWnXLKKSm1/yTp6aefltvt7nQ6N1n2YaTvhe7821lbWxvx9zQ4L5ZSPnykutLSUu3evTvsmghJYedax48fryFDhuiyyy7TZ599prPOOst2mVGZNWtW6PmECRM0ZcoUnXHGGfrv//5vZWdnx7Gy2FuzZo1mzZoVdgvqZN536e7o0aO67rrrZIzRqlWrwuYtXbo09HzChAnKzMzUj370I1VUVCR8K+8f/OAHoefjx4/XhAkTdNZZZ+ndd9/VZZddFsfK+sZTTz2lefPmKSsrK2x6suzDE30vJJKUP+0yaNAgnXLKKZ2u6K2rq1NhYWGcqoqN22+/Xa+++qreeecdDRs27KTLTpkyRZK0b98+G6XFVH5+vv7mb/5G+/btU2Fhodra2lRfXx+2TDLuzy+++EJvvfWW/vVf//WkyyXzvpMU2i8n+x0sLCzsdAH4d999p2+++SZp9msweHzxxRd68803u7xV+ZQpU/Tdd9/pz3/+s50CY2jkyJEaNGhQ6GcyFfZf0Hvvvafq6uoufy+lxNyHJ/pe6M6/nYWFhRF/T4PzYinlw0dmZqYmT56sjRs3hqb5/X5t3LhRxcXFcays54wxuv322/XSSy/p7bff1ogRI7p8T1VVlSRpyJAhfVxd7DU1Nemzzz7TkCFDNHnyZPXv3z9sf1ZXV6umpibp9ufatWs1ePBgXXXVVSddLpn3nSSNGDFChYWFYfusoaFB27ZtC+2z4uJi1dfXq7KyMrTM22+/Lb/fHwpfiSwYPPbu3au33npLAwcO7PI9VVVVysjI6HS6Ihl8+eWX+vrrr0M/k8m+/9pbs2aNJk+erIkTJ3a5bCLtw66+F7rzb2dxcbF27doVFiSDQfrcc8+NecEp74UXXjBOp9OsW7fOfPLJJ+aWW24x+fn5YVf0JpPbbrvNeDwe8+6775pDhw6FHj6fzxhjzL59+8z9999vPvroI7N//37z8ssvm5EjR5pp06bFufLu+clPfmLeffdds3//fvPHP/7RzJgxwwwaNMgcPnzYGGPMrbfeaoqKiszbb79tPvroI1NcXGyKi4vjXHV0jh07ZoqKiszy5cvDpifrvmtsbDQ7d+40O3fuNJLMo48+anbu3Bka7fHggw+a/Px88/LLL5uPP/7YzJ4924wYMcK0tLSE1nHllVeaSZMmmW3btpn333/fnH322eb666+P1yaFOdn2tbW1mWuuucYMGzbMVFVVhf1OBkcIfPDBB+axxx4zVVVV5rPPPjPPPvusOe2008wNN9wQ5y0LONn2NTY2mmXLlpktW7aY/fv3m7feesucf/755uyzzzZHjhwJrSOR958xXf+MGmOM1+s1LpfLrFq1qtP7E30fdvW9YEzX/3Z+9913Zty4ceaKK64wVVVV5vXXXzennXaaKSsri3m9aRE+jDHm17/+tSkqKjKZmZnmoosuMlu3bo13ST0mKeJj7dq1xhhjampqzLRp08yAAQOM0+k0o0aNMnfddZfxer3xLbyb5s6da4YMGWIyMzPN6aefbubOnWv27dsXmt/S0mIWLVpkTj31VONyucw//dM/mUOHDsWx4ui98cYbRpKprq4Om56s++6dd96J+DM5f/58Y0xguO3dd99tCgoKjNPpNJdddlmnbf/666/N9ddfb3Jzc01eXp658cYbTWNjYxy2prOTbd/+/ftP+Dv5zjvvGGOMqaysNFOmTDEej8dkZWWZc845xzzwwANhX97xdLLt8/l85oorrjCnnXaa6d+/vznjjDPMzTff3OmPt0Tef8Z0/TNqjDFPPvmkyc7ONvX19Z3en+j7sKvvBWO692/nn//8ZzNr1iyTnZ1tBg0aZH7yk5+Yo0ePxrxex/GiAQAArEj5az4AAEBiIXwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfALrt7bff1n/8x3/EuwwASY57uwAAAKs48gFA11xzje644w5NnTpVo0eP1ocffqjZs2frjDPO0MqVK8OW27Vrl37zm9/o/PPP17hx4zR37lxJijgtkunTp8vhcMjhcKiqqqqvN+2EFixYEKpjw4YNcasDSEeEDyANXHLJJaEv2vaPG264QZK0a9cuTZgwQVu3btVll12mu+66S88++6zeeecdrV27NrSeTz/9VIWFhVqxYoW2b9+u3bt368knn9S3337badrJ3HzzzTp06JDGjRsXNr22tlZ33HGHRo0apaysLBUUFOjiiy/WqlWr5PP5urWtV199ta688sqI89577z05HA59/PHH+tWvfqVDhw51a50AYqtfvAsA0LeMMdq5c6ceeeQRzZs3L2xebm6uGhsbZYzRwoULQ9N//OMfy+126/Dhw8rLy5MkNTY2KisrS1lZWfr222/105/+VDfddJPGjh2rxsbGTtNOxuVyqbCwMGza559/rosvvlj5+fl64IEHNH78eDmdTu3atUv/9V//pdNPP13XXHNNl9u7cOFClZSU6Msvv9SwYcPC5q1du1YXXHCBJkyYIEnyeDxdrg9A7HHkA0hxe/fuVWNjo6ZNm6bCwsKwR25urvbs2aMLL7wwtPyuXbs0ZcoUSdLu3bs1fvx4SdKePXs0duxYud1u7d69W+edd56uu+46bdiwIeK0aC1atEj9+vXTRx99pOuuu07nnHOORo4cqdmzZ+u1117T1VdfLUny+/2qqKjQiBEjlJ2drYkTJ+p3v/tdaD3/+I//qNNOO03r1q0LW39TU5PWr18fFrIAxAfhA0hxlZWV6tevX+iv/Y6Cp1yC2h8x2LVrVyh8BJ/v3btXbrdb//Iv/6JLLrlEra2tEadF4+uvv9b//u//qrS0VDk5ORGXcTgckqSKigo988wzWr16tfbs2aMlS5bohz/8oTZt2iRJ6tevn2644QatW7dO7a+nX79+vY4dO6brr78+qtoAxB7hA0hxO3bs0LFjxzRw4EDl5uaGHj/60Y8khYePAwcOaPjw4aH3dgwf48aN0y9+8QuNHj1akyZNksPh0Pe///2I06Kxb98+GWM0evTosOmDBg0K1bt8+XK1trbqgQce0FNPPaWZM2dq5MiRWrBggX74wx+GXWdy00036bPPPgsFEilwyqWkpIRTLUAC4JoPIMXt2LFD119/ve67776w6QMGDJAkPfHEE6Fpw4cP1+bNm0OvX3zxxdDz4HKRrrt4+umnY1pz0Icffii/36958+aptbVV+/btk8/n0+WXXx62XFtbmyZNmhR6PWbMGP3t3/6tnnrqKU2fPl379u3Te++9p/vvv79P6gQQHcIHkOJ27NihX/7ylxo1alSneatXr9bq1at17NgxVVdX69xzz5UUGI1SWlpqrcZRo0bJ4XCouro6bPrIkSMlSdnZ2ZIC121I0muvvabTTz89bFmn0xn2euHChVq8eLFWrFihtWvX6qyzztIll1zSV5sAIAqcdgFS2Oeff676+npNnDgx4vxbb71VVVVVeu655zRp0iRVVVWpqqrKavCQpIEDB+ryyy/Xf/7nf6q5ufmEy5177rlyOp2qqanRqFGjwh7tTxdJ0nXXXaeMjAw9//zzeuaZZ3TTTTeFrhsBEF8c+QBSWGVlpSSpoKBAtbW1YfMGDx6sjIzA3x/BkSzxtHLlSl188cW64IILVF5ergkTJigjI0Pbt2/Xp59+qsmTJ8vtdmvZsmVasmSJ/H6/vve978nr9eqPf/yj8vLyNH/+/ND6cnNzNXfuXJWVlamhoUELFiyI38YBCEP4AFLYjh07JElnn3122HSn06mGhgZlZmZKCgypjXf4OOuss7Rz50498MADKisr05dffimn06lzzz1Xy5Yt06JFiyRJP//5z3XaaaepoqJCn3/+ufLz83X++efrZz/7Wad1Lly4UGvWrNE//MM/aOjQobY3CcAJcG8XAJozZ45uu+02zZw5s88/a/r06TrvvPP0+OOP9/lndYfD4dBLL72kOXPmxLsUIG1wzQcA60c+Vq5cqdzcXO3atcvaZ3Z06623Kjc3N26fD6QzjnwAaa6lpUXDhg3T119/beXzvvrqK7W0tEiSioqKQqd+bDt8+LAaGhokSUOGDDlhczMAscc1H0Ca+9Of/qQxY8ZY+7yOQ2TjZfDgwRo8eHC8ywDSEkc+AACAVVzzAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwKr/B+79rQiIDZfuAAAAAElFTkSuQmCC\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "access_log_coffea: ['nJet', 'Jet_pt', 'MET_pt']\n", "access_log_zipper: [Accessed(branch='nJet', buffer_key=\"('', 'nJet')-data\"), Accessed(branch='Jet_pt', buffer_key=\"('', 'Jet_pt', None)-data\"), Accessed(branch='MET_pt', buffer_key=\"('', 'MET_pt')-data\")]\n" ] } ] }, { "cell_type": "code", "source": [ "def plot_two_hists(make_events):\n", " events, access_log = make_events(root_file)\n", "\n", " mupair = ak.combinations(events.Muon, 2, fields=[\"mu1\", \"mu2\"])\n", " pairmass = (mupair.mu1 + mupair.mu2).mass\n", " goodevent = ak.any(\n", " (pairmass > 60) & (pairmass < 120) & (mupair.mu1.charge == -mupair.mu2.charge),\n", " axis=1,\n", " )\n", " q5_hist = (\n", " hist.Hist.new.Reg(100, 0, 200, name=\"met\", label=\"$E_{T}^{miss}$ [GeV]\").Double().fill(events[goodevent].MET.pt)\n", " )\n", "\n", " return access_log, q5_hist\n", "\n", "access_log_coffea, q5_hist = plot_two_hists(make_events_coffea)\n", "access_log_zipper, q51_hist = plot_two_hists(make_events_zipper)\n", "\n", "q5_hist.plot1d(flow=\"none\")\n", "q51_hist.plot1d(flow=\"none\")\n", "\n", "plt.show()\n", "print('access_log_coffea:', access_log_coffea)\n", "print('access_log_zipper:', access_log_zipper)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 581 }, "id": "wnSc_96Ihd-T", "outputId": "3dc0436e-e5b2-4905-d328-adb501d64ac0" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.11/dist-packages/mplhep/utils.py:652: RuntimeWarning: All sumw are zero! Cannot compute meaningful error bars\n", " return np.abs(method_fcn(self.values(), variances) - self.values())\n", "/usr/local/lib/python3.11/dist-packages/mplhep/utils.py:652: RuntimeWarning: All sumw are zero! Cannot compute meaningful error bars\n", " return np.abs(method_fcn(self.values(), variances) - self.values())\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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cXGx8vLyPK7e5OTk3HbMV199pYEDB2rixIl6+eWXq7MEAABguWrFTXh4uMLDwysdFx8fr7y8PGVkZCg2NlaStG3bNpWVlSkuLq7cY2JjY9WwYUNt3bpVSUlJkqSsrCxlZ2crPj7ePe7IkSN69NFHNWbMGP3mN7+pzvQBAMB9wCuflpKkwYMHKycnR8uWLVNJSYnGjRunPn36aO3atZKkc+fOaeDAgVq1apX69u0rSXruuee0adMmrVy5UkFBQZo6daqk799bI33/UtSjjz6qxMREzZ8/3/1YDRo0qFJ03VLVd1sDAIC6o6rP39W6clMda9as0ZQpUzRw4ED5+PgoKSlJCxcudO8vKSlRVlaWrl275t72zjvvuMcWFRUpMTFRS5Ysce//8MMP9e2332r16tVavXq1e3urVq30zTffeGspAACgHvHalZu6jCs3AADUP7X6e24AAABqC3EDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCpei5vLly9r1KhRCgoKUkhIiFJSUnTlypUKj7lx44YmT56s0NBQBQYGKikpSTk5OeWOvXTpklq2bCmHw6G8vDwvrAAAANRHXoubUaNG6ciRI9qyZYs2btyonTt3auLEiRUeM336dH3yySdav369duzYofPnz+vJJ58sd2xKSoq6d+/ujakDAIB6zGGMMTV9p0ePHlWXLl20b98+9enTR5K0efNmPf744zp79qyioqJuOyY/P1/h4eFau3atnnrqKUnSsWPH1LlzZ6Wnp6tfv37usUuXLtW6des0d+5cDRw4UN99951CQkLuOJ+ioiIV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\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "access_log_coffea: ['nMuon', 'Muon_pt', 'Muon_phi', 'Muon_eta', 'Muon_mass', 'Muon_charge', 'MET_pt']\n", "access_log_zipper: [Accessed(branch='nMuon', buffer_key=\"('', 'nMuon')-data\"), Accessed(branch='Muon_pt', buffer_key=\"('', 'Muon_pt', None)-data\"), Accessed(branch='Muon_phi', buffer_key=\"('', 'Muon_phi', None)-data\"), Accessed(branch='Muon_eta', buffer_key=\"('', 'Muon_eta', None)-data\"), Accessed(branch='Muon_mass', buffer_key=\"('', 'Muon_mass', None)-data\"), Accessed(branch='Muon_charge', buffer_key=\"('', 'Muon_charge', None)-data\"), Accessed(branch='MET_pt', buffer_key=\"('', 'MET_pt')-data\")]\n" ] } ] }, { "cell_type": "code", "source": [ "def plot_two_hists(make_events):\n", " events, access_log = make_events(root_file)\n", "\n", " jets = ak.zip(\n", " {k: getattr(events.Jet, k) for k in [\"x\", \"y\", \"z\", \"t\", \"btagDeepFlavB\"]},\n", " with_name=\"LorentzVector\",\n", " behavior=events.Jet.behavior,\n", " )\n", " jets[\"btag\"] = jets.btagDeepFlavB\n", " trijet = ak.combinations(jets, 3, fields=[\"j1\", \"j2\", \"j3\"])\n", " trijet[\"p4\"] = trijet.j1 + trijet.j2 + trijet.j3\n", " trijet = ak.flatten(trijet[ak.singletons(ak.argmin(abs(trijet.p4.mass - 172.5), axis=1))])\n", " maxBtag = np.maximum(\n", " trijet.j1.btag,\n", " np.maximum(\n", " trijet.j2.btag,\n", " trijet.j3.btag,\n", " ),\n", " )\n", " q6_hists = {\n", " \"trijetpt\": hist.Hist.new.Reg(100, 0, 200, name=\"pt3j\", label=\"Trijet $p_{T}$ [GeV]\").Double().fill(trijet.p4.pt),\n", " \"maxbtag\": hist.Hist.new.Reg(100, 0, 1, name=\"btag\", label=\"Max jet b-tag score\").Double().fill(maxBtag),\n", " }\n", "\n", " return access_log, q6_hists\n", "\n", "access_log_coffea, q6_hists = plot_two_hists(make_events_coffea)\n", "access_log_zipper, q61_hists = plot_two_hists(make_events_zipper)\n", "\n", "#coffea\n", "out1 = q6_hists\n", "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4), sharey=True)\n", "out1[\"trijetpt\"].plot1d(ax=ax1, flow=\"none\")\n", "out1[\"maxbtag\"].plot1d(ax=ax2, flow=\"none\")\n", "\n", "#zipper\n", "out2 = q61_hists\n", "out2[\"trijetpt\"].plot1d(ax=ax1, flow=\"none\")\n", "out2[\"maxbtag\"].plot1d(ax=ax2, flow=\"none\")\n", "\n", "plt.show()\n", "print('access_log_coffea:', access_log_coffea)\n", "print('access_log_zipper:', access_log_zipper)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 447 }, "id": "z9YSfWh1hbX8", "outputId": "618c1fcc-03c9-4af9-a1d1-0ee66b6baff2" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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htFcmtqXBtvvUTC1h7YEpmBqi+R9e7zpR32+9FFiYqJCQ0N18OBBt/KDBw8qOTm5Rv2IiAhFRES4lcXHxzfq3LGxsUHxA28s2k/7aX/D2x8sw+dVfNWXBtvvUTC1h7YEpmBqi+Rdexraj/r8X/rw8HCdc845WrfupzvhnE6n1q1b53alEwAAAMHPkkXdp0+frrFjx2rAgAE699xztXDhQpWUlOiGG26w4nQAAAAIUJYkm9dee62+++473XvvvcrPz9fZZ5+ttWvXKikpyYrTKSIiQrNnz64xhNRa0H7aT/tbb/t9Jdjex2BqD20JTMHUFsna9vj8BiEAAACgSnDchgkAAICARLIJAAAAy5BsAgAAwDIkmwAAALBMUCSbixYtUpcuXRQZGalBgwbpww8/9HdIlpgzZ45sNpvbKz093bX92LFjysrKUkJCgqKjozV69Ogai+u3JO+8845Gjhypjh07ymaz6eWXX3bbbozRvffeq5SUFEVFRWn48OHatWuXW50ffvhBY8aMUWxsrOLj4zV+/HgVFxc3Yysar772jxs3rsbvw6WXXupWp6W2f968eRo4cKBiYmLUoUMHXXnllcrNzXWr05Df97y8PF1++eWy2+3q0KGDbrvtNh0/frw5mxJQvO0rV61apfT0dEVGRqpPnz5as2ZNM0XaMN60Z9myZbrgggvUrl07tWvXTsOHDw+oz4rGfo6tXLlSNptNV155pbUBesHbthw9elRZWVlKSUlRRESETjvttID5XfO2LQsXLtTpp5+uqKgopaamatq0aTp27FgzRVu7+j5PPFm/fr369++viIgI9ejRQ9nZ2Y0PwMpn9TaHlStXmvDwcPP000+b7du3mwkTJpj4+Hhz8OBBf4fmc7NnzzZnnnmmOXDggOv13XffubZPnDjRpKammnXr1pmPP/7YnHfeeWbw4MF+jLhp1qxZY+6++27z0ksvGUlm9erVbtvnz59v4uLizMsvv2w+/fRT8/Of/9x07drVlJaWuupceuml5qyzzjIffPCBeffdd02PHj3Mdddd18wtaZz62j927Fhz6aWXuv0+/PDDD251Wmr7MzMzzYoVK8y2bdtMTk6Oueyyy0xaWpopLi521anv9/348eOmd+/eZvjw4Wbr1q1mzZo1JjEx0cycOdMfTfI7b/vK9957z4SGhppHHnnE7Nixw9xzzz0m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tqIAsnLlShMREWGys7PNjh07zE033WTi4+Pd7kANFr///e/N+vXrzd69e817771nhg8fbhITE82hQ4eMMZVLwaSlpZm3337bfPzxxyYjI8NkZGT4OerGKyoqMlu3bjVbt241ksxjjz1mtm7dar7++mtjTOXSR/Hx8eaVV14x//vf/8yoUaM8Ln3Ur18/s3nzZrNx40bTs2fPFrH0jzF1t7+oqMjMmDHDbNq0yezdu9e89dZbpn///qZnz57m2LFjrmO01PZPmjTJxMXFmfXr17st7eRwOFx16vt9r1r66JJLLjE5OTlm7dq1pn379q166aO6+srrr7/e3Hnnna767733nmnTpo1ZsGCB2blzp5k9e3bALX3kTXvmz59vwsPDzYsvvuj2O1VUVOSvJrh425aTBdLd6N62JS8vz8TExJgpU6aY3Nxc8/rrr5sOHTqYBx980F9NcPG2LbNnzzYxMTHmhRdeMF9++aV54403TPfu3c0111zjrya41Pd5euedd5rrr7/eVb9q6aPbbrvN7Ny50yxatKh1L31kjDFPPvmkSUtLM+Hh4ebcc881H3zwgb9DssS1115rUlJSTHh4uOnUqZO59tprze7du13bS0tLzeTJk027du2M3W43v/jFL8yBAwf8GHHT/Pe//zWSarzGjh1rjKlc/mjWrFkmKSnJREREmGHDhpnc3Fy3Yxw+fNhcd911Jjo62sTGxpobbrghID5cGqKu9jscDnPJJZeY9u3bm7CwMHPqqaeaCRMm1Pgnq6W231O7JZkVK1a46jTk9/2rr74yI0aMMFFRUSYxMdH8/ve/NxUVFc3cmsBRV185dOhQ199WlX/84x/mtNNOM+Hh4ebMM880//rXv5o54rp5055TTz3V4+/U7Nmzmz9wD7z92VQXSMmmMd635f333zeDBg0yERERplu3buahhx4yx48fb+aoPfOmLRUVFWbOnDmme/fuJjIy0qSmpprJkyebI0eONH/gJ6nv83Ts2LFm6NChNfY5++yzTXh4uOnWrZtb/+stmzEt7NouAAAAWowWPWcTAAAAgY1kEwAAAJYh2QQAAIBlSDYBAABgGZJNAAAAWIZkEwAAAJYh2QQAAIBlSDYBAPCz7OxsxcfH+/y4X331lWw2m3Jycnx+bKChSDYBAK3auHHjZLPZNHHixBrbsrKyZLPZNG7cOEtjuPbaa/XFF194tY/NZtPLL79sSTxWJb9onUg20SQXXnihpk6d6vp+3LhxuvLKK/0WT0NceOGFstlsAfHfftWHnJUfGgDql5qaqpUrV6q0tNRVduzYMT3//PNKS0uz/PxRUVHq0KGD5eeBVF5e7u8QWh2STbiSndpec+bMqXXfl156SQ888IDr+z/+8Y/Kzs5u8LlPTlaby4QJE3TgwAH17t3brTw/P1+33nqrevToocjISCUlJWnIkCFasmSJHA5Hg449cuRIXXrppR63vfvuu7LZbPrf//4nqfL9OnDgQNMaA6DJ+vfvr9TUVL300kuuspdeeklpaWnq16+fW921a9fq/PPPV3x8vBISEnTFFVdoz549ru3PPvusoqOjtWvXLlfZ5MmTlZ6eXms/4ulK4iuvvKL+/fsrMjJS3bp103333afjx49Lkrp06SJJ+sUvfiGbzeb6vjaff/65Bg8erMjISPXu3VsbNmyote769et1ww03qKCgoMbnwF//+lcNGDBAMTExSk5O1q9//WsdOnTIbf9XX31VPXv2VGRkpC666CI988wzstlsOnr0qMfzGWM0Z84cpaWlKSIiQh07dtTvfvc71/aysjLdcccdSk1NVUREhHr06KHly5e7tm/YsEHnnnuuIiIilJKSojvvvNP1PkmVnzNTpkzR1KlTlZiYqMzMTEnStm3bNGLECEVHRyspKUnXX3+9vv/++zrfRzRSo5+qjqBx4MAB12vhwoUmNjbWrayoqKjGPmVlZT4599ChQ82tt97qk2M19Zx79uwxycnJJj093fz97383O3bsMHv27DEvv/yyueyyy8wrr7zSoOOvXr3ahISEmH379tXYdsMNN5gBAwbUKJdkVq9e7W1TAPjA2LFjzahRo8xjjz1mhg0b5iofNmyYefzxx82oUaPM2LFjXeUvvvii+ec//2l27dpltm7dakaOHGn69OljTpw44arzy1/+0gwcONBUVFSY119/3YSFhZmPP/641hhWrFhh4uLiXN+/8847JjY21mRnZ5s9e/aYN954w3Tp0sXMmTPHGGPMoUOHjCSzYsUKc+DAAXPo0CGPx927d6+RZDp37mxefPFFs2PHDvPb3/7WxMTEmO+//97jPmVlZTU+C6o+B5YvX27WrFlj9uzZYzZt2mQyMjLMiBEjXPt++eWXJiwszMyYMcN8/vnn5oUXXjCdOnUyksyRI0c8nm/VqlUmNjbWrFmzxnz99ddm8+bN5qmnnnJtv+aaa0xqaqp56aWXzJ49e8xbb71lVq5caYwx5ptvvjF2u91MnjzZ7Ny506xevdokJiaa2bNnu/YfOnSoiY6ONrfddpv5/PPPzeeff26OHDli2rdvb2bOnGl27txpPvnkE3PxxRebiy66qNafERqPZBNuTu7wqgwdOtRkZWWZW2+91SQkJJgLL7zQVV49cavqtI0x5sSJE2bu3LmmS5cuJjIy0vTt29esWrXKra4kt9fevXs9xnXgwAEjySxcuNCcffbZJiIiwvTq1cu8++67XrextmQzMzPTdO7c2RQXF3vcz+l0NqhdFRUVJikpyTzwwANu+xcVFZno6GizZMmSGscm2QT8p6rfOnTokImIiDBfffWV+eqrr0xkZKT57rvvaiSbJ/vuu++MJPPZZ5+5yn744QfTuXNnM2nSJJOUlGQeeuihOmM4ue8dNmyYmTt3rludv/71ryYlJcX1fUP6japkc/78+a6yiooK07lzZ/Pwww83OJ7afPTRR0aSKxm94447TO/evd3q3H333XUmm3/4wx/MaaedZsrLy2tsy83NNZLMm2++6XHfu+66y5x++umu/tkYYxYtWmSio6Ndyf/QoUNNv3793PZ74IEHzCWXXOJWtm/fPiPJ5Obm1t1oeI1hdDTYM888o/DwcL333ntaunRpvfXnzZunZ599VkuXLtX27ds1bdo0/eY3v3EN3/zxj39URkaGa0j7wIEDSk1N9XisqrmVTz/9tBYuXKicnBylpaVpzJgxcjqdTW7b4cOH9cYbbygrK0tt27b1WMdmszWoXW3atNH/+3//T9nZ2TLGuPZftWqVTpw4oeuuu67J8QLwvfbt2+vyyy9Xdna2VqxYocsvv1yJiYk16u3atUvXXXedunXrptjYWNcQdl5enqtOu3bttHz5ci1ZskTdu3fXnXfe6VUsn376qe6//35FR0e7XlV9ZUOn9FSXkZHh+rpNmzYaMGCAdu7cKUk688wzXecYMWJEncfZsmWLRo4cqbS0NMXExGjo0KGSfmp7bm6uBg4c6LbPueeeW+cxf/nLX6q0tFTdunXThAkTtHr1atcweE5OjkJDQ13nOdnOnTuVkZHh6p8laciQISouLtY333zjKjvnnHPc9vv000/13//+1+39TU9PlyS3KRHwjTb+DgAtR8+ePfXII480qG5ZWZnmzp2rt956y9XJdevWTRs3btSf//xnDR06VHFxcQoPD5fdbldycnKdx/v0008VFhamV155xdWxP/jggxowYID279+vf/3rX1q6dKlOnDih3Nxc9erVS1Ll3MysrKx64929e7eMMTr99NPdyhMTE3Xs2DFJlXel3n///fW2S5JuvPFGPfroo9qwYYMuvPBCSdKKFSs0evRoxcXFNeg9BND8brzxRk2ZMkWStGjRIo91Ro4cqVNPPVXLli1Tx44d5XQ61bt37xo3nrzzzjsKDQ3VgQMHVFJSopiYmAbHUVxcrPvuu09XXXVVjW2RkZFetKh+a9asUUVFhaTKG5VqU1JSoszMTGVmZuq5555T+/btlZeXp8zMzCbddJOamqrc3Fy99dZbevPNNzV58mRX/1lXPN44+SJCcXGxRo4cqYcffrhG3ZSUFJ+cEz8h2USDnfyfYV12794th8Ohiy++2K28vLy8xmT7hsjJydFVV13lNgk+NjbW9fXEiRM1ceJE/e9//9OECRO0efNmr8/hyYcffiin06kxY8aorKyswe1KT0/X4MGD9fTTT+vCCy/U7t279e677+r+++/3SVwArHHppZeqvLxcNpvNdSNJdYcPH1Zubq6WLVumCy64QJK0cePGGvXef/99Pfzww3rttdd0xx13aMqUKXrmmWcaHEf//v2Vm5urHj161FonLCxMJ06caNDxPvjgA/3f//2fJOn48ePasmWLK6k+9dRTa9QPDw+vcezPP/9chw8f1vz5812jUB9//LFbndNPP11r1qxxK/voo4/qjS8qKkojR47UyJEjlZWVpfT0dH322Wfq06ePnE6nNmzYoOHDh9fY74wzztA///lPGWNcVzffe+89xcTEqHPnzrWer3///vrnP/+pLl26qE0bUiGr8Q6jwWobXvakuLhYkvSvf/1LnTp1ctsWERHh9blzcnI0duxYt7JNmzYpMTHR7fjbt2/XmWee6fXxe/ToIZvNptzcXLfybt26Sfrpv31v2jV+/HjdcsstWrRokVasWKHu3bvXOhQEIDCEhoa6hpdDQ0NrbG/Xrp0SEhL01FNPKSUlRXl5eTWGyIuKinT99dfrd7/7nUaMGKHOnTtr4MCBGjlypK6++uoGxXHvvffqiiuuUFpamq6++mqFhITo008/1bZt2/Tggw9Kqrwjfd26dRoyZIgiIiLUrl27Wo+3aNEi9ezZU2eccYYef/xxHTlyRDfeeGOt9bt06aLi4mKtW7dOZ511lux2u9LS0hQeHq4nn3xSEydO1LZt29xWI5Gkm2++WY899pjuuOMOjR8/Xjk5Oa4VSqoPdVeXnZ2tEydOaNCgQbLb7frb3/6mqKgonXrqqUpISNDYsWN144036oknntBZZ52lr7/+WocOHdI111yjyZMna+HChbrllls0ZcoU5ebmavbs2Zo+fbpCQmqfKZiVlaVly5bpuuuu0+23365TTjlFu3fv1sqVK/WXv/zF488ejcecTViiV69eioiIUF5ennr06OH2qj4v09N/zycrLS3Vrl273Oo5nU4tXLhQY8eOdetQtm3b1qhkMyEhQRdffLH+9Kc/qaSkpMntkqRrrrlGISEhev755/Xss8/qxhtvrLWzBRA4YmNj3UZOqgsJCdHKlSu1ZcsW9e7dW9OmTdOjjz7qVufWW29V27ZtNXfuXElSnz59NHfuXN18883av39/g2LIzMzU66+/rjfeeEMDBw7Ueeedp8cff9ztKuQf/vAHvfnmm0pNTa13xGj+/PmaP3++zjrrLG3cuFGvvvqqx/moVQYPHqyJEyfq2muvVfv27fXII4+offv2ys7O1qpVq9SrVy/Nnz9fCxYscNuva9euevHFF/XSSy+pb9++WrJkie6++25JtV9oiI+P17JlyzRkyBD17dtXb731ll577TUlJCRIkpYsWaKrr77atXzUhAkTXP10p06dtGbNGn344Yc666yzNHHiRI0fP1733HNPne9Hx44d9d577+nEiRO65JJL1KdPH02dOlXx8fF1JqloJD/foIQAU9fd6J7u4K7rbvS7777bJCQkmOzsbLN7926zZcsW88QTT5js7GxX/QkTJpiBAweavXv3mu+++85t6ZAqmzdvNm3atDHp6enm/fffNzt27DBXX3216dq1a427G0eNGmXWrl1bZxtra8vu3btNUlKSSU9PNytXrjQ7duwwn3/+ufnrX/9qkpKSzPTp0xvcrirjx4837dq1M6GhoWb//v21xiTuRgdataVLl5pOnTr5OwxLPPjgg6Zz587+DgN+xDA6LPPAAw+offv2mjdvnr788kvFx8erf//+uuuuu1x1ZsyYobFjx6pXr14qLS3V3r17ayxOnJOTo/T0dN1+++0aPXq0CgoKlJmZqQ0bNtRYBLmxVzYlqXv37tq6davmzp2rmTNn6ptvvlFERIR69eqlGTNmaPLkyQ1uV5Xx48dr+fLluuyyy9SxY8dGxQUguO3bt09r1qxpdN8VaBYvXqyBAwcqISFB7733nh599FHX/FC0TjZjqq3NAjTRddddp9DQUP3tb3/z2TGzsrJ05MgRPf/883XWKy0tVefOnXX48OE661144YU6++yztXDhQp/F2FQ2m02rV68O+Ed9AvC99u3bq1OnTsrOztbZZ5/t73CabNq0afr73/+uH374QWlpabr++us1c+ZMbsRpxZiYAJ84fvy4duzYoU2bNvn8v/OcnBz17du33no7d+50rZNWn8WLFys6OlqfffZZU8NrkokTJyo6OtqvMQDwr++++045OTlBkWhK0uOPP65vv/1Wx44d0xdffKFZs2aRaLZyXNmET+Tk5Gjw4MG66KKL9Le//a3OuyK9YYxRXFycVq5cqcsuu8wnx9y/f79KS0slyXV3pb8cOnRIhYWFkirXdvPmjn8AAFoCkk0AAABYhmF0AAAAWIZkEwAAAJYh2QQAAIBlSDYBAABgGZJNAAAAWIZkEwAAAJYh2QQAAIBlSDYBAABgGZJNAAAAWIZkEwAAAJYh2QQAAIBl/j9PYwyKF7DntQAAAABJRU5ErkJggg==\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "access_log_coffea: ['nJet', 'Jet_phi', 'Jet_pt', 'Jet_eta', 'Jet_mass', 'Jet_btagDeepFlavB']\n", "access_log_zipper: [Accessed(branch='nJet', buffer_key=\"('', 'nJet')-data\"), Accessed(branch='Jet_phi', buffer_key=\"('', 'Jet_phi', None)-data\"), Accessed(branch='Jet_pt', buffer_key=\"('', 'Jet_pt', None)-data\"), Accessed(branch='Jet_eta', buffer_key=\"('', 'Jet_eta', None)-data\"), Accessed(branch='Jet_mass', buffer_key=\"('', 'Jet_mass', None)-data\"), Accessed(branch='Jet_btagDeepFlavB', buffer_key=\"('', 'Jet_btagDeepFlavB', None)-data\")]\n" ] } ] }, { "cell_type": "code", "source": [ "def plot_two_hists(make_events):\n", " events, access_log = make_events(root_file)\n", "\n", " cleanjets = events.Jet[\n", " ak.all(events.Jet.metric_table(events.Muon[events.Muon.pt > 10]) >= 0.4, axis=2)\n", " & ak.all(\n", " events.Jet.metric_table(events.Electron[events.Electron.pt > 10]) >= 0.4,\n", " axis=2,\n", " )\n", " & (events.Jet.pt > 30)\n", " ]\n", " q7_hist = (\n", " hist.Hist.new.Reg(100, 0, 200, name=\"sumjetpt\", label=r\"Jet $\\sum p_{T}$ [GeV]\")\n", " .Double()\n", " .fill(ak.sum(cleanjets.pt, axis=1))\n", " )\n", "\n", " return access_log, q7_hist\n", "\n", "access_log_coffea, q7_hist = plot_two_hists(make_events_coffea)\n", "access_log_zipper, q71_hist = plot_two_hists(make_events_zipper)\n", "\n", "q7_hist.plot1d(flow=\"none\")\n", "q71_hist.plot1d(flow=\"none\")\n", "\n", "plt.show()\n", "print('access_log_coffea:', access_log_coffea)\n", "print('access_log_zipper:', access_log_zipper)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 512 }, "id": "X0ziLDnMhbdD", "outputId": "ece82c65-1c20-4708-abe7-8bcd4ecbb470" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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r0mbzaZnnnnG7GPVfXghnwsX8r5ZXFyslJQUhYaGKioqSrNmzVJtbe0lqZmA8q3f//73mjFjhh5//HG9//776t+/v5KTk1VaWtrSpflt+/btysjI0K5du5STk6OamhoNGzZMFRUVPv0mTJigo0ePmtPChQtbqOKm6d27t0/97777rtk2ffp0vf7661q/fr22b9+uI0eOaPTo0S1YrX/27NnjM7acnBxJ0j333GP2aU37r6KiQv3799fSpUsbbV+4cKGWLFmiFStWKC8vT2FhYUpOTtaJEyfMPmlpaSosLFROTo6ys7O1Y8cOTZw48XIN4bzONcbKykq9//77mjt3rt5//3396U9/UlFRkX70ox816Dt//nyf/Tp16tTLUf55nW8fStLw4cN9av/d737n096a96Ekn7EdPXpUL7/8smw2m1JTU336WXEfXsjnwvneN0+ePKmUlBRVV1dr586dWrNmjVavXq158+ZdmqKb5df/2oAbbrjByMjIMJ+fPHnSiImJMbKyslqwquZRWlpqSDK2b99uzrv11luNhx9+uOWKukiPP/640b9//0bbysrKjPbt2xvr168353388ceGJCM3N/cyVdi8Hn74YaNHjx5GXV2dYRite/9JMjZs2GA+r6urM5xOp/HMM8+Y88rKyozg4GDjd7/7nWEYhrFv3z5DkrFnzx6zz5tvvmnYbDbjiy++uGy1X6gzx9iY3bt3G5KMzz//3JzXrVs3Y9GiRZe2uGbQ2PjS09ONkSNHnnWZtrgPR44cadx+++0+81rLPjzzc+FC3jf/8pe/GAEBAYbb7Tb7LF++3LDb7UZVVVWz18gRFEnV1dXKz89XUlKSOS8gIEBJSUnKzc1twcqah8fjkSRFRkb6zH/11VfVuXNn9enTR5mZmaqsrGyJ8pps//79iomJUffu3ZWWlqbi4mJJUn5+vmpqanz2Z8+ePRUXF9cq92d1dbXWrl2rBx980OfHMVv7/qt38OBBud1un/3lcDiUmJho7q/c3FxFRERo8ODBZp+kpCQFBAQoLy/vstfcHDwej2w2W4PfFXv66afVqVMnDRw4UM8888wlO3x+KbzzzjuKiorStddeq8mTJ+urr74y29raPiwpKdEbb7yh8ePHN2hrDfvwzM+FC3nfzM3NVd++fX2+UDU5OVler1eFhYXNXmOr+DXjS+3f//63Tp48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sUVrAdoKAgrQho0bN06jRo3ya5nbbrtN06ZNO2+/4OBgbdy4US6XS/v379ewYcP09ddfN63QJpowYYKOHj2qPn36+Mx3u916+OGHdfXVV6tDhw6Kjo7WTTfdpOXLl6uysvKC1n3XXXdp+PDhjbb97W9/k81m04cffihJev7553X06NGLGwwAHwQUAE0WFhamv/zlL+rfv78+/PBD3XHHHSovL79s2w8NDZXT6VRg4H8up/vXv/6lgQMH6u2339aCBQv0wQcfKDc3V48++qiys7O1ZcuWC1r3+PHjlZOTo8OHDzdoW7VqlQYPHqx+/fpJkhwOh5xOZ/MMCoAkAgrwnVJXV6esrCzFx8crJCRE/fv31x//+Eezfdy4cdq+fbuef/5585TFZ599ds51RkRE6O2339a1116rXbt2aeTIkaqqqmq0r9vtls1m0/PPP6+BAweqQ4cO6t27t959991mG+NDDz2kwMBAvffee7r33nvVq1cvde/eXSNHjtQbb7yhu+66y+x7rr/HnXfeqS5dumj16tU+6y8vL9f69es1fvz4ZqsZQEMEFOA7JCsrS6+88opWrFihwsJCTZ8+XT/5yU+0fft2SadOVbhcLvPUydGjRxUbG3ve9UZFRSknJ0fdunXTtm3bdN9996m2trZBv/prRV5++WUtXrxYBQUFiouLU1pamurq6i56fF999ZXefvttZWRk+NxpdDqbzWY+PtffIzAwUA888IBWr16t0+8lWL9+vU6ePKmxY8dedL0Azo6AAnxHVFVVacGCBXr55ZeVnJys7t27a9y4cfrJT36il156SdKpUxVBQUHmqROn06l27dpd0PpjY2O1ZcsWhYWFadOmTXrkkUca9PnHP/6h9u3ba9OmTbr11lvVs2dPPfXUUyouLtYXX3yhFStWaMCAAerbt6+CgoI0YMAADRgwQEuXLr2gGg4cOCDDMHTttdf6zO/cubPCw8MVHh6u2bNnX/Df48EHH9Snn35qBjjp1Omd1NRUORyOC6oJQNPwPSjAd8SBAwdUWVmpH/7whz7zq6urNXDgwGbZxv/93/+poqJCERER+tnPftagvaCgQKNHj9ZVV11lzrPb7ebjSZMmadKkSfrwww81YcIE5eXlNUtdu3fvVl1dndLS0szTTxfy9+jZs6duvPFGvfzyy7rtttt04MAB/e1vf9P8+fObpS4AZ0dAAb4j6i9efeONN/S9733Ppy04OPii17969Wo99thj6tChg/785z+rb9++DfoUFBQoPT3dZ15ubq46d+7sU1NhYaF69+7tdw1XX321bDabioqKfOZ3795dkhQSEmLOu9C/x/jx4zV16lQtXbpUq1atUo8ePXTrrbf6XRsA/3CKB/iOSEhIUHBwsIqLi3X11Vf7TKdfZxIUFKSTJ0/6te7s7GxNmDBB7dq102uvvaYf/OAHDfp888032r9/v8+66+rqtHjxYqWnpysg4D9vRx999FGTAkqnTp30wx/+UC+++KIqKirO2fdC/x733nuvAgICtG7dOr3yyit68MEHfa5jAXBpcAQF+I7o2LGjZs6cqenTp6uurk4333yzPB6P/v73v8tut5tHNq666irl5eXps88+U3h4uCIjI33Cw5l27type++9V7W1tfrf//1fjRw5stF+e/fulc1m09q1a3X77bcrIiJC8+bNU1lZmebMmePTt7CwUJMnT27SOJctW6abbrpJgwcP1hNPPKF+/fopICBAe/bs0SeffKJBgwb59fcIDw/Xfffdp8zMTHm9Xo0bN65JdQHwkwGgzbr//vuN1NRU83ldXZ2xePFi49prrzXat29vdOnSxUhOTja2b99u9ikqKjKGDBlihISEGJKMgwcPnnX9hYWFxhVXXGFIMhYsWHDOWl566SWjT58+xiuvvGJ07drVCA0NNX784x8bxcXFDfr26NHDOHTo0DnXd+uttxoPP/xwo21HjhwxpkyZYsTHxxvt27c3wsPDjRtuuMF45plnjIqKCr/+HoZhGDt37jQkGXfcccc5a5JkbNiw4Zx9AFwYfosHaMOGDx+uq6++Wi+++GKzr/vQoUO68cYbdfjwYT388MNavHjxOftnZGTo66+/1rp1687Z75tvvtGVV16pr7766pz9brvtNg0YMOC8272cbDabNmzY4Pe39wJoiGtQgDbo66+/VnZ2tt555x0lJSU1+/qPHTum5ORkHT58WGPHjtWiRYvOu0xBQYH5zavn8vHHH6tnz54XVMeyZcsUHh6uvXv3XlD/S2XSpEkKDw9v0RqAtoYjKEAb9OMf/1h79uxRenq6nnrqqWa/qPOee+7x+Qba8/n+97+vo0eP6rXXXtMdd9zRLDV88cUX+uabbyRJcXFxCgoKapb1NkVpaam8Xq8kqWvXrmf9kjgAF46AAsBvaWlpfn1HSY8ePfTWW29dwooAtDUEFAAAYDlcgwIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACyHgAIAACzn/wOCSjRiBQaHiQAAAABJRU5ErkJggg==\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "access_log_coffea: ['nMuon', 'Muon_pt', 'nJet', 'Jet_pt', 'Jet_phi', 'Jet_eta', 'Muon_phi', 'Muon_eta', 'nElectron', 'Electron_pt', 'Electron_phi', 'Electron_eta']\n", "access_log_zipper: [Accessed(branch='nMuon', buffer_key=\"('', 'nMuon')-data\"), Accessed(branch='Muon_pt', buffer_key=\"('', 'Muon_pt', None)-data\"), Accessed(branch='nJet', buffer_key=\"('', 'nJet')-data\"), Accessed(branch='Jet_pt', buffer_key=\"('', 'Jet_pt', None)-data\"), Accessed(branch='Jet_phi', buffer_key=\"('', 'Jet_phi', None)-data\"), Accessed(branch='Jet_eta', buffer_key=\"('', 'Jet_eta', None)-data\"), Accessed(branch='Muon_phi', buffer_key=\"('', 'Muon_phi', None)-data\"), Accessed(branch='Muon_eta', buffer_key=\"('', 'Muon_eta', None)-data\"), Accessed(branch='nElectron', buffer_key=\"('', 'nElectron')-data\"), Accessed(branch='Electron_pt', buffer_key=\"('', 'Electron_pt', None)-data\"), Accessed(branch='Electron_phi', buffer_key=\"('', 'Electron_phi', None)-data\"), Accessed(branch='Electron_eta', buffer_key=\"('', 'Electron_eta', None)-data\")]\n" ] } ] }, { "cell_type": "code", "source": [ "def plot_two_hists(make_events):\n", " events, access_log = make_events(root_file)\n", "\n", " events[\"Electron\", \"pdgId\"] = -11 * events.Electron.charge\n", " events[\"Muon\", \"pdgId\"] = -13 * events.Muon.charge\n", " events[\"leptons\"] = ak.with_name(\n", " ak.concatenate(\n", " [events.Electron, events.Muon],\n", " axis=1,\n", " ),\n", " \"PtEtaPhiMCandidate\",\n", " )\n", " events = events[ak.num(events.leptons) >= 3]\n", " pair = ak.argcombinations(events.leptons, 2, fields=[\"l1\", \"l2\"])\n", " pair = pair[(events.leptons[pair.l1].pdgId == -events.leptons[pair.l2].pdgId)]\n", "\n", " pair = pair[\n", " ak.singletons(\n", " ak.argmin(\n", " abs((events.leptons[pair.l1] + events.leptons[pair.l2]).mass - 91.2),\n", " axis=1,\n", " )\n", " )\n", " ]\n", "\n", " events = events[ak.num(pair) > 0]\n", " pair = pair[ak.num(pair) > 0][:, 0]\n", "\n", " l3 = ak.local_index(events.leptons)\n", " l3 = l3[(l3 != pair.l1) & (l3 != pair.l2)]\n", " l3 = l3[ak.argmax(events.leptons[l3].pt, axis=1, keepdims=True)]\n", " l3 = events.leptons[l3][:, 0]\n", "\n", " mt = np.sqrt(2 * l3.pt * events.MET.pt * (1 - np.cos(events.MET.delta_phi(l3))))\n", " q8_hist = hist.Hist.new.Reg(100, 0, 200, name=\"mt\", label=r\"$\\ell$-MET transverse mass [GeV]\").Double().fill(mt)\n", "\n", "\n", " return access_log, q8_hist\n", "\n", "access_log_coffea, q8_hist = plot_two_hists(make_events_coffea)\n", "access_log_zipper, q81_hist = plot_two_hists(make_events_zipper)\n", "\n", "q8_hist.plot1d(flow=\"none\")\n", "q81_hist.plot1d(flow=\"none\")\n", "\n", "plt.show()\n", "print('access_log_coffea:', access_log_coffea)\n", "print('access_log_zipper:', access_log_zipper)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 508 }, "id": "ODmRjWAzjUgy", "outputId": "639d9de7-4498-433d-bebc-7895af133476" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAG0CAYAAACSbkVhAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMqVJREFUeJzt3Xl4FFW+//FPB0iTDklDwpY4CeAGyiaKchGXMDIsFxDElUENy3UDQUQUM78BQa/GbRQXFvURwTuKjj6AM3JFEVlUIMp2VdQICgSVgKJka0iQnN8fmbQ02TqhcjqdvF/PUw9dp06d+lYVJB+qqrtdxhgjAAAASyJCXQAAAGhYCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqxqHuoATFRcX68cff1RMTIxcLleoywEAAEEwxigvL0+JiYmKiKji2oapprVr15ohQ4aYhIQEI8ksXbq0TJ8vv/zSDB061MTGxhqPx2N69uxp9uzZE9T4e/fuNZKYmJiYmJiYwnDau3dvlb/rq33lo6CgQN27d9fYsWM1YsSIMsu//fZbXXTRRRo3bpxmzZql2NhYbd++XU2bNg1q/JiYGEnS3r17FRsbW93yAABACOTm5iopKcn/e7wyLmNq/sVyLpdLS5cu1fDhw/1t1113nZo0aaL/+Z//qdGYubm58nq9ysnJIXwAABAmqvP729EHTouLi7V8+XKdeeaZGjBggFq3bq1evXpp2bJlFa5TWFio3NzcgAkAANRfjoaPAwcOKD8/Xw8//LAGDhyo9957T1dccYVGjBihtWvXlrtOenq6vF6vf0pKSnKyJAAAUMc4etvlxx9/1CmnnKKRI0fq1Vdf9fe7/PLLFR0drcWLF5cZo7CwUIWFhf750ntG3HYBACB8VOe2i6NvtW3ZsqUaN26ss88+O6D9rLPO0kcffVTuOm63W26328kyAABAHebobZfIyEidf/75yszMDGj/5ptv1K5dOyc3BQAAwlS1r3zk5+dr586d/vldu3Zp27ZtiouLU3Jysu6++25de+21uuSSS9S3b1+tWLFC//rXv7RmzRon6wYAAGGq2s98rFmzRn379i3TnpqaqoULF0qSFixYoPT0dH3//ffq2LGjZs2apWHDhgU1Pm+1BQAg/FTn9/dJPXBaGwgfAACEn5B9zgcAAEBVCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCRz3hy8+RZnqlmd6S1wAA1FGEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPgAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPgAAgFWEDwAAYBXhAwAAWNU41AWgZnz5OfI8nlzyempWiKsBACB4XPkAAABWVTt8rFu3TkOHDlViYqJcLpeWLVtWYd9bb71VLpdLs2fPPokSAQBAfVLt8FFQUKDu3btrzpw5lfZbunSpNm7cqMTExBoXBwAA6p9qP/MxaNAgDRo0qNI+P/zwgyZOnKh3331XgwcPrnFxAACg/nH8gdPi4mLdcMMNuvvuu9W5c+cq+xcWFqqwsNA/n5ub63RJAACgDnH8gdNHHnlEjRs31qRJk4Lqn56eLq/X65+SkpKcLgkAANQhjoaPzZs366mnntLChQvlcrmCWictLU05OTn+ae/evU6WBAAA6hhHw8eHH36oAwcOKDk5WY0bN1bjxo21Z88e3XXXXWrfvn2567jdbsXGxgZMAACg/nL0mY8bbrhB/fr1C2gbMGCAbrjhBo0ZM8bJTQEAgDBV7fCRn5+vnTt3+ud37dqlbdu2KS4uTsnJyYqPjw/o36RJE7Vt21YdO3Y8+WoBAEDYq3b42LRpk/r27eufnzJliiQpNTVVCxcudKwwAABQP1U7fKSkpMgYE3T/3bt3V3cTAACgHuO7XQAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPgAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPgAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGBVtcPHunXrNHToUCUmJsrlcmnZsmX+ZUePHtW0adPUtWtXRUdHKzExUTfeeKN+/PFHJ2sGAABhrNrho6CgQN27d9ecOXPKLPP5fNqyZYumT5+uLVu2aMmSJcrMzNTll1/uSLEAACD8Na7uCoMGDdKgQYPKXeb1erVy5cqAtmeffVYXXHCBsrKylJycXLMqAQBAvVHt8FFdOTk5crlcat68ebnLCwsLVVhY6J/Pzc2t7ZIAAEAI1eoDp0eOHNG0adM0cuRIxcbGltsnPT1dXq/XPyUlJdVmSQAAIMRqLXwcPXpU11xzjYwxmjdvXoX90tLSlJOT45/27t1bWyUBAIA6oFZuu5QGjz179uiDDz6o8KqHJLndbrnd7tooI+R8+TnyPF7ynItvapY8zbzlttVkHAAAwpXj4aM0eOzYsUOrV69WfHy805sAAABhrNrhIz8/Xzt37vTP79q1S9u2bVNcXJwSEhJ01VVXacuWLXr77bd17NgxZWdnS5Li4uIUGRnpXOUAACAsVTt8bNq0SX379vXPT5kyRZKUmpqqmTNn6p///Kck6ZxzzglYb/Xq1UpJSal5pQAAoF6odvhISUmRMabC5ZUtAwAA4LtdAACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPgAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgVeNQF4CT5yvIkyR5TpiXpChPjFwRZEwAQN1B+KgHPHN7lLxw/T7vcRVJknxTs+Rp5g1RZQAAlMV/iQEAgFWEj3ro19HrQl0CAAAVInzUQ25PTKhLAACgQoQPAABgFeEDAABYRfgAAABWNbjw4cvPkWZ6pZnektfltJXXJ5hxarNGAADqiwYXPgAAQGgRPgAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhV7fCxbt06DR06VImJiXK5XFq2bFnAcmOMZsyYoYSEBEVFRalfv37asWOHU/UCAIAwV+3wUVBQoO7du2vOnDnlLn/00Uf19NNPa/78+crIyFB0dLQGDBigI0eOnHSxAAAg/DWu7gqDBg3SoEGDyl1mjNHs2bP117/+VcOGDZMkvfzyy2rTpo2WLVum66677uSqhUxxsXz5OfIV5MkT6mIAAKgBR5/52LVrl7Kzs9WvXz9/m9frVa9evbRhw4Zy1yksLFRubm7AhIodPlwgz+PJ8sztEepSAACoEUfDR3Z2tiSpTZs2Ae1t2rTxLztRenq6vF6vf0pKSnKyJAAAUMeE/N0uaWlpysnJ8U979+4NdUlhxzd+q3zjt4a6DAAAglLtZz4q07ZtW0nS/v37lZCQ4G/fv3+/zjnnnHLXcbvdcrvdTpbR4HiiY0JdAgAAQXP0ykeHDh3Utm1brVq1yt+Wm5urjIwM9e7d28lNAQCAMFXtKx/5+fnauXOnf37Xrl3atm2b4uLilJycrMmTJ+u///u/dcYZZ6hDhw6aPn26EhMTNXz4cCfrBgAAYara4WPTpk3q27evf37KlCmSpNTUVC1cuFD33HOPCgoKdPPNN+vQoUO66KKLtGLFCjVt2tS5qgEAQNiqdvhISUmRMabC5S6XS/fff7/uv//+kyoMAADUTyF/twsAAGhYCB8AAMAqwgcAALCK8BFivvwcaaZXmukteQ0AQD1H+AAAAFYRPgAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPgAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPgAAgFWNQ11AuPDl58jzeHLJ66lZNe5jk89Elqnn+HlPM2/IapPKHq9Q1wMAsIMrHwAAwCrCBwAAsIrwAQAArCJ8AAAAqxwPH8eOHdP06dPVoUMHRUVF6bTTTtMDDzwgY4zTmwIAAGHI8Xe7PPLII5o3b54WLVqkzp07a9OmTRozZoy8Xq8mTZrk9OYAAECYcTx8rF+/XsOGDdPgwYMlSe3bt9fixYv1ySefOL2pOs1XkCdJ8pww7yvIK9PmUcVO7FPoy3O2UAAALHM8fFx44YV6/vnn9c033+jMM8/U//3f/+mjjz7SE088UW7/wsJCFRYW+udzc3OdLikkPHN7lLxw/T7vcRVJJjKg7fg+wYzTYuEllfYHAKCuczx83HvvvcrNzVWnTp3UqFEjHTt2TA8++KBGjRpVbv/09HTNmjXL6TIAAEAd5Xj4+Mc//qFXXnlFr776qjp37qxt27Zp8uTJSkxMVGpqapn+aWlpmjJlin8+NzdXSUlJTpcVcr7xW6XomJLbLvM6h3wcAABCxfHwcffdd+vee+/VddddJ0nq2rWr9uzZo/T09HLDh9vtltvtdrqMOscTHePIx4c7NQ4AAKHi+FttfT6fIiICh23UqJGKi4ud3hQAAAhDjl/5GDp0qB588EElJyerc+fO2rp1q5544gmNHTvW6U0BAIAw5Hj4eOaZZzR9+nSNHz9eBw4cUGJiom655RbNmDHD6U0BAIAw5Hj4iImJ0ezZszV79mynh0YlPM280sycktf5OSGuBgCAivHdLgAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsKpxqAuwxRQX67AvT76CPHn+3eYryPP/eWLbyfapaY2+/JyTHgcAgLqswYSPw748eR5Plkyk5Cpp88ztIY+rqEybpJPuU6MaDxeo5bzOJz0OAAB1GbddAACAVQ06fPjGb5VvapZ847cGth03/+vodVWOE0yfmjqxHgAAwl2Due1SHk90jDzNvGXajuf2BM6XJ5g+NXViPf72Zl5pZk7J61rbOgAAzmvQVz4AAIB9hA8AAGAV4QMAAFhF+AAAAFYRPgAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhVK+Hjhx9+0PXXX6/4+HhFRUWpa9eu2rRpU21sCgAAhJnGTg/466+/qk+fPurbt6/eeecdtWrVSjt27FCLFi2c3hQAAAhDjoePRx55RElJSXrppZf8bR06dHB6M/VSoS8v1CUAAFDrHL/t8s9//lM9e/bU1VdfrdatW6tHjx564YUXKuxfWFio3NzcgKmharHwklCXAABArXM8fHz33XeaN2+ezjjjDL377ru67bbbNGnSJC1atKjc/unp6fJ6vf4pKSnJ6ZIAAEAd4vhtl+LiYvXs2VMPPfSQJKlHjx764osvNH/+fKWmppbpn5aWpilTpvjnc3NzG0wA8Y3fKknyzOv8+3x0jHwFef42AADqG8evfCQkJOjss88OaDvrrLOUlZVVbn+3263Y2NiAqaHwRMfIEx0TON/MG9BW23z5OdJMrzTTW/LaoXFqa9zaXs+mcKgRAGqD4+GjT58+yszMDGj75ptv1K5dO6c3BQAAwpDj4ePOO+/Uxo0b9dBDD2nnzp169dVX9fzzz2vChAlObwoAAIQhx8PH+eefr6VLl2rx4sXq0qWLHnjgAc2ePVujRo1yelMAACAMOf7AqSQNGTJEQ4YMqY2hAQBAmOO7XQAAgFWEDwAAYBXhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhVK9/tghIeV5F8U7PkaeaVp7StmVeamVPyWpIvP6fqcU5YBwCAcMaVDwAAYBXhAwAAWMVtlwbCV5An6ffbNqXzvoI867dyTHGxDvvyArZdWo8kRXli5IogFwNAfUX4aCA8c3uUvHD9Pu9xFUkm0t9my2FfnjyPJwds21+P5H9OBgBQP/HfSwAAYBXhowpRUdHyTc2Sb/xWf5tv/NaA+Qr7TM1SlCfGar1SyW2Lqmr+dfQ663VVpq7VAwCoPdx2qYIrIqLMLQBPdExQfUJ16yCYmt0hCEWVqWv1AABqD1c+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAVb7VFAF9+Tsmnj+r3Txotr+1kxvZI8plIp0oOC04dQwCoD7jyAQAArCJ8AAAAqwgfAADAKsIHAACwqsE9cOpxFfkf+POUtjXzSjNzSl6Xdjxx/sRxylvHqRprcWwAAEKNKx8AAMAqwgcAALCK8AEAAKwifAAAAKtqPXw8/PDDcrlcmjx5cm1vCgAAhIFaDR+ffvqpnnvuOXXr1q02NwMAAMJIrYWP/Px8jRo1Si+88IJatGhRW5sBAABhptbCx4QJEzR48GD169ev0n6FhYXKzc0NmAAAQP1VKx8y9tprr2nLli369NNPq+ybnp6uWbNm1UYZAACgDnL8ysfevXt1xx136JVXXlHTpk2r7J+WlqacnBz/tHfvXqdLAgAAdYjjVz42b96sAwcO6Nxzz/W3HTt2TOvWrdOzzz6rwsJCNWrUyL/M7XbL7XY7XQYAAKijHA8fl112mT7//POAtjFjxqhTp06aNm1aQPAAAAANj+PhIyYmRl26dAloi46OVnx8fJl2AADQ8PAJpwAAwKpaebfLidasWWNjMwAAIAxw5QMAAFhF+AAAAFZZue2CinmaeaWZOSWvQ1wLAAA2cOUDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPlCn+EykPI8nSzO98uXnlN8nP0ea6Q3oU15bjbZfg3Fqc9tO1eNUjbWlpvUFs15d3/eGhHOBUoQPAABgFeEDAABYRfgAAABWET4AAIBVfLcL/HwFeZKq9x0zprhYh3158hXk+dc7cZzS+eP71KSeYMepaL0oT4xcEaHP2+XtR02OPQCEK8IH/Dxze5S8cAW/zmFfXsm7U0ykf70Tx/HM7SGPqyigT03qCXacitbzTc0q+SK/ECtvP2py7AEgXIX+v4EAAKBBIXw0UFFR0fJNzZJv/FbHx/aN3xow7q+j1zkyrlPj1BX1bX8AIFjcdmmgXBERtXYLwhMdEzDv9sRU0LN6nBqnrqhv+wMAweLKBwAAsIorH0HyNPNKM0s+DriidyQE08emcuupS/Ud9xCoh49aBoAGgysfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwyvHwkZ6ervPPP18xMTFq3bq1hg8frszMTKc3AwAAwpTj4WPt2rWaMGGCNm7cqJUrV+ro0aPq37+/CgoKnN4UAAAIQ42dHnDFihUB8wsXLlTr1q21efNmXXLJJU5vDrXIV5Dn/9NzQluUJ0auCO7aVcUUF+uwLy/gGAJAQ+d4+DhRTk6OJCkuLq7c5YWFhSosLPTP5+bm1nZJCJJnbg95XEWSiZRcgW2+qVnyNPOGtsAwcNiXJ8/jyQHHEAAaulr9r2txcbEmT56sPn36qEuXLuX2SU9Pl9fr9U9JSUm1WRIAAAixWr3yMWHCBH3xxRf66KOPKuyTlpamKVOm+Odzc3MJICHiG79VkuSZ1/n3+eiYklsG/26riaioaPmmZgWMUzp2lCfm5AsPM/59Ly4OdSkAEBK1Fj5uv/12vf3221q3bp3+8Ic/VNjP7XbL7XbXVhmoBk90TJl5J26tuCIiyozj1NjhqHTfffk5oS4FAELC8fBhjNHEiRO1dOlSrVmzRh06dHB6Ewgxn4kseY5Bku+27WHzIKWvIO/3uqdmSVLAfHlhyJefU6bPiW3lbuvffTwqOV6O7UMN66npODb7VFVjeeMEs1/hsO8NpU9NzkVd3I/60CfU//lzPHxMmDBBr776qt566y3FxMQoOztbkuT1ehUVFeX05gAAQJhx/IHTefPmKScnRykpKUpISPBPr7/+utObAgAAYahWbrsAAABUhE+JAgAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGBVrX6xHOo+TzOvNLPkO0Y8Uo2/b8TjKvJ/ZK//49aPG7fG9R0/bjVqK11P+v1jhuua0mNf+rHHTn4MOwDUZVz5AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVvNUWYc1XkOf/82Te0lveOKVtlY17Yp/SeVNcfBLVOF9PdcexqSbH0BQXy5efU+l+BdMHdnAucCLCB8KaZ24PeVxFkomUXM6O45nbo+RFJeOe2Kd0nJ9v267ompfjeD3VHcemmhzDw4cL1HJe50r3K5g+sINzgRNx2wUAAFjFlQ/UCVGeGPmmZpVclp3XWZLkG79Vio5RlCemyj4VrXfYl1etOn4dvU6eRf/h4J5VLdj9qgmnxgEAJxE+UCe4IiJKPm78OJ7omIC2YPpU1BYs97+Djk3B7ldNODUOADiJ2y4AAMAqwgcAALCK8AEAAKzimQ8EKP2ad+n399879dXv5Y3dUHhcRfJNzZKnmbfB7TsAnIgrHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKyqte92mTNnjh577DFlZ2ere/fueuaZZ3TBBRfU1uZQTwTz/S+Vff9MZesFtf3omGp/j03p97ZIkufx5Jpv26Hv1Snve2Sc+n6e2lLTY3jieuXtVzB9YAfnAqVq5crH66+/rilTpui+++7Tli1b1L17dw0YMEAHDhyojc0BAIAwUitXPp544gnddNNNGjNmjCRp/vz5Wr58uRYsWKB77723NjaJECn05YW6hKAdX6uvoOR1da6SlK7jK8ircj0bx6U69VR3nBOPT232qUhl5yuY4xtMn1Dve0Ppc7Lnoq7sR33q42nmVSi5jDHGyQGLiork8Xj05ptvavjw4f721NRUHTp0SG+99VZA/8LCQhUWFvrnc3JylJycrL179yo2Ntaxunz5OfI807nk9cTtIT/w4aj0GPpME3lcR0vajn9dB49rwHk/oW5JZfajdB8q29dy2yZuLxmvgm0dP/bJ7Ed16ilvW9UZp9zjU0t9gjmG5Y0jKWC9yv5uVtYnlPvekPrU5FzUxf2oD308f9klp+Xm5iopKUmHDh2S11vFzzrjsB9++MFIMuvXrw9ov/vuu80FF1xQpv99991nJDExMTExMTHVg2nv3r1VZoVae+A0WGlpaZoyZYp/vri4WL/88ovi4+Plcrkc3VZpKnP6qkpdUd/3T6r/+8j+hb/6vo/1ff+k+r+PtbV/xhjl5eUpMTGxyr6Oh4+WLVuqUaNG2r9/f0D7/v371bZt2zL93W633G53QFvz5s2dLitAbGxsvfwLVaq+759U//eR/Qt/9X0f6/v+SfV/H2tj/6q83fJvjr/bJTIyUuedd55WrVrlbysuLtaqVavUu3dvpzcHAADCTK3cdpkyZYpSU1PVs2dPXXDBBZo9e7YKCgr8734BAAANV62Ej2uvvVY//fSTZsyYoezsbJ1zzjlasWKF2rRpUxubC5rb7dZ9991X5jZPfVHf90+q//vI/oW/+r6P9X3/pPq/j3Vh/xx/qy0AAEBl+G4XAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGBVgwofc+bMUfv27dW0aVP16tVLn3zySahLqpH09HSdf/75iomJUevWrTV8+HBlZmYG9ElJSZHL5QqYbr311hBVXD0zZ84sU3unTp38y48cOaIJEyYoPj5ezZo105VXXlnmE3Xrsvbt25fZP5fLpQkTJkgKz3O3bt06DR06VImJiXK5XFq2bFnAcmOMZsyYoYSEBEVFRalfv37asWNHQJ9ffvlFo0aNUmxsrJo3b65x48YpPz/f4l5UrLL9O3r0qKZNm6auXbsqOjpaiYmJuvHGG/Xjjz8GjFHeeX/44Yct70nFqjqHo0ePLlP/wIEDA/qE6zmUVO6/SZfLpccee8zfpy6fw2B+LwTzszMrK0uDBw+Wx+NR69atdffdd+u3335zvN4GEz5ef/11TZkyRffdd5+2bNmi7t27a8CAATpw4ECoS6u2tWvXasKECdq4caNWrlypo0ePqn///iooKAjod9NNN2nfvn3+6dFHHw1RxdXXuXPngNo/+ugj/7I777xT//rXv/TGG29o7dq1+vHHHzVixIgQVls9n376acC+rVy5UpJ09dVX+/uE27krKChQ9+7dNWfOnHKXP/roo3r66ac1f/58ZWRkKDo6WgMGDNCRI0f8fUaNGqXt27dr5cqVevvtt7Vu3TrdfPPNtnahUpXtn8/n05YtWzR9+nRt2bJFS5YsUWZmpi6//PIyfe+///6A8zpx4kQb5QelqnMoSQMHDgyof/HixQHLw/UcSgrYr3379mnBggVyuVy68sorA/rV1XMYzO+Fqn52Hjt2TIMHD1ZRUZHWr1+vRYsWaeHChZoxY4bzBTvyVbZh4IILLjATJkzwzx87dswkJiaa9PT0EFbljAMHDhhJZu3atf62Sy+91Nxxxx2hK+ok3HfffaZ79+7lLjt06JBp0qSJeeONN/xtX331lZFkNmzYYKlCZ91xxx3mtNNOM8XFxcaY8D53xhgjySxdutQ/X1xcbNq2bWsee+wxf9uhQ4eM2+02ixcvNsYY8+WXXxpJ5tNPP/X3eeedd4zL5TI//PCDtdqDceL+leeTTz4xksyePXv8be3atTNPPvlk7RbnkPL2MTU11QwbNqzCderbORw2bJj54x//GNAWTufwxN8Lwfzs/N///V8TERFhsrOz/X3mzZtnYmNjTWFhoaP1NYgrH0VFRdq8ebP69evnb4uIiFC/fv20YcOGEFbmjJycHElSXFxcQPsrr7yili1bqkuXLkpLS5PP5wtFeTWyY8cOJSYm6tRTT9WoUaOUlZUlSdq8ebOOHj0acC47deqk5OTksDyXRUVF+vvf/66xY8cGfItzOJ+7E+3atUvZ2dkB58zr9apXr17+c7ZhwwY1b95cPXv29Pfp16+fIiIilJGRYb3mk5WTkyOXy1XmSzIffvhhxcfHq0ePHnrsscdq5XJ2bVqzZo1at26tjh076rbbbtPBgwf9y+rTOdy/f7+WL1+ucePGlVkWLufwxN8Lwfzs3LBhg7p27RrwaeQDBgxQbm6utm/f7mh9tfLx6nXNzz//rGPHjpX5ePc2bdro66+/DlFVziguLtbkyZPVp08fdenSxd/+5z//We3atVNiYqI+++wzTZs2TZmZmVqyZEkIqw1Or169tHDhQnXs2FH79u3TrFmzdPHFF+uLL75Qdna2IiMjy/xQb9OmjbKzs0NT8ElYtmyZDh06pNGjR/vbwvnclaf0vJT37690WXZ2tlq3bh2wvHHjxoqLiwu783rkyBFNmzZNI0eODPjG0EmTJuncc89VXFyc1q9fr7S0NO3bt09PPPFECKsN3sCBAzVixAh16NBB3377rf7yl79o0KBB2rBhgxo1alSvzuGiRYsUExNT5nZuuJzD8n4vBPOzMzs7u9x/p6XLnNQgwkd9NmHCBH3xxRcBz0RICrjP2rVrVyUkJOiyyy7Tt99+q9NOO812mdUyaNAg/+tu3bqpV69eateunf7xj38oKioqhJU578UXX9SgQYOUmJjobwvnc9fQHT16VNdcc42MMZo3b17AsilTpvhfd+vWTZGRkbrllluUnp4eFt8hct111/lfd+3aVd26ddNpp52mNWvW6LLLLgthZc5bsGCBRo0apaZNmwa0h8s5rOj3Ql3SIG67tGzZUo0aNSrzVO/+/fvVtm3bEFV18m6//Xa9/fbbWr16tf7whz9U2rdXr16SpJ07d9oozVHNmzfXmWeeqZ07d6pt27YqKirSoUOHAvqE47ncs2eP3n//ff3Xf/1Xpf3C+dxJ8p+Xyv79tW3btszD37/99pt++eWXsDmvpcFjz549WrlyZcBVj/L06tVLv/32m3bv3m2nQIedeuqpatmypf/vZX04h5L04YcfKjMzs8p/l1LdPIcV/V4I5mdn27Zty/13WrrMSQ0ifERGRuq8887TqlWr/G3FxcVatWqVevfuHcLKasYYo9tvv11Lly7VBx98oA4dOlS5zrZt2yRJCQkJtVyd8/Lz8/Xtt98qISFB5513npo0aRJwLjMzM5WVlRV25/Kll15S69atNXjw4Er7hfO5k6QOHTqobdu2AecsNzdXGRkZ/nPWu3dvHTp0SJs3b/b3+eCDD1RcXOwPX3VZafDYsWOH3n//fcXHx1e5zrZt2xQREVHmVkW4+P7773Xw4EH/38twP4elXnzxRZ133nnq3r17lX3r0jms6vdCMD87e/furc8//zwgRJYG6bPPPtvxghuE1157zbjdbrNw4ULz5Zdfmptvvtk0b9484KnecHHbbbcZr9dr1qxZY/bt2+effD6fMcaYnTt3mvvvv99s2rTJ7Nq1y7z11lvm1FNPNZdcckmIKw/OXXfdZdasWWN27dplPv74Y9OvXz/TsmVLc+DAAWOMMbfeeqtJTk42H3zwgdm0aZPp3bu36d27d4irrp5jx46Z5ORkM23atID2cD13eXl5ZuvWrWbr1q1GknniiSfM1q1b/e/2ePjhh03z5s3NW2+9ZT777DMzbNgw06FDB3P48GH/GAMHDjQ9evQwGRkZ5qOPPjJnnHGGGTlyZKh2KUBl+1dUVGQuv/xy84c//MFs27Yt4N9k6TsE1q9fb5588kmzbds28+2335q///3vplWrVubGG28M8Z79rrJ9zMvLM1OnTjUbNmwwu3btMu+//74599xzzRlnnGGOHDniHyNcz2GpnJwc4/F4zLx588qsX9fPYVW/F4yp+mfnb7/9Zrp06WL69+9vtm3bZlasWGFatWpl0tLSHK+3wYQPY4x55plnTHJysomMjDQXXHCB2bhxY6hLqhFJ5U4vvfSSMcaYrKwsc8kll5i4uDjjdrvN6aefbu6++26Tk5MT2sKDdO2115qEhAQTGRlpTjnlFHPttdeanTt3+pcfPnzYjB8/3rRo0cJ4PB5zxRVXmH379oWw4up79913jSSTmZkZ0B6u52716tXl/p1MTU01xpS83Xb69OmmTZs2xu12m8suu6zMvh88eNCMHDnSNGvWzMTGxpoxY8aYvLy8EOxNWZXt365duyr8N7l69WpjjDGbN282vXr1Ml6v1zRt2tScddZZ5qGHHgr4xR1qle2jz+cz/fv3N61atTJNmjQx7dq1MzfddFOZ/7yF6zks9dxzz5moqChz6NChMuvX9XNY1e8FY4L72bl7924zaNAgExUVZVq2bGnuuusuc/ToUcfrdf27aAAAACsaxDMfAACg7iB8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8IEG4fvvv9dVV12l6dOnh7oUNGApKSlyuVxyuVz+7+wJhdGjR/vrWLZsWcjqQMNF+ECDcOedd+qMM87QG2+8UWGf0h/It956a5llEyZMkMvl0ujRo8v0P3EaOHCgJJW77Php5syZ5daRkpKiyZMnn8zuog676aabtG/fPnXp0iWgPTs7W3fccYdOP/10NW3aVG3atFGfPn00b948+Xy+oMYeOnSo/+/fiT788EO5XC599tlneuqpp7Rv376T3hegphqHugCgtuXk5GjNmjUaPXq0MjIyKu2blJSk1157TU8++aSioqIkSUeOHNGrr76q5OTkMv0HDhyol156KaDN7XZLUsAP99dff10zZsxQZmamv61Zs2Y13idJKioqUmRk5EmNEQrhWrdTPB5Pma8n/+6779SnTx81b95cDz30kLp27Sq3263PP/9czz//vE455RRdfvnlVY49btw4XXnllfr+++8Dvk5dKvkW5Z49e6pbt26SJK/X69xOAdXElQ/Uex988IEuvvhirV27Vn369Km077nnnqukpCQtWbLE37ZkyRIlJyerR48eZfq73W61bds2YGrRooUkBbR5vV65XK6AtvLCx+jRo7V27Vo99dRT/isku3fvllRyReT222/X5MmT1bJlSw0YMEArVqzQRRddpObNmys+Pl5DhgzRt99+GzBmSkqKJk2apHvuuUdxcXFq27Ztmasub775prp27aqoqCjFx8erX79+Kigo0PPPP6/ExEQVFxcH9B82bJjGjh0rSSouLlZ6ero6dOigqKgode/eXW+++WbA9k+su7JtBjNmeVJSUjRx4kRNnjxZLVq0UJs2bfTCCy+ooKBAY8aMUUxMjE4//XS98847AetVdQwrqzOY5cEYP368GjdurE2bNumaa67RWWedpVNPPVXDhg3T8uXLNXTo0KCOy5AhQ9SqVSstXLgwYPz8/Hy98cYbGjduXLXqAmoL4QP13ocffqj/+I//0Ntvv60rrriiyv5jx44NuJqxYMECjRkzpjZL9HvqqafUu3dv/6X5ffv2KSkpyb980aJFioyM1Mcff6z58+eroKBAU6ZM0aZNm7Rq1SpFREToiiuuKBMWFi1apOjoaGVkZOjRRx/V/fffr5UrV0oquUIzcuRIjR07Vl999ZXWrFmjESNGyBijq6++WgcPHtTq1av9Y/3yyy9asWKFRo0aJUlKT0/Xyy+/rPnz52v79u268847df3112vt2rUV1l3ZNoMdszyLFi1Sy5Yt9cknn2jixIm67bbbdPXVV+vCCy/Uli1b1L9/f91www0BtzEqO4ZV1VnV8mAcPHhQ7733niZMmKDo6Ohy+7hcrqCOS+PGjXXjjTdq4cKFATW88cYbOnbsmEaOHBl0XUCtcvx7coE65uKLLzb33nuv6dGjR6X9UlNTzbBhw8yBAweM2+02u3fvNrt37zZNmzY1P/30kxk2bFjA12+npqaaRo0amejo6IDpwQcfLDP2Sy+9ZLxeb1D1XnrppeaOO+4ot72qffjpp5+MJPP5558HrHfRRRcF9Dv//PPNtGnTjDElXxUuyezevbvcMYcNG2bGjh3rn3/uuedMYmKiOXbsmDly5IjxeDxm/fr1AeuMGzfOjBw5ssK6K9tmMGOW58T9/O2330x0dLS54YYb/G379u0zksyGDRsqHOf4Y1jVsalqeXk1nnhuN27caCSZJUuWBLTHx8f7/07dc889QR+Xr776ykgyq1ev9rddfPHF5vrrry9TjySzdOnSoGoHnMQzH6j3du/erZ9++kmzZs2SJL3yyiu65ZZb/MvfeecdXXzxxf75Vq1aafDgwf7/PQ4ePFgtW7Ysd+y+fftq3rx5AW1xcXG1sBclzjvvvID5HTt2aMaMGcrIyNDPP//sv+KRlZUV8EBj6X3+UgkJCTpw4IAkqXv37rrsssvUtWtXDRgwQP3799dVV13lv300atQo3XTTTZo7d67cbrdeeeUVXXfddYqIiNDOnTvl8/n0pz/9KWD8oqKigNtUJ9Zd2TaDHbM8x+9no0aNFB8fr65du/rb2rRpI0n+fa/qGA4YMKDSY1PVsTsZn3zyiYqLizVq1CgVFhYGfVw6deqkCy+8UAsWLFBKSop27typDz/8UPfff/9J1wQ4hfCBem///v3q1KmTrrrqKknS5Zdfrl69evmXn3LKKWXWGTt2rG6//XZJ0pw5cyocOzo6WqeffrrDFVfsxMvyQ4cOVbt27fTCCy/4n83o0qWLioqKAvo1adIkYN7lcvl/yTZq1EgrV67U+vXr9d577+mZZ57R//t//08ZGRnq0KGDhg4dKmOMli9frvPPP18ffvihnnzySUklzxJI0vLly8scx9IHb8uru7JtBjtmecrbz+PbSm9fHH9bqrJjWNWxqWp5ME4//XS5XK6Ah5El6dRTT5Uk/4PP1Tku48aN08SJEzVnzhy99NJLOu2003TppZcGVQ9gA898oN5r0qSJ/va3vykiouSve+mDh6VT6Q/34w0cOFBFRUU6evSo/wFJWyIjI3Xs2LEq+x08eFCZmZn661//qssuu0xnnXWWfv311xpt0+VyqU+fPpo1a5a2bt2qyMhILV26VJLUtGlTjRgxQq+88ooWL16sjh076txzz5UknX322XK73crKygo4pqeffnrAsyrV2ebJjFldwRzDyo5NMMurEh8frz/96U969tlnK31QtTrH5ZprrlFERIReffVVvfzyyxo7dqw/eAF1AVc+UK8tWrRIBQUFcrvd2rhxo37++WcNGTKkyvUaNWqkr776yv+6IoWFhcrOzg5oa9y4cYW3aYLRvn17ZWRkaPfu3WrWrJni4uL8wel4LVq0UHx8vJ5//nklJCQoKytL9957b7W3l5GRoVWrVql///5q3bq1MjIy9NNPP+mss87y9xk1apSGDBmi7du36/rrr/e3x8TEaOrUqbrzzjtVXFysiy66SDk5Ofr4448VGxur1NTUam+zpmPWRFXHsKpjE8yxC8bcuXPVp08f9ezZUzNnzlS3bt0UERGhTz/9VF9//bXOO++8ah2XZs2a6dprr1VaWppyc3MDPp8GqAsIH6i3jhw5oiVLlmjRokW6+eab1b59e7388stBrx8bG1tlnxUrVighISGgrWPHjvr666+rXW+pqVOnKjU1VWeffbYOHz6sXbt2qX379mX6RURE6LXXXtOkSZPUpUsXdezYUU8//bRSUlKqtb3Y2FitW7dOs2fPVm5urtq1a6e//e1vGjRokL/PH//4R8XFxSkzM1N//vOfA9Z/4IEH1KpVK6Wnp+u7775T8+bNde655+ovf/lLjbdZkzFroqpjWFWdwRy7YJx22mnaunWrHnroIaWlpen777+X2+3W2WefralTp2r8+PHVPi7jxo3Tiy++qP/8z/9UYmLiyR0owGEuY6rxnjAAQI2lpKTonHPO0ezZs0NdiqSSW0ZLly7V8OHDQ10KGhie+QAAi+bOnatmzZrp888/D1kNt95660l/wi5wMrjyAQCW/PDDDzp8+LAkKTk5OWQfM3/gwAHl5uZKKnnbdUUfbgbUFsIHAACwitsuAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsOr/A1Gau9xL2rWdAAAAAElFTkSuQmCC\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "access_log_coffea: ['nElectron', 'Electron_charge', 'nMuon', 'Muon_charge', 'Electron_pt', 'Electron_phi', 'Electron_eta', 'Electron_mass', 'Muon_pt', 'Muon_phi', 'Muon_eta', 'Muon_mass', 'MET_pt', 'MET_phi']\n", "access_log_zipper: [Accessed(branch='nElectron', buffer_key=\"('', 'nElectron')-data\"), Accessed(branch='Electron_charge', buffer_key=\"('', 'Electron_charge', None)-data\"), Accessed(branch='nMuon', buffer_key=\"('', 'nMuon')-data\"), Accessed(branch='Muon_charge', buffer_key=\"('', 'Muon_charge', None)-data\"), Accessed(branch='Electron_pt', buffer_key=\"('', 'Electron_pt', None)-data\"), Accessed(branch='Electron_phi', buffer_key=\"('', 'Electron_phi', None)-data\"), Accessed(branch='Electron_eta', buffer_key=\"('', 'Electron_eta', None)-data\"), Accessed(branch='Electron_mass', buffer_key=\"('', 'Electron_mass', None)-data\"), Accessed(branch='Muon_pt', buffer_key=\"('', 'Muon_pt', None)-data\"), Accessed(branch='Muon_phi', buffer_key=\"('', 'Muon_phi', None)-data\"), Accessed(branch='Muon_eta', buffer_key=\"('', 'Muon_eta', None)-data\"), Accessed(branch='Muon_mass', buffer_key=\"('', 'Muon_mass', None)-data\"), Accessed(branch='MET_pt', buffer_key=\"('', 'MET_pt')-data\"), Accessed(branch='MET_phi', buffer_key=\"('', 'MET_phi')-data\")]\n" ] } ] }, { "cell_type": "markdown", "source": [ "The last part (from Iason's notebook) is skipped since there's no BaseSchema in zipper." ], "metadata": { "id": "mcgJmyUopdhK" } }, { "cell_type": "code", "source": [], "metadata": { "id": "EIQruyWqgkaV" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [], "metadata": { "id": "vmrmfMDNgkck" }, "execution_count": null, "outputs": [] } ] }