You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1390 lines
495 KiB

8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
1 year ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
1 year ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
11 months ago
8 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
11 months ago
8 months ago
11 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
11 months ago
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 1,
  6. "metadata": {},
  7. "outputs": [],
  8. "source": [
  9. "import uproot\t\n",
  10. "import numpy as np\n",
  11. "import sys\n",
  12. "import os\n",
  13. "import matplotlib\n",
  14. "import matplotlib.pyplot as plt\n",
  15. "from mpl_toolkits import mplot3d\n",
  16. "import itertools\n",
  17. "import awkward as ak\n",
  18. "from scipy.optimize import curve_fit\n",
  19. "from mpl_toolkits.axes_grid1 import ImageGrid\n",
  20. "%matplotlib inline"
  21. ]
  22. },
  23. {
  24. "cell_type": "code",
  25. "execution_count": 2,
  26. "metadata": {},
  27. "outputs": [
  28. {
  29. "data": {
  30. "text/plain": [
  31. "44804"
  32. ]
  33. },
  34. "execution_count": 2,
  35. "metadata": {},
  36. "output_type": "execute_result"
  37. }
  38. ],
  39. "source": [
  40. "# file = uproot.open(\"tracking_losses_ntuple_Bd2KstEE.root:PrDebugTrackingLosses.PrDebugTrackingTool/Tuple;1\")\n",
  41. "file = uproot.open(\n",
  42. " \"/work/cetin/Projektpraktikum/tracking_losses_ntuple_B_rad_length_beginVelo2endUT.root:PrDebugTrackingLosses.PrDebugTrackingTool/Tuple;1\"\n",
  43. ")\n",
  44. "\n",
  45. "# selektiere nur elektronen von B->K*ee und nur solche mit einem momentum von ueber 5 GeV\n",
  46. "allcolumns = file.arrays()\n",
  47. "found = allcolumns[(allcolumns.isElectron)\n",
  48. " & (~allcolumns.lost)\n",
  49. " & (allcolumns.fromB)\n",
  50. " & (allcolumns.p > 5e3)] # B: 9056\n",
  51. "lost = allcolumns[(allcolumns.isElectron)\n",
  52. " & (allcolumns.lost)\n",
  53. " & (allcolumns.fromB)\n",
  54. " & (allcolumns.p > 5e3)] # B: 1466\n",
  55. "\n",
  56. "ak.num(found, axis=0) + ak.num(lost, axis=0)\n",
  57. "# ak.count(found, axis=None)"
  58. ]
  59. },
  60. {
  61. "cell_type": "code",
  62. "execution_count": 3,
  63. "metadata": {},
  64. "outputs": [
  65. {
  66. "name": "stdout",
  67. "output_type": "stream",
  68. "text": [
  69. "eff all = 0.8343228283189001 +/- 0.0017564670414882176\n"
  70. ]
  71. }
  72. ],
  73. "source": [
  74. "def t_eff(found, lost, axis=0):\n",
  75. " sel = ak.num(found, axis=axis)\n",
  76. " des = ak.num(lost, axis=axis)\n",
  77. " return sel / (sel + des)\n",
  78. "\n",
  79. "\n",
  80. "def eff_err(found, lost):\n",
  81. " n_f = ak.num(found, axis=0)\n",
  82. " n_all = ak.num(found, axis=0) + ak.num(lost, axis=0)\n",
  83. " return 1 / n_all * np.sqrt(np.abs(n_f * (1 - n_f / n_all)))\n",
  84. "\n",
  85. "\n",
  86. "print(\"eff all = \", t_eff(found, lost), \"+/-\", eff_err(found, lost))"
  87. ]
  88. },
  89. {
  90. "cell_type": "code",
  91. "execution_count": 4,
  92. "metadata": {},
  93. "outputs": [],
  94. "source": [
  95. "# try excluding all photons that originate from a vtx @ z>9500mm\n",
  96. "# ignore all brem vertices @ z>9500mm\n",
  97. "\n",
  98. "# found\n",
  99. "\n",
  100. "brem_e_f = found[\"brem_photons_pe\"]\n",
  101. "brem_z_f = found[\"brem_vtx_z\"]\n",
  102. "e_f = found[\"energy\"]\n",
  103. "length_f = found[\"brem_vtx_z_length\"]\n",
  104. "\n",
  105. "brem_f = ak.ArrayBuilder()\n",
  106. "\n",
  107. "for itr in range(ak.num(found, axis=0)):\n",
  108. " brem_f.begin_record()\n",
  109. " # [:,\"energy\"] energy\n",
  110. " brem_f.field(\"energy\").append(e_f[itr])\n",
  111. " # [:,\"photon_length\"] number of vertices\n",
  112. " brem_f.field(\"photon_length\").integer(length_f[itr])\n",
  113. " # [:,\"brem_photons_pe\",:] photon energy\n",
  114. " brem_f.field(\"brem_photons_pe\").append(brem_e_f[itr])\n",
  115. " # [:,\"brem_vtx_z\",:] brem vtx z\n",
  116. " brem_f.field(\"brem_vtx_z\").append(brem_z_f[itr])\n",
  117. " brem_f.end_record()\n",
  118. "\n",
  119. "brem_f = ak.Array(brem_f)\n",
  120. "\n",
  121. "# lost\n",
  122. "\n",
  123. "brem_e_l = lost[\"brem_photons_pe\"]\n",
  124. "brem_z_l = lost[\"brem_vtx_z\"]\n",
  125. "e_l = lost[\"energy\"]\n",
  126. "length_l = lost[\"brem_vtx_z_length\"]\n",
  127. "\n",
  128. "brem_l = ak.ArrayBuilder()\n",
  129. "\n",
  130. "for itr in range(ak.num(lost, axis=0)):\n",
  131. " brem_l.begin_record()\n",
  132. " # [:,\"energy\"] energy\n",
  133. " brem_l.field(\"energy\").append(e_l[itr])\n",
  134. " # [:,\"photon_length\"] number of vertices\n",
  135. " brem_l.field(\"photon_length\").integer(length_l[itr])\n",
  136. " # [:,\"brem_photons_pe\",:] photon energy\n",
  137. " brem_l.field(\"brem_photons_pe\").append(brem_e_l[itr])\n",
  138. " # [:,\"brem_vtx_z\",:] brem vtx z\n",
  139. " brem_l.field(\"brem_vtx_z\").append(brem_z_l[itr])\n",
  140. " brem_l.end_record()\n",
  141. "\n",
  142. "brem_l = ak.Array(brem_l)"
  143. ]
  144. },
  145. {
  146. "cell_type": "code",
  147. "execution_count": 5,
  148. "metadata": {},
  149. "outputs": [],
  150. "source": [
  151. "cut_brem_found = ak.ArrayBuilder()\n",
  152. "\n",
  153. "for itr in range(ak.num(brem_f, axis=0)):\n",
  154. " cut_brem_found.begin_record()\n",
  155. " cut_brem_found.field(\"energy\").real(brem_f[itr, \"energy\"])\n",
  156. "\n",
  157. " cut_brem_found.field(\"brem_photons_pe\")\n",
  158. " cut_brem_found.begin_list()\n",
  159. " for jentry in range(brem_f[itr, \"photon_length\"]):\n",
  160. " if brem_f[itr, \"brem_vtx_z\", jentry] > 9500:\n",
  161. " continue\n",
  162. " else:\n",
  163. " cut_brem_found.real(brem_f[itr, \"brem_photons_pe\", jentry])\n",
  164. "\n",
  165. " # cut_brem_found.field(\"brem_vtx_z\").real(brem_f[itr, \"brem_vtx_z\",jentry])\n",
  166. " cut_brem_found.end_list()\n",
  167. "\n",
  168. " cut_brem_found.field(\"brem_vtx_z\")\n",
  169. " cut_brem_found.begin_list()\n",
  170. " for jentry in range(brem_f[itr, \"photon_length\"]):\n",
  171. " if brem_f[itr, \"brem_vtx_z\", jentry] > 9500:\n",
  172. " continue\n",
  173. " else:\n",
  174. " cut_brem_found.real(brem_f[itr, \"brem_vtx_z\", jentry])\n",
  175. " cut_brem_found.end_list()\n",
  176. "\n",
  177. " cut_brem_found.end_record()\n",
  178. "\n",
  179. "cut_brem_found = ak.Array(cut_brem_found)\n",
  180. "\n",
  181. "cut_brem_lost = ak.ArrayBuilder()\n",
  182. "\n",
  183. "for itr in range(ak.num(brem_l, axis=0)):\n",
  184. " cut_brem_lost.begin_record()\n",
  185. " cut_brem_lost.field(\"energy\").real(brem_l[itr, \"energy\"])\n",
  186. "\n",
  187. " cut_brem_lost.field(\"brem_photons_pe\")\n",
  188. " cut_brem_lost.begin_list()\n",
  189. " for jentry in range(brem_l[itr, \"photon_length\"]):\n",
  190. " if brem_l[itr, \"brem_vtx_z\", jentry] > 9500:\n",
  191. " continue\n",
  192. " else:\n",
  193. " cut_brem_lost.real(brem_l[itr, \"brem_photons_pe\", jentry])\n",
  194. "\n",
  195. " # cut_brem_found.field(\"brem_vtx_z\").real(brem_f[itr, \"brem_vtx_z\",jentry])\n",
  196. " cut_brem_lost.end_list()\n",
  197. "\n",
  198. " cut_brem_lost.field(\"brem_vtx_z\")\n",
  199. " cut_brem_lost.begin_list()\n",
  200. " for jentry in range(brem_l[itr, \"photon_length\"]):\n",
  201. " if brem_l[itr, \"brem_vtx_z\", jentry] > 9500:\n",
  202. " continue\n",
  203. " else:\n",
  204. " cut_brem_lost.real(brem_l[itr, \"brem_vtx_z\", jentry])\n",
  205. " cut_brem_lost.end_list()\n",
  206. "\n",
  207. " cut_brem_lost.end_record()\n",
  208. "\n",
  209. "cut_brem_lost = ak.Array(cut_brem_lost)"
  210. ]
  211. },
  212. {
  213. "cell_type": "code",
  214. "execution_count": 6,
  215. "metadata": {},
  216. "outputs": [
  217. {
  218. "data": {
  219. "text/html": [
  220. "<pre>{energy: 3.26e+04,\n",
  221. " brem_photons_pe: [824, 287, 1.26e+04, 4.49e+03, 3.59e+03, 111],\n",
  222. " brem_vtx_z: [157, 158, 601, 2.33e+03, 8.65e+03, 8.67e+03]}\n",
  223. "----------------------------------------------------------------\n",
  224. "type: {\n",
  225. " energy: float64,\n",
  226. " brem_photons_pe: var * float64,\n",
  227. " brem_vtx_z: var * float64\n",
  228. "}</pre>"
  229. ],
  230. "text/plain": [
  231. "<Record {energy: 3.26e+04, ...} type='{energy: float64, brem_photons_pe: va...'>"
  232. ]
  233. },
  234. "execution_count": 6,
  235. "metadata": {},
  236. "output_type": "execute_result"
  237. }
  238. ],
  239. "source": [
  240. "# data in cut_brem_found and cut_brem_lost\n",
  241. "\n",
  242. "cut_length_found = ak.num(cut_brem_found[\"brem_photons_pe\"], axis=-1)\n",
  243. "cut_length_lost = ak.num(cut_brem_lost[\"brem_photons_pe\"], axis=-1)\n",
  244. "\n",
  245. "cut_brem_found[1]"
  246. ]
  247. },
  248. {
  249. "cell_type": "markdown",
  250. "metadata": {},
  251. "source": [
  252. "#### in magnet\n"
  253. ]
  254. },
  255. {
  256. "cell_type": "code",
  257. "execution_count": 7,
  258. "metadata": {},
  259. "outputs": [],
  260. "source": [
  261. "inmagnet_found = ak.ArrayBuilder()\n",
  262. "\n",
  263. "for itr in range(ak.num(cut_brem_found, axis=0)):\n",
  264. "\n",
  265. " inmagnet_found.begin_record()\n",
  266. " inmagnet_found.field(\"energy\").real(cut_brem_found[itr, \"energy\"])\n",
  267. "\n",
  268. " inmagnet_found.field(\"brem_photons_pe\")\n",
  269. " inmagnet_found.begin_list()\n",
  270. " for jentry in range(cut_length_found[itr]):\n",
  271. " if cut_brem_found[itr, \"brem_vtx_z\", jentry] > 1500:\n",
  272. " if cut_brem_found[itr, \"brem_vtx_z\", jentry] <= 9500:\n",
  273. " inmagnet_found.real(cut_brem_found[itr, \"brem_photons_pe\",\n",
  274. " jentry])\n",
  275. " else:\n",
  276. " continue\n",
  277. " inmagnet_found.end_list()\n",
  278. "\n",
  279. " inmagnet_found.field(\"brem_vtx_z\")\n",
  280. " inmagnet_found.begin_list()\n",
  281. " for jentry in range(cut_length_found[itr]):\n",
  282. " if cut_brem_found[itr, \"brem_vtx_z\", jentry] > 1500:\n",
  283. " if cut_brem_found[itr, \"brem_vtx_z\", jentry] <= 9500:\n",
  284. " inmagnet_found.real(cut_brem_found[itr, \"brem_vtx_z\", jentry])\n",
  285. " else:\n",
  286. " continue\n",
  287. " inmagnet_found.end_list()\n",
  288. " inmagnet_found.end_record()\n",
  289. "\n",
  290. "inmagnet_found = ak.Array(inmagnet_found)\n",
  291. "\n",
  292. "inmagnet_lost = ak.ArrayBuilder()\n",
  293. "\n",
  294. "for itr in range(ak.num(cut_brem_lost, axis=0)):\n",
  295. "\n",
  296. " inmagnet_lost.begin_record()\n",
  297. " inmagnet_lost.field(\"energy\").real(cut_brem_lost[itr, \"energy\"])\n",
  298. "\n",
  299. " inmagnet_lost.field(\"brem_photons_pe\")\n",
  300. " inmagnet_lost.begin_list()\n",
  301. " for jentry in range(cut_length_lost[itr]):\n",
  302. " if cut_brem_lost[itr, \"brem_vtx_z\", jentry] > 1500:\n",
  303. " if cut_brem_lost[itr, \"brem_vtx_z\", jentry] <= 9500:\n",
  304. " inmagnet_lost.real(cut_brem_lost[itr, \"brem_photons_pe\",\n",
  305. " jentry])\n",
  306. " else:\n",
  307. " continue\n",
  308. " inmagnet_lost.end_list()\n",
  309. "\n",
  310. " inmagnet_lost.field(\"brem_vtx_z\")\n",
  311. " inmagnet_lost.begin_list()\n",
  312. " for jentry in range(cut_length_lost[itr]):\n",
  313. " if cut_brem_lost[itr, \"brem_vtx_z\", jentry] > 1500:\n",
  314. " if cut_brem_lost[itr, \"brem_vtx_z\", jentry] <= 9500:\n",
  315. " inmagnet_lost.real(cut_brem_lost[itr, \"brem_vtx_z\", jentry])\n",
  316. " else:\n",
  317. " continue\n",
  318. " inmagnet_lost.end_list()\n",
  319. " inmagnet_lost.end_record()\n",
  320. "\n",
  321. "inmagnet_lost = ak.Array(inmagnet_lost)"
  322. ]
  323. },
  324. {
  325. "cell_type": "code",
  326. "execution_count": 8,
  327. "metadata": {},
  328. "outputs": [],
  329. "source": [
  330. "cutoff_energy = 350\n",
  331. "# possibly: instead of checking if any photons exceed the cutoff, use the sum of all photon energies to separate nobrem and brem\n",
  332. "\n",
  333. "inmagnet_brem_found = inmagnet_found[ak.sum(inmagnet_found[\"brem_photons_pe\"],\n",
  334. " axis=-1,\n",
  335. " keepdims=False) >= cutoff_energy]\n",
  336. "magnet_energy_found = ak.to_numpy(inmagnet_brem_found[\"energy\"])\n",
  337. "magnet_eph_found = ak.to_numpy(\n",
  338. " ak.sum(inmagnet_brem_found[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  339. "magnet_residual_found = magnet_energy_found - magnet_eph_found\n",
  340. "magnet_energyloss_found = magnet_eph_found / magnet_energy_found\n",
  341. "\n",
  342. "inmagnet_brem_lost = inmagnet_lost[ak.sum(inmagnet_lost[\"brem_photons_pe\"],\n",
  343. " axis=-1,\n",
  344. " keepdims=False) >= cutoff_energy]\n",
  345. "magnet_energy_lost = ak.to_numpy(inmagnet_brem_lost[\"energy\"])\n",
  346. "magnet_eph_lost = ak.to_numpy(\n",
  347. " ak.sum(inmagnet_brem_lost[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  348. "magnet_residual_lost = magnet_energy_lost - magnet_eph_lost\n",
  349. "magnet_energyloss_lost = magnet_eph_lost / magnet_energy_lost"
  350. ]
  351. },
  352. {
  353. "cell_type": "code",
  354. "execution_count": 9,
  355. "metadata": {},
  356. "outputs": [
  357. {
  358. "data": {
  359. "text/plain": [
  360. "20316.361014308728"
  361. ]
  362. },
  363. "execution_count": 9,
  364. "metadata": {},
  365. "output_type": "execute_result"
  366. }
  367. ],
  368. "source": [
  369. "ak.mean(magnet_eph_lost)"
  370. ]
  371. },
  372. {
  373. "cell_type": "code",
  374. "execution_count": 10,
  375. "metadata": {},
  376. "outputs": [
  377. {
  378. "data": {
  379. "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjQAAAHRCAYAAAB96iOvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLGklEQVR4nO3dTYwbaX7n+V8ag9YUVihFpnyZWynoOfjkqmDqMpeyLXLq7BYpHcbAXDrJLujWcJGdgwFKdemsoHW00B3M8sIL9EVJVhl77Ca104UBjMUqGS2fButuRqoPC+/BlYwSNFtWuV2xh+wniu9JBl+Skfn9AISUZPCJJ54IRvzjiedlK4qiSAAAACn2exedAQAAgEUR0AAAgNQjoAEAAKlHQAMAAFKPgAYAAKQeAQ0AAEg9AhoAAJB6/+aiM7BK5XJZmUxGX3zxhW7fvq1CoXDRWVq5q7jNAABc2oCmWCzKtm1VKhVJUjablWVZyuVyF5yz1bmK2wwAgCRtXcaRgoMgUCaTUbfblW3bkqRaraZWq6VWq3XBuVuNVW1zu93Wzs6OHMdZVlYBAFi6S9mGxvd9SYov7JLkOI7a7bbCMLygXK3WqrY5DEOdnp4umj0AAFbqUgY0z549k2VZA+/t7OxI0qW4OFerVQVBMPDeZd/my8QEn1dFGIaq1+sjxywWFwSB6vX6pb1Rw+yu2nllnNQENGEYqlaraWtrS1tbW9re3laxWFQ+n1cmk1GtVhtY1lzMh23KSbVeryuTycTbk8/n1W63JZ0dmPl8Pv7MbFu9Xpck3bx5M17OfCcN23wVFYvFeD+aV7VaHbus7/sqFovKZDLa3t5WNptVPp9XtVpVvV5XNpuda93tdnvgGMtms2o2myPLNZtNZbPZeJllnhjr9bpu3bqlcrnMRTeBcrk8cb/XajVlMhmVy2VuWi6BIAhULpdVLpdVLBan/mZmPa9Uq1UVi8X4WjnpWjDrchsvShnHcSJJked58XuNRiOSFBUKhSiKosh13ciyrIHvdTqdSFLU7XbXmt9pXNeNJEW2bY98lsvlIsdxol6vF7/X6XSiUqkUlUqlyHXdqFKpxJ+vapsbjUbUarUSf/8q6/V6kW3bUaFQGHh1Op2RZSuVSnwM9++vXq8XlUqlSFKU5Ofa6/Xi7/b/ZoZ5njdy/CyL2bZx272Ibrc78Pu4jCzLmrrfCoXCxp3XVu0y7ndzru7/jVQqlciyrJF9O+t5xXGc+JoYRVHUarUiy7ISL5cGqevlZCLH/p47pmuyufu0bXsksjV3MP1tTC5at9uVpJHI2vRWGm7M6ziOstmsGo2GLMvS/fv348dMy9rmcrk88Pfx8bF2dnbUaDQG3vc8b+Y0pbM79U6nM3WZfD5/qbqZHxwcyHXdc7epWCyq2WzKdd24h5phWZY8z1M2mx3ZN7OwLEuVSkW1Wk2NRkOlUmnscp1OR/v7+3OnPwtTo7hsxWIx/i1cRqb927179yYuM6lW9jK7jPt9b29PjuMMdL5wXVe1Wk3VanXg/DvLeaVarcr3fT19+jR+L5fLybZt7e3txefiWZdLjYuOqOZhothxNRr63V1or9eLut3uyF2L67qR4zhLzY/rugvdGdm2PZDPbrcbOY4z8Y6sUChErVYrcl036vV6UaVSiZdd1TZfhRqaXq83tdyTsiwrcl136p2OqV2cZT8l3Zf9tTST8mJZ1sruek1N5DLv+K5CzUShUDh3n5vau8tcDv3Stt8bjUbkOM7U/Jpzd6lUGvksl8uNbO8s5xXLssZeJ4d/i7MulxapCmhMIQ/v+HEXhUKhELmuG//tOM7SL8yNRmPsQTgLc5Ex1fyNRiOybXumA6hSqYxdbhXbfBUCmiiK4gDRtu2BMkzKHKvmZVlW1Gg0RpYzQe0swdS4k2Kn04kKhUKUy+Ui27ajSqUy9rvmQtBftWw0Go2x70/T6/Uiz/PiY8z837KsqFAoDARHpiz6l5uUF/OIrVKpRLlcLsrlciPHn/mtSIpyudxIdft5afTn3Rzfk/LUn1apVIps2z53X7VarXi/m/Q6nU6cZ8dxBvI76SI9y3FhAhrzONqyrMiyrLHnSFMO5vFi/zLTjiNTXrlcLvI8L+p2u1Eul4ssy4pyudzAY2/btiPLsiYeh+N0Op3Isqy4bPrLwTyudF134n43+TFl3mg0ol6vF+dxnt+zbdtx2qVSKd43817cPc+LbNuOSqXSuTcK5vo1rszM/jXnjlnOK+bGf9zvyxyb5hoyy3JRtPgxsOpjyEhVQGMO2v4d2B/MDJ8Q+tuaLPvu2xgX3c7C87yBH2b/Tj3PtGh/1m02wVilUpl6BzFvQDNrustmTtjmB37ehXMa86Pqb6M0r16vFzUajThIMieg/ouIuTMzF/t5dTqdKJfLxX+b38K4ILt/XcPblCTw7W/Xk8vlokqlEgdGw7Wo5iScy+XiO0vz/f6Ljbmw9V84zO9k+KJkLnTDx9csaXS73TifJu+T8lQoFAZOrJ7nzXSBNPnrL9fhi0R/msPvmX153vFn8pzL5aJSqTRw3Jtjoz8Q6P9tmhvA846jbrc7sB5TXmZ7zLpbrdZA2c4TAAy3gzTMhc+YtN+jaLTGO5fLzV3DMPzbmXQTPUmSc4cpx3Hnqf6ALopmO6+Y431cnvuDmFmXi6LFj4F1HENRlLKAxuw882M0EepF1iCYC+m8zA4zdybLqBWYlbnzMKY1PJwnoJkn3VUwP5j+GixzQkgS7c9zl3Uec8Luv8j138lPSr/T6USu6w68zPeH7/SjKIqPp3HpmRuC/rLodruJGwObk/3wPh6+8Zi0XP9F12zPuN+S+a2Pu3MfvrDNmobZH8O/u+E8jbtTnOW3agLI4YvUuCr+4Ybg5r1ZzivDd/CGudiZY8Xsg3G/g1mOI3OBG774jds3Ztl5z2kmz/1MzYwxLaAZvlgn+c0P1+SZc/S03/+itbv9j4SHme2ddn4ePq9M29fmuHQcZ+bljEWPgXUcQ6nptm26JzuOo06nE78kDXR5XrdCoaB8Pq98Pj9Xt1STX9MYq1qtrqVbaz6f19HRkQ4PDyWdNaQOw3Di9Ai5XG6mqRPmTXcVjo+PJUn379+PG9fdv39fUrKu66VSSd1uV/l8Xnfu3FG5XE7cnbFQKMSNvOdpUO04jkqlkqrVatx4PJfLKQgC+b6vg4ODuLtlsViMv2fKop/5vun+L501PFy0MfBwo3PTeHm4Ufvu7u7A35ZlxeVptmfciNQmvfPKLUka4xqW9neBtm1btVptYFiI4Ybb49i2LcdxxnaTD4Ig3u4wDBWG4UgZNpvNgf15nuFtHt4HZjtv3749kpd5jqPh8jL57m+cbN4znR5mZfLcX2ZPnjyZuaOA+a2YBvau6861fmmws8ne3p6ks9/IuOPEdLPOZrPxKO2zHBvDLMuKG+v3l3273Y5/q5M6dow7r8zSWDoMw5mXG5fffvMeA6s8hlIT0Jid1n/AOY4TX0Dn+fGPYyZ1TPLyPE/tdlvb29szBVa+78cnMcdx4h/BpPFJlqVer6vdbuvw8FCWZaler6tararVak38wcxy0CdJdxV831ehUBg4uZsLxyK9QQqFgjqdzsAJP0nwmcvl5DhOnKf+C/y0QMmyrHibzL9mrJhGozHw6vV6iqJobCBpei+Yge4k6ejoaGLPp6RMHucJ/qaNfWPK6bz0lpHGMNObplqtKpPJzDVGz/AFul6vxz2WzMXn6Oho5Nxllp/Wu+k8Zv8Pb+/w7znJcbQq5jg0ZeP7/kgQfJ4kQcw47XZbzWYzDpKG9Y/Z0u12F/4NeZ4n13Xl+348HlQQBPF5a1o5DJ9XzDl33DnKvGfb9szLpUlqAhoTKOTz+YH3zQ/O3Okk5Xmeut1uopfneXIcR61Wa6YTgNkWs6y5A1j1aKrmBBsEQRw8dbvdhU9aq0p3HuYiMNy1+dmzZ5IWD3j7LXKc2bYdn6T6Ly7jalTGMd/tr9mYh9k/ruuq2Wxqd3d36d1fTR6TnAyn3RHOGpQuIw3Dtm2dnJzEtWLZbHaghmua4Qu0uWjlcrk4Dc/zRi6GT548US6XW2i
  380. "text/plain": [
  381. "<Figure size 640x480 with 1 Axes>"
  382. ]
  383. },
  384. "metadata": {},
  385. "output_type": "display_data"
  386. }
  387. ],
  388. "source": [
  389. "plt.hist(\n",
  390. " magnet_energyloss_found,\n",
  391. " alpha=0.5,\n",
  392. " bins=80,\n",
  393. " density=True,\n",
  394. " histtype=\"bar\",\n",
  395. " color=\"blue\",\n",
  396. " label=\"found\",\n",
  397. ")\n",
  398. "plt.hist(\n",
  399. " magnet_energyloss_lost,\n",
  400. " alpha=0.5,\n",
  401. " bins=80,\n",
  402. " density=True,\n",
  403. " histtype=\"bar\",\n",
  404. " color=\"darkorange\",\n",
  405. " label=\"lost\",\n",
  406. ")\n",
  407. "\n",
  408. "# plt.vlines(ak.mean(both_eloss),0,3,colors=\"red\", label=\"mean\")\n",
  409. "plt.xlabel(r\"Energyloss Ratio $E_\\gamma/E_0$\")\n",
  410. "plt.ylabel(\"counts (normed)\")\n",
  411. "plt.title(\n",
  412. " r\"$B^0\\rightarrow K^{\\ast 0} e^+e^-$, $p>5$GeV, photons w/ brem_vtx_z$<9500$mm\"\n",
  413. ")\n",
  414. "plt.legend(title=\"LHCb Simulation\", title_fontsize=15)\n",
  415. "plt.show()"
  416. ]
  417. },
  418. {
  419. "cell_type": "code",
  420. "execution_count": 11,
  421. "metadata": {},
  422. "outputs": [
  423. {
  424. "data": {
  425. "image/png": "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
  426. "text/plain": [
  427. "<Figure size 640x480 with 1 Axes>"
  428. ]
  429. },
  430. "metadata": {},
  431. "output_type": "display_data"
  432. }
  433. ],
  434. "source": [
  435. "nstart = 0\n",
  436. "nend = 5e4\n",
  437. "plt.hist(\n",
  438. " magnet_residual_found,\n",
  439. " alpha=0.5,\n",
  440. " bins=70,\n",
  441. " density=True,\n",
  442. " histtype=\"bar\",\n",
  443. " color=\"blue\",\n",
  444. " label=\"found\",\n",
  445. " range=[nstart, nend],\n",
  446. ")\n",
  447. "plt.hist(\n",
  448. " magnet_residual_lost,\n",
  449. " alpha=0.5,\n",
  450. " bins=70,\n",
  451. " density=True,\n",
  452. " histtype=\"bar\",\n",
  453. " color=\"darkorange\",\n",
  454. " label=\"lost\",\n",
  455. " range=[nstart, nend],\n",
  456. ")\n",
  457. "\n",
  458. "# plt.vlines(ak.mean(both_eloss),0,3,colors=\"red\", label=\"mean\")\n",
  459. "# plt.xlim(0,50000)\n",
  460. "plt.xlabel(r\"Residual Energy in magnet $E_\\gamma$\")\n",
  461. "plt.ylabel(\"counts (normed)\")\n",
  462. "plt.title(\n",
  463. " r\"$B^0\\rightarrow K^{\\ast 0} e^+e^-$, $p>5$GeV, photons w/ brem_vtx_z$<9500$mm\"\n",
  464. ")\n",
  465. "plt.legend(title=\"LHCb Simulation\", title_fontsize=15)\n",
  466. "plt.show()"
  467. ]
  468. },
  469. {
  470. "cell_type": "code",
  471. "execution_count": null,
  472. "metadata": {},
  473. "outputs": [],
  474. "source": []
  475. },
  476. {
  477. "cell_type": "code",
  478. "execution_count": null,
  479. "metadata": {},
  480. "outputs": [],
  481. "source": []
  482. },
  483. {
  484. "cell_type": "code",
  485. "execution_count": 12,
  486. "metadata": {},
  487. "outputs": [
  488. {
  489. "data": {
  490. "text/plain": [
  491. "6"
  492. ]
  493. },
  494. "execution_count": 12,
  495. "metadata": {},
  496. "output_type": "execute_result"
  497. }
  498. ],
  499. "source": [
  500. "cut_length_found[1]"
  501. ]
  502. },
  503. {
  504. "cell_type": "markdown",
  505. "metadata": {},
  506. "source": [
  507. "### Split in Upstream and Downstream Events and analyse separately\n"
  508. ]
  509. },
  510. {
  511. "cell_type": "code",
  512. "execution_count": 13,
  513. "metadata": {},
  514. "outputs": [],
  515. "source": [
  516. "# try to find a split between energy lost before and after the magnet (z~5000mm)\n",
  517. "\n",
  518. "upstream_found = ak.ArrayBuilder()\n",
  519. "downstream_found = ak.ArrayBuilder()\n",
  520. "\n",
  521. "for itr in range(ak.num(cut_brem_found, axis=0)):\n",
  522. " upstream_found.begin_record()\n",
  523. " upstream_found.field(\"energy\").real(cut_brem_found[itr, \"energy\"])\n",
  524. "\n",
  525. " downstream_found.begin_record()\n",
  526. " downstream_found.field(\"energy\").real(cut_brem_found[itr, \"energy\"])\n",
  527. "\n",
  528. " upstream_found.field(\"brem_photons_pe\")\n",
  529. " downstream_found.field(\"brem_photons_pe\")\n",
  530. " upstream_found.begin_list()\n",
  531. " downstream_found.begin_list()\n",
  532. " for jentry in range(cut_length_found[itr]):\n",
  533. " if cut_brem_found[itr, \"brem_vtx_z\", jentry] > 5000:\n",
  534. " if cut_brem_found[itr, \"brem_vtx_z\", jentry] <= 9500:\n",
  535. " downstream_found.real(cut_brem_found[itr, \"brem_photons_pe\",\n",
  536. " jentry])\n",
  537. " else:\n",
  538. " continue\n",
  539. " else:\n",
  540. " upstream_found.real(cut_brem_found[itr, \"brem_photons_pe\", jentry])\n",
  541. " upstream_found.end_list()\n",
  542. " downstream_found.end_list()\n",
  543. "\n",
  544. " upstream_found.field(\"brem_vtx_z\")\n",
  545. " downstream_found.field(\"brem_vtx_z\")\n",
  546. " upstream_found.begin_list()\n",
  547. " downstream_found.begin_list()\n",
  548. " for jentry in range(cut_length_found[itr]):\n",
  549. " if cut_brem_found[itr, \"brem_vtx_z\", jentry] > 5000:\n",
  550. " if cut_brem_found[itr, \"brem_vtx_z\", jentry] <= 9500:\n",
  551. " downstream_found.real(cut_brem_found[itr, \"brem_vtx_z\",\n",
  552. " jentry])\n",
  553. " else:\n",
  554. " continue\n",
  555. " else:\n",
  556. " upstream_found.real(cut_brem_found[itr, \"brem_vtx_z\", jentry])\n",
  557. " upstream_found.end_list()\n",
  558. " downstream_found.end_list()\n",
  559. " upstream_found.end_record()\n",
  560. " downstream_found.end_record()\n",
  561. "\n",
  562. "upstream_found = ak.Array(upstream_found)\n",
  563. "downstream_found = ak.Array(downstream_found)\n",
  564. "\n",
  565. "upstream_lost = ak.ArrayBuilder()\n",
  566. "downstream_lost = ak.ArrayBuilder()\n",
  567. "\n",
  568. "for itr in range(ak.num(cut_brem_lost, axis=0)):\n",
  569. " upstream_lost.begin_record()\n",
  570. " upstream_lost.field(\"energy\").real(cut_brem_lost[itr, \"energy\"])\n",
  571. "\n",
  572. " downstream_lost.begin_record()\n",
  573. " downstream_lost.field(\"energy\").real(cut_brem_lost[itr, \"energy\"])\n",
  574. "\n",
  575. " upstream_lost.field(\"brem_photons_pe\")\n",
  576. " downstream_lost.field(\"brem_photons_pe\")\n",
  577. " upstream_lost.begin_list()\n",
  578. " downstream_lost.begin_list()\n",
  579. " for jentry in range(cut_length_lost[itr]):\n",
  580. " if cut_brem_lost[itr, \"brem_vtx_z\", jentry] > 5000:\n",
  581. " if cut_brem_lost[itr, \"brem_vtx_z\", jentry] <= 9500:\n",
  582. " downstream_lost.real(cut_brem_lost[itr, \"brem_photons_pe\",\n",
  583. " jentry])\n",
  584. " else:\n",
  585. " continue\n",
  586. " else:\n",
  587. " upstream_lost.real(cut_brem_lost[itr, \"brem_photons_pe\", jentry])\n",
  588. " upstream_lost.end_list()\n",
  589. " downstream_lost.end_list()\n",
  590. "\n",
  591. " upstream_lost.field(\"brem_vtx_z\")\n",
  592. " downstream_lost.field(\"brem_vtx_z\")\n",
  593. " upstream_lost.begin_list()\n",
  594. " downstream_lost.begin_list()\n",
  595. " for jentry in range(cut_length_lost[itr]):\n",
  596. " if cut_brem_lost[itr, \"brem_vtx_z\", jentry] > 5000:\n",
  597. " if cut_brem_lost[itr, \"brem_vtx_z\", jentry] <= 9500:\n",
  598. " downstream_lost.real(cut_brem_lost[itr, \"brem_vtx_z\", jentry])\n",
  599. " else:\n",
  600. " continue\n",
  601. " else:\n",
  602. " upstream_lost.real(cut_brem_lost[itr, \"brem_vtx_z\", jentry])\n",
  603. " upstream_lost.end_list()\n",
  604. " downstream_lost.end_list()\n",
  605. " upstream_lost.end_record()\n",
  606. " downstream_lost.end_record()\n",
  607. "\n",
  608. "upstream_lost = ak.Array(upstream_lost)\n",
  609. "downstream_lost = ak.Array(downstream_lost)"
  610. ]
  611. },
  612. {
  613. "cell_type": "code",
  614. "execution_count": 14,
  615. "metadata": {},
  616. "outputs": [
  617. {
  618. "data": {
  619. "text/html": [
  620. "<pre>{energy: 1.28e+04,\n",
  621. " brem_photons_pe: [7.42e+03],\n",
  622. " brem_vtx_z: [35.6]}\n",
  623. "-----------------------------------\n",
  624. "type: {\n",
  625. " energy: float64,\n",
  626. " brem_photons_pe: var * float64,\n",
  627. " brem_vtx_z: var * float64\n",
  628. "}</pre>"
  629. ],
  630. "text/plain": [
  631. "<Record {energy: 1.28e+04, ...} type='{energy: float64, brem_photons_pe: va...'>"
  632. ]
  633. },
  634. "execution_count": 14,
  635. "metadata": {},
  636. "output_type": "execute_result"
  637. }
  638. ],
  639. "source": [
  640. "upstream_found[0]"
  641. ]
  642. },
  643. {
  644. "cell_type": "code",
  645. "execution_count": null,
  646. "metadata": {},
  647. "outputs": [],
  648. "source": []
  649. },
  650. {
  651. "cell_type": "code",
  652. "execution_count": 15,
  653. "metadata": {},
  654. "outputs": [
  655. {
  656. "name": "stdout",
  657. "output_type": "stream",
  658. "text": [
  659. "\n",
  660. "upstream: cutoff energy = 350MeV, sample size: 6604\n",
  661. "eff = 0.8798 +/- 0.004\n"
  662. ]
  663. }
  664. ],
  665. "source": [
  666. "# plot efficiency against cutoff energy\n",
  667. "up_efficiencies = []\n",
  668. "up_deff = []\n",
  669. "\n",
  670. "for cutoff_energy in range(0, 10050, 200):\n",
  671. " up_nobrem_f = upstream_found[ak.sum(upstream_found[\"brem_photons_pe\"],\n",
  672. " axis=-1,\n",
  673. " keepdims=False) < cutoff_energy]\n",
  674. " up_nobrem_l = upstream_lost[ak.sum(upstream_lost[\"brem_photons_pe\"],\n",
  675. " axis=-1,\n",
  676. " keepdims=False) < cutoff_energy]\n",
  677. "\n",
  678. " if ak.num(up_nobrem_f, axis=0) + ak.num(up_nobrem_l, axis=0) == 0:\n",
  679. " up_efficiencies.append(0)\n",
  680. " up_deff.append(0)\n",
  681. " continue\n",
  682. "\n",
  683. " eff = t_eff(up_nobrem_f, up_nobrem_l)\n",
  684. " deff = eff_err(up_nobrem_f, up_nobrem_l)\n",
  685. " up_efficiencies.append(eff)\n",
  686. " up_deff.append(deff)\n",
  687. "\n",
  688. " # print(\"\\ncutoff = \",str(cutoff_energy),\"MeV, sample size: \",ak.num(up_nobrem_f,axis=0)+ak.num(up_nobrem_l,axis=0))\n",
  689. " # print(\"eff = \",np.round(eff,4), \"+/-\", np.round(eff_err(up_nobrem_f, up_nobrem_l),4))\n",
  690. "\"\"\"\n",
  691. "we see that a cutoff energy of xxxMeV is ideal because the efficiency drops significantly for higher values\n",
  692. "\"\"\"\n",
  693. "cutoff_energy = 350.0 # MeV\n",
  694. "\"\"\"\n",
  695. "better statistics: cutoff=xxxMeV - sample size: xxx events and efficiency=xxxx\n",
  696. "\"\"\"\n",
  697. "up_nobrem_found = upstream_found[ak.sum(upstream_found[\"brem_photons_pe\"],\n",
  698. " axis=-1,\n",
  699. " keepdims=False) < cutoff_energy]\n",
  700. "up_nobrem_lost = upstream_lost[ak.sum(\n",
  701. " upstream_lost[\"brem_photons_pe\"], axis=-1, keepdims=False) < cutoff_energy]\n",
  702. "\n",
  703. "print(\n",
  704. " \"\\nupstream: cutoff energy = 350MeV, sample size:\",\n",
  705. " ak.num(up_nobrem_found, axis=0) + ak.num(up_nobrem_lost, axis=0),\n",
  706. ")\n",
  707. "print(\n",
  708. " \"eff = \",\n",
  709. " np.round(t_eff(up_nobrem_found, up_nobrem_lost), 4),\n",
  710. " \"+/-\",\n",
  711. " np.round(eff_err(up_nobrem_found, up_nobrem_lost), 3),\n",
  712. ")"
  713. ]
  714. },
  715. {
  716. "cell_type": "code",
  717. "execution_count": 16,
  718. "metadata": {},
  719. "outputs": [
  720. {
  721. "name": "stdout",
  722. "output_type": "stream",
  723. "text": [
  724. "nobrem_vertices\n",
  725. "upstream: cutoff energy = 350MeV, sample size: 6604\n",
  726. "eff = 0.8798 +/- 0.004\n",
  727. "\n",
  728. "downstream: cutoff energy = 350MeV, sample size: 21986\n",
  729. "eff = 0.8739 +/- 0.002\n"
  730. ]
  731. }
  732. ],
  733. "source": [
  734. "down_efficiencies = []\n",
  735. "down_deff = []\n",
  736. "\n",
  737. "for cutoff_energy in range(0, 10050, 200):\n",
  738. " down_nobrem_f = downstream_found[ak.sum(\n",
  739. " downstream_found[\"brem_photons_pe\"], axis=-1, keepdims=False) <\n",
  740. " cutoff_energy]\n",
  741. " down_nobrem_l = downstream_lost[ak.sum(downstream_lost[\"brem_photons_pe\"],\n",
  742. " axis=-1,\n",
  743. " keepdims=False) < cutoff_energy]\n",
  744. "\n",
  745. " if ak.num(down_nobrem_f, axis=0) + ak.num(down_nobrem_l, axis=0) == 0:\n",
  746. " down_efficiencies.append(0)\n",
  747. " down_deff.append(0)\n",
  748. " continue\n",
  749. " eff = t_eff(down_nobrem_f, down_nobrem_l)\n",
  750. " deff = eff_err(down_nobrem_f, down_nobrem_l)\n",
  751. " down_efficiencies.append(eff)\n",
  752. " down_deff.append(deff)\n",
  753. "\n",
  754. " # print(\"\\ncutoff = \",str(cutoff_energy),\"MeV, sample size: \",ak.num(down_nobrem_f,axis=0)+ak.num(down_nobrem_l,axis=0))\n",
  755. " # print(\"eff = \",np.round(eff,4), \"+/-\", np.round(eff_err(down_nobrem_f, down_nobrem_l),4))\n",
  756. "\"\"\"\n",
  757. "we see that a cutoff energy of xxxMeV is ideal because the efficiency drops significantly for higher values\n",
  758. "\"\"\"\n",
  759. "cutoff_energy = 350.0 # MeV\n",
  760. "\"\"\"\n",
  761. "better statistics: cutoff=xxxMeV - sample size: xxx events and efficiency=xxxx\n",
  762. "\"\"\"\n",
  763. "down_nobrem_found = downstream_found[ak.sum(\n",
  764. " downstream_found[\"brem_photons_pe\"], axis=-1, keepdims=False) <\n",
  765. " cutoff_energy]\n",
  766. "down_nobrem_lost = downstream_lost[ak.sum(downstream_lost[\"brem_photons_pe\"],\n",
  767. " axis=-1,\n",
  768. " keepdims=False) < cutoff_energy]\n",
  769. "\n",
  770. "print(\n",
  771. " \"nobrem_vertices\\nupstream: cutoff energy = 350MeV, sample size:\",\n",
  772. " ak.num(up_nobrem_found, axis=0) + ak.num(up_nobrem_lost, axis=0),\n",
  773. ")\n",
  774. "print(\n",
  775. " \"eff = \",\n",
  776. " np.round(t_eff(up_nobrem_found, up_nobrem_lost), 4),\n",
  777. " \"+/-\",\n",
  778. " np.round(eff_err(up_nobrem_found, up_nobrem_lost), 3),\n",
  779. ")\n",
  780. "\n",
  781. "print(\n",
  782. " \"\\ndownstream: cutoff energy = 350MeV, sample size:\",\n",
  783. " ak.num(down_nobrem_found, axis=0) + ak.num(down_nobrem_lost, axis=0),\n",
  784. ")\n",
  785. "print(\n",
  786. " \"eff = \",\n",
  787. " np.round(t_eff(down_nobrem_found, down_nobrem_lost), 4),\n",
  788. " \"+/-\",\n",
  789. " np.round(eff_err(down_nobrem_found, down_nobrem_lost), 3),\n",
  790. ")"
  791. ]
  792. },
  793. {
  794. "cell_type": "code",
  795. "execution_count": 17,
  796. "metadata": {},
  797. "outputs": [
  798. {
  799. "data": {
  800. "image/png": "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
  801. "text/plain": [
  802. "<Figure size 1800x600 with 2 Axes>"
  803. ]
  804. },
  805. "metadata": {},
  806. "output_type": "display_data"
  807. }
  808. ],
  809. "source": [
  810. "# plot efficiencies wrt cutoff energy\n",
  811. "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(18, 6))\n",
  812. "x_ = np.arange(0, 10050, step=200)\n",
  813. "\n",
  814. "ax[0].errorbar(x_, up_efficiencies, yerr=up_deff, ls=\"\", capsize=1, fmt=\".\")\n",
  815. "ax[0].set(\n",
  816. " xlabel=\"cutoff energy [MeV]\",\n",
  817. " ylabel=r\"$\\epsilon$\",\n",
  818. " title=\"upstream\",\n",
  819. " ylim=[0.8, 1.0],\n",
  820. ")\n",
  821. "# ax[0].set_yticks(np.arange(0.8,1.01,step=0.02),minor=False)\n",
  822. "# ax[0].set_xticks(np.arange(0,10100,step=200),minor=True)\n",
  823. "# ax[0].grid()\n",
  824. "\n",
  825. "ax[1].errorbar(x_,\n",
  826. " down_efficiencies,\n",
  827. " yerr=down_deff,\n",
  828. " ls=\"\",\n",
  829. " capsize=1,\n",
  830. " fmt=\".\")\n",
  831. "ax[1].set(\n",
  832. " xlabel=\"cutoff energy [MeV]\",\n",
  833. " ylabel=r\"$\\epsilon$\",\n",
  834. " title=\"downstream\",\n",
  835. " ylim=[0.8, 1.0],\n",
  836. ")\n",
  837. "# ax[1].set_yticks(np.arange(0.8,1.01,step=0.02),minor=False)\n",
  838. "# ax[1].set_xticks(np.arange(0,10100,step=200),minor=True)\n",
  839. "# ax[1].grid(True)\n",
  840. "\n",
  841. "fig.suptitle(\n",
  842. " r\"$e^\\pm$ from $B\\rightarrow K^\\ast ee$, $p>5$GeV, nobrem electrons\")\n",
  843. "\n",
  844. "plt.show()"
  845. ]
  846. },
  847. {
  848. "cell_type": "code",
  849. "execution_count": null,
  850. "metadata": {},
  851. "outputs": [],
  852. "source": []
  853. },
  854. {
  855. "cell_type": "code",
  856. "execution_count": 18,
  857. "metadata": {},
  858. "outputs": [
  859. {
  860. "name": "stdout",
  861. "output_type": "stream",
  862. "text": [
  863. "brem vertices\n",
  864. "upstream eff = 0.826 +/- 0.002\n",
  865. "downstream eff = 0.796 +/- 0.003\n"
  866. ]
  867. }
  868. ],
  869. "source": [
  870. "cutoff_energy = 350\n",
  871. "# possibly: instead of checking if any photons exceed the cutoff, use the sum of all photon energies to separate nobrem and brem\n",
  872. "\n",
  873. "upstream_brem_found = upstream_found[ak.sum(upstream_found[\"brem_photons_pe\"],\n",
  874. " axis=-1,\n",
  875. " keepdims=False) >= cutoff_energy]\n",
  876. "up_energy_found = ak.to_numpy(upstream_brem_found[\"energy\"])\n",
  877. "up_eph_found = ak.to_numpy(\n",
  878. " ak.sum(upstream_brem_found[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  879. "up_residual_found = up_energy_found - up_eph_found\n",
  880. "up_energyloss_found = up_eph_found / up_energy_found\n",
  881. "\n",
  882. "upstream_brem_lost = upstream_lost[ak.sum(upstream_lost[\"brem_photons_pe\"],\n",
  883. " axis=-1,\n",
  884. " keepdims=False) >= cutoff_energy]\n",
  885. "up_energy_lost = ak.to_numpy(upstream_brem_lost[\"energy\"])\n",
  886. "up_eph_lost = ak.to_numpy(\n",
  887. " ak.sum(upstream_brem_lost[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  888. "up_residual_lost = up_energy_lost - up_eph_lost\n",
  889. "up_energyloss_lost = up_eph_lost / up_energy_lost\n",
  890. "\n",
  891. "print(\n",
  892. " \"brem vertices\\nupstream eff = \",\n",
  893. " np.round(t_eff(upstream_brem_found, upstream_brem_lost), 3),\n",
  894. " \"+/-\",\n",
  895. " np.round(eff_err(upstream_brem_found, upstream_brem_lost), 3),\n",
  896. ")\n",
  897. "\n",
  898. "downstream_brem_found = downstream_found[ak.sum(\n",
  899. " downstream_found[\"brem_photons_pe\"], axis=-1, keepdims=False) >=\n",
  900. " cutoff_energy]\n",
  901. "down_energy_found = ak.to_numpy(downstream_brem_found[\"energy\"])\n",
  902. "down_eph_found = ak.to_numpy(\n",
  903. " ak.sum(downstream_brem_found[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  904. "down_residual_found = down_energy_found - down_eph_found\n",
  905. "down_energyloss_found = down_eph_found / down_energy_found\n",
  906. "\n",
  907. "downstream_brem_lost = downstream_lost[ak.sum(\n",
  908. " downstream_lost[\"brem_photons_pe\"], axis=-1, keepdims=False) >=\n",
  909. " cutoff_energy]\n",
  910. "down_energy_lost = ak.to_numpy(downstream_brem_lost[\"energy\"])\n",
  911. "down_eph_lost = ak.to_numpy(\n",
  912. " ak.sum(downstream_brem_lost[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  913. "down_residual_lost = down_energy_lost - down_eph_lost\n",
  914. "down_energyloss_lost = down_eph_lost / down_energy_lost\n",
  915. "\n",
  916. "print(\n",
  917. " \"downstream eff = \",\n",
  918. " np.round(t_eff(downstream_brem_found, downstream_brem_lost), 3),\n",
  919. " \"+/-\",\n",
  920. " np.round(eff_err(downstream_brem_found, downstream_brem_lost), 3),\n",
  921. ")"
  922. ]
  923. },
  924. {
  925. "cell_type": "code",
  926. "execution_count": 19,
  927. "metadata": {},
  928. "outputs": [
  929. {
  930. "name": "stdout",
  931. "output_type": "stream",
  932. "text": [
  933. "upstream:\n",
  934. "mean energyloss relative to initial energy (found): 0.3289231319498724\n",
  935. "mean energyloss relative to initial energy (lost): 0.530926023218989\n",
  936. "downstream:\n",
  937. "mean energyloss relative to initial energy (found): 0.18366915850891907\n",
  938. "mean energyloss relative to initial energy (lost): 0.32907909342930114\n"
  939. ]
  940. }
  941. ],
  942. "source": [
  943. "print(\n",
  944. " \"upstream:\\nmean energyloss relative to initial energy (found): \",\n",
  945. " ak.mean(up_energyloss_found),\n",
  946. ")\n",
  947. "print(\"mean energyloss relative to initial energy (lost): \",\n",
  948. " ak.mean(up_energyloss_lost))\n",
  949. "\n",
  950. "print(\n",
  951. " \"downstream:\\nmean energyloss relative to initial energy (found): \",\n",
  952. " ak.mean(down_energyloss_found),\n",
  953. ")\n",
  954. "print(\"mean energyloss relative to initial energy (lost): \",\n",
  955. " ak.mean(down_energyloss_lost))"
  956. ]
  957. },
  958. {
  959. "cell_type": "code",
  960. "execution_count": 20,
  961. "metadata": {},
  962. "outputs": [
  963. {
  964. "data": {
  965. "image/png": "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
  966. "text/plain": [
  967. "<Figure size 1800x600 with 2 Axes>"
  968. ]
  969. },
  970. "metadata": {},
  971. "output_type": "display_data"
  972. }
  973. ],
  974. "source": [
  975. "# in abhängigkeit von der energie der elektronen\n",
  976. "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(18, 6))\n",
  977. "\n",
  978. "ax[0].hist(\n",
  979. " up_energyloss_lost,\n",
  980. " bins=100,\n",
  981. " density=True,\n",
  982. " alpha=0.5,\n",
  983. " histtype=\"bar\",\n",
  984. " color=\"darkorange\",\n",
  985. " label=\"lost\",\n",
  986. ")\n",
  987. "ax[0].hist(\n",
  988. " up_energyloss_found,\n",
  989. " bins=100,\n",
  990. " density=True,\n",
  991. " alpha=0.5,\n",
  992. " histtype=\"bar\",\n",
  993. " color=\"blue\",\n",
  994. " label=\"found\",\n",
  995. ")\n",
  996. "# ax[0].set_xticks(np.arange(0,1.1,0.1), minor=True,)\n",
  997. "# ax[0].set_yticks(np.arange(0,11,1), minor=True)\n",
  998. "ax[0].set_xlabel(r\"$E_\\gamma/E_0$\")\n",
  999. "ax[0].set_ylabel(\"counts (normed)\")\n",
  1000. "ax[0].set_title(\"Upstream\")\n",
  1001. "ax[0].legend()\n",
  1002. "# ax[0].grid()\n",
  1003. "\n",
  1004. "ax[1].hist(\n",
  1005. " down_energyloss_lost,\n",
  1006. " bins=100,\n",
  1007. " density=True,\n",
  1008. " alpha=0.5,\n",
  1009. " histtype=\"bar\",\n",
  1010. " color=\"darkorange\",\n",
  1011. " label=\"lost\",\n",
  1012. ")\n",
  1013. "ax[1].hist(\n",
  1014. " down_energyloss_found,\n",
  1015. " bins=100,\n",
  1016. " density=True,\n",
  1017. " alpha=0.5,\n",
  1018. " histtype=\"bar\",\n",
  1019. " color=\"blue\",\n",
  1020. " label=\"found\",\n",
  1021. ")\n",
  1022. "# ax[1].set_xticks(np.arange(0,1.1,0.1), minor=True,)\n",
  1023. "# ax[1].set_yticks(np.arange(0,11,1), minor=True)\n",
  1024. "ax[1].set_xlabel(r\"$E_\\gamma/E_0$\")\n",
  1025. "ax[1].set_ylabel(\"counts (normed)\")\n",
  1026. "ax[1].set_title(\"Downstream\")\n",
  1027. "ax[1].legend()\n",
  1028. "# ax[1].grid()\n",
  1029. "\"\"\"\n",
  1030. "most electrons lose little energy relative to their initial energy downstream\n",
  1031. "\"\"\"\n",
  1032. "fig.suptitle(\n",
  1033. " r\"$B\\rightarrow K^\\ast ee$, $p>5$GeV, photons w/ brem_vtx_z$<9500$mm\")\n",
  1034. "plt.show()"
  1035. ]
  1036. },
  1037. {
  1038. "cell_type": "code",
  1039. "execution_count": null,
  1040. "metadata": {},
  1041. "outputs": [],
  1042. "source": []
  1043. },
  1044. {
  1045. "cell_type": "code",
  1046. "execution_count": 21,
  1047. "metadata": {},
  1048. "outputs": [
  1049. {
  1050. "data": {
  1051. "image/png": "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
  1052. "text/plain": [
  1053. "<Figure size 640x480 with 1 Axes>"
  1054. ]
  1055. },
  1056. "metadata": {},
  1057. "output_type": "display_data"
  1058. }
  1059. ],
  1060. "source": [
  1061. "plt.hist(\n",
  1062. " up_energyloss_lost,\n",
  1063. " bins=100,\n",
  1064. " density=True,\n",
  1065. " alpha=0.5,\n",
  1066. " histtype=\"bar\",\n",
  1067. " color=\"darkorange\",\n",
  1068. " label=\"lost\",\n",
  1069. ")\n",
  1070. "plt.hist(\n",
  1071. " up_energyloss_found,\n",
  1072. " bins=100,\n",
  1073. " density=True,\n",
  1074. " alpha=0.5,\n",
  1075. " histtype=\"bar\",\n",
  1076. " color=\"blue\",\n",
  1077. " label=\"found\",\n",
  1078. ")\n",
  1079. "plt.xlabel(r\"$E_\\gamma/E_0$\")\n",
  1080. "plt.ylabel(\"counts (normed)\")\n",
  1081. "plt.title(\n",
  1082. " r\"$B\\rightarrow K^\\ast ee$, $p>5$GeV, photons w/ brem_vtx_z$<9500$mm\")\n",
  1083. "plt.legend(title=\"LHCb Simulation\", title_fontsize=15)\n",
  1084. "plt.text(0.35, 2.0, \"Upstream\", size=15)\n",
  1085. "plt.show()"
  1086. ]
  1087. },
  1088. {
  1089. "cell_type": "code",
  1090. "execution_count": 22,
  1091. "metadata": {},
  1092. "outputs": [
  1093. {
  1094. "data": {
  1095. "image/png": "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
  1096. "text/plain": [
  1097. "<Figure size 640x480 with 1 Axes>"
  1098. ]
  1099. },
  1100. "metadata": {},
  1101. "output_type": "display_data"
  1102. }
  1103. ],
  1104. "source": [
  1105. "both_eloss = np.append(up_energyloss_found, up_energyloss_lost)\n",
  1106. "plt.hist(\n",
  1107. " both_eloss,\n",
  1108. " bins=100,\n",
  1109. " density=True,\n",
  1110. " histtype=\"bar\",\n",
  1111. " color=\"cornflowerblue\",\n",
  1112. " label=\"Upstream\",\n",
  1113. ")\n",
  1114. "plt.vlines(ak.mean(both_eloss), 0, 3, colors=\"red\", label=\"mean\")\n",
  1115. "plt.xlabel(r\"Energyloss Ratio $E_\\gamma/E_0$\")\n",
  1116. "plt.ylabel(\"counts (normed)\")\n",
  1117. "plt.title(\n",
  1118. " r\"$B^0\\rightarrow K^{\\ast 0} e^+e^-$, $p>5$GeV, photons w/ brem_vtx_z$<9500$mm\"\n",
  1119. ")\n",
  1120. "plt.legend(title=\"LHCb Simulation\", title_fontsize=15)\n",
  1121. "plt.show()"
  1122. ]
  1123. },
  1124. {
  1125. "cell_type": "code",
  1126. "execution_count": null,
  1127. "metadata": {},
  1128. "outputs": [],
  1129. "source": []
  1130. },
  1131. {
  1132. "cell_type": "code",
  1133. "execution_count": 23,
  1134. "metadata": {},
  1135. "outputs": [
  1136. {
  1137. "data": {
  1138. "image/png": "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
  1139. "text/plain": [
  1140. "<Figure size 2000x600 with 3 Axes>"
  1141. ]
  1142. },
  1143. "metadata": {},
  1144. "output_type": "display_data"
  1145. }
  1146. ],
  1147. "source": [
  1148. "# energyloss in abh von der energie der elektronen\n",
  1149. "# upstream\n",
  1150. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(20, 6))\n",
  1151. "\n",
  1152. "a0 = ax0.hist2d(\n",
  1153. " up_energyloss_found,\n",
  1154. " up_energy_found,\n",
  1155. " bins=(np.linspace(0, 1, 80), np.linspace(0, 5e4, 80)),\n",
  1156. " cmap=plt.cm.jet,\n",
  1157. " cmin=1,\n",
  1158. " vmax=15,\n",
  1159. ")\n",
  1160. "ax0.set_ylim(0, 5e4)\n",
  1161. "ax0.set_xlim(0, 1)\n",
  1162. "ax0.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  1163. "ax0.set_ylabel(r\"$E_0$\")\n",
  1164. "ax0.set_title(\"found energyloss wrt electron energy\")\n",
  1165. "\n",
  1166. "a1 = ax1.hist2d(\n",
  1167. " up_energyloss_lost,\n",
  1168. " up_energy_lost,\n",
  1169. " bins=(np.linspace(0, 1, 50), np.linspace(0, 5e4, 50)),\n",
  1170. " cmap=plt.cm.jet,\n",
  1171. " cmin=1,\n",
  1172. " vmax=15,\n",
  1173. ")\n",
  1174. "ax1.set_ylim(0, 5e4)\n",
  1175. "ax1.set_xlim(0, 1)\n",
  1176. "ax1.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  1177. "ax1.set_ylabel(r\"$E_0$\")\n",
  1178. "ax1.set_title(\"lost energyloss wrt electron energy\")\n",
  1179. "\n",
  1180. "fig.colorbar(a1[3], ax=ax1)\n",
  1181. "fig.suptitle(\n",
  1182. " r\"$B\\rightarrow K^\\ast ee$, $p>5$GeV, Upstream photons w/ brem_vtx_z$<9500$mm\"\n",
  1183. ")\n",
  1184. "\n",
  1185. "plt.show()"
  1186. ]
  1187. },
  1188. {
  1189. "cell_type": "code",
  1190. "execution_count": 24,
  1191. "metadata": {},
  1192. "outputs": [
  1193. {
  1194. "data": {
  1195. "image/png": "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
  1196. "text/plain": [
  1197. "<Figure size 2000x600 with 3 Axes>"
  1198. ]
  1199. },
  1200. "metadata": {},
  1201. "output_type": "display_data"
  1202. }
  1203. ],
  1204. "source": [
  1205. "# downstream\n",
  1206. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(20, 6))\n",
  1207. "\n",
  1208. "a0 = ax0.hist2d(\n",
  1209. " down_energyloss_found,\n",
  1210. " down_energy_found,\n",
  1211. " bins=(np.linspace(0, 1, 80), np.linspace(0, 5e4, 80)),\n",
  1212. " cmap=plt.cm.jet,\n",
  1213. " cmin=1,\n",
  1214. " vmax=15,\n",
  1215. ")\n",
  1216. "ax0.set_ylim(0, 5e4)\n",
  1217. "ax0.set_xlim(0, 1)\n",
  1218. "ax0.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  1219. "ax0.set_ylabel(r\"$E_0$\")\n",
  1220. "ax0.set_title(\"found energyloss wrt electron energy\")\n",
  1221. "\n",
  1222. "a1 = ax1.hist2d(\n",
  1223. " down_energyloss_lost,\n",
  1224. " down_energy_lost,\n",
  1225. " bins=(np.linspace(0, 1, 50), np.linspace(0, 5e4, 50)),\n",
  1226. " cmap=plt.cm.jet,\n",
  1227. " cmin=1,\n",
  1228. " vmax=15,\n",
  1229. ")\n",
  1230. "ax1.set_ylim(0, 5e4)\n",
  1231. "ax1.set_xlim(0, 1)\n",
  1232. "ax1.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  1233. "ax1.set_ylabel(r\"$E_0$\")\n",
  1234. "ax1.set_title(\"lost energyloss wrt electron energy\")\n",
  1235. "\n",
  1236. "fig.colorbar(a1[3], ax=ax1)\n",
  1237. "fig.suptitle(\n",
  1238. " r\"$B\\rightarrow K^\\ast ee$, $p>5$GeV, Downstream photons w/ brem_vtx_z$<9500$mm\"\n",
  1239. ")\n",
  1240. "\n",
  1241. "plt.show()"
  1242. ]
  1243. },
  1244. {
  1245. "cell_type": "code",
  1246. "execution_count": 25,
  1247. "metadata": {},
  1248. "outputs": [
  1249. {
  1250. "data": {
  1251. "image/png": "iVBORw0KGgoAAAANSUhEUgAABkMAAAJPCAYAAADPIqNiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADH6ElEQVR4nOz9f5Qc533fe34KoAAhZjQNUPEBlcQxelY6Mi3JVDcUE8INERLd1slmY1tCD6CspYS5S/Y4d6gQl1zPGFauIfiuMu45JkNGnBt1w+dEeyJtDHRDjpPj7LG6SYrMJaE9QrdpUaa0jqcn8eZG2Kwy08NLGSJEoPYPsJo9M/3j+XZX/5z365w+JKa/9dRTTz311FP19FPl+b7vCwAAAAAAAAAAYELtGnYGAAAAAAAAAAAA+onBEAAAAAAAAAAAMNEYDAEAAAAAAAAAABONwRAAAAAAAAAAADDRGAwBAAAAAAAAAAATjcEQAAAAAAAAAAAw0RgMAQAAAAAAAAAAE43BEADA2KtWq6rVasPOBgAAAAAAAEYUgyEAgLFXKBRUKpWGnQ0AAAAAAACMKAZDAAAAAAAAAADARGMwBAAAAAAAAAAATDQGQwAAALpQq9VUrVaHnQ0AAAAAAOCAwRAAAIAuXLx4UZlMZtjZQAeFQmHYWQBGQqlU0uzsrPbv389xMcZqtZoKhYJmZma0f/9+VSqVYWcJMKH9AQAME4MhAAC0sLS0VL/ZsH//fs3OzqpWqw07W6GrVCr1G2Se5236BNsej8e1sLAw1tu/sLCgeDy+bRtnZmZUKpUk3brJtLCwsK0sZmdnJd0qq2A2yIEDBxSJROrLBWlg8JaWlrbt1+Bz4cKFjssHN4mnp6fr+76x3pdKJVWrVcXj8Z5uPBYKhaZ1MJlMamlpqekylUpFMzMz2+qsdVZSoVBQMplseozPzMw0PbaDMtmaV+r6+CkUCspms8rlcmPdjk+6Wq1WP85ayeVyymazKhQK7Ev03cLCgpLJpOLxuKkv3O15OThXBet0Ped0uxwAYAfyAQAYE+l02o9Go9s+kUjEj0QiTb/LZDLm9ayvr/uxWMyfn5+v/zsajfqSukpvXOTzeV+SL8mPxWKbvpufn69/Vy6Xh5TDcEQikfq2FIvFpjGJRMKX5CcSCX99fb3+93w+70ciET+bzfrlctnPZrN+sVj0I5HIRNeNUde4T7d+2tXXcrnsx2Kxeuz8/LxfLBb9lZWV+v5t/D6s+h/Ur2bHWiuZTCaUNqjxOI9EIk7LBGXQ6ngZhPX19U3HIroT7Pt8Pj+wdbLv3AXHeTabbRu3srIyMefkYaN+Nlcul/1oNOqn0+n634L+cSQS6Vjvujkvp1Kpbd8H56ygTx7mcgCAnYnBEADA2MtkMqHe2Emn074kf2VlZdPfh3kjcBCCmzCtbsQEN0Rdb6COqk43oYOBn3Y3nTOZjJ9IJPxYLOan02lupAxRNpv1o9Gov7Ky0vTTSuOgQCKRaBubzWY7DqBZrK+vb7ox5GJ+fj6UY6/xJmoikXBaJmgbhimRSHDTNwTDGAxh37kLzrOdzimNbQhl2xvqZ3PBD422Wl9frw90tDpvdnNeDvrezfqfwXfN2q1ulwMA7Fw8JgsAgC1yuZykW49BapRIJIaRnYH55je/Wf//kydPbvv+8OHDkm49xmNcH83R+IijU6dObft+dnZWuVxO5XJZ8/PzLdMJHo/V+Kgs3DI7OzvQx1NkMhllMhlFo9Gmn2aCR09Jt47rYrHYMlaS0um08vm8JIVS9yORiNLpdP3frR6R1SiXy21aJgyudTcajQ61ngePKsP4Yd+5q1arqlQqSiQSnFcGZCfUz8bHf7qev4LHojbr90YikXofcWFhoeny1vNytVqt972bneeCR5VuXV+3ywEAdjYGQwAAaGB9Dv8kCW4ItLrx2Vg2a2trA8nT7OxsqPuk8aZH40V+8D6IarWq1dVVxWKxlssHNxQymYxmZmaUTCZ16NAhpxvaO0E2m1UymdTMzIzi8XhfX5RaKBRUrVa1trZmepdHMBAiqT7I0UkqlQp1QDSTydT/f3FxsW1sqVRSrVbTmTNnQlu/1dbB4UEpFAocW2OKfWeTzWYlvX0DF/016fWzWq3W3wdXrVb1zDPPOA+yBeftj3zkI02/D86hwTl467LW83JwPmx1jo3FYopEIqpWq5v6cd0uBwDY2RgMAQBAt351HbwwOXDo0KH6C8QbL5hLpZJmZmbqv0abnZ1t+cLTpaWl+sscp6enlUwm68s1UygUNDMzU/8VW6VSqb/0eGs+Gi90g/V3+6v1SqVSXzaVSjWNuXLliqRbvwps9yv6MFWr1VBvpje+tDMY8Ahean3q1CkVi8WONwueeeYZzc/Pq1qtamVlRYlEQqurqwMrk3EwPz+v9fV1zc7OamFhQdPT023rfbeCQYTZ2dn6i8lnZmba3oDJ5XL1mzepVMr0C+zgl67N1Gq1TS8cj8fjbW+0RSKR+rFWq9Xa1vNMJmPO66AEL60N9m/wC+ROL1uv1WqamZmpf6anpzU9Pb3pRnChUNBDDz1U//fx48frbXIj1zbZuo+CbQsGPePxeMt6POi2u9ty36pxuXg83vHmpes5zXXfWdOVbu3HXC63KSaXy23ar622w6XetVKpVOpl5Xmepqen6+W8tLS07bvG/NdqtXp9mJ6ebrq/gzag1Tm4nWq1qpmZmXoZz8zMtPwhQT+Ol2H2XYK2P/hszWOhUKhvQ7CuTvUzKM/GdJPJZH32TrDO/fv3dzXrIHi5+P79++t1MPg0rrObcgnyPj09rbW1Na2srCifz7f8kUerNKTWswcbz4Nbj7VuzsvBcdQuj8E6g0HDXpaT+ldnh3UsAAAMhv2cLgAAGuXzeT+VSvmpVGrbixtbCfOdIY3P09/6XONMJlN/kbreej5xIpHY9JLIYJngxZOpVKq+/Pr6ev0lj1tfzF0sFje9VDmdTvvz8/P1F7kHzz0O1pvP5+vlMz8/X8+X68uYt2p8X0izdyIE+W71fb8E2xmWYBtSqVR9f7i8CLSZbDbrVD8bWet3N8eDRblc9ufn5+vpB/Unn8/Xn10fjUZDeWl3NBoN9UXz6+vrfiKR2HRMNn5avTS18TgLq90oFot+LBarHxsrKyv19bQ7Jhvbm1b1PIgJ67hrXGdj+9ROs+OwXC5vKsugfYzFYtteOt9sn2+tV+vr69vazODvQTpbj1NLm2zdR8F3je10s/cJDbrt7rXcG/MSi8X8RCKxKR9bt7lxvZZzWvB9q33XbbrBfmzcxlQqVX9/U6ftcK13rRSLxZbtR7lcbnueDMqjWVkEy7rmo7Fsg/N30MY21oHGfPTjeBl23yUoi2AbWr0HKdj2VmXYqn42vi+qcX8H6XX7vrBMJtP0HNX4LivrubKxbejlXWaN54hWedha/xr/bj0vt0prq6BNCPZjt8v1q86OwrEAAHDDYAgAYCQEN0Qab3wEN56Ci/F0Ol2/4dP4CV7y2Ow768Vku8EQ39988RWNRut5y2Qym25Ut3rxpO+/fZOt2UV7uxu1wYVUJBLZdsOkU747aby51JhmcMMsuEnTTdq9ikajody0brzJEAyC9HIzY3193XkQxaV+9xLfq+AifH5+3p+fn/czmYxfLpc33QgKYxAjGGQJBkXCevH8+vr6pgGcdjdeGr8Poz4Hx97WutDYVrQamPH9zcd8s30b3CQJS1iDIYEgra2DisFN5mZlHdSrreVfLBZNgyFbv2/VJlv3UXDDe2sbHqTTrG0fdNvdTbk3LheNRreVR3BDuVl97eac5nKzudtzZZDXSCSy6bhpvDG+tc2y1Lt2GtvLVt81ay+DAYZmrO371nrfuE2NAzZby7Yfx4vvD6/vEmj8QUczqVRq2wu2XV9CH5xXgn0X1LFeXro+Pz/f9PwX1F3LDfHGAcJW6Vo13tDvFNPq2HE9LzcOIjZ7CXqgcTChl+UC/aqzwz4WAACdMRgCABi64MJ96w2P4IKilwtOK5eLkeBitdVFYnBTo9UN0MYLuK0XSo2/ht2q8QZHu4vobgYOGi9Ut/6ytNlNs0E
  1252. "text/plain": [
  1253. "<Figure size 2000x600 with 3 Axes>"
  1254. ]
  1255. },
  1256. "metadata": {},
  1257. "output_type": "display_data"
  1258. }
  1259. ],
  1260. "source": [
  1261. "# plot residual energy against energyloss and try to find a good split (eg energyloss before and after the magnet)\n",
  1262. "# upstream\n",
  1263. "nbins = 60\n",
  1264. "\n",
  1265. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(20, 6))\n",
  1266. "\n",
  1267. "a0 = ax0.hist2d(\n",
  1268. " up_energyloss_found,\n",
  1269. " up_residual_found,\n",
  1270. " bins=(np.linspace(0, 1, nbins), np.linspace(0, 5e4, nbins)),\n",
  1271. " cmap=plt.cm.jet,\n",
  1272. " cmin=1,\n",
  1273. " vmax=20,\n",
  1274. ")\n",
  1275. "ax0.set_ylim(0, 5e4)\n",
  1276. "ax0.set_xlim(0, 1)\n",
  1277. "ax0.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  1278. "ax0.set_ylabel(r\"$E_0-E_\\gamma$\")\n",
  1279. "ax0.set_title(\"found energyloss wrt residual electron energy\")\n",
  1280. "\n",
  1281. "a1 = ax1.hist2d(\n",
  1282. " up_energyloss_lost,\n",
  1283. " up_residual_lost,\n",
  1284. " bins=(np.linspace(0, 1, nbins), np.linspace(0, 5e4, nbins)),\n",
  1285. " cmap=plt.cm.jet,\n",
  1286. " cmin=1,\n",
  1287. " vmax=20,\n",
  1288. ")\n",
  1289. "ax1.set_ylim(0, 5e4)\n",
  1290. "ax1.set_xlim(0, 1)\n",
  1291. "ax1.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  1292. "ax1.set_ylabel(r\"$E_0-E_\\gamma$\")\n",
  1293. "ax1.set_title(\"lost energyloss wrt residual electron energy\")\n",
  1294. "\n",
  1295. "fig.colorbar(a1[3], ax=ax1)\n",
  1296. "fig.suptitle(\n",
  1297. " r\"$e^\\pm$ from $B\\rightarrow K^\\ast ee$, $p>5$GeV, Upstream photons w/ brem_vtx_z$<9500$mm\"\n",
  1298. ")\n",
  1299. "\"\"\"\n",
  1300. "\"\"\"\n",
  1301. "plt.show()"
  1302. ]
  1303. },
  1304. {
  1305. "cell_type": "code",
  1306. "execution_count": 26,
  1307. "metadata": {},
  1308. "outputs": [
  1309. {
  1310. "data": {
  1311. "image/png": "iVBORw0KGgoAAAANSUhEUgAABjQAAAJPCAYAAADbtz2DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACze0lEQVR4nOz9f5gc133fe34KoAjBpoUG6ND6kdCDHskRKSOWuyHZudglr4keK453k2ugB6SlvaYtizO5d5TEkR7NBMoNhyM/8rgn1l5no4ndgyutmX3MS6IbyM0fyr1yN6UV92Fkk+g2vQhJOdY0IG5sx4yEaTKMIYgY1P4BVrNnpn+cb3dVd3XP+/U8/ZCY/tapU6dOVZ2q06eO5/u+LwAAAAAAAAAAgBjbM+wMAAAAAAAAAAAAdEOHBgAAAAAAAAAAiD06NAAAAAAAAAAAQOzRoQEAAAAAAAAAAGKPDg0AAAAAAAAAABB7dGgAAAAAAAAAAIDYo0MDAAAAAAAAAADEHh0aAIChq9Vqqtfrw84GAAAAAAAAYowODQDA0BWLRZXL5WFnAwAAAAAAADFGhwYAAAAAAAAAAIg9OjQAAAAAAAAAAEDs0aEBAAB2pXq9rlqtNuxsAAAAAAAAR3RoAACAXens2bPK5XLDzga6KBaLw84CgDeUy2XNzs7q4MGDHJsjrF6vq1gsanp6WgcPHlS1Wh12lgATzj8AsLvRoQEAGFsrKyuNm/WDBw9qdnZW9Xp92NkKXbVabTxg8jxvyyfY9nQ6rYWFhZHe/oWFBaXT6R3bOD093ZhUvl6va2FhYUdZzM7OSrpZVsGojEOHDimRSDSWY2L64VlZWdmxX4PPE0880XX54CHr5ORkY9831/tyuaxaraZ0Ot3Xg7tisdiyDk5NTWllZaXlMtVqVdPT0zvqrHV0ULFY1NTUVNtyat7m2dlZFYvFkT7eET/FYlH5fF5ra2vUrRir1+uN81I7a2tryufznCcwEAsLC5qamlI6nTa1x3ttGwTXy2CdU1NTTm28XpcDAAyBDwDAgMzMzPjJZHLHJ5FI+IlEouV3uVzOvJ6NjQ0/lUr58/PzjX8nk0lfUk/pjYpCoeBL8iX5qVRqy3fz8/ON7yqVypByGI5EItHYllKp1DImk8n4kvxMJuNvbGw0/l4oFPxEIuHn83m/Uqn4+XzeL5VKfiKRGOu6EXfN+3T7p1N9rVQqfiqVasTOz8/7pVLJX19fb+zf5u/Dqv9B/Wp1rLWTy+VCOQc1H+eJRMLf2NjwNzY2/PX1db9UKvm5XG5Lec7MzGw5BnazoKzQn6BuFQqFga2TfecuONfk8/mOcevr62PTLhg26mdrlUrFTyaT/szMTONvQRs9kUh0rXe9tA2y2eyO74PrZnBfEOZyAIDhoEMDADB0uVwu1AcjMzMzviR/fX19y9/bPfweF8FDjHYPMoIHu4lEYgi5C0+3B8lB502nB8e5XM7PZDJ+KpXige+Q5fN5P5lM+uvr6y0/7TQ/2M9kMh1j8/l8104wi42NjS0PVlzMz8+Hcuw1P4TMZDJt47Z3fPDA8mZHFOXQv2F0aLDv3AXX+m7XtebzGGXbH+pna8EPlrbb2NhodFa0u3b30jYI2v+t2sDBd63OW70uBwAYHl45BQAYO2tra5JuvlKoWSaTGUZ2BubZZ59t/P+pU6d2fH/06FFJN19HMaqvmGh+XdD999+/4/vZ2Vmtra2pUqlofn6+bTrBq6aaXzuFm2ZnZwf6moVcLqdcLqdkMtny00rwGifp5nFdKpXaxkrSzMyMCoWCJIVS9xOJhGZmZhr/bve6qWZra2tblglDp7qbzWZVqVQk3dzm48ePm19zNU6CV49h9LDv3NVqNVWrVWUyGa5tA7Ib6mfz6zxdr6HBa05btb0TiUSjnbqwsNByeWvboFarNdr/ra61watHt6+v1+UAAMNFhwYAYKzs5gd2wQ11Mpls+SCjuWyuXLkykDzNzs6Guk+aHxo03yQH8yPUajVdunRJqVSq7fLBDXkul9P09LSmpqZ0+PBhp4fSu0E+n9fU1JSmp6eVTqcjnXizWCyqVqvpypUrprktgs4MSY2Oim6y2WyonZrNE8ovLy93jC2Xy6rX6zp9+nRo63eRSqWUz+cl3Xwg1Vxuu0mxWOT4HlHsO5vgeA8ewiJa414/a7VaY462Wq2mJ5980rmjLGg7fOADH2j5fXA9CtoB25e1tg2Ca3K763wqlVIikVCtVtvSlux1OQDAcNGhAQAYC2tra40JcQOHDx9uTIrdfMNZLpc1PT3d+EXW7Oxs2wk0V1ZWGpMDTk5OampqqrFcK8ViUdPT041fclWr1cZEvtvz0XyjGKy/11+PV6vVxrLZbLZlzIULFyTd/GVcp1+zh6lWq4X6QLx5Esig0yKYqPn+++9XqVTqerP95JNPan5+XrVaTevr68pkMrp06dLAymQUzM/Pa2NjQ7Ozs1pYWNDk5GTHet+roCNgdna2Mdn29PR0xwcYa2trjYcf2WzW9Cvk4NeerdTr9cbE4p7nKZ1Od3xQlUgkGsdavV7vWM9zuZw5r2GZmZlpbHO1Wm37QMblXFetVhvnK8/zNDk52UhvZWVlx3fNy9fr9ca5cHJysnG+qtfrWltb27K+tbW1LfuhXX0IOmmCz+TkpCYnJ7c8zC0Wi3rooYca/z5+/HjjutDM9bpgrSfBJLNB52k6nW57LA36+hHkLchP8AvsID3Xh3fNy3XaXwHX66rrvrOmK0Vf79qJ4hjaXmZS+3ZAJ7VaTdPT040ynp6ebvuDhCiOl2G2n4LrT/DZnsdisdjYhmBd3epnUJ7N6U5NTTVG0QTrPHjwYE+//g8mzD548GCjDgaf5nX2Ui5B3icnJ3XlyhWtr6+rUCi0/bFIuzSk9iMJm6/F24+1XtoGwXHUKY/BOoOOv36Wk6Krs8M6FgBgpAz7nVcAgPFSKBT8bDbrZ7PZHRMBthPmHBrN75ff/o7dXC7XmBxcb7wrN5PJbJl0MFgmmMgwm802lt/Y2GhMGrh9sulSqbRlouCZmRl/fn6+MTl58A7eYL2FQqFRPvPz8418uU4wvF3z/Bmt5ggI8t3u+6gE2xmWYBuy2Wxjf/Q6P0A+n3eqn82s9buX48GiUqn48/PzjfSD+lMoFBrvUU8mk6FMRJ1MJkOdPH1jY8PPZDJbjsnmT7tJOJuPs7DOG6VSyU+lUo1jY319vbGeTsdk8/mmXT0PYsI67prX2Xx+6qT5/LC9DvZyrmtX/pVKpeN5Jnhnf3C8BuUeLJPL5fxsNtuY26a5brSaD2B73d7Y2NixLc3rbV53c9m4Xhes9ST4rjnvreb4GfT1o1KpbFlfUAapVGrL/tiez0BzXlKplJ/JZLbko93+sta14Pt2+67XdAdV79oJ8xhqtaxrPprLNjhHBOf55jrQnI8ojpdht5+Csgi2od3cRMG2tyvDdvWzeQ6n5v0dpNfrHF65XK7ldbJ5/iTr9br53NDP/GLN16l2edhe/5r/bm0btEtru+CcEOzHXpeLqs7G4VgAgFFBhwYAIBTBA4XmBwfBg5vgZnZmZqbxwKT5E0wa2Oo7681Ypw4N399685JMJht5y+VyWx70tZvI0PfffEjV6qa308PW4EYkkUjseODQLd/dND+caU4zeOAUPOToJe1+JZPJUB48N9+kBx0Z/TwM2NjYcO4Icanf/cT3K7iJnZ+f9+fn5/1cLudXKpUtD1LC6IgIOkqCjo2wJlPf2NjY0gnT6cFF8/dh1Ofg2NteF5rPFe06V3x/6zHfat8GDxnC0kuHRvMD1O0POno51zXXt+2C71rVt+AB53bBg8REIrGlDJsfMm5PL6jb2+tAqVQydWhs/77ddcFaT4Iy3162QTqtynzQ149gme2dwsED+nZpNpfV9vII9lerutFLXXN5YNzr9TrqetdJ2MeQ79uvMdvrffM2NZ8ztpdtFMeL7w+v/RRo7vhtJZvN7pg02nVi9eDaFuy7oI71M5H4/Px8y2twUHctD7WbO/napWvV/FC+W0y7Y8e1bdDcEdhqYu9Ac4dAP8sFoqqzwz4WAGAU0KE
  1312. "text/plain": [
  1313. "<Figure size 2000x600 with 3 Axes>"
  1314. ]
  1315. },
  1316. "metadata": {},
  1317. "output_type": "display_data"
  1318. }
  1319. ],
  1320. "source": [
  1321. "# downstream\n",
  1322. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(20, 6))\n",
  1323. "\n",
  1324. "a0 = ax0.hist2d(\n",
  1325. " down_energyloss_found,\n",
  1326. " down_residual_found,\n",
  1327. " bins=(np.linspace(0, 1, 60), np.linspace(0, 5e4, 60)),\n",
  1328. " cmap=plt.cm.jet,\n",
  1329. " cmin=1,\n",
  1330. " vmax=25,\n",
  1331. ")\n",
  1332. "ax0.set_ylim(0, 5e4)\n",
  1333. "ax0.set_xlim(0, 1)\n",
  1334. "ax0.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  1335. "ax0.set_ylabel(r\"$E_0-E_\\gamma$\")\n",
  1336. "ax0.set_title(\"found energyloss wrt residual electron energy\")\n",
  1337. "\n",
  1338. "a1 = ax1.hist2d(\n",
  1339. " down_energyloss_lost,\n",
  1340. " down_residual_lost,\n",
  1341. " bins=(np.linspace(0, 1, 60), np.linspace(0, 5e4, 60)),\n",
  1342. " cmap=plt.cm.jet,\n",
  1343. " cmin=1,\n",
  1344. " vmax=20,\n",
  1345. ")\n",
  1346. "ax1.set_ylim(0, 5e4)\n",
  1347. "ax1.set_xlim(0, 1)\n",
  1348. "ax1.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  1349. "ax1.set_ylabel(r\"$E_0-E_\\gamma$\")\n",
  1350. "ax1.set_title(\"lost energyloss wrt residual electron energy\")\n",
  1351. "\n",
  1352. "fig.colorbar(a0[3], ax=ax1)\n",
  1353. "fig.suptitle(\n",
  1354. " r\"$e^\\pm$ from $B\\rightarrow K^\\ast ee$, $p>5$GeV, Downstream photons w/ brem_vtx_z$<9500$mm\"\n",
  1355. ")\n",
  1356. "\"\"\"\n",
  1357. "\"\"\"\n",
  1358. "plt.show()"
  1359. ]
  1360. },
  1361. {
  1362. "cell_type": "code",
  1363. "execution_count": null,
  1364. "metadata": {},
  1365. "outputs": [],
  1366. "source": []
  1367. }
  1368. ],
  1369. "metadata": {
  1370. "kernelspec": {
  1371. "display_name": "env1",
  1372. "language": "python",
  1373. "name": "python3"
  1374. },
  1375. "language_info": {
  1376. "codemirror_mode": {
  1377. "name": "ipython",
  1378. "version": 3
  1379. },
  1380. "file_extension": ".py",
  1381. "mimetype": "text/x-python",
  1382. "name": "python",
  1383. "nbconvert_exporter": "python",
  1384. "pygments_lexer": "ipython3",
  1385. "version": "3.10.12"
  1386. }
  1387. },
  1388. "nbformat": 4,
  1389. "nbformat_minor": 2
  1390. }