Projektpraktikum/notebooks/thesis_efficiencies.ipynb

715 lines
175 KiB
Plaintext
Raw Normal View History

2024-02-08 17:43:22 +01:00
{
"cells": [
{
"cell_type": "code",
2024-04-15 10:12:54 +02:00
"execution_count": 19,
2024-02-08 17:43:22 +01:00
"metadata": {},
"outputs": [],
"source": [
"import uproot\n",
"import numpy as np\n",
"import sys\n",
"import os\n",
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"import mplhep\n",
"from mpl_toolkits import mplot3d\n",
"import itertools\n",
"import awkward as ak\n",
"from scipy.optimize import curve_fit\n",
2024-04-15 10:12:54 +02:00
"import pandas as pd\n",
"import seaborn as sns\n",
"from matplotlib import colormaps\n",
"\n",
2024-02-08 17:43:22 +01:00
"mplhep.style.use([\"LHCbTex2\"])\n",
"plt.rcParams[\"savefig.dpi\"] = 600\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
2024-04-15 10:12:54 +02:00
"execution_count": 20,
2024-02-08 17:43:22 +01:00
"metadata": {},
"outputs": [],
"source": [
"file = uproot.open(\n",
2024-04-15 10:12:54 +02:00
" \"/work/cetin/LHCb/reco_tuner/data_matching/resolutions_and_effs_B_default_thesis.root:Track/MatchTrackChecker_8319528f/Match;1\",\n",
2024-02-08 17:43:22 +01:00
")\n",
"\n",
2024-04-15 10:12:54 +02:00
"P_recoed = file[\"07_long_electrons_P_reconstructed;1\"].to_numpy()\n",
"P_recoable = file[\"07_long_electrons_P_reconstructible;1\"].to_numpy()\n",
2024-02-08 17:43:22 +01:00
"\n",
2024-04-15 10:12:54 +02:00
"Pt_recoed = file[\"07_long_electrons_Pt_reconstructed;1\"].to_numpy()\n",
"Pt_recoable = file[\"07_long_electrons_Pt_reconstructible;1\"].to_numpy()"
2024-02-08 17:43:22 +01:00
]
},
{
"cell_type": "code",
2024-04-15 10:12:54 +02:00
"execution_count": 21,
2024-02-08 17:43:22 +01:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2024-04-15 10:12:54 +02:00
"control eff: 0.6145546589237905\n",
"new eff: 0.6155293168395326\n",
"control eff: 0.6173168233870217\n",
"new eff: 0.6176270902698983\n",
"212152\n",
"130379.0\n",
"213171.0\n",
"131213.0\n"
2024-02-08 17:43:22 +01:00
]
}
],
"source": [
2024-04-15 10:12:54 +02:00
"P_Velo_recoed = file[\"07_long_electrons_EndVelo_P_reconstructed;1\"].to_numpy()\n",
"P_Velo_recoable = file[\n",
" \"07_long_electrons_EndVelo_P_reconstructible;1\"].to_numpy()\n",
2024-02-08 17:43:22 +01:00
"\n",
"print(\"control eff: \", np.sum(P_recoed[0]) / np.sum(P_recoable[0]))\n",
2024-02-13 09:16:19 +01:00
"print(\"new eff: \", np.sum(P_Velo_recoed[0]) / np.sum(P_Velo_recoable[0]))\n",
"\n",
2024-04-15 10:12:54 +02:00
"Pt_Velo_recoed = file[\"07_long_electrons_EndVelo_Pt_reconstructed;1\"].to_numpy(\n",
")\n",
"Pt_Velo_recoable = file[\n",
" \"07_long_electrons_EndVelo_Pt_reconstructible;1\"].to_numpy()\n",
2024-02-08 17:43:22 +01:00
"\n",
"print(\"control eff: \", np.sum(Pt_recoed[0]) / np.sum(Pt_recoable[0]))\n",
2024-04-15 10:12:54 +02:00
"print(\"new eff: \", np.sum(Pt_Velo_recoed[0]) / np.sum(Pt_Velo_recoable[0]))\n",
"\n",
"print(np.sum(P_recoable[0], dtype=int))\n",
"print(np.sum(P_recoed[0]))\n",
"print(np.sum(P_Velo_recoable[0]))\n",
"print(np.sum(P_Velo_recoed[0]))"
2024-02-08 17:43:22 +01:00
]
},
{
"cell_type": "code",
2024-04-15 10:12:54 +02:00
"execution_count": 22,
2024-02-08 17:43:22 +01:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2024-04-15 10:12:54 +02:00
"(array([[0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [4.1620e+03, 2.4200e+02, 8.7000e+01, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [2.3471e+04, 2.7160e+03, 1.4720e+03, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" ...,\n",
" [1.3000e+01, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 1.0000e+00,\n",
" 0.0000e+00],\n",
" [1.3000e+01, 1.0000e+00, 1.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [9.0000e+00, 3.0000e+00, 1.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00]]),\n",
2024-02-08 17:43:22 +01:00
" array([ 0., 1000., 2000., 3000., 4000., 5000., 6000.,\n",
" 7000., 8000., 9000., 10000., 11000., 12000., 13000.,\n",
" 14000., 15000., 16000., 17000., 18000., 19000., 20000.,\n",
" 21000., 22000., 23000., 24000., 25000., 26000., 27000.,\n",
" 28000., 29000., 30000., 31000., 32000., 33000., 34000.,\n",
" 35000., 36000., 37000., 38000., 39000., 40000., 41000.,\n",
" 42000., 43000., 44000., 45000., 46000., 47000., 48000.,\n",
" 49000., 50000., 51000., 52000., 53000., 54000., 55000.,\n",
" 56000., 57000., 58000., 59000., 60000., 61000., 62000.,\n",
" 63000., 64000., 65000., 66000., 67000., 68000., 69000.,\n",
" 70000., 71000., 72000., 73000., 74000., 75000., 76000.,\n",
" 77000., 78000., 79000., 80000., 81000., 82000., 83000.,\n",
" 84000., 85000., 86000., 87000., 88000., 89000., 90000.,\n",
" 91000., 92000., 93000., 94000., 95000., 96000., 97000.,\n",
2024-04-15 10:12:54 +02:00
" 98000., 99000., 100000.]),\n",
" array([ 0., 100., 200., 300., 400., 500., 600., 700.,\n",
" 800., 900., 1000., 1100., 1200., 1300., 1400., 1500.,\n",
" 1600., 1700., 1800., 1900., 2000., 2100., 2200., 2300.,\n",
" 2400., 2500., 2600., 2700., 2800., 2900., 3000., 3100.,\n",
" 3200., 3300., 3400., 3500., 3600., 3700., 3800., 3900.,\n",
" 4000., 4100., 4200., 4300., 4400., 4500., 4600., 4700.,\n",
" 4800., 4900., 5000., 5100., 5200., 5300., 5400., 5500.,\n",
" 5600., 5700., 5800., 5900., 6000., 6100., 6200., 6300.,\n",
" 6400., 6500., 6600., 6700., 6800., 6900., 7000., 7100.,\n",
" 7200., 7300., 7400., 7500., 7600., 7700., 7800., 7900.,\n",
" 8000., 8100., 8200., 8300., 8400., 8500., 8600., 8700.,\n",
" 8800., 8900., 9000., 9100., 9200., 9300., 9400., 9500.,\n",
" 9600., 9700., 9800., 9900., 10000.]))"
2024-02-08 17:43:22 +01:00
]
},
2024-04-15 10:12:54 +02:00
"execution_count": 22,
2024-02-08 17:43:22 +01:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2024-04-15 10:12:54 +02:00
"PdP_Velo_recoed = file[\"07_long_electrons_EndVelo_PdP_reconstructed;1\"].to_numpy()\n",
"PdP_Velo_recoable = file[\"07_long_electrons_EndVelo_PdP_reconstructible;1\"].to_numpy()\n",
"\n",
"PdP_Velo_recoable"
2024-02-08 17:43:22 +01:00
]
},
{
"cell_type": "code",
2024-04-15 10:12:54 +02:00
"execution_count": 23,
2024-02-08 17:43:22 +01:00
"metadata": {},
2024-04-15 10:12:54 +02:00
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_733517/2776815717.py:1: RuntimeWarning: invalid value encountered in divide\n",
" effs = np.divide(PdP_Velo_recoed[0], PdP_Velo_recoable[0])\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>...</th>\n",
" <th>90</th>\n",
" <th>91</th>\n",
" <th>92</th>\n",
" <th>93</th>\n",
" <th>94</th>\n",
" <th>95</th>\n",
" <th>96</th>\n",
" <th>97</th>\n",
" <th>98</th>\n",
" <th>99</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.297453</td>\n",
" <td>0.351240</td>\n",
" <td>0.298851</td>\n",
" <td>0.466667</td>\n",
" <td>0.312500</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.377146</td>\n",
" <td>0.362297</td>\n",
" <td>0.348505</td>\n",
" <td>0.342369</td>\n",
" <td>0.369942</td>\n",
" <td>0.291339</td>\n",
" <td>0.326471</td>\n",
" <td>0.328205</td>\n",
" <td>0.208333</td>\n",
" <td>0.237500</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.532556</td>\n",
" <td>0.543753</td>\n",
" <td>0.547119</td>\n",
" <td>0.547350</td>\n",
" <td>0.505400</td>\n",
" <td>0.514877</td>\n",
" <td>0.485997</td>\n",
" <td>0.444846</td>\n",
" <td>0.426966</td>\n",
" <td>0.346939</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.595858</td>\n",
" <td>0.616777</td>\n",
" <td>0.618738</td>\n",
" <td>0.601467</td>\n",
" <td>0.636095</td>\n",
" <td>0.606115</td>\n",
" <td>0.554913</td>\n",
" <td>0.496689</td>\n",
" <td>0.591224</td>\n",
" <td>0.518625</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95</th>\n",
" <td>0.666667</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>1.000000</td>\n",
" <td>NaN</td>\n",
" <td>1.000000</td>\n",
" <td>NaN</td>\n",
" <td>1.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97</th>\n",
" <td>0.923077</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>NaN</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1.0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>0.846154</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>NaN</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>0.777778</td>\n",
" <td>0.666667</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>NaN</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>100 rows × 100 columns</p>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 4 5 6 \\\n",
"0 NaN NaN NaN NaN NaN NaN NaN \n",
"1 0.297453 0.351240 0.298851 0.466667 0.312500 0.000000 0.000000 \n",
"2 0.377146 0.362297 0.348505 0.342369 0.369942 0.291339 0.326471 \n",
"3 0.532556 0.543753 0.547119 0.547350 0.505400 0.514877 0.485997 \n",
"4 0.595858 0.616777 0.618738 0.601467 0.636095 0.606115 0.554913 \n",
".. ... ... ... ... ... ... ... \n",
"95 0.666667 1.000000 1.000000 1.000000 1.000000 NaN NaN \n",
"96 1.000000 NaN 1.000000 NaN 1.000000 NaN NaN \n",
"97 0.923077 NaN NaN 1.000000 1.000000 NaN 0.000000 \n",
"98 0.846154 1.000000 1.000000 NaN NaN 1.000000 1.000000 \n",
"99 0.777778 0.666667 1.000000 1.000000 1.000000 1.000000 1.000000 \n",
"\n",
" 7 8 9 ... 90 91 92 93 94 95 96 97 98 \\\n",
"0 NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"1 NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"2 0.328205 0.208333 0.237500 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"3 0.444846 0.426966 0.346939 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"4 0.496689 0.591224 0.518625 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
".. ... ... ... ... .. .. ... .. ... .. .. .. ... \n",
"95 NaN 1.000000 1.000000 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"96 NaN NaN NaN ... NaN NaN NaN NaN 1.0 NaN NaN NaN NaN \n",
"97 1.000000 1.000000 0.000000 ... NaN NaN NaN NaN NaN NaN NaN NaN 1.0 \n",
"98 NaN 1.000000 1.000000 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"99 NaN 1.000000 1.000000 ... NaN NaN 1.0 NaN NaN NaN NaN NaN NaN \n",
"\n",
" 99 \n",
"0 NaN \n",
"1 NaN \n",
"2 NaN \n",
"3 NaN \n",
"4 NaN \n",
".. .. \n",
"95 NaN \n",
"96 NaN \n",
"97 NaN \n",
"98 NaN \n",
"99 NaN \n",
"\n",
"[100 rows x 100 columns]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"effs = np.divide(PdP_Velo_recoed[0], PdP_Velo_recoable[0])\n",
"\n",
"df = pd.DataFrame(effs)\n",
"df"
]
2024-02-08 17:43:22 +01:00
},
{
"cell_type": "code",
2024-04-15 10:12:54 +02:00
"execution_count": 26,
2024-02-08 17:43:22 +01:00
"metadata": {},
2024-04-15 10:12:54 +02:00
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABMIAAAOWCAYAAAANzz7PAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD9EUlEQVR4nOz9f3gj13ng+b7o9u/IJMj2TCKTGYug5dyEnnE32Eqcmd2dtQhayqq1jt1At+5mM7FHIiDpTmYmdESIvrtks2evu0HJzMxk1hbYUqLMJM+TblCy86h1EzfQ0vzY2fGMSFjZTftmLAHdzpBpx4kINOWMHNti3T/agEESPKeAU4UqoL6f5+EjNk/VOaeqThXIV6fOG7IsyxIAAAAAAACgxx3wugMAAAAAAABAJxAIAwAAAAAAQCAQCAMAAAAAAEAgEAgDAAAAAABAIBAIAwAAAAAAQCAQCAMAAAAAAEAgEAgDAAAAAABAIBAIAwAAAAAAQCAQCAMAAAAAAEAgEAgDAAAAAABAIBAIAwAAAAAAQCAQCAMAAAAAAEAgEAgDAAAAAABAIBAIAwAAAAAAQCAQCAMAAAAAAEAgEAgDAAAAAABAIBAIAwAAAAAAQCAQCAMAAAAAAEAgEAgDAAAAAABAIBAIAwAAAAAAQCAQCAMAAAAAAEAgEAgDAAAAAABAIBAIAwAAAAAAQCAQCAMAAAAAAEAgEAgDAAAAAABAIBAIAwAAAAAAQCAQCAMAAAAAAEAgEAgDEHjVatXrLgAAAAAAOoBAGIBAKhaLkk6nZWBgQKamprzuDgAAAACgA97idQcAYLdisSjnz5+XYrEo5XJZNjc3pVqtSjgclkgkIoODgxKNRmVyclJisdie/ROJhJTLZVlbW6v/rFqtSqFQkPPnz0uhUGAWGAAAAAAEUMiyLMvrTgC9Znl5WVKpVMv7RaPRHcGbdoVCoZb3CYfDUqlUmpYlEglZWVlpuc58Pt80UNVMtVqVM2fOyOLiYsvtRKNRicViMjo6Kvl8XlZWVvacy1pwrFgs7tk/Ho9LLpdruV0AAAAAQHfh1UjABclkUiqViqytrUk8HlduG4vFJJ/P17d3gmVZUiqVJJvNSjgc3ne7SCQi2WxWSqXSvkEwEZFcLieVSsVWYGtmZkbW1takUqnYDoLVXlHcHQSrBahq9dWOK5/PSzKZrB9bsViUxcVFSaVS9YDd7hlftXosy5JIJGKrXwAAAACA3sKMMKADUqmULC8v7/l5J2YilctlGR0dbVpWqVSUgbL9jI+PN51Zlc1mJZlMttS3yclJKZfLO36eTCYlm83aqmNxcVHS6fSen0ciESmVSk332X09mBEGAAAAAMHAjDCgA/Z7TbKd1ydbFYlEJBqN7vl5PB5vKwgmsn+/WwmCFQoFGR0d3REEC4fDsra2ZjsIJnJzBlqpVNpzLJubm/vu0+5xAwAAAAC6G4EwoAP2exWvU6/oNWvHpO1m+7YSXCoWizI5Obln/8uXLzcN2tnpz9WrV3f0gcXwAQAAAAC7EQgDOmC/INHg4GBnO+ID5XJZJiYm9vw8l8u1FQSrqc0m6zUrKyt7Xh3FDxUKBa+7AAAAAKCLEAgDAqBZwO3QoUOO1mc3qJdIJPbM1komk7YX1leJRCIyMzNjXE8nFItFSaVSMjo6KqFQSAYGBmR0dFTGx8frWTpXVlZkampKG+wpFAr1/Xs9MFQul2V5eVkmJyclFArtmVnotSBdCwAAAKAbvcXrDgAIjkKh0HSR/Uwm41gbs7Oz9eyT1WrVd+uBVatVmZqaqme3jEQi9cyi5XJZisWiFIvFenltH5VacLFarUoqldo3SUA3K5fLkkgkpFwu+/q11yBcCwAAAKCbMSMMQMc0W2TfZNH+ZsLhcEuL9ndabbaXyM0sm6VSSXK5nORyOVlbW5NSqbRndpwumBKEV2wjkYisra1JpVLx9ay/IFwLAAAAoJsRCAPQEYVCoelaV7Ozs463lUgkRESdOVKlUChIIpHY8dri5OSkLC8vG/VrcXGx/rrczMxM04BdJBKRfD6/Y5acbo2wbDYrkUhEIpGI5HI5oz52A7+9DtkoaNcCAAAA6Da8GgmgI/YLCpgskL+fWCwmmUym5dk51WpVJiYm9ry+Wa1WpVAoSKFQkEwm0/bC/mfOnKl/32x2XKOZmRl57bXXZHFxURvQi8VigXoFz6tZV6lUSrLZrHKboF0LAAAAoNswIwxARzRbONyJBfL3MzMz09Irl+VyWUZGRpquYbZ7u/Hx8ZYXQm9nbatMJiPRaJSskT6wvLxsPCMQAAAAgPcIhAFwXblcbhrMcWM2WDuq1Wp9kfN4PC7ZbFbW1tYkn8/vux7V5ORkSwGq3UEwu4G02dlZXy8OHwTlclk7gw8AAABAd+DVSACu2y9gNDo62uGeNFcLSuXz+T2z1GKxmKRSqaaBr0QiIWtra7baiEQiO/6dTqflxIkT2llrtYySfsyAGQTVatXXa5IBAAAAaA0zwgC4br9AmJ8y7DULgtXUFrDfrVgs2p7ZFQ6HdwSyqtWqjI+P25pVZlkWQTAP1NaM49VUAAAAoHcQCAMCKp1OSygUautrfHy8pbb2e7XPL8GdcDisXa8sEonsyORY0+xn+9m9bblcltHRUUfWnioWi5JKpbSz7KrVqiwvL8v4+PiOdmuv/w0MDEgoFJLR0VFZXFzcs3+5XJZ0Ol3PqDk6OiqpVKrpNa61s3v87DY5OVmvr/HLyVdCl5eXd7QzMDAg4+PjTY9R5Ob5bLZmXGP/9jvXdq9FTbValcXFRZmcnKyf/1r/0um0rUBcuVyWxcVFGR0d3dHnxmswOjpafwUYAAAACCwLQEeIyJ6vSqXSkbaTyWTT9p38ikQiLbefz+c7cvy7zczM7OhHLBazvW84HN5zHK2IxWJNz0U0GrXW1tZaqmttbc1KJpM7+hQOh/dsV6lUrEwmY0Wj0R1tZrNZy7L2no/Gr2QyWa9HtV0kEtl3PO++/vvJZDK27o+1tTXb5z+Xy9XPSy6X21FHJBLZt++VSsVaW1vb06e1tbUdX4312bkWu2Wz2fr2mUzGWltbs0qlkpXL5XZcr3g8vmffSqVizczM1I+jsY+VSmXP9W7sV6lU0vYNAAAA6EXMCAMCKplMytraWltf2Wy2pbb2m/nll5kprcxMazZzTJdpslE+n6+v+7W7jvHxcdszdsrlspw/f972rKNoNLpnwfe1tTUZHx+XYrEouVxOSqWSVCqVHQkClpeXpVgsyuTkpBQKBcnn81KpVKRSqUg+n6+fu3K5LGfOnGnadiKRsNXHZufFRKFQqLc9Ozu7o/5oNCq5XE5EbvZ9ampqx77hcFii0eiehA61nzWWtXotatLptKRSKQmHw1IqlWRmZkai0ahEIhGJx+OytrZW7/PKyoqMjo7uGBubm5syOTm5Z0yurq7KyMhI/ZXeUqkk2Wy2fq2q1SqL/wMAACC4vI7EAUEhPpsRlslk2q5v94wc0cwI2z2rpvZVm5HUabtnNjWbbbOf2gwj0+PY75y0U2djXbpZSLtnCe03K2/3zLXGmWGNGs/Hfm3n83lbM7gqlYqjM8Li8bh2vOvqsdv3GrvXonEmmO5aN8742m/2YmMfw+Fw0+u6e+x26vkDAAAA+AkzwgC4zu8zwlqxO/ujSHvHMTMzI5VKZd9ZULVMlXbqbtan/TQmKEgmk/uujbY7U+J+swAb+1+tVn17Tfcbg40/d2JRfLvXIp1O19tPJpO2thW5OcutWYKGxuM4d+5c0+u6e6ytrq7a6isAAADQSwiEAXDdfsGBUqnU4Z6YaxZQee2119quK5fLydra2p5X8ERuBj0mJiYcDS7ZfQ208Zq18uqonzIsnjt3TjKZjORyOW2wSaRzgdnl5eV6W3YCZ8lkcsc1aCVBw26N7fnpWgEAAACdQiAMgOv2m3XUbGaL3zULXBw6dMiozmg0uu/aa8Vicc/6VZ3QbkbPzc1NZztiIBwOy8zMzL5rsrWytpuT8vl8/Xu7M8ga76FuvG8AAAAAvyAQBqAjms14KpfLvn2VrhWtvJqokkwmpVQq7QlCray
"text/plain": [
"<Figure size 1200x900 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# fig = plt.figure(figsize=(15, 7))\n",
"ax = sns.heatmap(\n",
" effs,\n",
" robust=True,\n",
" square=False,\n",
" cmap=colormaps[\"rainbow\"],\n",
" xticklabels=False,\n",
" yticklabels=False,\n",
" vmax=1,\n",
" cbar_kws={\n",
" \"label\": \"Efficiency\",\n",
" \"pad\": 0.005,\n",
" \"shrink\": 1,\n",
" \"ticks\": [0.2, 0.4, 0.6, 0.8, 1.0],\n",
" \"aspect\": 15,\n",
" },\n",
")\n",
"ax.set_ylabel(f\"$P$ [MeV]\")\n",
"ax.set_xlabel(f\"$\\Delta P$ [MeV]\")\n",
"ax.patch.set_edgecolor(\"black\")\n",
"\n",
"ax.set_yticks([0, 19, 39, 59, 79, 99], [0, 20000, 40000, 60000, 80000, 100000])\n",
"ax.set_xticks([0, 19, 39, 59, 79, 99], [0, 2000, 4000, 6000, 8000, 10000])\n",
"ax.invert_yaxis()\n",
"# ax.set_ylim(0, 59)\n",
"# ax.set_xlim(0, 59)\n",
"\n",
"ax.patch.set_linewidth(2)\n",
"# ax.set_yticklabels([])\n",
"# ax.set_title(\"EndVELO to EndUT $x/X_0$\", size=35)\n",
"mplhep.lhcb.text(\"Simulation\", loc=0)\n",
"plt.show()\n",
"# plt.savefig(\n",
"# \"/work/cetin/Projektpraktikum/thesis/Efficiency_PdP_Velo_hist2d.pdf\",\n",
"# format=\"PDF\")"
]
2024-02-08 17:43:22 +01:00
},
2024-02-13 09:16:19 +01:00
{
"cell_type": "code",
2024-04-15 10:12:54 +02:00
"execution_count": 58,
2024-02-13 09:16:19 +01:00
"metadata": {},
2024-04-15 10:12:54 +02:00
"outputs": [
{
"data": {
"text/plain": [
"(array([6.4927e+04, 8.7210e+03, 5.4020e+03, 4.0560e+03, 3.3500e+03,\n",
" 2.8240e+03, 2.3990e+03, 2.0600e+03, 1.8280e+03, 1.5610e+03,\n",
" 1.5130e+03, 1.3480e+03, 1.2090e+03, 1.1250e+03, 1.0270e+03,\n",
" 9.3000e+02, 9.0200e+02, 8.2300e+02, 7.8100e+02, 6.7500e+02,\n",
" 6.8700e+02, 6.5400e+02, 6.6000e+02, 6.2300e+02, 5.3100e+02,\n",
" 5.1900e+02, 5.1200e+02, 4.4000e+02, 4.7200e+02, 4.6700e+02,\n",
" 4.1100e+02, 4.1300e+02, 3.7700e+02, 3.4600e+02, 3.5400e+02,\n",
" 3.3100e+02, 3.3400e+02, 2.8600e+02, 3.0600e+02, 2.8800e+02,\n",
" 2.7000e+02, 2.8100e+02, 2.5100e+02, 2.2500e+02, 2.7100e+02,\n",
" 2.3000e+02, 2.4100e+02, 2.1700e+02, 2.2900e+02, 2.0700e+02,\n",
" 2.2500e+02, 1.8500e+02, 1.9000e+02, 1.8600e+02, 1.9100e+02,\n",
" 1.9900e+02, 1.8400e+02, 1.8500e+02, 1.7200e+02, 1.5700e+02,\n",
" 1.5300e+02, 1.7100e+02, 1.3700e+02, 1.5200e+02, 1.4500e+02,\n",
" 1.4600e+02, 1.2900e+02, 1.3900e+02, 1.4300e+02, 1.3700e+02,\n",
" 1.1600e+02, 1.2200e+02, 1.2600e+02, 1.1900e+02, 1.1800e+02,\n",
" 1.3100e+02, 1.1400e+02, 1.0700e+02, 1.1700e+02, 1.1700e+02,\n",
" 1.1500e+02, 1.3000e+02, 8.7000e+01, 1.0300e+02, 9.9000e+01,\n",
" 1.0100e+02, 7.7000e+01, 8.6000e+01, 1.0500e+02, 7.6000e+01,\n",
" 8.5000e+01, 8.6000e+01, 7.4000e+01, 8.6000e+01, 7.9000e+01,\n",
" 6.8000e+01, 7.1000e+01, 7.9000e+01, 6.9000e+01, 6.3000e+01]),\n",
" array([ 0., 100., 200., 300., 400., 500., 600., 700.,\n",
" 800., 900., 1000., 1100., 1200., 1300., 1400., 1500.,\n",
" 1600., 1700., 1800., 1900., 2000., 2100., 2200., 2300.,\n",
" 2400., 2500., 2600., 2700., 2800., 2900., 3000., 3100.,\n",
" 3200., 3300., 3400., 3500., 3600., 3700., 3800., 3900.,\n",
" 4000., 4100., 4200., 4300., 4400., 4500., 4600., 4700.,\n",
" 4800., 4900., 5000., 5100., 5200., 5300., 5400., 5500.,\n",
" 5600., 5700., 5800., 5900., 6000., 6100., 6200., 6300.,\n",
" 6400., 6500., 6600., 6700., 6800., 6900., 7000., 7100.,\n",
" 7200., 7300., 7400., 7500., 7600., 7700., 7800., 7900.,\n",
" 8000., 8100., 8200., 8300., 8400., 8500., 8600., 8700.,\n",
" 8800., 8900., 9000., 9100., 9200., 9300., 9400., 9500.,\n",
" 9600., 9700., 9800., 9900., 10000.]))"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dP_Velo_recoed = file[\"07_long_electrons_EndVelo_dP_reconstructed;1\"].to_numpy()\n",
"dP_Velo_recoable = file[\"07_long_electrons_EndVelo_dP_reconstructible;1\"].to_numpy()\n",
"\n",
"dP_Velo_recoed"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x900 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"# plt.bar(\n",
"# dP_Velo_recoable[1][1:],\n",
"# dP_Velo_recoable[0] / np.max(dP_Velo_recoable[0]),\n",
"# alpha=0.5,\n",
"# color=\"#107E7D\",\n",
"# label=\"p distribution, e\",\n",
"# )\n",
"plt.errorbar(\n",
" dP_Velo_recoable[1][1:],\n",
" dP_Velo_recoed[0] / dP_Velo_recoable[0],\n",
" color=\"#107E7D\",\n",
" label=\"Efficiency\",\n",
" fmt=\"^\",\n",
" ms=10,\n",
")\n",
"plt.ylim(0, 1)\n",
"plt.xlabel(r\"$dp$ [MeV]\")\n",
"plt.ylabel(\"Efficiency of Long Tracks\")\n",
"plt.legend(loc=\"best\")\n",
"mplhep.lhcb.text(\"Simulation\", loc=0)\n",
"plt.show()\n",
"# plt.savefig(\"/work/cetin/Projektpraktikum/thesis/Efficiency_dP_Velo.pdf\",\n",
"# format=\"PDF\")"
]
2024-02-13 09:16:19 +01:00
},
2024-02-08 17:43:22 +01:00
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "tuner",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
2024-04-15 10:12:54 +02:00
"version": "3.10.12"
2024-02-08 17:43:22 +01:00
}
},
"nbformat": 4,
"nbformat_minor": 2
}