diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7dc939cf9..550bb4640 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -48,7 +48,7 @@ repos: - id: setup-cfg-fmt - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.5.7 + rev: v0.6.1 hooks: - id: ruff args: [--fix, --show-fixes] diff --git a/binder/applying_corrections.ipynb b/binder/applying_corrections.ipynb index c8b62c010..01cfa7a93 100644 --- a/binder/applying_corrections.ipynb +++ b/binder/applying_corrections.ipynb @@ -381,7 +381,6 @@ "source": [ "from coffea.jetmet_tools import FactorizedJetCorrector, JetCorrectionUncertainty\n", "from coffea.jetmet_tools import JECStack, CorrectedJetsFactory\n", - "import awkward as ak\n", "import numpy as np\n", "\n", "ext = extractor()\n", @@ -585,7 +584,8 @@ } ], "source": [ - "import correctionlib, rich\n", + "import correctionlib\n", + "import rich\n", "import correctionlib.convert\n", "\n", "# without a name, the resulting object will fail validation\n", diff --git a/binder/dataset_discovery.ipynb b/binder/dataset_discovery.ipynb index b420df6eb..571f11a7a 100644 --- a/binder/dataset_discovery.ipynb +++ b/binder/dataset_discovery.ipynb @@ -741,7 +741,6 @@ "from coffea.dataset_tools import rucio_utils\n", "from coffea.dataset_tools.dataset_query import print_dataset_query\n", "from rich.console import Console\n", - "from rich.table import Table\n", "from coffea.dataset_tools.dataset_query import DataDiscoveryCLI" ] }, @@ -1966,8 +1965,9 @@ "source": [ "dataset = '/DYJetsToLL_M-50_TuneCP5_13TeV-amcatnloFXFX-pythia8/RunIISummer20UL18NanoAODv9-106X_upgrade2018_realistic_v16_L1v1-v2/NANOAODSIM'\n", "for i, (file, meta) in enumerate(fileset_available[dataset][\"files\"].items()):\n", - " print(file, meta) \n", - " if i>3: break" + " print(file, meta)\n", + " if i>3:\n", + " break" ] }, { diff --git a/binder/nanoevents_pq.ipynb b/binder/nanoevents_pq.ipynb index 3e32fd71f..b5c830c88 100644 --- a/binder/nanoevents_pq.ipynb +++ b/binder/nanoevents_pq.ipynb @@ -25,9 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "import pyarrow\n", - "import pyarrow.dataset as ds\n", - "import pyarrow.parquet as pq" + "import pyarrow.dataset as ds" ] }, { @@ -243,7 +241,7 @@ "source": [ "import uproot\n", "import awkward as ak\n", - "from coffea.nanoevents import NanoEventsFactory, NanoAODSchema\n", + "from coffea.nanoevents import NanoEventsFactory\n", "from coffea import processor, hist" ] }, diff --git a/binder/servicex/ATLAS/DaskAnalysis.ipynb b/binder/servicex/ATLAS/DaskAnalysis.ipynb index dae0487e4..1900745f5 100644 --- a/binder/servicex/ATLAS/DaskAnalysis.ipynb +++ b/binder/servicex/ATLAS/DaskAnalysis.ipynb @@ -3,6 +3,8 @@ { "cell_type": "code", "execution_count": 1, + "metadata": {}, + "outputs": [], "source": [ "from servicex import ServiceXDataset\r\n", "from coffea.processor.servicex import DataSource, Analysis\r\n", @@ -11,28 +13,37 @@ "\r\n", "import matplotlib.pyplot as plt\r\n", "\r\n", - "from coffea import hist, processor\r\n", - "from IPython.display import display, update_display, HTML" - ], - "outputs": [], - "metadata": {} + "from coffea import hist\r\n", + "from IPython.display import display, update_display" + ] }, { "cell_type": "code", "execution_count": 2, + "metadata": {}, + "outputs": [], "source": [ "dids = ['mc15_13TeV:mc15_13TeV.361106.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zee.merge.DAOD_STDM3.e3601_s2576_s2132_r6630_r6264_p2363_tid05630052_00']\r\n", "datasets = [\r\n", " ServiceXDataset(did, backend_name='atlas_xaod')\r\n", " for did in dids\r\n", "]" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Found backend type matching \"xaod\". Matching by type is depreciated. Please switch to using the \"name\" keyword in your servicex.yaml file.\n", + "Found backend type matching \"xaod\". Matching by type is depreciated. Please switch to using the \"name\" keyword in your servicex.yaml file.\n" + ] + } + ], "source": [ "leptons_per_event_query = ServiceXSourceXAOD('dummy_dataset') \\\r\n", " .Select(lambda e: e.Electrons(\"Electrons\")) \\\r\n", @@ -46,31 +57,22 @@ " 'electrons_mass': ls.Select(lambda e: e.m()/1000.0),\r\n", " 'electrons_charge': ls.Select(lambda e: e.charge())\r\n", " })" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "Found backend type matching \"xaod\". Matching by type is depreciated. Please switch to using the \"name\" keyword in your servicex.yaml file.\n", - "Found backend type matching \"xaod\". Matching by type is depreciated. Please switch to using the \"name\" keyword in your servicex.yaml file.\n" - ] - } - ], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 4, + "metadata": {}, + "outputs": [], "source": [ "datasource = DataSource(query=leptons_per_event_query, metadata={'dataset-nickname': 'Zee'}, datasets=datasets)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 5, + "metadata": {}, + "outputs": [], "source": [ "class Z_EEAnalysis(Analysis):\r\n", " @staticmethod\r\n", @@ -103,90 +105,62 @@ " \"sumw\": sumw,\r\n", " \"mass\": mass_hist\r\n", " }" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "We create the analysis and executor. The `DaskExecutor` can be done two ways:\n", "\n", "- `DaskExecutor()` which creates a local cluster. All data will be pulled down to the local machine via an `uproot.open`. This can be paiful depending on what your connection looks like.\n", "- `DaskExecutor(client_addr=\"node.name.edu:8786\")` which will attach to a remote `dask` cluster. This is particularly powerful if the `dask` cluster is located close to the `servicex` installation." - ], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 6, + "metadata": {}, + "outputs": [], "source": [ "analysis = Z_EEAnalysis()\r\n", "#executor = DaskExecutor(client_addr=\"localhost:8786\")\r\n", "executor = DaskExecutor()" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "This next method makes an updating plot, as the data appears. If you didn't want the fancy updating plot, you could do `await executor.execute(analysis, datasource)`, and you'd end up with the coffea dict when that cell completed." - ], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 7, - "source": [ - "%matplotlib inline\r\n", - "async def plot_stream(accumulator_stream):\r\n", - " global first\r\n", - " fig, axes = plt.subplots()\r\n", - " first = True\r\n", - "\r\n", - "\r\n", - " count = 0\r\n", - " async for coffea_info in accumulator_stream:\r\n", - " print(coffea_info)\r\n", - " hist.plot1d(coffea_info['mass'], ax=axes)\r\n", - "\r\n", - " count += 1\r\n", - " plt.text(0.95, 0.8, f'Chunks of data: {count}', horizontalalignment='right', transform=axes.transAxes)\r\n", - "\r\n", - " # Either display it or update a previous version of the plot\r\n", - " if first:\r\n", - " display(fig, display_id='mass_update')\r\n", - " first = False\r\n", - " else:\r\n", - " update_display(fig, display_id='mass_update')\r\n", - " return coffea_info\r\n", - "\r\n", - "await plot_stream(executor.execute(analysis, datasource))\r\n", - "plt.close() # Prevents another copy of the plot showing up in the notebook" - ], + "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "{'sumw': defaultdict(, {'Zee': 24000.0}), 'mass': }\n" ] }, { - "output_type": "display_data", "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZsAAAEOCAYAAABfM7oIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAApM0lEQVR4nO3df3xU1bnv8c9jQEAligo0iBRsudWAgJCiXKsHtSBqW6RXBbFXbC1UUWtvz6tVek6LWNvS1h6V2qpppYBHEYtFscUKR8HfPwgWUSIIImggSiBqAJWfz/1jrwlDmAn5tTOZ4ft+veY1ez977T1rkWQe1tpr723ujoiISJwOyXQFREQk9ynZiIhI7JRsREQkdko2IiISOyUbERGJnZKNiIjETslGRERid9AlGzMbl+k6xCWX2wZqX7ZT+7JXU7TtoEs2QM7+QpDbbQO1L9upfdlLyUZERFo+i+t2NWb2JWBWUugE4GfAjBDvDqwFLnH3D83MgDuA84FPgCvc/dVwrDHAf4bj3OLu00N8ADANaAfMA673AzToiCOO8BNPPLEJWtjyVFRU0LFjx0xXIzZqX3ZT+7LXkiVLtrp7+8YcI7Zks8+HmOUB64FTgWuASnefbGY3Ah3c/QYzOx+4jijZnArc4e6nmtnRQAlQBDiwBBgQEtQrwPeBl4mSzRR3f7y2uhQVFXlJSUk8DRURyUFmtsTdixpzjOYaRjsHeNvd1wHDgekhPh24MCwPB2Z45CXgKDMrAM4FFrh7pbt/CCwAhoVt+e7+UujNzEg6loiItCDNlWxGATPDcmd3Lw/L7wOdw/JxwHtJ+5SFWG3xshRxERFpYWJPNmZ2KPAN4K81t4UeSezjeGY2zsxKzKykoqIi7o8TEck1xya+Q8Or3rPTWsVRqxrOA1519w/C+gdmVuDu5WEobGOIrweOT9qva4itBwbXiC8K8a4pyu/H3YuBYojO2TSmMSIiO3fupKysjM8++yzTVWlSbdu2pWvXrrRu3brmpk2NPWfTHMnmUvYOoQHMBcYAk8P7o0nxa83sQaIJAh+HhPQE8Esz6xDKDQUmuHulmVWZ2WlEEwQuB34ff3NE5GBXVlZG+/bt6d69O9FE2uzn7mzevJmysjJ69OjR5MePdRjNzA4HhgB/SwpPBoaY2Srgq2Edotlka4DVwJ+A8QDuXgn8HFgcXjeHGKHMn8M+bwO1zkQTEWkKn332Gcccc0zOJBoAM+OYY46JrbcWa8/G3bcBx9SIbSaanVazrBNNi051nKnA1BTxEqB3k1RWRKQecinRJMTZJt1BQEQkBnl5efTr149evXrRt29ffve737Fnz55a91m7di0PPPBAk9fl9ttv55NPPmny49ZHc5yzEZEDmPTYcko3VAFQWh69FxbkR+9d8pn49V4Zq5s0TLt27Vi6dCkAGzduZPTo0VRVVTFp0qS0+ySSzejRo5u0Lrfffjvf+ta3OOyww5r0uPWhno1IC1C6oWqfJJNINKXlVdVJSLJXp06dKC4u5s4778TdWbt2LWeccQb9+/enf//+vPDCCwDceOONPPvss/Tr14/bbrstbbny8nLOPPNM+vXrR+/evXn22WcBmD9/PoMGDaJ///5cfPHFbN26lSlTprBhwwbOOusszjrrrIz9G+DuB9VrwIABLtLSXHL3C37J3S/UOS6ZVVpaesAyhx9++H6xI4880t9//33ftm2bf/rpp+7u/tZbb3nie2nhwoV+wQUXVJdPV+7WW2/1W265xd3dd+3a5VVVVV5RUeFnnHGGb9261d3dJ0+e7JMmTXJ3989//vNeUVHR4LYBJd7I714No4mINLOdO3dy7bXXsnTpUvLy8njrrbfqVe7LX/4y3/nOd9i5cycXXngh/fr14+mnn6a0tJTTTz8dgB07djBo0KBma9OBKNmIiDSDNWvWkJeXR6dOnZg0aRKdO3fmtddeY8+ePbRt2zblPrfddlvKcmeeeSbPPPMM//jHP7jiiiv44Q9/SIcOHRgyZAgzZ85MeaxM0zkbEZGYVVRUcNVVV3HttddiZnz88ccUFBRwyCGHcN9997F7924A2rdvz5YtW6r3S1du3bp1dO7cmbFjx/Ld736XV199ldNOO43nn3+e1atXA7Bt27bqnlDN42aCko2ISAw+/fTT6qnPX/3qVxk6dCgTJ04EYPz48UyfPp2+ffuyYsUKDj/8cAD69OlDXl4effv25bbbbktbbtGiRfTt25dTTjmFWbNmcf3119OxY0emTZvGpZdeSp8+fRg0aBArVqwAYNy4cQwbNiyjEwSa5Xk2LYmeZyMt0ch7XgRg1vcG1SkumfXmm29y0kknZboasUjVtmx6no2IiBzElGxERCR2SjYiIhI7JRsREYmdko2IiMROyUZEpBmMvOfF6tmFByPdQUCkhSstr+Lkm54AdCdo2WvOnDn73UF62bJl/OMf/+C8887LUK3SU7IRaUbpHiVQWl5VnUiSFXbJ36dszWU5eI0YMYIRI0ZUrxcXF3P//fdz7rnnZrBW6SnZiDSjxKMEaiaWwoL86sSSLFXv5WAeipHU3nrrLW6++WZeeOEFDjnkEH7729/y0EMPsX37dkaMGFHdA/rv//5vpkyZwo4dOzj11FP54x//SF5eXrPUUclGpJkVFuTrjgA5JLm3mqxmD/ST7bsAqodEE9L1aOs6TLpz505Gjx7N7373O7p168b8+fNZtWoVr7zyCu7ON77xDZ555hk6duzIrFmzeP7552ndujXjx4/n/vvv5/LLL69rUxtFyUZEJIv99Kc/pVevXowcORKIHqA2f/58TjnlFAC2bt3KqlWrWLZsGUuWLOHLX/4yEN27rVOnTs1WTyUbEZFGqGsPJI773C1atIiHH36YV199tTrm7kyYMIHvfe97+5T9/e9/z5gxY/jVr37VZJ9fH7FOfTazo8xstpmtMLM3zWyQmR1tZgvMbFV47xDKmplNMbPVZrbMzPonHWdMKL/KzMYkxQeY2ethnylmZnG2R0Skpfjwww/59re/zYwZM2jfvn11/Nxzz2Xq1Kls3boVgPXr17Nx40bOOeccZs+ezcaNGwGorKxk3bp1zVbfuK+zuQP4p7ufCPQF3gRuBJ50957Ak2Ed4DygZ3iNA+4CMLOjgYnAqcBAYGIiQYUyY5P2GxZze0REWoS7776bjRs3cvXVV9OvX7/q14cffsjo0aMZNGgQJ598MhdddBFbtmyhsLCQW265haFDh9KnTx+GDBlCeXl5s9U3tmE0MzsSOBO4AsDddwA7zGw4MDgUmw4sAm4AhgMzwvOuXwq9ooJQdoG7V4bjLgCGmdkiIN/dXwrxGcCFwONxtUlEpKWYMGECEyZMSLv9+uuv3y82cuTI6nM7zS3OczY9gArgL2bWF1gCXA90dvdEOn0f6ByWjwPeS9q/LMRqi5eliIuItDgH+wzEOIfRWgH9gbvc/RRgG3uHzAAIvZjYn95mZuPMrMTMSioqKuL+OBGRXHNs4js0vMbV9wBxJpsyoMzdXw7rs4mSzwdheIzwvjFsXw8cn7R/1xCrLd41RXw/7l7s7kXuXtSxY8dGNUpEGu79999n1KhRfOELX2DAgAGcf/75vPXWWyxatIivfe1rTfIZa9eupXfv3k1yrIS//vWvnHTSSQd8rPI777xDZWVlrWU2bdrEjh07GlyXXbt2sXLlSl599VXefffd6vju3btZvnx59Wvp0qX7bG+kTYnv0PAqru8BYks27v4+8J6ZfSmEzgFKgblAYkbZGODRsDwXuDzMSjsN+DgMtz0BDDWzDmFiwFDgibCtysxOC7PQLk86loi0MO7OiBEjGDx4MG+//TZLlizhV7/6FR988EGmq3ZA9957L3/6059YuHBhdSwamKm/zZs3s3PnzgbXxczo0qULXbt23Seel5dHr169ql+HHnooHTp0SHOU1BraprqIezbadcD9ZrYM6Af8EpgMDDGzVcBXwzrAPGANsBr4EzAeIEwM+DmwOLxuTkwWCGX+HPZ5G00OEGmxFi5cSOvWrbnqqquqY3379uWMM84AoosPL7roIk488UQuu+yy6i++7t27s2nTJgBKSkoYPHgwADfddBPf+c53GDx4MCeccAJTpkzZ7zPXrFnDKaecwuLFi1m+fDkDBw6kX79+9OnTh1WrVu1XfubMmZx88sn07t2bG264AYCbb76Z5557jiuvvJIf/ehHALRt25bNmzezZ88e3n33Xd544w1WrlzJrl27qo+1YcMGSktLWb58OWvXrsXdqaysZNu2bbzzzjssX76cPXv2pCxXm7y8PNq3b88hh6T/+v7ss8/YtWsXRxxxRK3HSububN68mbZt29Z5n/qI9aJOd18KFKXYdE6Ksg5ck+Y4U4GpKeIlQNP2l0UkFm+88QYDBgxIu/1f//oXy5cvp0uXLpx++uk8//zzfOUrX6n1mCtWrGDhwoVs2bKFL33pS1x99dXV21auXMmoUaOYNm0affv25brrruP666/nsssuY8eOHezevXufY23YsIEbbriBJUuW0KFDB4YOHcojjzzCz372M5566iluvfVWioqir7OuXbtSVlbGunXr2LJlC506dWLnzp2sX7+eqqoqPvjgA/bs2cMhhxyCmfHee++xefNmDjvsMD7++GM6dOhAmzZtWLlyZdpyW7ZsAdjnGppkW7duZceOHWzbtm2/bR999BHuzooVK2r996upbdu2+/WYmoruICAiLcLAgQOrv+j69evH2rVrD5hsLrjgAtq0aUObNm3o1KlT9ZBcRUUFw4cP529/+xuFhYUADBo0iF/84heUlZXxzW9+k549e+5zrMWLFzN48GAS53Uvu+wynnnmGS688ML9Prd169b06NGDO+64gz59+lT3tn72s58xevRoLrroIh5++GF+85vf8Mknn1BZWcl1113HjTfeyNVXX82tt95Kv379ANKWO5Bp06ZRUlLCnXfeud+2wsJC7rvvPk466aQDHqe56OFpItIsevXqxZIlS9Jub9OmTfVyXl5e9ZBUq1at2LNnDxAND9VlnyOPPJJu3brx3HPPVW8fPXo0c+fOpV27dpx//vk89dRTjW9UGp999hnjx49n9uzZvP7664wdO3a/utenXH289tpr7Nq1q9ZeZCYo2YhIszj77LPZvn07xcV7JzItW7aMZ599ttb9unfvXp2kHn744Tp91qGHHsqcOXOYMWMGDzzwABCdvznhhBP4/ve/z/Dhw1m2bNk++wwcOJCnn36aTZs2sXv3bmbOnMm//du/1fo5Z555JrNmzWL37t2Ul5dXTyBIJIxjjz2WrVu3Mnv27Op92rdvXz1EVlu5hpo5cyaXXnppo4/T1DSMJiLNwsyYM2cOP/jBD/j1r39N27Zt6d69O7fffjvr16e8agGAiRMncuWVV/LTn/60eriqLg4//HD+/ve/M2TIEI444ghKS0u57777aN26NZ/73Of4yU9+sk/5goICJk+ezFlnnYW7c8EFFzB8+PBaP2PEiBE89dRTFBYW0q1bNwYNii7cPOqooxg7diy9e/fmc5/7XPWdlgGuuOIKrrrqKtq1a8eLL76Yttzdd98NsM+EioTu3btTVVXFjh07eOSRR5g/f371cOFDDz3EvHnz6vzv1FwszqluLVFRUZGXlJRkuhpykGqKO//GcfdgkdqY2RJ3TzXZq840jCYiIrFTshERkdgp2YiISOyUbEREJHZKNiIiEjslGxERiZ2SjYiIxE7JRkREYqdkIyIisVOyERGR2CnZiIhI7JRsREQkdko2IiISOyUbERGJnZ5nIxKTSY8tp3RDFQCl5VXV8cKC/ExVSSRj1LMRiUnphqp9kgxEiaawi5KNHHzUsxGJUWFBvh5yJkLMPRszW2tmr5vZUjMrCbGjzWyBma0K7x1C3MxsipmtNrNlZtY/6ThjQvlVZjYmKT4gHH912NfibI+IiDRMcwyjneXu/ZIeKXoj8KS79wSeDOsA5wE9w2sccBdEyQmY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", + "image/svg+xml": "\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-16T22:42:43.430700\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.4.2, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "text/plain": [ "
" - ], - "image/svg+xml": "\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-16T22:42:43.430700\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.4.2, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZsAAAEOCAYAAABfM7oIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAApM0lEQVR4nO3df3xU1bnv8c9jQEAligo0iBRsudWAgJCiXKsHtSBqW6RXBbFXbC1UUWtvz6tVek6LWNvS1h6V2qpppYBHEYtFscUKR8HfPwgWUSIIImggSiBqAJWfz/1jrwlDmAn5tTOZ4ft+veY1ez977T1rkWQe1tpr723ujoiISJwOyXQFREQk9ynZiIhI7JRsREQkdko2IiISOyUbERGJnZKNiIjETslGRERid9AlGzMbl+k6xCWX2wZqX7ZT+7JXU7TtoEs2QM7+QpDbbQO1L9upfdlLyUZERFo+i+t2NWb2JWBWUugE4GfAjBDvDqwFLnH3D83MgDuA84FPgCvc/dVwrDHAf4bj3OLu00N8ADANaAfMA673AzToiCOO8BNPPLEJWtjyVFRU0LFjx0xXIzZqX3ZT+7LXkiVLtrp7+8YcI7Zks8+HmOUB64FTgWuASnefbGY3Ah3c/QYzOx+4jijZnArc4e6nmtnRQAlQBDiwBBgQEtQrwPeBl4mSzRR3f7y2uhQVFXlJSUk8DRURyUFmtsTdixpzjOYaRjsHeNvd1wHDgekhPh24MCwPB2Z45CXgKDMrAM4FFrh7pbt/CCwAhoVt+e7+UujNzEg6loiItCDNlWxGATPDcmd3Lw/L7wOdw/JxwHtJ+5SFWG3xshRxERFpYWJPNmZ2KPAN4K81t4UeSezjeGY2zsxKzKykoqIi7o8TEck1xya+Q8Or3rPTWsVRqxrOA1519w/C+gdmVuDu5WEobGOIrweOT9qva4itBwbXiC8K8a4pyu/H3YuBYojO2TSmMSIiO3fupKysjM8++yzTVWlSbdu2pWvXrrRu3brmpk2NPWfTHMnmUvYOoQHMBcYAk8P7o0nxa83sQaIJAh+HhPQE8Esz6xDKDQUmuHulmVWZ2WlEEwQuB34ff3NE5GBXVlZG+/bt6d69O9FE2uzn7mzevJmysjJ69OjR5MePdRjNzA4HhgB/SwpPBoaY2Srgq2Edotlka4DVwJ+A8QDuXgn8HFgcXjeHGKHMn8M+bwO1zkQTEWkKn332Gcccc0zOJBoAM+OYY46JrbcWa8/G3bcBx9SIbSaanVazrBNNi051nKnA1BTxEqB3k1RWRKQecinRJMTZJt1BQEQkBnl5efTr149evXrRt29ffve737Fnz55a91m7di0PPPBAk9fl9ttv55NPPmny49ZHc5yzEZEDmPTYcko3VAFQWh69FxbkR+9d8pn49V4Zq5s0TLt27Vi6dCkAGzduZPTo0VRVVTFp0qS0+ySSzejRo5u0Lrfffjvf+ta3OOyww5r0uPWhno1IC1C6oWqfJJNINKXlVdVJSLJXp06dKC4u5s4778TdWbt2LWeccQb9+/enf//+vPDCCwDceOONPPvss/Tr14/bbrstbbny8nLOPPNM+vXrR+/evXn22WcBmD9/PoMGDaJ///5cfPHFbN26lSlTprBhwwbOOusszjrrrIz9G+DuB9VrwIABLtLSXHL3C37J3S/UOS6ZVVpaesAyhx9++H6xI4880t9//33ftm2bf/rpp+7u/tZbb3nie2nhwoV+wQUXVJdPV+7WW2/1W265xd3dd+3a5VVVVV5RUeFnnHGGb9261d3dJ0+e7JMmTXJ3989//vNeUVHR4LYBJd7I714No4mINLOdO3dy7bXXsnTpUvLy8njrrbfqVe7LX/4y3/nOd9i5cycXXngh/fr14+mnn6a0tJTTTz8dgB07djBo0KBma9OBKNmIiDSDNWvWkJeXR6dOnZg0aRKdO3fmtddeY8+ePbRt2zblPrfddlvKcmeeeSbPPPMM//jHP7jiiiv44Q9/SIcOHRgyZAgzZ85MeaxM0zkbEZGYVVRUcNVVV3HttddiZnz88ccUFBRwyCGHcN9997F7924A2rdvz5YtW6r3S1du3bp1dO7cmbFjx/Ld736XV199ldNOO43nn3+e1atXA7Bt27bqnlDN42aCko2ISAw+/fTT6qnPX/3qVxk6dCgTJ04EYPz48UyfPp2+ffuyYsUKDj/8cAD69OlDXl4effv25bbbbktbbtGiRfTt25dTTjmFWbNmcf3119OxY0emTZvGpZdeSp8+fRg0aBArVqwAYNy4cQwbNiyjEwSa5Xk2LYmeZyMt0ch7XgRg1vcG1SkumfXmm29y0kknZboasUjVtmx6no2IiBzElGxERCR2SjYiIhI7JRsREYmdko2IiMROyUZEpBmMvOfF6tmFByPdQUCkhSstr+Lkm54AdCdo2WvOnDn73UF62bJl/OMf/+C8887LUK3SU7IRaUbpHiVQWl5VnUiSFXbJ36dszWU5eI0YMYIRI0ZUrxcXF3P//fdz7rnnZrBW6SnZiDSjxKMEaiaWwoL86sSSLFXv5WAeipHU3nrrLW6++WZeeOEFDjnkEH7729/y0EMPsX37dkaMGFHdA/rv//5vpkyZwo4dOzj11FP54x//SF5eXrPUUclGpJkVFuTrjgA5JLm3mqxmD/ST7bsAqodEE9L1aOs6TLpz505Gjx7N7373O7p168b8+fNZtWoVr7zyCu7ON77xDZ555hk6duzIrFmzeP7552ndujXjx4/n/vvv5/LLL69rUxtFyUZEJIv99Kc/pVevXowcORKIHqA2f/58TjnlFAC2bt3KqlWrWLZsGUuWLOHLX/4yEN27rVOnTs1WTyUbEZFGqGsPJI773C1atIiHH36YV199tTrm7kyYMIHvfe97+5T9/e9/z5gxY/jVr37VZJ9fH7FOfTazo8xstpmtMLM3zWyQmR1tZgvMbFV47xDKmplNMbPVZrbMzPonHWdMKL/KzMYkxQeY2ethnylmZnG2R0Skpfjwww/59re/zYwZM2jfvn11/Nxzz2Xq1Kls3boVgPXr17Nx40bOOeccZs+ezcaNGwGorKxk3bp1zVbfuK+zuQP4p7ufCPQF3gRuBJ50957Ak2Ed4DygZ3iNA+4CMLOjgYnAqcBAYGIiQYUyY5P2GxZze0REWoS7776bjRs3cvXVV9OvX7/q14cffsjo0aMZNGgQJ598MhdddBFbtmyhsLCQW265haFDh9KnTx+GDBlCeXl5s9U3tmE0MzsSOBO4AsDddwA7zGw4MDgUmw4sAm4AhgMzwvOuXwq9ooJQdoG7V4bjLgCGmdkiIN/dXwrxGcCFwONxtUlEpKWYMGECEyZMSLv9+uuv3y82cuTI6nM7zS3OczY9gArgL2bWF1gCXA90dvdEOn0f6ByWjwPeS9q/LMRqi5eliIuItDgH+wzEOIfRWgH9gbvc/RRgG3uHzAAIvZjYn95mZuPMrMTMSioqKuL+OBGRXHNs4js0vMbV9wBxJpsyoMzdXw7rs4mSzwdheIzwvjFsXw8cn7R/1xCrLd41RXw/7l7s7kXuXtSxY8dGNUpEGu79999n1KhRfOELX2DAgAGcf/75vPXWWyxatIivfe1rTfIZa9eupXfv3k1yrIS//vWvnHTSSQd8rPI777xDZWVlrWU2bdrEjh07GlyXXbt2sXLlSl599VXefffd6vju3btZvnx59Wvp0qX7bG+kTYnv0PAqru8BYks27v4+8J6ZfSmEzgFKgblAYkbZGODRsDwXuDzMSjsN+DgMtz0BDDWzDmFiwFDgibCtysxOC7PQLk86loi0MO7OiBEjGDx4MG+//TZLlizhV7/6FR988EGmq3ZA9957L3/6059YuHBhdSwamKm/zZs3s3PnzgbXxczo0qULXbt23Seel5dHr169ql+HHnooHTp0SHOU1BraprqIezbadcD9ZrYM6Af8EpgMDDGzVcBXwzrAPGANsBr4EzAeIEwM+DmwOLxuTkwWCGX+HPZ5G00OEGmxFi5cSOvWrbnqqquqY3379uWMM84AoosPL7roIk488UQuu+yy6i++7t27s2nTJgBKSkoYPHgwADfddBPf+c53GDx4MCeccAJTpkzZ7zPXrFnDKaecwuLFi1m+fDkDBw6kX79+9OnTh1WrVu1XfubMmZx88sn07t2bG264AYCbb76Z5557jiuvvJIf/ehHALRt25bNmzezZ88e3n33Xd544w1WrlzJrl27qo+1YcMGSktLWb58OWvXrsXdqaysZNu2bbzzzjssX76cPXv2pCxXm7y8PNq3b88hh6T/+v7ss8/YtWsXRxxxRK3HSububN68mbZt29Z5n/qI9aJOd18KFKXYdE6Ksg5ck+Y4U4GpKeIlQNP2l0UkFm+88QYDBgxIu/1f//oXy5cvp0uXLpx++uk8//zzfOUrX6n1mCtWrGDhwoVs2bKFL33pS1x99dXV21auXMmoUaOYNm0affv25brrruP666/nsssuY8eOHezevXufY23YsIEbbriBJUuW0KFDB4YOHcojjzzCz372M5566iluvfVWioqir7OuXbtSVlbGunXr2LJlC506dWLnzp2sX7+eqqoqPvjgA/bs2cMhhxyCmfHee++xefNmDjvsMD7++GM6dOhAmzZtWLlyZdpyW7ZsAdjnGppkW7duZceOHWzbtm2/bR999BHuzooVK2r996upbdu2+/WYmoruICAiLcLAgQOrv+j69evH2rVrD5hsLrjgAtq0aUObNm3o1KlT9ZBcRUUFw4cP529/+xuFhYUADBo0iF/84heUlZXxzW9+k549e+5zrMWLFzN48GAS53Uvu+wynnnmGS688ML9Prd169b06NGDO+64gz59+lT3tn72s58xevRoLrroIh5++GF+85vf8Mknn1BZWcl1113HjTfeyNVXX82tt95Kv379ANKWO5Bp06ZRUlLCnXfeud+2wsJC7rvvPk466aQDHqe56OFpItIsevXqxZIlS9Jub9OmTfVyXl5e9ZBUq1at2LNnDxAND9VlnyOPPJJu3brx3HPPVW8fPXo0c+fOpV27dpx//vk89dRTjW9UGp999hnjx49n9uzZvP7664wdO3a/utenXH289tpr7Nq1q9ZeZCYo2YhIszj77LPZvn07xcV7JzItW7aMZ599ttb9unfvXp2kHn744Tp91qGHHsqcOXOYMWMGDzzwABCdvznhhBP4/ve/z/Dhw1m2bNk++wwcOJCnn36aTZs2sXv3bmbOnMm//du/1fo5Z555JrNmzWL37t2Ul5dXTyBIJIxjjz2WrVu3Mnv27Op92rdvXz1EVlu5hpo5cyaXXnppo4/T1DSMJiLNwsyYM2cOP/jBD/j1r39N27Zt6d69O7fffjvr16e8agGAiRMncuWVV/LTn/60eriqLg4//HD+/ve/M2TIEI444ghKS0u57777aN26NZ/73Of4yU9+sk/5goICJk+ezFlnnYW7c8EFFzB8+PBaP2PEiBE89dRTFBYW0q1bNwYNii7cPOqooxg7diy9e/fmc5/7XPWdlgGuuOIKrrrqKtq1a8eLL76Yttzdd98NsM+EioTu3btTVVXFjh07eOSRR5g/f371cOFDDz3EvHnz6vzv1FwszqluLVFRUZGXlJRkuhpykGqKO//GcfdgkdqY2RJ3TzXZq840jCYiIrFTshERkdgp2YiISOyUbEREJHZKNiIiEjslGxERiZ2SjYiIxE7JRkREYqdkIyIisVOyERGR2CnZiIhI7JRsREQkdko2IiISOyUbERGJnZ5nIxKTSY8tp3RDFQCl5VXV8cKC/ExVSSRj1LMRiUnphqp9kgxEiaawi5KNHHzUsxGJUWFBvh5yJkLMPRszW2tmr5vZUjMrCbGjzWyBma0K7x1C3MxsipmtNrNlZtY/6ThjQvlVZjYmKT4gHH912NfibI+IiDRMcwyjneXu/ZIeKXoj8KS79wSeDOsA5wE9w2sccBdEyQmY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" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "{'sumw': defaultdict(, {'Zee': 74000.0}), 'mass': }\n", "{'sumw': defaultdict(, {'Zee': 124000.0}), 'mass': }\n", @@ -207,13 +181,42 @@ ] } ], - "metadata": {} + "source": [ + "%matplotlib inline\r\n", + "async def plot_stream(accumulator_stream):\r\n", + " global first\r\n", + " fig, axes = plt.subplots()\r\n", + " first = True\r\n", + "\r\n", + "\r\n", + " count = 0\r\n", + " async for coffea_info in accumulator_stream:\r\n", + " print(coffea_info)\r\n", + " hist.plot1d(coffea_info['mass'], ax=axes)\r\n", + "\r\n", + " count += 1\r\n", + " plt.text(0.95, 0.8, f'Chunks of data: {count}', horizontalalignment='right', transform=axes.transAxes)\r\n", + "\r\n", + " # Either display it or update a previous version of the plot\r\n", + " if first:\r\n", + " display(fig, display_id='mass_update')\r\n", + " first = False\r\n", + " else:\r\n", + " update_display(fig, display_id='mass_update')\r\n", + " return coffea_info\r\n", + "\r\n", + "await plot_stream(executor.execute(analysis, datasource))\r\n", + "plt.close() # Prevents another copy of the plot showing up in the notebook" + ] } ], "metadata": { + "interpreter": { + "hash": "0857beeb8bd56f57ec31dfb6d49aa425259567fda5d0227b9061b424f42da337" + }, "kernelspec": { - "name": "python3", - "display_name": "Python 3.9.6 64-bit ('.venv': venv)" + "display_name": "Python 3.9.6 64-bit ('.venv': venv)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -235,9 +238,6 @@ }, "source": [] } - }, - "interpreter": { - "hash": "0857beeb8bd56f57ec31dfb6d49aa425259567fda5d0227b9061b424f42da337" } }, "nbformat": 4, diff --git a/binder/servicex/ATLAS/LocalExample.ipynb b/binder/servicex/ATLAS/LocalExample.ipynb index a92fac449..b7bc13602 100644 --- a/binder/servicex/ATLAS/LocalExample.ipynb +++ b/binder/servicex/ATLAS/LocalExample.ipynb @@ -3,6 +3,9 @@ { "cell_type": "code", "execution_count": 1, + "id": "7fb27b941602401d91542211134fc71a", + "metadata": {}, + "outputs": [], "source": [ "from servicex import ServiceXDataset\r\n", "from coffea.processor.servicex import DataSource, Analysis\r\n", @@ -11,35 +14,47 @@ "\r\n", "import matplotlib.pyplot as plt\r\n", "\r\n", - "from coffea import hist, processor\r\n", - "from IPython.display import display, update_display, HTML" - ], - "outputs": [], - "metadata": {} + "from coffea import hist\r\n", + "from IPython.display import display, update_display" + ] }, { "cell_type": "markdown", + "id": "acae54e37e7d407bbb7b55eff062a284", + "metadata": {}, "source": [ "Creating the datasets - mark `ignore_cache` true to force a re-submission to the backend." - ], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 2, + "id": "9a63283cbaf04dbcab1f6479b197f3a8", + "metadata": {}, + "outputs": [], "source": [ "dids = ['mc15_13TeV:mc15_13TeV.361106.PowhegPythia8EvtGen_AZNLOCTEQ6L1_Zee.merge.DAOD_STDM3.e3601_s2576_s2132_r6630_r6264_p2363_tid05630052_00']\r\n", "datasets = [\r\n", " ServiceXDataset(did, backend_name='atlas_xaod', ignore_cache=False)\r\n", " for did in dids\r\n", "]" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 3, + "id": "8dd0d8092fe74a7c96281538738b07e2", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Found backend type matching \"xaod\". Matching by type is depreciated. Please switch to using the \"name\" keyword in your servicex.yaml file.\n", + "Found backend type matching \"xaod\". Matching by type is depreciated. Please switch to using the \"name\" keyword in your servicex.yaml file.\n" + ] + } + ], "source": [ "leptons_per_event_query = ServiceXSourceXAOD('dummy_dataset') \\\r\n", " .Select(lambda e: e.Electrons(\"Electrons\")) \\\r\n", @@ -53,31 +68,24 @@ " 'electrons_mass': ls.Select(lambda e: e.m()/1000.0),\r\n", " 'electrons_charge': ls.Select(lambda e: e.charge())\r\n", " })" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "Found backend type matching \"xaod\". Matching by type is depreciated. Please switch to using the \"name\" keyword in your servicex.yaml file.\n", - "Found backend type matching \"xaod\". Matching by type is depreciated. Please switch to using the \"name\" keyword in your servicex.yaml file.\n" - ] - } - ], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 4, + "id": "72eea5119410473aa328ad9291626812", + "metadata": {}, + "outputs": [], "source": [ "datasource = DataSource(query=leptons_per_event_query, metadata={'dataset-nickname': 'Zee'}, datasets=datasets)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 5, + "id": "8edb47106e1a46a883d545849b8ab81b", + "metadata": {}, + "outputs": [], "source": [ "class Z_EEAnalysis(Analysis):\r\n", " @staticmethod\r\n", @@ -110,100 +118,74 @@ " \"sumw\": sumw,\r\n", " \"mass\": mass_hist\r\n", " }" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 6, + "id": "10185d26023b46108eb7d9f57d49d2b3", + "metadata": {}, + "outputs": [], "source": [ "analysis = Z_EEAnalysis()\r\n", "executor = LocalExecutor()" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", "execution_count": 7, - "source": [ - "%matplotlib inline\r\n", - "async def plot_stream(accumulator_stream):\r\n", - " global first\r\n", - " fig, axes = plt.subplots()\r\n", - " first = True\r\n", - "\r\n", - "\r\n", - " count = 0\r\n", - " async for coffea_info in accumulator_stream:\r\n", - " print(coffea_info)\r\n", - " hist.plot1d(coffea_info['mass'], ax=axes)\r\n", - "\r\n", - " count += 1\r\n", - " plt.text(0.95, 0.75, f'Chunks of data: {count}', horizontalalignment='right', transform=axes.transAxes)\r\n", - "\r\n", - " # Either display it or update a previous version of the plot\r\n", - " if first:\r\n", - " display(fig, display_id='mass_update')\r\n", - " first = False\r\n", - " else:\r\n", - " update_display(fig, display_id='mass_update')\r\n", - " return coffea_info\r\n", - "\r\n", - "await plot_stream(executor.execute(analysis, datasource, title='Zee_2'))\r\n", - "plt.close() # Prevents another copy of the plot showing up in the notebook" - ], + "id": "8763a12b2bbd4a93a75aff182afb95dc", + "metadata": {}, "outputs": [ { - "output_type": "display_data", "data": { - "text/plain": [ - "Zee_2: 0%| | 0/9000000000.0 [00:00]" - ], "application/vnd.jupyter.widget-view+json": { + "model_id": "070203154729404491cbe28cc403b006", "version_major": 2, - "version_minor": 0, - "model_id": "070203154729404491cbe28cc403b006" - } + "version_minor": 0 + }, + "text/plain": [ + "Zee_2: 0%| | 0/9000000000.0 [00:00]" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "display_data", "data": { - "text/plain": [ - " Zee_2 Downloaded: 0%| | 0/9000000000.0 [00:00]" - ], "application/vnd.jupyter.widget-view+json": { + "model_id": "6be97963d51640b8be1967e88066ed4f", "version_major": 2, - "version_minor": 0, - "model_id": "6be97963d51640b8be1967e88066ed4f" - } + "version_minor": 0 + }, + "text/plain": [ + " Zee_2 Downloaded: 0%| | 0/9000000000.0 [00:00]" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "{'sumw': defaultdict(, {'Zee': 50000.0}), 'mass': }\n" ] }, { - "output_type": "display_data", "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZsAAAEOCAYAAABfM7oIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAApGElEQVR4nO3de5wU1Zn/8c/jgILIKAqSQSRgwi86oCCMIBt1wQuiJkESFcT8RGNAo2z0l30lSjYJoiara7IachEnkQAucglZFA0GWAHxLoNBhFGBEFgHRhnAOOIN0Of3R50emqF7mFtNT/d8369Xv7rqqVPV58ztmXPqVJW5OyIiInE6LNMVEBGR3KdkIyIisVOyERGR2CnZiIhI7JRsREQkdko2IiISOyUbERGJXYtLNmY2LtN1iEsutw3Uvmyn9mWvxmhbi0s2QM7+QJDbbQO1L9upfdlLyUZERJo/i+t2NWb2JWBOUugk4CfAjBDvDmwGrnD3d83MgF8CFwMfAte4+yvhWGOAH4Xj3OXu00O8PzANaAssBG72QzToqKOO8pNPPrkRWtj8VFRU0KlTp0xXIzZqX3ZT+7LXqlWrdrt7+4YcI7Zkc8CHmOUBW4GBwE3ALne/28xuAzq4+61mdjHwL0TJZiDwS3cfaGbHAiVAEeDAKqB/SFAvA98FXiJKNpPd/cma6lJUVOQlJSXxNFREJAeZ2Sp3L2rIMZpqGO084G/uvgUYDkwP8enApWF5ODDDIy8Cx5hZAXAhsMTdd7n7u8ASYFjYlu/uL4bezIykY4mISDPSVMlmFDArLHd29/Kw/DbQOSyfALyVtE9ZiNUUL0sRFxGRZib2ZGNmhwNfA/5YfVvokcQ+jmdm48ysxMxKKioq4v44EZFc0zHxNzS86jw7rVUctarmIuAVd38nrL9jZgXuXh6GwraH+FbgxKT9uobYVmBwtfjyEO+aovxB3L0YKIbonE1DGiMisnfvXsrKyvj4448zXZVG1aZNG7p27Urr1q2rb9rR0HM2TZFsrmT/EBrAAmAMcHd4fywpPt7MZhNNEHgvJKRFwM/MrEMoNxSY4O67zKzSzM4kmiBwNfCr+JsjIi1dWVkZ7du3p3v37kQTabOfu7Nz507Kysro0aNHox8/1mE0M2sHXAD8d1L4buACM9sAnB/WIZpNtgnYCPwOuBHA3XcBdwIrw+uOECOU+X3Y529AjTPRREQaw8cff8xxxx2XM4kGwMw47rjjYuutxdqzcfcPgOOqxXYSzU6rXtaJpkWnOs5UYGqKeAnQu1EqKyJSB7mUaBLibJPuICAiEoO8vDz69u1Lr1696NOnD7/4xS/47LPPatxn8+bNPPLII41el/vvv58PP/yw0Y9bF01xzkZEDmHS4+so3VYJQGl59F5YkB+9d8ln4ld7ZaxuUj9t27Zl9erVAGzfvp3Ro0dTWVnJpEmT0u6TSDajR49u1Lrcf//9fPOb3+TII49s1OPWhXo2Is1A6bbKA5JMItGUlldWJSHJXscffzzFxcX8+te/xt3ZvHkzZ599Nv369aNfv348//zzANx2220888wz9O3bl/vuuy9tufLycs455xz69u1L7969eeaZZwBYvHgxgwYNol+/flx++eXs3r2byZMns23bNoYMGcKQIUMy9jXA3VvUq3///i7S3Fwx5Xm/YsrztY5LZpWWlh6yTLt27Q6KHX300f7222/7Bx984B999JG7u69fv94Tf5eWLVvml1xySVX5dOV+/vOf+1133eXu7vv27fPKykqvqKjws88+23fv3u3u7nfffbdPmjTJ3d0///nPe0VFRb3bBpR4A//2ahhNRKSJ7d27l/Hjx7N69Wry8vJYv359ncqdccYZfOtb32Lv3r1ceuml9O3bl6effprS0lK+/OUvA7Bnzx4GDRrUZG06FCUbEZEmsGnTJvLy8jj++OOZNGkSnTt35tVXX+Wzzz6jTZs2Kfe57777UpY755xzWLFiBX/+85+55ppr+N73vkeHDh244IILmDVrVspjZZrO2YiIxKyiooIbbriB8ePHY2a89957FBQUcNhhh/Hwww/z6aefAtC+fXvef//9qv3SlduyZQudO3dm7NixfPvb3+aVV17hzDPP5LnnnmPjxo0AfPDBB1U9oerHzQQlGxGRGHz00UdVU5/PP/98hg4dysSJEwG48cYbmT59On369OGNN96gXbt2AJx22mnk5eXRp08f7rvvvrTlli9fTp8+fTj99NOZM2cON998M506dWLatGlceeWVnHbaaQwaNIg33ngDgHHjxjFs2LCMThBokufZNCd6no00RyMffAGAOdcPqlVcMuv111/nlFNOyXQ1YpGqbdn0PBsREWnBlGxERCR2SjYiIhI7JRsREYmdko2IiMROyUZE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", + "image/svg+xml": "\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-16T22:40:45.255058\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.4.2, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "text/plain": [ "
" - ], - "image/svg+xml": "\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-08-16T22:40:45.255058\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.4.2, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZsAAAEOCAYAAABfM7oIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAApGElEQVR4nO3de5wU1Zn/8c/jgILIKAqSQSRgwi86oCCMIBt1wQuiJkESFcT8RGNAo2z0l30lSjYJoiara7IachEnkQAucglZFA0GWAHxLoNBhFGBEFgHRhnAOOIN0Of3R50emqF7mFtNT/d8369Xv7rqqVPV58ztmXPqVJW5OyIiInE6LNMVEBGR3KdkIyIisVOyERGR2CnZiIhI7JRsREQkdko2IiISOyUbERGJXYtLNmY2LtN1iEsutw3Uvmyn9mWvxmhbi0s2QM7+QJDbbQO1L9upfdlLyUZERJo/i+t2NWb2JWBOUugk4CfAjBDvDmwGrnD3d83MgF8CFwMfAte4+yvhWGOAH4Xj3OXu00O8PzANaAssBG72QzToqKOO8pNPPrkRWtj8VFRU0KlTp0xXIzZqX3ZT+7LXqlWrdrt7+4YcI7Zkc8CHmOUBW4GBwE3ALne/28xuAzq4+61mdjHwL0TJZiDwS3cfaGbHAiVAEeDAKqB/SFAvA98FXiJKNpPd/cma6lJUVOQlJSXxNFREJAeZ2Sp3L2rIMZpqGO084G/uvgUYDkwP8enApWF5ODDDIy8Cx5hZAXAhsMTdd7n7u8ASYFjYlu/uL4bezIykY4mISDPSVMlmFDArLHd29/Kw/DbQOSyfALyVtE9ZiNUUL0sRFxGRZib2ZGNmhwNfA/5YfVvokcQ+jmdm48ysxMxKKioq4v44EZFc0zHxNzS86jw7rVUctarmIuAVd38nrL9jZgXuXh6GwraH+FbgxKT9uobYVmBwtfjyEO+aovxB3L0YKIbonE1DGiMisnfvXsrKyvj4448zXZVG1aZNG7p27Urr1q2rb9rR0HM2TZFsrmT/EBrAAmAMcHd4fywpPt7MZhNNEHgvJKRFwM/MrEMoNxSY4O67zKzSzM4kmiBwNfCr+JsjIi1dWVkZ7du3p3v37kQTabOfu7Nz507Kysro0aNHox8/1mE0M2sHXAD8d1L4buACM9sAnB/WIZpNtgnYCPwOuBHA3XcBdwIrw+uOECOU+X3Y529AjTPRREQaw8cff8xxxx2XM4kGwMw47rjjYuutxdqzcfcPgOOqxXYSzU6rXtaJpkWnOs5UYGqKeAnQu1EqKyJSB7mUaBLibJPuICAiEoO8vDz69u1Lr1696NOnD7/4xS/47LPPatxn8+bNPPLII41el/vvv58PP/yw0Y9bF01xzkZEDmHS4+so3VYJQGl59F5YkB+9d8ln4ld7ZaxuUj9t27Zl9erVAGzfvp3Ro0dTWVnJpEmT0u6TSDajR49u1Lrcf//9fPOb3+TII49s1OPWhXo2Is1A6bbKA5JMItGUlldWJSHJXscffzzFxcX8+te/xt3ZvHkzZ599Nv369aNfv348//zzANx2220888wz9O3bl/vuuy9tufLycs455xz69u1L7969eeaZZwBYvHgxgwYNol+/flx++eXs3r2byZMns23bNoYMGcKQIUMy9jXA3VvUq3///i7S3Fwx5Xm/YsrztY5LZpWWlh6yTLt27Q6KHX300f7222/7Bx984B999JG7u69fv94Tf5eWLVvml1xySVX5dOV+/vOf+1133eXu7vv27fPKykqvqKjws88+23fv3u3u7nfffbdPmjTJ3d0///nPe0VFRb3bBpR4A//2ahhNRKSJ7d27l/Hjx7N69Wry8vJYv359ncqdccYZfOtb32Lv3r1ceuml9O3bl6effprS0lK+/OUvA7Bnzx4GDRrUZG06FCUbEZEmsGnTJvLy8jj++OOZNGkSnTt35tVXX+Wzzz6jTZs2Kfe57777UpY755xzWLFiBX/+85+55ppr+N73vkeHDh244IILmDVrVspjZZrO2YiIxKyiooIbbriB8ePHY2a89957FBQUcNhhh/Hwww/z6aefAtC+fXvef//9qv3SlduyZQudO3dm7NixfPvb3+aVV17hzDPP5LnnnmPjxo0AfPDBB1U9oerHzQQlGxGRGHz00UdVU5/PP/98hg4dysSJEwG48cYbmT59On369OGNN96gXbt2AJx22mnk5eXRp08f7rvvvrTlli9fTp8+fTj99NOZM2cON998M506dWLatGlceeWVnHbaaQwaNIg33ngDgHHjxjFs2LCMThBokufZNCd6no00RyMffAGAOdcPqlVcMuv111/nlFNOyXQ1YpGqbdn0PBsREWnBlGxERCR2SjYiIhI7JRsREYmdko2IiMROyUZEpAmMfPCFqtmFLZHuICDSzJWWV3Lq7YsA3Qla9ps/f/5Bd5Bes2YNf/7zn7nooosyVKv0lGxEmlC6RwmUlldWJZJkhV3yDyhbfVlarhEjRjBixIiq9eLiYmbOnMmFF16YwVqlp2Qj0oQSjxKonlgKC/KrEkuyVL2XljwUI6mtX7+eO+64g+eff57DDjuMe++9l7lz5/LJJ58wYsSIqh7Qf/3XfzF58mT27NnDwIED+e1vf0teXl6T1FHJRqSJFRbk644AOSS5t5qseg/0w0/2AVQNiSak69HWdph07969jB49ml/84hd069aNxYsXs2HDBl5++WXcna997WusWLGCTp06MWfOHJ577jlat27NjTfeyMyZM7n66qtr29QGUbIREcliP/7xj+nVqxcjR44EogeoLV68mNNPPx2A3bt3s2HDBtasWcOqVas444wzgOjebccff3yT1VPJRkSkAWrbA4njPnfLly/nT3/6E6+88kpVzN2ZMGEC119//QFlf/WrXzFmzBj+/d//vdE+vy5infpsZseY2Twze8PMXjezQWZ2rJktMbMN4b1DKGtmNtnMNprZGjPrl3ScMaH8BjMbkxTvb2avhX0mm5nF2R4Rkebi3Xff5dprr2XGjBm0b9++Kn7hhRcydepUdu/eDcDWrVvZvn075513HvPmzWP79u0A7Nq1iy1btjRZfeO+zuaXwF/c/WSgD/A6cBvwlLv3BJ4K6wAXAT3DaxzwAICZHQtMBAYCA4CJiQQVyoxN2m9YzO0REWkWpkyZwvbt2/nOd75D3759q17vvvsuo0ePZtCgQZx66qlcdtllvP/++xQWFnLXXXcxdOhQTjvtNC644ALKy8ubrL6xDaOZ2dHAOcA1AO6+B9hjZsOBwaHYdGA5cCswHJgRnnf9YugVFYSyS9x9VzjuEmCYmS0H8t39xRCfAVwKPBlXm0REmosJEyYwYcKEtNtvvvnmg2IjR46sOrfT1OI8Z9MDqAD+YGZ9gFXAzUBnd0+k07eBzmH5BOCtpP3LQqymeFmKuIhIs9PSZyDGOYzWCugHPODupwMfsH/IDIDQi4n96W1mNs7MSsyspKKiIu6PExHJNR0Tf0PDa1xdDxBnsikDytz9pbA+jyj5vBOGxwjv28P2rcCJSft3DbGa4l1TxA/i7sXuXuTuRZ06dWpQo0REWqAdib+h4VVc1wPElmzc/W3gLTP7UgidB5QCC4DEjLIxwGNheQFwdZiVdibwXhhuWwQMNbMOYWLAUGBR2FZpZmeGWWhXJx1LRCRW0cBMbomzTXFfZ/MvwEwzOxzYBFxLlODmmtl1wBbgilB2IXAxsBH4MJTF3XeZ2Z3AylDujsRkAeBGYBrQlmhigCYHiEjs2rRpw86dOznuuOPIlSsu3J2dO3fSpk2bWI4fa7Jx99VAUYpN56Uo68BNaY4zFZiaIl4C9G5YLUVE6qZr166UlZWRa+eA27RpQ9euXQ9dsB50BwERkTpq3bo1PXr0yHQ1sooeniYiIrFTshERkdgp2YiISOyUbEREJHZKNiIiEjslGxERiZ2SjYg0mbfffptRo0bxhS98gf79+3PxxRezfv16li9fzle+8pVG+YzNmzfTu3fjXn73xz/+kVNOOYUhQ4bUWO6aa65h3rx5NZaZNm0a27Ztq3dddu7cyZAhQzjqqKMYP358Vfz9998/4FEDHTt25JZbbqn35zQ2XWcjIk3C3RkxYgRjxoxh9uzZALz66qu88847Ga7ZoT300EP87ne/46yzzmrwsaZNm0bv3r3p0qVLvfZv06YNd955J2vXrmXt2rVV8fbt27N69eqq9f79+/P1r3+9odVtNOrZiEiTWLZsGa1bt+aGG26oivXp04ezzz4bgN27d3PZZZdx8sknc9VVV1Xdp6t79+7s2LEDgJKSEgYPHgzA7bffzre+9S0GDx7MSSedxOTJkw/6zE2bNnH66aezcuVK1q1bx4ABA+jbty+nnXYaGzZsOKj8rFmzOPXUU+nduze33norAHfccQfPPvss1113Hd///vcPKO/ujB8/ni996Uucf/75VU/BTOx3xhln0Lt3b8aNG4e7M2/ePEpKSrjqqqvo27cvH330UcpyNWnXrh1nnXVWjbeVWb9+Pdu3b6/62jYHSjYi0iTWrl1L//79027/61//yv33309paSmbNm3iueeeO+Qx33jjDRYtWsTLL7/MpEmT2Lt3b9W2N998k2984xtMmzaNM844gylTpnDzzTezevVqSkpKDroty7Zt27j11ltZunQpq1evZuXKlTz66KP85Cc/oaioiJkzZ3LvvfcesM/8+fN58803KS0tZcaMGTz//PNV28aPH8/KlStZu3YtH330EU888QSXXXZZ1bFWr15N27ZtU5aD6EmcU6ZMqdXXtrrZs2czcuTIZnXfNiUbEWkWBgwYQNeuXTnssMPo27cvmzdvPuQ+l1xyCUcccQQdO3bk+OOPrxqSq6ioYPjw4cycOZM+ffoAMGjQIH72s59xzz33sGXLFtq2bXvAsVauXMngwYPp1KkTrVq14qqrrmLFihU1fv6KFSu48sorycvLo0uXLpx77rlV25YtW8bAgQM59dRTWbp0KevWrUt5jHTlbrjhhgN6gXUxe/ZsrrzyynrtGxclGxFpEr169WLVqlVptx9xxBFVy3l5eezbtw+AVq1a8dlnnwHw8ccf12qfo48+mm7duvHss89WbR89ejQLFiygbdu2XHzxxSxdurThjUrj448/5sYbb2TevHm89tprjB079qC616VcXbz66qvs27evxl5kJijZiEiTOPfcc/nkk08oLt7/3K01a9bwzDPP1Lhf9+7dq5LUn/70p1p91uGHH878+fOZMWMGjzzyCBCdvznppJP47ne/y/Dhw1mzZs0B+wwYMICnn36aHTt28OmnnzJr1iz++Z//ucbPOeecc5gzZw6ffvop5eXlLFu2DNifFDt27Mju3bsPmKHWvn173n///UOWq69Zs2Y1u14NaDaaiDQRM2P+/Pnccsst3HPPPbRp04bu3btz//33s3VryofsAjBx4kSuu+46fvzjH1dNDqiNdu3a8cQTT3DBBRdw1FFHUVpaysMPP0zr1q353Oc+xw9/+MMDyhcUFHD33XczZMgQ3J1LLrmE4cOH1/gZI0aMYOnSpRQWFtKtWzcGDRoEwDHHHMPYsWPp3bs3n/vc5zjjjDOq9rnmmmu44YYbaNu2LS+88ELaconzNamG0rp3705lZSV79uzh0UcfZfHixRQWFgIwd+5cFi5cWOuvU1OxXHzaXE2Kioq8pKQk09WQFmrkgy8AMOf6QRk9hkhdmNkqd0/1bLJa0zCaiIjETslGRERip2QjIiKx0wQBkZhMenwdpdsqASgtr6yKFxbkZ6pKIhmjno1ITEq3VR6QZCBKNIVdlGyk5VHPRiRGhQX5mjUmQsw9GzPbbGavmdlqMysJsWPNbImZbQjvHULczGyymW00szVm1i/pOGNC+Q1mNiYp3j8cf2PYt/ncCEhERKo0xTDaEHfvmzRH+zbgKXfvCTwV1gEuAnqG1zjgAYiSEzARGAgMACYmElQoMzZpv2HxN0dEROoqE+dshgPTw/J04NKk+AyPvAgcY2YFwIXAEnff5e7vAkuAYWFbvru/6NGVqTOSjiUiIs1I3MnGgcVmtsrMxoVYZ3cvD8tvA53D8gnAW0n7loVYTfGyFHEREWlm4p4gcJa7bzWz44ElZvZG8kZ3dzOL/X45IdGNA+jWrVvcHycikms6Js67B8XuXpy2dAqxJht33xret5vZfKJzLu+YWYG7l4ehsMSj7bYCJybt3jXEtgKDq8WXh3jXFOVT1aMYKIbo3mgNa5WISIuzo6H3Rost2ZhZO+Awd38/LA8F7gAWAGOAu8P7Y2GXBcB4M5tNNBngvZCQFgE/S5oUMBSY4O67zKzSzM4EXgKuBn4VV3tEmpPS8kpGPvhC1XU8iQtFC7vkM/GrvTJZNZGU4uzZdAbmh9nIrYBH3P0vZrYSmGtm1wFbgCtC+YXAxcBG4EPgWoCQVO4EVoZyd7j7rrB8IzANaAs8GV4iOS3dRaHVLyAVaU5iSzbuvgnokyK+EzgvRdyBm9IcayowNUW8BOjd4MqKZJF0PZfEowdEmiPdrkZERGKnZCMiIrFTshERkdgp2YiISOyUbEREJHZKNiIiEjslGxERiZ2SjYiIxE7JRkREYqdkIyIisVOyERGR2CnZiIhI7JRsREQkdko2IiISOyUbERGJnZKNiIjETslGRERip2QjIiKxU7IREZHYKdmIiEjslGxERCR2sScbM8szs7+a2RNhvYeZvWRmG81sjpkdHuJHhPWNYXv3pGNMCPE3zezCpPiwENtoZrfF3RYREamfpujZ3Ay8nrR+D3Cfu38ReBe4LsSvA94N8ftCOcysEBgF9AKGAb8NCSwP+A1wEVAIXBnKiohIM9OqrjuYWQfgRHdfU4uyXYFLgJ8C3zMzA84FRoci04HbgQeA4WEZYB7w61B+ODDb3T8B/m5mG4EBodxGd98UPmt2KFta1zaJNMSkx9dRuq0SgNLy6L2wIJ/S8koKC/IzWTWRZqNWPRszW25m+WZ2LPAK8Dsz+89a7Ho/8APgs7B+HPAPd98X1suAE8LyCcBbAGH7e6F8VbzaPuniIk2qdFvlAUkmkWAKC/Ip7KJkIwK179kc7e6VZvZtYIa7TzSzGns2ZvYVYLu7rzKzwQ2sZ4OY2ThgHEC3bt0yWRXJUYUF+cy5flCmqyESl45mVpK0XuzuxXU5QG2TTSszKwCuAP6tlvt8GfiamV0MtAHygV8Cx5hZq9B76QpsDeW3AicCZWbWCjga2JkUT0jeJ138AOGLUgxQVFTktay/iIhEdrh7UUMOUNsJApOARUTnSFaa2UnAhpp2cPcJ7t7V3bsTneBf6u5XAcuAy0KxMcBjYXlBWCdsX+ruHuKjwmy1HkBP4GVgJdAzzG47PHzGglq2R0REmlBtezbl7n5aYsXdN9XynE0qtwKzzewu4K/AQyH+EPBwmACwiyh54O7rzGwu0Yn/fcBN7v4pgJmNJ0qCecBUd19XzzqJiEiMaptsfgX0q0UsJXdfDiwPy5vYP5ssuczHwOVp9v8p0Yy26vGFwMLa1EFERDKnxmRjZoOAfwI6mdn3kjblE/UmREREDulQPZvDgaNCufZJ8Ur2n3cRERGpUY3Jxt2fBp42s2nuvqWJ6iQiIjmmtudsjjCzYqB78j7ufm4clRIRkdxS22TzR2AK8Hvg0/iqIyIiuai2yWafuz8Qa01ERCRn1faizsfN7EYzKzCzYxOvWGsmIiI5o7Y9m8SV/d9PijlwUuNWR0REclGtko2794i7IiIikrtq+4iBI83sR2FGGmbWM9zVWURE5JBqe87mD8AeorsJQHR35btiqZGIiOSc2iabL7j7fwB7Adz9Q8Biq5WIiOSU2iabPWbWlmhSAGb2BeCT2GolIiI5pbaz0W4H/gKcaGYziR6Mdk1MdRIRkRxT29loi81sFXAm0fDZze6+I9aaiYhIzqhVsjGzx4FHgAXu/kG8VRIRkVxT22G0nwMjgbvNbCUwG3giPPBMRJqJ0vJKRj74AqXllQAUFuRT2CWfiV/tleGaSUtX22G0xKMG8oBzgbHAVKKHqIlIM1DYZf+vY2FBtJxIOiKZVtueDWE22leJejj9gOlxVUpE6i5V72Xkgy9koCYiB6vtOZu5wACiGWm/Bp5298/irJiIiOSO2vZsHgKudHc9y0ZEROqsxmRjZj9w9/9w90VmdjnRQ9QS237m7j+MvYYizcikx9dRuq3ygBPwpeWVVedIRCS1Q91BYFTS8oRq24bVtKOZtTGzl83sVTNbZ2aTQryHmb1kZhvNbI6ZHR7iR4T1jWF796RjTQjxN83swqT4sBDbaGa31abBIg2RSDSFBflVCSYx40tE0jvUMJqlWU61Xt0nwLnuvtvMWgPPmtmTwPeA+9x9tplNAa4DHgjv77r7F81sFHAPMNLMComSXi+gC/A/ZvZ/wmf8BrgAKANWmtkCdy89RL1EGqSwIJ851w/KdDVEssqhejaeZjnV+oEbI7vDauvwcqKp0/NCfDpwaVgezv4ZbvOA88zMQny2u3/i7n8HNhJNVhgAbHT3Te6+h+jan+GHaI+IiGTAoXo2fcyskqgX0zYsE9bbHOrg4bqcVcAXiXohfwP+4e77QpEy4ISwfALwFoC77zOz94DjQvzFpMMm7/NWtfjAQ9VJRESaXo3Jxt3zGnLwMHutr5kdA8wHTm7I8erLzMYB4wC6deuWiSqIiGSzjmZWkrRe7O7FdTlArS/qbAh3/4eZLQMGAceYWavQu+lK9CA2wvuJQJmZtQKOBnYmxROS90kXr/75xUAxQFFRUY3DfyIicpAd7l7UkAPU9nk2dWZmnUKPJnH3gQuA14FlwGWh2BjgsbC8IKwTti91dw/xUWG2Wg+gJ/AysBLoGWa3HU40iWBBXO0REZH6i7NnUwBMD+dtDgPmuvsTZlYKzDazu4C/El0wSnh/2Mw2ArsI067dfV24g0EpsA+4KXFxqZmNBxYBecBUd18XY3tERKSeYks27r4GOD1FfBPRTLLq8Y+By9Mc66fAT1PEFwILG1xZERGJVWzDaCIiIglKNiIiEjslGxERiZ2SjYiIxE7JRkREYqdkIyIisVOyERGR2CnZiIhI7JRsREQkdko2IiISOyUbERGJnZKNiIjETslGRERip2QjIiKxU7IREZHYNcljoUWyzaTH11G6rfKgeGl5JYUF+RmokUh2U89GJIXSbZWUlkfJprR8/3JhQT6FXZRsROpKPRuRNAoL8plz/aBMV0MkJ6hnIyIisVOyERGR2CnZiIhI7GI7Z2NmJwIzgM6AA8Xu/kszOxaYA3QHNgNXuPu7ZmbAL4GLgQ+Ba9z9lXCsMcCPwqHvcvfpId4fmAa0BRYCN7u7x9UmkWxUWl7JyAdfOChe2CWfiV/tlYEaSUsUZ89mH/Cv7l4InAncZGaFwG3AU+7eE3gqrANcBPQMr3HAAwAhOU0EBgIDgIlm1iHs8wAwNmm/YTG2RyTrFHbJr5qqnTyrrrS8MuXUbpG4xNazcfdyoDwsv29mrwMnAMOBwaHYdGA5cGuIzwg9kxfN7BgzKwhll7j7LgAzWwIMM7PlQL67vxjiM4BLgSfjapNItknXc0nV0xGJU5OcszGz7sDpwEtA55CIAN4mGmaDKBG9lbRbWYjVFC9LERcRkWYm9mRjZkcBfwJucfcD+u2hFxP7ORYzG2dmJWZWUlFREffHiYjkmo6Jv6HhNa6uB4j1ok4za02UaGa6+3+H8DtmVuDu5WGYbHuIbwVOTNq9a4htZf+wWyK+PMS7pih/EHcvBooBioqKNIFARKRudrh7UUMOEFvPJswuewh43d3/M2nTAmBMWB4DPJYUv9oiZwLvheG2RcBQM+sQJgYMBRaFbZVmdmb4rKuTjiUiIs1InD2bLwP/F3jNzFaH2A+Bu4G5ZnYdsAW4ImxbSDTteSPR1OdrAdx9l5ndCawM5e5ITBYAbmT/1Ocn0eQAEZFmKc7ZaM8ClmbzeSnKO3BTmmNNBaamiJcAvRtQTRERaQK6g4CIiMROyUZERGKnZCMiIrHT82ykRUt+ImfyA9L0RE6RxqWejbRoyU/kLCzYfx8xPZFTpHGpZyMtnp7IKRI/9WxERCR2SjYiIhI7JRsREYmdko2IiMROyUZERGKnZCMiIrFTshERkdjpOhuRFqq0vJKRD75wQKywSz4Tv9orQzWSXKZkI9ICJd8dIXEHBZE4KdmItECpei/VezkijUnnbEREJHbq2UiLkeoOz4Du7izSBJRspMVI3OE5+e7OgO7uLNIElGykRdEdnkUyQ+dsREQkdko2IiISu9iSjZlNNbPtZrY2KXasmS0xsw3hvUOIm5lNNrONZrbGzPol7TMmlN9gZmOS4v3N7LWwz2Qzs7jaIiIiDRNnz2YaMKxa7DbgKXfvCTwV1gEuAnqG1zjgAYiSEzARGAgMACYmElQoMzZpv+qfJSIizURsycbdVwC7qoWHA9PD8nTg0qT4DI+8CBxjZgXAhcASd9/l7u8CS4BhYVu+u7/o7g7MSDqWiIg0M009G62zu5eH5beBzmH5BOCtpHJlIVZTvCxFXOSA62mSJaY9i0jTy9gEgdAj8ab4LDMbZ2YlZlZSUVHRFB8pGZS4ngaiBJNYLizI1zU1IvXTMfE3NLzG1fUATd2zecfMCty9PAyFbQ/xrcCJSeW6hthWYHC1+PIQ75qifEruXgwUAxQVFTVJgpPM0vU09ZPqTtCgu0ELO9y9qCEHaOqezQIgMaNsDPBYUvzqMCvtTOC9MNy2CBhqZh3CxIChwKKwrdLMzgyz0K5OOpaI1ENhl/yUw4yl5ZUphyVF6iK2no2ZzSLqlXQ0szKiWWV3A3PN7DpgC3BFKL4QuBjYCHwIXAvg7rvM7E5gZSh3h7snJh3cSDTjrS3wZHiJSD2l67nobtDSGGJLNu5+ZZpN56Uo68BNaY4zFZiaIl4C9G5IHUVEpGnoDgIiIhI73YhTslqqac6a4izS/KhnI1kteZpzgqY4izQ/6tlI1tM05/hpSrQ0lJKNiNQouZeYfIFs9R6lSE2UbESkRpoSLY1B52xERCR26tlIVkiedVZ9KEczz0SaP/VsJCskzzorLNh/WxXNPBPJDurZSNbQrLPmJ9UsNc1Qk1SUbKTZSQyZabiseUvVo9QMNUlHyUaanUSiSU4uGi5rflL1XjRDTdJRspFmSUNmIrlFyUYyRo9vzk2J8zjJw6CgczktnZKNZEyq4TLQkFk2S/6+JX9fX/r7Ll76+66D/rlQAmo5lGwkdofqwWi4LHekSxzp7s4tLYeSjTSqVH9UXvp79HDVgT2OPSCuHkzLkW4ygW7w2XIo2UijSh4aS/znOrDHsfrjIQdJ949GuiG3xD76OcpOSjZSLxoak4aqy5Ab6LxPtlOykUPS0Jg0pbokoZp6QakoMWWOuXum69CkioqKvKSkJNPVyLh0/z2mkjax6BdXMuxQP8fJ06/T/Ryno5/v/cxslbsXNegY2Z5szGwY8EsgD/i9u99dU/lcTTZ1SR6QPoGko188yXb1/Qer+vVCcWnOv2ONkWyyehjNzPKA3wAXAGXASjNb4O6lma1Z42iM3kc6OmkvLU1dftaTf/ea4gLjug4HZqOsTjbAAGCju28CMLPZwHCgwcmmrj2FxlLfbr+Sh0jjaerfo0z9vamNxroeKtuTzQnAW0nrZcDAmnbYVPFBrW4WmIludPXPUAIRaRma8+/4yAdfYG0jHCfbk02tmNk4YFxY/WTuDf9U66/dlqTlxviC18fttS/aEdgRVz2aAbUvu6l92au3mSWf7C529+K6HCDbk81W4MSk9a4hdoDwRSkGMLOShp7oaq5yuW2g9mU7tS97NUbbsv2x0CuBnmbWw8wOB0YBCzJcJxERqSarezbuvs/MxgOLiKY+T3X3dRmuloiIVJPVyQbA3RcCC+uwS53GGbNMLrcN1L5sp/Zlrwa3Lesv6hQRkeYv28/ZiIhIFsjpZGNmx5jZPDN7w8xeN7NBZnasmS0xsw3hvUOm61kfZvYlM1ud9Ko0s1typX0AZvb/zGydma01s1lm1iZMBnnJzDaa2ZwwMSTrmNnNoV3rzOyWEMva752ZTTWz7Wa2NimWsj0WmRy+h2vMrF/mal47adp3efj+fWZmRdXKTwjte9PMLmz6GtdNmvbdG/52rjGz+WZ2TNK2Orcvp5MN0T3T/uLuJwN9gNeB24Cn3L0n8FRYzzru/qa793X3vkB/4ENgPjnSPjM7AfguUOTuvYkmgIwC7gHuc/cvAu8C12WulvVjZr2BsUR3wOgDfMXMvkh2f++mAcOqxdK15yKgZ3iNAx5oojo2xDQObt9a4OvAiuSgmRUS/az2Cvv8NtxaqzmbxsHtWwL0dvfTgPXABKh/+3I22ZjZ0cA5wEMA7r7H3f9BdDub6aHYdODSTNSvkZ0H/M3dt5Bb7WsFtDWzVsCRQDlwLjAvbM/W9p0CvOTuH7r7PuBpoj9aWfu9c/cVwK5q4XTtGQ7M8MiLwDFmVtAkFa2nVO1z99fd/c0UxYcDs939E3f/O7CR6B+LZitN+xaHn0+AF4muY4R6ti9nkw3QA6gA/mBmfzWz35tZO6Czu5eHMm8DnTNWw8YzCpgVlnOife6+Ffg58L9ESeY9YBXwj6RfgDKiWxZlm7XA2WZ2nJkdCVxMdHFyTnzvkqRrT6rbTGXj9zGdXGzft4Anw3K92pfLyaYV0A94wN1PBz6g2rCER1Pxsno6Xjhn8TXgj9W3ZXP7wvj+cKJ/GroA7Ti4m5+V3P11ouHAxcBfgNXAp9XKZO33LpVca09LYmb/BuwDZjbkOLmcbMqAMnd/KazPI0o+7yS67OF9e4bq11guAl5x93fCeq6073zg7+5e4e57gf8Gvkw05JK4Pizl7Ymygbs/5O793f0conNP68md711CuvbU6jZTWSxn2mdm1wBfAa7y/dfJ1Kt9OZts3P1t4C0z+1IInUf06IEFwJgQGwM8loHqNaYr2T+EBrnTvv8FzjSzI83M2P/9WwZcFspkbfvM7Pjw3o3ofM0j5M73LiFdexYAV4dZaWcC7yUNt+WCBcAoMzvCzHoQTYR4OcN1qjOLHkz5A+Br7v5h0qb6tc/dc/YF9AVKgDXAo0AH4DiimTEbgP8Bjs10PRvQvnbATuDopFgutW8S8AbROY6HgSOAk8IP9kaiocMjMl3PerbtGaLk+SpwXrZ/74j+4SkH9hKNKlyXrj2AET308G/Aa0QzDjPehnq0b0RY/gR4B1iUVP7fQvveBC7KdP3r2b6NROdmVofXlIa0T3cQEBGR2OXsMJqIiDQfSjYiIhI7JRsREYmdko2IiMROyUZERGKnZCMiIrFTshERkdgp2YjUkZn9odqzhN42s+p3PK7Ncbqb2Udmtjop1tnMHjGzTWa2ysxeMLMRNRxjWfXniYTnGj1gZm1D/faYWce61k+kMSnZiNSRu1/r+58lNILoJoXX1PNwfwvHIdyW51Fghbuf5O79ie7o3TX97swKZZKNAma5+0fh2NvqWTeRRqNkI1JPobfwF+BOd1/QCIc8F9jj7lMSAXff4u6/Cp/3TTN7OfRWHgwPrJoHXJJ4YqmZdSe6S/YzjVAfkUajZCNSD+E5NI8Dc939wUY6bC/glTSfdwowEvhy6K18SnQn3l1E94q7KBQdFeqk+1BJs9Lq0EVEJFnoUcwG3nD3H8f4Ob8BzgL2ED3psj+wMhptoy37b9mfGEp7LLxn3aOyJfcp2YjU3W+B1sDY5KCZtSa6U/WRRKMG/5q87u7fPcRx1wHfSKy4+01hqK6E6E7J0919Qor9HgPuM7N+wJHuvqperRKJkYbRROrAzCYS9TAu9/2Pp04YR9Tj+AdwdIr1Q1kKtDGz7yTFjgzvTwGXJT0H51gz+zyAu+8mes7PVA58tpFIs6GejUgthZPvtwObgWfDcBbAm+4+EjgduMndPwnlf5+8fiju7mZ2KVEv5QdABdHjzG9191Iz+xGw2MwOI3ruyE3AlrD7LGA+B89ME2kW9DwbkUZiZl8FRhM9cGop0VBb1bq7/6Va+e7AE+7eO+Z6bSZ6QNmOOD9HpCZKNiIZYmYnAs8DOxPX2jTy8dsCLwCdgFPDzDWRjFCyERGR2GmCgIiIxE7JRkREYqdkIyIisVOyERGR2CnZiIhI7JRsREQkdko2IiISOyUbERGJ3f8He3K0OKPJbEIAAAAASUVORK5CYII=" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "{'sumw': defaultdict(, {'Zee': 200000.0}), 'mass': }\n", "{'sumw': defaultdict(, {'Zee': 350000.0}), 'mass': }\n", @@ -224,13 +206,42 @@ ] } ], - "metadata": {} + "source": [ + "%matplotlib inline\r\n", + "async def plot_stream(accumulator_stream):\r\n", + " global first\r\n", + " fig, axes = plt.subplots()\r\n", + " first = True\r\n", + "\r\n", + "\r\n", + " count = 0\r\n", + " async for coffea_info in accumulator_stream:\r\n", + " print(coffea_info)\r\n", + " hist.plot1d(coffea_info['mass'], ax=axes)\r\n", + "\r\n", + " count += 1\r\n", + " plt.text(0.95, 0.75, f'Chunks of data: {count}', horizontalalignment='right', transform=axes.transAxes)\r\n", + "\r\n", + " # Either display it or update a previous version of the plot\r\n", + " if first:\r\n", + " display(fig, display_id='mass_update')\r\n", + " first = False\r\n", + " else:\r\n", + " update_display(fig, display_id='mass_update')\r\n", + " return coffea_info\r\n", + "\r\n", + "await plot_stream(executor.execute(analysis, datasource, title='Zee_2'))\r\n", + "plt.close() # Prevents another copy of the plot showing up in the notebook" + ] } ], "metadata": { + "interpreter": { + "hash": "0857beeb8bd56f57ec31dfb6d49aa425259567fda5d0227b9061b424f42da337" + }, "kernelspec": { - "name": "python3", - "display_name": "Python 3.9.6 64-bit ('.venv': venv)" + "display_name": "Python 3.9.6 64-bit ('.venv': venv)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -243,9 +254,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.6" - }, - "interpreter": { - "hash": "0857beeb8bd56f57ec31dfb6d49aa425259567fda5d0227b9061b424f42da337" } }, "nbformat": 4, diff --git a/binder/systematics.ipynb b/binder/systematics.ipynb index 2049a9624..6b57295d6 100644 --- a/binder/systematics.ipynb +++ b/binder/systematics.ipynb @@ -34,7 +34,6 @@ }, "outputs": [], "source": [ - "import numpy as np\n", "def muon_pt_scale(pt): \n", " return (1.0 + np.array([0.05, -0.05], dtype=np.float32)) * pt[:, None]\n", "\n",