{ "cells": [ { "metadata": { "ExecuteTime": { "end_time": "2025-03-26T14:01:33.036983Z", "start_time": "2025-03-26T14:01:27.913144Z" } }, "cell_type": "code", "source": [ "# This file is for quick plotting of histograms of particle properties, to debug potential issues with cuts etc.\n", "import torch\n", "import sys\n", "import os.path as osp\n", "import os\n", "import sys\n", "import numpy as np\n", "from src.dataset.dataset import SimpleIterDataset, EventDataset\n", "from src.utils.utils import to_filelist\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import matplotlib\n", "import pickle\n", "import torch\n", "import os\n", "import matplotlib.pyplot as plt\n", "from src.utils.paths import get_path\n", "from src.utils.utils import CPU_Unpickler\n", "from pathlib import Path\n", "import fastjet\n", "from src.dataset.dataset import EventDataset\n", "import numpy as np\n", "from src.plotting.plot_coordinates import plot_coordinates\n", "\n", "matplotlib.rc('font', size=13)\n", "from src.plotting.plot_event import plot_event_comparison\n", "from src.dataset.functions_data import concat_events\n", "from src.utils.paths import get_path\n", "from dotenv import load_dotenv\n", "load_dotenv()\n" ], "id": "6bae9707acf4a848", "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 1 }, { "metadata": { "ExecuteTime": { "end_time": "2025-03-26T14:01:33.066009Z", "start_time": "2025-03-26T14:01:33.060240Z" } }, "cell_type": "code", "source": [ "def remove_from_list(lst):\n", " out = []\n", " for item in lst:\n", " if item in [\"hgcal\", \"data.txt\", \"test_file.root\"]:\n", " continue\n", " out.append(item)\n", " return out\n", "\n", "#path = \"/eos/user/g/gkrzmanc/jetclustering/data/SVJ_std_UL2018_scouting_test_large/SVJ_mMed-700GeV_mDark-20GeV_rinv-0.7_alpha-peak\"\n", "def get_iter(path_to_ds):\n", " return iter()" ], "id": "e7a7ef680143801e", "outputs": [], "execution_count": 2 }, { "metadata": { "ExecuteTime": { "end_time": "2025-03-26T14:01:40.095236Z", "start_time": "2025-03-26T14:01:33.330168Z" } }, "cell_type": "code", "source": [ "\n", "filename_parton_level = get_path(\"train/Eval_eval_19March2025_2025_03_19_22_08_15/eval_1.pkl\", \"results\", fallback=True)\n", "result_parton_level = CPU_Unpickler(open(filename_parton_level, \"rb\")).load()\n", "print(result_parton_level[\"filename\"])\n", "dataset_parton_level = EventDataset.from_directory(result_parton_level[\"filename\"], mmap=True, model_output_file=filename_parton_level, parton_level=True)\n", "\n", "filename_gen_level = get_path(\"train/Eval_eval_19March2025_2025_03_19_22_08_18/eval_1.pkl\", \"results\", fallback=True)\n", "result_gen_level = CPU_Unpickler(open(filename_gen_level, \"rb\")).load()\n", "dataset_gen_level = EventDataset.from_directory(result_gen_level[\"filename\"], mmap=True, model_output_file=filename_gen_level, gen_level=True)\n", "\n", "filename_pfcands_level = get_path(\"train/Eval_eval_19March2025_2025_03_19_22_08_22/eval_1.pkl\", \"results\", fallback=True)\n", "result_pfcands_level = CPU_Unpickler(open(filename_pfcands_level, \"rb\")).load()\n", "dataset_pfcands_level = EventDataset.from_directory(result_pfcands_level[\"filename\"], mmap=True, model_output_file=filename_pfcands_level)\n" ], "id": "1c903a13377dcb3c", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/work/gkrzmanc/jetclustering/preprocessed_data/Feb26_2025_E1000_N500_full/PFNano_s-channel_mMed-1000_mDark-20_rinv-0.5_alpha-peak_13TeV-pythia8_n-1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/work/gkrzmanc/jetclustering/code/src/utils/utils.py:91: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", " return lambda b: torch.load(io.BytesIO(b), map_location='cpu')\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Batch idx torch.Size([501263]) tensor([3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131,\n", " 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131,\n", " 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3132, 3132, 3132,\n", " 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132,\n", " 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132, 3132,\n", " 3132, 3132, 3132, 3133, 3133, 3133, 3133, 3133, 3133, 3133, 3133, 3133,\n", " 3133, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134,\n", " 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134, 3134,\n", " 3134, 3134, 3134, 3134, 3134, 3135, 3135, 3135, 3135, 3135, 3135, 3135,\n", " 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135,\n", " 3135, 3135, 3135, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,\n", " 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,\n", " 3136, 3136, 3136, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137,\n", " 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137,\n", " 3137, 3137, 3137, 3137, 3137, 3138, 3138, 3138, 3138, 3138, 3138, 3138,\n", " 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3139,\n", " 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3139])\n", "skipped [19289, 15787, 12804, 12703, 12368, 9642, 6843, 6378, 5789, 5629, 5624, 3766, 2690, 1883]\n", "result torch.Size([19983]) [78887.0, 78898.0, 78931.0, 78961.0, 78971.0, 78999.0, 79021.0, 79045.0, 79071.0, 79089.0]\n", "get_pfcands_key\n", "Batch idx torch.Size([2982887]) tensor([3131, 3131, 3131, ..., 3139, 3139, 3139])\n", "skipped []\n", "result torch.Size([19969]) [467445.0, 467565.0, 467712.0, 467879.0, 467956.0, 468058.0, 468160.0, 468362.0, 468530.0, 468643.0]\n", "get_pfcands_key\n", "Batch idx torch.Size([5032092]) tensor([3131, 3131, 3131, ..., 3139, 3139, 3139])\n", "skipped []\n", "result torch.Size([19969]) [784483.0, 784702.0, 784927.0, 785193.0, 785287.0, 785462.0, 785727.0, 786175.0, 786452.0, 786634.0]\n", "get_pfcands_key\n", "Found pfcands_key=pfcands\n" ] } ], "execution_count": 3 }, { "metadata": { "ExecuteTime": { "end_time": "2025-03-26T14:01:40.138249Z", "start_time": "2025-03-26T14:01:40.128129Z" } }, "cell_type": "code", "source": "dataset_gen_level[0]", "id": "8175bcf087430364", "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 4 }, { "metadata": { "ExecuteTime": { "end_time": "2025-03-26T14:01:50.734250Z", "start_time": "2025-03-26T14:01:50.717027Z" } }, "cell_type": "code", "source": "dataset_parton_level[0]", "id": "e93a7d6c2a4ebec0", "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 5 }, { "metadata": { "ExecuteTime": { "end_time": "2025-03-26T14:01:53.461228Z", "start_time": "2025-03-26T14:01:53.443790Z" } }, "cell_type": "code", "source": "dataset_pfcands_level[0]", "id": "66e9f682b4f8c364", "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 6 }, { "metadata": { "ExecuteTime": { "end_time": "2025-03-26T14:19:22.465519Z", "start_time": "2025-03-26T14:19:10.976384Z" } }, "cell_type": "code", "source": [ "# make a histogram of the number of particles within R=0.8 of dark quarks\n", "data = {\n", " \"PL\": [],\n", " \"GL\": [],\n", " \"PFCands\": []\n", "}\n", "R = 2.0\n", "from tqdm import tqdm\n", "for i in tqdm(range(200)):\n", " event = dataset_pfcands_level[i]\n", " particles = event.pfcands\n", " data[\"PFCands\"] += [0]\n", " for dq in range(len(event.matrix_element_gen_particles)):\n", " coords = event.matrix_element_gen_particles.eta[dq], event.matrix_element_gen_particles.phi[dq]\n", " for p in range(len(particles)):\n", " if np.sqrt((particles.eta[p] - coords[0])**2 + (particles.phi[p] - coords[1])**2) < R:\n", " data[\"PFCands\"][-1] += 1\n", " event = dataset_parton_level[i]\n", " particles = event.final_parton_level_particles\n", " data[\"PL\"] += [0]\n", " for dq in range(len(event.matrix_element_gen_particles)):\n", " coords = event.matrix_element_gen_particles.eta[dq], event.matrix_element_gen_particles.phi[dq]\n", " for p in range(len(particles)):\n", " if np.sqrt((particles.eta[p] - coords[0])**2 + (particles.phi[p] - coords[1])**2) < R:\n", " data[\"PL\"][-1] += 1\n", " particles = event.final_gen_particles\n", " data[\"GL\"] += [0]\n", " for dq in range(len(event.matrix_element_gen_particles)):\n", " coords = event.matrix_element_gen_particles.eta[dq], event.matrix_element_gen_particles.phi[dq]\n", " for p in range(len(particles)):\n", " if np.sqrt((particles.eta[p] - coords[0])**2 + (particles.phi[p] - coords[1])**2) < 0.8:\n", " data[\"GL\"][-1] += 1" ], "id": "232234c10680aaba", "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " 0%| | 0/200 [00:00" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiQAAAGhCAYAAABRZq+GAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARGFJREFUeJzt3Xd4VFXi//HPpPcCCZKEUCJBEHARAQOKICK4IEVXUFwFCxZWdCkiZlWKLa4uoIhYQJdmxUJccVEUsVCUzVIWFTACCiEKgRRCkgkk5/dHfpmvY4IyJblM8n49zzwy955z75lDmHy895x7bMYYIwAAAAv5Wd0AAAAAAgkAALAcgQQAAFiOQAIAACxHIAEAAJYjkAAAAMsRSAAAgOUIJAAAwHIBVjfgVFRWVurAgQOKjIyUzWazujkAAOAUGGN09OhRJSYmys/vt6+B+EQgOXDggJKTk61uBgAAcMO+ffvUokWL3yzjE4EkMjJSUtUHioqKsrg1AADgVBQVFSk5Odnxe/y3+EQgqb5NExUVRSABAMDHnMpwCwa1AgAAyxFIAACA5QgkAADAcgQSAABgOQIJAACwnE/MsgGAxsYYo4qKCp04ccLqpgA1BAYGyt/f36vHJJAAwGnEGKOCggIdOnRIFRUVVjcHOKmYmBg1b97ca09QJ5AAwGnkp59+UkFBgeO5SwEBASyZgdOKMUYlJSU6ePCgJCkhIcErxyWQAMBpoqKiQoWFhYqPj1dcXJzVzQFOKjQ0VJJ08OBBNWvWzCu3bxjUCgCniePHj8sYo/DwcKubAvyusLAwSVU/t95AIAGA0wy3aOALvP1zSiABAACWI5AAAADLMajVYjkFpco/Vu52/djwICXFhHqxRQBOZ55+Z3gb30HuW7RokW688UZ98skn6tu3r9XNcbCqXQQSC+UUlKr/rE9Vetz9Zw2EBvrro8l9+EIAGgFvfGd4myffQWvXrtXFF1/stC08PFxnnXWWRo8erfHjx3v94VsrVqzQli1bNGPGDK8eF54jkFgo/1i5So9X6Mmru6htswiX62cfLNaE17co/1g5gQRoBDz9zvA2b30HjRo1SoMGDZIxRgcOHNCiRYs0YcIEff3113rhhRe82OKqQLJ48WICyWmIQHIaaNssQp2Soq1uBgAf0dC+M7p27arrrrvO8X7cuHHq0KGDFi5cqIceekhnnHGGx+c4evSoIiMjPT4O6g6DWgEAp5WoqCj17NlTxhjt3r1blZWVeuSRR3TRRRepefPmCgoKUsuWLTVu3DgdPnzYqe7evXtls9k0Y8YMvf766zrvvPMUGhqqO++8U3379tXixYslVU1ZrX4tWrTIUX/btm264oor1LRpU4WEhOjss8/W448/XuMx/jfccINsNpsKCws1btw4NWvWTCEhIbrgggv05ZdfevT57Xa7Hn30UXXs2FEhISGKiYnRkCFDtHnzZkeZb7/9VjabTZMmTar1GKNGjVJQUJAOHTrk2Jabm6tx48apZcuWCgoKUmJiom699VbHE1etxhUSAMBpxRij7OxsSVJcXJzKy8v1xBNP6E9/+pOGDRum8PBwbdq0SS+++KK++OILZWVlKSgoyOkYK1as0Ny5czVu3DjdfvvtioqKUpMmTVRZWanPP/9cS5cudZTt1auXJOk///mP+vTpo8DAQN1xxx1q3ry5/vWvf2nq1KnaunWrXn755RptHThwoOLj4zVt2jQdPnxYs2fP1uDBg7Vnzx63rsgcP35cl112mdavX6/rr79e48ePV2FhoRYsWKALLrhAn332mbp166YOHTqoe/fueuWVV/TEE084jbUpKipSZmam/vjHPyo+Pl6S9OOPP6pnz54qLy/XzTffrDPPPFPZ2dl69tln9cknn+g///mPoqOtvepGIAEAWKqkpER5eXkyxig3N1dPP/20tm7dqrS0NKWmpjq2Vz+uXJJuv/129erVS2PHjtWKFSs0cuRIp2N+/fXX2rZtmzp06OC0/eWXX9bnn3/udIuo2l//+lfZ7XZt2LBB55xzjiRp/Pjxuvrqq/XKK6/opptu0iWXXOJUp2vXrpo/f77j/dlnn62RI0fqlVde0W233eZyX8ybN09r167VqlWrNHDgQMf2v/zlL+rUqZPuvvturV27VpI0ZswYjR8/Xh988IEGDRrkKLt8+XKVlpZqzJgxjm133nmnjh8/rs2bN6tFixaO7SNGjFBaWprmzJlj+bgabtkAACw1ffp0xcfHq1mzZvrDH/6gl156SUOHDtWKFSskVd1eqQ4jFRUVKigoUF5envr16ydJtd4iGTx4cI0w8lsOHjyo9evXa+jQoY4wUn3u++67T5L0zjvv1Kg3ceJEp/fVbfruu+9O+dy/tGzZMrVv317nnXee8vLyHK/y8nJdeuml+uKLL1RaWirp/27LLFmyxOkYS5YsUZMmTXT55ZdLkgoLC/Xee+9p6NChCgkJcTpu69at1bZtW3344YdutdebuEICALDUrbfeqhEjRshmsyk8PFzt2rVTkyZNnMq88cYbmjVrljZv3lxj7ZT8/Pwax2zXrp1LbdizZ48kqWPHjjX2dejQQX5+ftq9e3eNfSkpKU7vmzZtKkk1xracqm+//ValpaWOWy21ycvLU3JysiN0ZGZmqqioSFFRUdq7d68+//xzjRs3znEba+fOnaqsrNSLL76oF198sdZj/vpzWMHlQHKyZ9eHh4eruLjYadvOnTs1depUffrppyovL1fXrl01c+ZMR4IEACA1NVX9+/c/6f63335bV199tXr06KGnnnpKycnJCgkJUUVFhS677DJVVlbWqFO98FtdO9lzUowxbh3PGKPOnTtr9uzZJy3zy7AyevRovf3223rjjTc0duxYLV26VMYYp9s11W257rrrnLb/0i9vh1nFrSskvXv31q233uq0LTAw0On9999/r169eikgIED33HOPoqOjtWDBAg0cOFD//ve/f/OHDwCAakuXLlVISIg++eQTp6CxY8cOl491sv+pbtOmjaSqsSe/tmPHDlVWVtbLVYTU1FQdOnRI/fr1k5/f74+qGDRokOLi4rRkyRJHIGnfvr169OjhKNO2bVvZbDaVl5ef1r973QokKSkptQ4I+qX09HQVFBQoKytLXbp0kVSV5Dp27Kg77rhDO3bsYEVLAMDv8vf3l81mc7oSYozRww8/7PKxIiKqHih35MgRp9tCzZo1U69evfSvf/1L27dvV6dOnRznycjIkCRdccUVnnyMUzJ69GhNmTJFs2fP1t13311j/88//+z0XJbAwEBde+21evrpp/XKK6/ou+++c7S3WtOmTTVo0CC9/fbb2rhxo9LS0pz2G2OUl5f3m7eJ6oPbY0jKy8tVXl7u+Mv9pWPHjundd99V3759HWFEqvpBGDt2rKZNm6ZNmzY5JTgAAGpz1VVX6a233lK/fv00evRoHT9+XCtWrFBJSYnLx0pLS9O8efP0l7/8RYMHD1ZgYKDOP/98tWnTRk899ZT69Omj3r17O6b9vvfee/rggw907bXX1phhUxf++te/avXq1ZoyZYrWrFmjfv36KSoqSj/++KM+/vhjx5WiXxozZoxjirOfn1+tFwyeffZZXXjhhbrooos0evRonXvuuaqsrNTu3buVmZmp0aNHWz7Lxq1A8uabb2rZsmWqqKhQfHy8rr76aj388MOOOczbtm2T3W5Xz549a9StTmYEEgBwT/bB4t8vVA/qqx3XXHONjh49qjlz5ujuu+9WbGyshgwZoscee8wxiPRUjRo1Sps3b9Zrr72m5cuXq7KyUv/85z/Vpk0bdevWTevXr9f06dM1f/58HTt2TCkpKfr73/+uyZMn19GncxYYGKiVK1dq/vz5Wrp0qaZPny5JSkxMVI8ePWodA9K1a1d16tRJ27dvV//+/Z2m9VZLTk5WVlaW/v73vyszM1PLli1TSEiIkpOTNWTIkBrTpq1gMy6OvDn//PM1YsQItW3bVkVFRXr//ff1+uuvq3Pnzlq/fr0iIiL01ltv6aqrrtL8+fM1btw4p/rffPONOnbsqPT0dD366KO1nsNut8tutzveFxUVKTk5WYWFhYqKinLjY56etucU6vKnv9B7d17o1mOgPa0P4PRSVlamPXv2qE2bNgoJCamxv6Etrgff9ns/r1LV7+/o6OhT+v3t8hWSX8/3Hj16tM455xzdd999euqpp3Tfffc5LqMFBwfXqF/d6N+61JaRkaGZM2e62jQAaNCSYkL10eQ+yj9WbnVTHGLDgwgj8AqvPIdkypQpmjlzplauXKn77rvPMQr6l1c5qpWVlUn67SlZ6enpTs/nr75CAgCNXVJMKAEADZJXAklgYKASExOVl5cnqepelyTl5OTUKFu9LSkp6aTHCw4OrvXqCgAAaJi88uj4srIy7d+/3zEVqXPnzgoODtaGDRtqlN24caMkqVu3bt44NQAAaABcCiQnexTuAw88oBMnTmjIkCGSqqb3DhkyRGvXrtXWrVsd5YqLi7Vw4UKlpqYywwYAADi4dMvm4Ycf1saNG3XxxRerZcuWKi4u1vvvv69PPvlE559/vu68805H2YyMDH388ccaMGCAJk6cqKioKC1YsEA5OTlauXIlD0UDAAAOLgWSvn376ptvvtHixYt1+PBh+fv7KzU1VY888ogmTZrkNO2nbdu2Wrdune6991499thjjrVsVq1adVo/uhYAANQ/lwLJsGHDNGzYsFMu36FDB2VmZrrcKAAA0Lh4ZVArAACAJwgkAADAcgQSAABgOQIJAACwnFee1AoAqCcF+6SS2p8JZYmwplJMw17aY+/evWrTpo2mT5+uGTNmWN0ch9O1Xe4ikACAryjYJz3TQzp+8sVJ611gmHTHVx6FkrKyMr300kt688039b///U8FBQUKDw9Xamqq+vXrpxtvvFHt27f3YqNxOiKQAICvKDlcFUauXCDFtbO6NVLeLuntW6ra5WYg2b17ty6//HJ9++236tOnjyZOnKiEhAQVFxdry5Yteumll/SPf/xDP/7442+ugQbfRyABAF8T105K7GJ1KzxWWlqqwYMH6/vvv9fbb7+tK664okaZsrIyzZkzh6d7NwIMagUAWGLhwoXasWOHpkyZUmsYkaSQkBClp6c7VpGvVlhYqKlTp6pt27YKDg5WfHy8Ro0apd27dzuVW7RokWw2m9asWaN//OMfOvPMMxUcHKx27dpp8eLFHn+G119/XRdeeKEiIyMVFham888/X2+++aZjf0VFhRITE9W1a9da6z///POy2WxasWKFY5vdbtejjz6qjh07KiQkRDExMRoyZIg2b97scXtPZwQSAIAlqn9xjx071qV6hYWF6tWrl+bPn6/Bgwfr6aef1vjx47VmzRqdf/75+uGHH2rU+dvf/qalS5fqtttu0+OPPy4/Pz/dcMMNWrdundvtv//++3XNNdcoMjJSDz30kB577DGFhYVpxIgReuaZZyRJ/v7+uu6667R582Z9/fXXNY6xZMkSxcXFafDgwZKk48eP67LLLtPMmTPVs2dPzZkzR/fee6+++eYbXXDBBfrPf/7jdntPe8YHFBYWGkmmsLDQ6qZ41f/2F5hWU98z/9tfYEl9AKeX0tJS880335jS0tLaC+RsNmZ6VNV/TwcetqdJkyYmKiqqxvYTJ06YQ4cOOb1KSkoc+++66y4TEhJitmzZ4lRv7969JjIy0owZM8ax7Z///KeRZLp06WLsdrtj+/79+01QUJC55pprfrede/bsMZLM9OnTHduysrKMJJOenl6j/LBhw0xkZKQpKioyxhizfft2I8lMmTLFqVx2draRZO68807HttmzZxtJZtWqVU5lCwsLTXJysunTp89vtqs+/e7Pq3Ht9zdXSAAAligqKlJUVFSN7d9++63i4+OdXtVXHIwxevnll3XRRRcpKSlJeXl5jld4eLjS0tL04Ycf1jjmX/7yFwUFBTneJyUlqV27dvruu+/cavvLL78sm82mMWPG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bt06SdJNN91Uo+7UqVP12GOPSZK2b98uSerSpcspn/v+++9XRkaG07a77rpL5557rh5++OFaA0nXrl01f/58x/uzzz5bI0eO1CuvvKLbbrtNkvTPf/5TmzZt0rRp0zRz5kynshMnTlSrVq0c2z744AOVlJTo1VdfVY8ePU657Q0JgQQAYLnp06dr+vTpjvd+fn4aOnSo04BWSZo2bZp69+7ttK1169aOPxcVFUmquuVzqsLDwx1/LikpUWlpqYwx6tevn5577jkVFRXVON7EiROd3vfr10+S9N133zm2rVixQv7+/po8ebJT2XHjxjl9VkmKjo6WJGVmZuqcc85RSEjIKbe/oSCQAAAsd+utt2rEiBGy2WwKDw9Xu3bt1KRJkxrlOnfurP79+5/0ONXB4ejRo4qNjT2lcx88eFD333+/MjMzdfDgwRr7CwoKagSSlBTnWU7Vt2AOHz7s2LZ7924lJCTUqBscHKyUlBTl5//f82SuueYaLVu2TI8++qjmzJmjtLQ0DRw4UNdcc43TlZSGjEGtAADLpaamqn///rrkkkuUlpZWaxg5FZ06dZIkbd68+ZTKG2M0YMAALV68WGPGjNHrr7+uVatWafXq1Y5bNZWVlTXq+fv7n/R47ggODtbq1av15ZdfKj09Xf7+/po2bZrat29f6+DahohAAgBoMP70pz9JkhYuXHhK5bdt26atW7fq3nvv1eOPP66RI0dq4MCB6t+/vyoqKjxqS0pKinJzcx23karZ7faTzhzq0aOHHnjgAa1evVrZ2dkKDw/X/fff71E7fAWBBADQYAwZMkQXXXSRXn31VadBp7+UnZ3tGMRafaXj11c2tm/f7vGViWHDhqmiokKzZs1y2v7ss8/WCCm/njkkSS1atFB8fLyOHDniUTt8BWNIAAANhs1m05tvvqkhQ4bojjvu0NKlSzV06FA1b95cBQUF+uKLL/Tuu+86rqR06NBBHTt21OOPP66SkhKdddZZ2rVrl55//nl17tz5pM8MORU33nijXnjhBT344IPas2ePevbsqc2bN2v58uU688wzdeLECUfZhx9+WB9++KEuv/xytWnTRsYY/etf/9KOHTt0zz33eNwvvoBAAgA+ZnfhqT8orC6dLu34tfj4eH3++eeOtWxmzZqlwsJCRUVF6Q9/+IOeeuopx7o4/v7+Wrlype6++24tXrxY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CxYsMJMmTTIBAQGmT58+PKnVRfPmzTOSTMuWLc3ixYvN0qVLnV4ffviho+x3331nYmNjTbNmzUxGRobj6aH+/v5m1apVFn4K31Xbc0iMoa899fzzzxtJpmPHjmbWrFkmIyPDtGzZ0gQGBpoPPvjAUW7dunUmKCjIpKSkmDlz5pg5c+aYlJQUEx4e7hQGUdPevXtNkyZNjM1mM9ddd5159tlnzSOPPGJat25tJJlnnnnGUZZ+PjVLliwxDz30kHnooYdMs2bNTExMjOP9kiVLnMq60qd5eXmmVatWJiIiwkybNs08//zzpm/fvkaSWbhwoVfa3mgDyYkTJ8w//vEP065dOxMUFGQSExPNxIkTvfK0ucZmzJgxRtJJX3369HEq/80335ihQ4ea6OhoExoaai644AIeZe6BkwUSY+hrT7311lvm/PPPN2FhYSYiIsJceuml5osvvqhRbv369aZfv34mPDzcREREmAEDBpisrCwLWux7srOzzejRo01SUpIJCAgwkZGRpnfv3uatt96qUZZ+/n3Vj3M/le9iY1zr0/3795vrrrvONG3a1AQHB5tzzz3XvPbaa15ru82YX61eBAAAUM8a5aBWAABweiGQAAAAyxFIAACA5QgkAADAcgQSAABgOQIJAACwHIEEAABYjkACAAAsRyABAACWI5AAAADLEUgAAIDlCCQAAMByBBIAAGC5/wd+Q6CVFvliMQAAAABJRU5ErkJggg==" }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 14 }, { "metadata": { "ExecuteTime": { "end_time": "2025-03-26T14:19:26.343487Z", "start_time": "2025-03-26T14:19:26.019458Z" } }, "cell_type": "code", "source": [ "fig, ax = plt.subplots()\n", "bins = np.linspace(0, 100, 30)\n", "ax.hist(data[\"PL\"], bins=bins, histtype=\"step\", label=\"Parton level\")\n", "ax.hist(data[\"GL\"], bins=bins, histtype=\"step\", label=\"Gen level\")\n", "ax.hist(data[\"PFCands\"], bins=bins, histtype=\"step\", label=\"PFCands\")\n", "ax.legend()\n", "ax.set_title(\"R=2.0\")\n", "fig.show()" ], "id": "f934c81528bf400e", "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "execution_count": 16 }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "", "id": "f094b8a0a5862408" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }