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.

756 lines
353 KiB

  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. "10522"
  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. "\n",
  42. "#selektiere nur elektronen von B->K*ee und nur solche mit einem momentum von ueber 5 GeV \n",
  43. "allcolumns = file.arrays()\n",
  44. "found = allcolumns[(allcolumns.isElectron) & (~allcolumns.lost) & (allcolumns.fromSignal) & (allcolumns.p > 5e3)] #B: 9056\n",
  45. "lost = allcolumns[(allcolumns.isElectron) & (allcolumns.lost) & (allcolumns.fromSignal) & (allcolumns.p > 5e3)] #B: 1466\n",
  46. "\n",
  47. "ak.num(found, axis=0) + ak.num(lost, axis=0)\n",
  48. "#ak.count(found, axis=None)"
  49. ]
  50. },
  51. {
  52. "cell_type": "code",
  53. "execution_count": 3,
  54. "metadata": {},
  55. "outputs": [
  56. {
  57. "name": "stdout",
  58. "output_type": "stream",
  59. "text": [
  60. "eff all = 0.8606728758791105 +/- 0.003375885792719708\n"
  61. ]
  62. }
  63. ],
  64. "source": [
  65. "def t_eff(found, lost, axis = 0):\n",
  66. " sel = ak.num(found, axis=axis)\n",
  67. " des = ak.num(lost, axis=axis)\n",
  68. " return sel/(sel + des)\n",
  69. "\n",
  70. "def eff_err(found, lost):\n",
  71. " n_f = ak.num(found, axis=0)\n",
  72. " n_all = ak.num(found, axis=0) + ak.num(lost,axis=0)\n",
  73. " return 1/n_all * np.sqrt(np.abs(n_f*(1-n_f/n_all)))\n",
  74. "\n",
  75. "\n",
  76. "print(\"eff all = \", t_eff(found, lost), \"+/-\", eff_err(found, lost))"
  77. ]
  78. },
  79. {
  80. "cell_type": "code",
  81. "execution_count": 4,
  82. "metadata": {},
  83. "outputs": [],
  84. "source": [
  85. "#try excluding all photons that originate from a vtx @ z>9500mm\n",
  86. "#ignore all brem vertices @ z>9500mm \n",
  87. "\n",
  88. "#found\n",
  89. "\n",
  90. "brem_e_f = found[\"brem_photons_pe\"]\n",
  91. "brem_z_f = found[\"brem_vtx_z\"]\n",
  92. "e_f = found[\"energy\"]\n",
  93. "length_f = found[\"brem_vtx_z_length\"]\n",
  94. "\n",
  95. "brem_f = ak.ArrayBuilder()\n",
  96. "\n",
  97. "for itr in range(ak.num(found,axis=0)):\n",
  98. " brem_f.begin_record()\n",
  99. " #[:,\"energy\"] energy\n",
  100. " brem_f.field(\"energy\").append(e_f[itr])\n",
  101. " #[:,\"photon_length\"] number of vertices\n",
  102. " brem_f.field(\"photon_length\").integer(length_f[itr])\n",
  103. " #[:,\"brem_photons_pe\",:] photon energy \n",
  104. " brem_f.field(\"brem_photons_pe\").append(brem_e_f[itr])\n",
  105. " #[:,\"brem_vtx_z\",:] brem vtx z\n",
  106. " brem_f.field(\"brem_vtx_z\").append(brem_z_f[itr])\n",
  107. " brem_f.end_record()\n",
  108. "\n",
  109. "brem_f = ak.Array(brem_f)\n",
  110. "\n",
  111. "#lost\n",
  112. "\n",
  113. "brem_e_l = lost[\"brem_photons_pe\"]\n",
  114. "brem_z_l = lost[\"brem_vtx_z\"]\n",
  115. "e_l = lost[\"energy\"]\n",
  116. "length_l = lost[\"brem_vtx_z_length\"]\n",
  117. "\n",
  118. "brem_l = ak.ArrayBuilder()\n",
  119. "\n",
  120. "for itr in range(ak.num(lost,axis=0)):\n",
  121. " brem_l.begin_record()\n",
  122. " #[:,\"energy\"] energy\n",
  123. " brem_l.field(\"energy\").append(e_l[itr])\n",
  124. " #[:,\"photon_length\"] number of vertices\n",
  125. " brem_l.field(\"photon_length\").integer(length_l[itr])\n",
  126. " #[:,\"brem_photons_pe\",:] photon energy \n",
  127. " brem_l.field(\"brem_photons_pe\").append(brem_e_l[itr])\n",
  128. " #[:,\"brem_vtx_z\",:] brem vtx z\n",
  129. " brem_l.field(\"brem_vtx_z\").append(brem_z_l[itr])\n",
  130. " brem_l.end_record()\n",
  131. "\n",
  132. "brem_l = ak.Array(brem_l)"
  133. ]
  134. },
  135. {
  136. "cell_type": "markdown",
  137. "metadata": {},
  138. "source": [
  139. "### Split in Upstream and Downstream Events and analyse separately"
  140. ]
  141. },
  142. {
  143. "cell_type": "code",
  144. "execution_count": 5,
  145. "metadata": {},
  146. "outputs": [],
  147. "source": [
  148. "#try to find a split between energy lost before and after the magnet (z~5000mm)\n",
  149. "\n",
  150. "upstream_found = ak.ArrayBuilder()\n",
  151. "downstream_found = ak.ArrayBuilder()\n",
  152. "\n",
  153. "for itr in range(ak.num(brem_f, axis=0)):\n",
  154. " upstream_found.begin_record()\n",
  155. " upstream_found.field(\"energy\").real(brem_f[itr,\"energy\"])\n",
  156. " \n",
  157. " downstream_found.begin_record()\n",
  158. " downstream_found.field(\"energy\").real(brem_f[itr,\"energy\"])\n",
  159. " \n",
  160. " upstream_found.field(\"brem_photons_pe\")\n",
  161. " downstream_found.field(\"brem_photons_pe\")\n",
  162. " upstream_found.begin_list()\n",
  163. " downstream_found.begin_list()\n",
  164. " for jentry in range(brem_f[itr, \"photon_length\"]):\n",
  165. " if (brem_f[itr, \"brem_vtx_z\", jentry]>5000):\n",
  166. " if brem_f[itr, \"brem_vtx_z\", jentry]<9500:\n",
  167. " downstream_found.real(brem_f[itr,\"brem_photons_pe\",jentry])\n",
  168. " else:\n",
  169. " continue\n",
  170. " else:\n",
  171. " upstream_found.real(brem_f[itr,\"brem_photons_pe\", jentry]) \n",
  172. " upstream_found.end_list()\n",
  173. " downstream_found.end_list()\n",
  174. " \n",
  175. " upstream_found.field(\"brem_vtx_z\")\n",
  176. " downstream_found.field(\"brem_vtx_z\")\n",
  177. " upstream_found.begin_list()\n",
  178. " downstream_found.begin_list()\n",
  179. " for jentry in range(brem_f[itr, \"photon_length\"]):\n",
  180. " if brem_f[itr, \"brem_vtx_z\", jentry]>5000:\n",
  181. " if brem_f[itr,\"brem_vtx_z\",jentry]<9500:\n",
  182. " downstream_found.real(brem_f[itr,\"brem_vtx_z\",jentry])\n",
  183. " else:\n",
  184. " continue\n",
  185. " else:\n",
  186. " upstream_found.real(brem_f[itr, \"brem_vtx_z\",jentry])\n",
  187. " upstream_found.end_list()\n",
  188. " downstream_found.end_list()\n",
  189. " upstream_found.end_record()\n",
  190. " downstream_found.end_record()\n",
  191. " \n",
  192. "\n",
  193. "upstream_found = ak.Array(upstream_found)\n",
  194. "downstream_found = ak.Array(downstream_found)\n",
  195. "\n",
  196. "\n",
  197. "upstream_lost = ak.ArrayBuilder()\n",
  198. "downstream_lost = ak.ArrayBuilder()\n",
  199. "\n",
  200. "for itr in range(ak.num(brem_l, axis=0)):\n",
  201. " upstream_lost.begin_record()\n",
  202. " upstream_lost.field(\"energy\").real(brem_l[itr,\"energy\"])\n",
  203. " \n",
  204. " downstream_lost.begin_record()\n",
  205. " downstream_lost.field(\"energy\").real(brem_l[itr,\"energy\"])\n",
  206. " \n",
  207. " upstream_lost.field(\"brem_photons_pe\")\n",
  208. " downstream_lost.field(\"brem_photons_pe\")\n",
  209. " upstream_lost.begin_list()\n",
  210. " downstream_lost.begin_list()\n",
  211. " for jentry in range(brem_l[itr, \"photon_length\"]):\n",
  212. " if (brem_l[itr, \"brem_vtx_z\", jentry]>5000):\n",
  213. " if brem_l[itr, \"brem_vtx_z\", jentry]<9500:\n",
  214. " downstream_lost.real(brem_l[itr,\"brem_photons_pe\",jentry])\n",
  215. " else:\n",
  216. " continue\n",
  217. " else:\n",
  218. " upstream_lost.real(brem_l[itr,\"brem_photons_pe\", jentry]) \n",
  219. " upstream_lost.end_list()\n",
  220. " downstream_lost.end_list()\n",
  221. " \n",
  222. " upstream_lost.field(\"brem_vtx_z\")\n",
  223. " downstream_lost.field(\"brem_vtx_z\")\n",
  224. " upstream_lost.begin_list()\n",
  225. " downstream_lost.begin_list()\n",
  226. " for jentry in range(brem_l[itr, \"photon_length\"]):\n",
  227. " if brem_l[itr, \"brem_vtx_z\", jentry]>5000:\n",
  228. " if brem_l[itr,\"brem_vtx_z\",jentry]<9500:\n",
  229. " downstream_lost.real(brem_l[itr,\"brem_vtx_z\",jentry])\n",
  230. " else:\n",
  231. " continue\n",
  232. " else:\n",
  233. " upstream_lost.real(brem_l[itr, \"brem_vtx_z\",jentry])\n",
  234. " upstream_lost.end_list()\n",
  235. " downstream_lost.end_list()\n",
  236. " upstream_lost.end_record()\n",
  237. " downstream_lost.end_record()\n",
  238. " \n",
  239. "\n",
  240. "upstream_lost = ak.Array(upstream_lost)\n",
  241. "downstream_lost = ak.Array(downstream_lost)\n"
  242. ]
  243. },
  244. {
  245. "cell_type": "code",
  246. "execution_count": 15,
  247. "metadata": {},
  248. "outputs": [
  249. {
  250. "data": {
  251. "text/html": [
  252. "<pre>{energy: 4.62e+04,\n",
  253. " brem_photons_pe: [3.26e+03, 4.45e+03, 178, 1.45e+04, 1.1e+03, 3.79e+03],\n",
  254. " brem_vtx_z: [162, 187, 387, 487, 1.34e+03, 2.32e+03]}\n",
  255. "-------------------------------------------------------------------------\n",
  256. "type: {\n",
  257. " energy: float64,\n",
  258. " brem_photons_pe: var * float64,\n",
  259. " brem_vtx_z: var * float64\n",
  260. "}</pre>"
  261. ],
  262. "text/plain": [
  263. "<Record {energy: 4.62e+04, ...} type='{energy: float64, brem_photons_pe: va...'>"
  264. ]
  265. },
  266. "execution_count": 15,
  267. "metadata": {},
  268. "output_type": "execute_result"
  269. }
  270. ],
  271. "source": [
  272. "upstream_found[0]"
  273. ]
  274. },
  275. {
  276. "cell_type": "code",
  277. "execution_count": null,
  278. "metadata": {},
  279. "outputs": [],
  280. "source": []
  281. },
  282. {
  283. "cell_type": "code",
  284. "execution_count": 6,
  285. "metadata": {},
  286. "outputs": [
  287. {
  288. "name": "stdout",
  289. "output_type": "stream",
  290. "text": [
  291. "\n",
  292. "cutoff = 0 MeV, sample size: 880\n",
  293. "eff = 0.9125 +/- 0.0095\n",
  294. "\n",
  295. "cutoff = 100 MeV, sample size: 880\n",
  296. "eff = 0.9125 +/- 0.0095\n",
  297. "\n",
  298. "cutoff = 200 MeV, sample size: 1279\n",
  299. "eff = 0.921 +/- 0.0075\n",
  300. "\n",
  301. "cutoff = 300 MeV, sample size: 1587\n",
  302. "eff = 0.9175 +/- 0.0069\n",
  303. "\n",
  304. "cutoff = 400 MeV, sample size: 1827\n",
  305. "eff = 0.9152 +/- 0.0065\n",
  306. "\n",
  307. "cutoff = 500 MeV, sample size: 2072\n",
  308. "eff = 0.9146 +/- 0.0061\n",
  309. "\n",
  310. "cutoff = 600 MeV, sample size: 2266\n",
  311. "eff = 0.9144 +/- 0.0059\n",
  312. "\n",
  313. "cutoff = 700 MeV, sample size: 2445\n",
  314. "eff = 0.9121 +/- 0.0057\n",
  315. "\n",
  316. "cutoff = 800 MeV, sample size: 2615\n",
  317. "eff = 0.9117 +/- 0.0055\n",
  318. "\n",
  319. "cutoff = 900 MeV, sample size: 2765\n",
  320. "eff = 0.9114 +/- 0.0054\n",
  321. "\n",
  322. "cutoff = 1000 MeV, sample size: 2910\n",
  323. "eff = 0.9096 +/- 0.0053\n",
  324. "\n",
  325. "upstream: cutoff energy = 200MeV, sample size: 1279\n",
  326. "eff = 0.921 +/- 0.008\n"
  327. ]
  328. }
  329. ],
  330. "source": [
  331. "up_efficiencies = ak.ArrayBuilder()\n",
  332. "\n",
  333. "\n",
  334. "\n",
  335. "for cutoff_energy in range(0,1050,100):\n",
  336. "\tup_nobrem_f = upstream_found[ak.all(upstream_found[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  337. "\tup_nobrem_l = upstream_lost[ak.all(upstream_lost[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  338. "\n",
  339. "\n",
  340. "\n",
  341. "\tprint(\"\\ncutoff = \",str(cutoff_energy),\"MeV, sample size: \",ak.num(up_nobrem_f,axis=0)+ak.num(up_nobrem_l,axis=0))\n",
  342. "\tprint(\"eff = \",np.round(t_eff(up_nobrem_f,up_nobrem_l),4), \"+/-\", np.round(eff_err(up_nobrem_f, up_nobrem_l),4))\n",
  343. "\n",
  344. "\"\"\"\n",
  345. "we see that a cutoff energy of xxxMeV is ideal because the efficiency drops significantly for higher values\n",
  346. "\"\"\"\n",
  347. "cutoff_energy = 200.0 #MeV\n",
  348. "\n",
  349. "\"\"\"\n",
  350. "better statistics: cutoff=xxxMeV - sample size: xxx events and efficiency=xxxx\n",
  351. "\"\"\"\n",
  352. "up_nobrem_found = upstream_found[ak.all(upstream_found[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  353. "up_nobrem_lost = upstream_lost[ak.all(upstream_lost[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  354. "\n",
  355. "print(\"\\nupstream: cutoff energy = 200MeV, sample size:\",ak.num(up_nobrem_found,axis=0)+ak.num(up_nobrem_lost,axis=0))\n",
  356. "print(\"eff = \",np.round(t_eff(up_nobrem_found, up_nobrem_lost),4), \"+/-\", np.round(eff_err(up_nobrem_found, up_nobrem_lost),3))\n"
  357. ]
  358. },
  359. {
  360. "cell_type": "code",
  361. "execution_count": 7,
  362. "metadata": {},
  363. "outputs": [
  364. {
  365. "name": "stdout",
  366. "output_type": "stream",
  367. "text": [
  368. "\n",
  369. "cutoff = 0 MeV, sample size: 3971\n",
  370. "eff = 0.893 +/- 0.0049\n",
  371. "\n",
  372. "cutoff = 100 MeV, sample size: 3971\n",
  373. "eff = 0.893 +/- 0.0049\n",
  374. "\n",
  375. "cutoff = 200 MeV, sample size: 4634\n",
  376. "eff = 0.8869 +/- 0.0047\n",
  377. "\n",
  378. "cutoff = 300 MeV, sample size: 5096\n",
  379. "eff = 0.8872 +/- 0.0044\n",
  380. "\n",
  381. "cutoff = 400 MeV, sample size: 5414\n",
  382. "eff = 0.886 +/- 0.0043\n",
  383. "\n",
  384. "cutoff = 500 MeV, sample size: 5654\n",
  385. "eff = 0.885 +/- 0.0042\n",
  386. "\n",
  387. "cutoff = 600 MeV, sample size: 5881\n",
  388. "eff = 0.8845 +/- 0.0042\n",
  389. "\n",
  390. "cutoff = 700 MeV, sample size: 6079\n",
  391. "eff = 0.8842 +/- 0.0041\n",
  392. "\n",
  393. "cutoff = 800 MeV, sample size: 6251\n",
  394. "eff = 0.8831 +/- 0.0041\n",
  395. "\n",
  396. "cutoff = 900 MeV, sample size: 6426\n",
  397. "eff = 0.8828 +/- 0.004\n",
  398. "\n",
  399. "cutoff = 1000 MeV, sample size: 6561\n",
  400. "eff = 0.882 +/- 0.004\n",
  401. "\n",
  402. "downstream: cutoff energy = 200MeV, sample size: 4634\n",
  403. "eff = 0.8869 +/- 0.005\n"
  404. ]
  405. }
  406. ],
  407. "source": [
  408. "down_efficiencies = ak.ArrayBuilder()\n",
  409. "for cutoff_energy in range(0,1050,100):\n",
  410. "\tdown_nobrem_f = downstream_found[ak.all(downstream_found[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  411. "\tdown_nobrem_l = downstream_lost[ak.all(downstream_lost[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  412. "\n",
  413. "\n",
  414. "\n",
  415. "\tprint(\"\\ncutoff = \",str(cutoff_energy),\"MeV, sample size: \",ak.num(down_nobrem_f,axis=0)+ak.num(down_nobrem_l,axis=0))\n",
  416. "\tprint(\"eff = \",np.round(t_eff(down_nobrem_f,down_nobrem_l),4), \"+/-\", np.round(eff_err(down_nobrem_f, down_nobrem_l),4))\n",
  417. "\n",
  418. "\"\"\"\n",
  419. "we see that a cutoff energy of xxxMeV is ideal because the efficiency drops significantly for higher values\n",
  420. "\"\"\"\n",
  421. "cutoff_energy = 200.0 #MeV\n",
  422. "\n",
  423. "\"\"\"\n",
  424. "better statistics: cutoff=xxxMeV - sample size: xxx events and efficiency=xxxx\n",
  425. "\"\"\"\n",
  426. "down_nobrem_found = downstream_found[ak.all(downstream_found[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  427. "down_nobrem_lost = downstream_lost[ak.all(downstream_lost[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  428. "\n",
  429. "print(\"\\ndownstream: cutoff energy = 200MeV, sample size:\",ak.num(down_nobrem_found,axis=0)+ak.num(down_nobrem_lost,axis=0))\n",
  430. "print(\"eff = \",np.round(t_eff(down_nobrem_found, down_nobrem_lost),4), \"+/-\", np.round(eff_err(down_nobrem_found, down_nobrem_lost),3))\n"
  431. ]
  432. },
  433. {
  434. "cell_type": "code",
  435. "execution_count": 8,
  436. "metadata": {},
  437. "outputs": [
  438. {
  439. "name": "stdout",
  440. "output_type": "stream",
  441. "text": [
  442. "upstream eff = 0.852 +/- 0.004\n",
  443. "downstream eff = 0.84 +/- 0.005\n"
  444. ]
  445. }
  446. ],
  447. "source": [
  448. "cutoff_energy=200\n",
  449. "#possibly: instead of checking if any photons exceed the cutoff, use the sum of all photon energies to separate nobrem and brem\n",
  450. "\n",
  451. "upstream_brem_found = upstream_found[ak.any(upstream_found[\"brem_photons_pe\"]>=cutoff_energy,axis=1)]\n",
  452. "up_energy_found = ak.to_numpy(upstream_brem_found[\"energy\"])\n",
  453. "up_eph_found = ak.to_numpy(ak.sum(upstream_brem_found[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  454. "up_residual_found = up_energy_found - up_eph_found\n",
  455. "up_energyloss_found = up_eph_found/up_energy_found\n",
  456. "\n",
  457. "\n",
  458. "upstream_brem_lost = upstream_lost[ak.any(upstream_lost[\"brem_photons_pe\"]>=cutoff_energy,axis=1)]\n",
  459. "up_energy_lost = ak.to_numpy(upstream_brem_lost[\"energy\"])\n",
  460. "up_eph_lost = ak.to_numpy(ak.sum(upstream_brem_lost[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  461. "up_residual_lost = up_energy_lost - up_eph_lost\n",
  462. "up_energyloss_lost = up_eph_lost/up_energy_lost\n",
  463. "\n",
  464. "\n",
  465. "print(\"upstream eff = \", np.round(t_eff(upstream_brem_found,upstream_brem_lost),3), \"+/-\", np.round(eff_err(upstream_brem_found, upstream_brem_lost),3))\n",
  466. "\n",
  467. "\n",
  468. "downstream_brem_found = downstream_found[ak.any(downstream_found[\"brem_photons_pe\"]>=cutoff_energy,axis=1)]\n",
  469. "down_energy_found = ak.to_numpy(downstream_brem_found[\"energy\"])\n",
  470. "down_eph_found = ak.to_numpy(ak.sum(downstream_brem_found[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  471. "down_residual_found = down_energy_found - down_eph_found\n",
  472. "down_energyloss_found = down_eph_found/down_energy_found\n",
  473. "\n",
  474. "\n",
  475. "downstream_brem_lost = downstream_lost[ak.any(downstream_lost[\"brem_photons_pe\"]>=cutoff_energy,axis=1)]\n",
  476. "down_energy_lost = ak.to_numpy(downstream_brem_lost[\"energy\"])\n",
  477. "down_eph_lost = ak.to_numpy(ak.sum(downstream_brem_lost[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  478. "down_residual_lost = down_energy_lost - down_eph_lost\n",
  479. "down_energyloss_lost = down_eph_lost/down_energy_lost\n",
  480. "\n",
  481. "\n",
  482. "print(\"downstream eff = \", np.round(t_eff(downstream_brem_found,downstream_brem_lost),3), \"+/-\", np.round(eff_err(downstream_brem_found, downstream_brem_lost),3))"
  483. ]
  484. },
  485. {
  486. "cell_type": "code",
  487. "execution_count": 9,
  488. "metadata": {},
  489. "outputs": [
  490. {
  491. "name": "stdout",
  492. "output_type": "stream",
  493. "text": [
  494. "upstream:\n",
  495. "mean energyloss relative to initial energy (found): 0.3207102540525612\n",
  496. "mean energyloss relative to initial energy (lost): 0.5602258293743071\n",
  497. "downstream:\n",
  498. "mean energyloss relative to initial energy (found): 0.17552539358035377\n",
  499. "mean energyloss relative to initial energy (lost): 0.2870828762276071\n"
  500. ]
  501. }
  502. ],
  503. "source": [
  504. "print(\"upstream:\\nmean energyloss relative to initial energy (found): \",ak.mean(up_energyloss_found))\n",
  505. "print(\"mean energyloss relative to initial energy (lost): \", ak.mean(up_energyloss_lost))\n",
  506. "\n",
  507. "print(\"downstream:\\nmean energyloss relative to initial energy (found): \",ak.mean(down_energyloss_found))\n",
  508. "print(\"mean energyloss relative to initial energy (lost): \", ak.mean(down_energyloss_lost))"
  509. ]
  510. },
  511. {
  512. "cell_type": "code",
  513. "execution_count": 17,
  514. "metadata": {},
  515. "outputs": [
  516. {
  517. "data": {
  518. "image/png": "iVBORw0KGgoAAAANSUhEUgAABbYAAAJNCAYAAADtbSO1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB4hklEQVR4nOzdZ3hUVff38d+kJxBCDb036ShNikpHELCBCooIWAERsQAWCDbao2IBUURAkaJSROVGUAlSBQFFhVtQUKOA9BB6yn5e+M/cDkkgJ0w7J9/PdeXS2XPKmllDsmbNnn1cxhgjAAAAAAAAAABsIiTQAQAAAAAAAAAAYAWNbQAAAAAAAACArdDYBgAAAAAAAADYCo1tAAAAAAAAAICt0NgGAAAAAAAAANgKjW0AAAAAAAAAgK3Q2AYAAAAAAAAA2AqNbQAAAAAAAACArdDYBgAAAAAAAADYCo1tAACQZ9u2bdMff/wR6DAAAAAAAPkMjW0AAJBnb731lr766qtAhwEAAAAAyGdobAMAAEu+/vpr3XPPPTpw4IB7bPv27brpppv0999/BzAyAAAAAEB+QWMbAIAAWrp0qVwul8dPoUKF1KhRI33wwQd+Ofe7777rMX706FF17txZERERev3117Ps16hRI5UsWVL169fXl19+qddff10dOnTQtddeqxIlSvg0ZjtJTEzMktvMnw0bNmS7z7Zt2zRgwABVrVpV0dHRio6OVvXq1XXffffp22+/tRzDjTfeqOjoaB07dizHbW6//XaFh4cHxYcSM2fOlMvl0m+//ebX8yYkJMjlcunQoUNeO+a6deuUkJBwwefe7tLT0xUfH6+XX345x2188dzagZPzv3HjRnXq1EmxsbEqWLCg2rRpo7Vr12bZzsrvwBMnTmjo0KEqU6aMoqKi1LBhQ82bNy/b81vZFgAAOFtYoAMAACA/27JliyTp448/Vnx8vIwx+uOPPzR69Gj16tVLl112merXr+/Tczdq1Mg9tm3bNt144406efKkvvrqK7Vq1SrLfgUKFNAzzzyjjIwMjR07ViEhIXr//fd12223+SROu3vhhRfUpk0bj7G6detm2e7NN9/U4MGDVbNmTT300EOqU6eOXC6XduzYoblz56pJkyb65ZdfVLVq1Vyfe8CAAVq8eLHmzJmjgQMHZrk/OTlZixYtUteuXVWyZEnrDw45WrduncaMGaO77rpLhQsXDnQ4PvH111/r4MGDuummmwIdStBxav43bdqkq6++Wk2bNtV7770nY4wmTJigdu3aaeXKlWrevHmWfXLzO/Cmm27Spk2bNG7cONWoUUNz5sxRr169lJGRod69e+d5WwAA4Gw0tgEACKAtW7YoLi5O3bt3d481b95caWlpuuOOO7R161afNrajo6N12WWXSZLmzZunAQMGqH79+lqwYIHKlCmT7X4//PCD+vTpo1KlSqlLly4qU6aMnn/+eb333nuaNWuWihcv7pN4/enIkSPKyMjwymOpXr26rrzyygtus3btWg0cOFDXXXedPvroI0VERLjva9u2rQYNGqQPP/xQ0dHRls7duXNnlSlTRu+88062je25c+fq9OnTGjBggKXjApL00UcfqXHjxqpYsaJPjn/q1CnFxMT45NjI2b59+1SgQAEVKlQoy31PP/20ChcurGXLlrlz0759e1WpUkWPPvpotjO3L/Y7cOnSpVqxYoW7QS1Jbdq00e+//67HHntMt956q0JDQy1vCwAAnI+lSAAACKDNmzerYcOGWcb//PNPSVKtWrUsH/Pll1/W4sWLLZ370UcfVa9evXT77bdr1apVOTa1JalIkSJ67rnntGzZMlWuXFktW7bUd999p1tuuUVxcXE57rdmzRp17NhRcXFxKlKkiK677jrt2rUrz9vlVrdu3dS4cWNNmzZNDRo0UHR0tMqXL6/Ro0crIyMj2322bdum0qVLq3Pnznr33XeVkpKS5/PnxgsvvKDQ0FC9+eabHk3tf+vZs2eWvOzatUu9e/dWfHy8IiMjVatWLU2ePNl9f2hoqPr27avNmzfrhx9+yHLMGTNmuB9nXqxZs0bt2rVTbGysYmJi1KJFC3322Wce22QuRfHTTz+pV69eiouLU8mSJdW/f38lJydf8PirV6+Wy+XS3Llzs9z37rvvyuVyadOmTTnun3nurVu36qabblKhQoUUFxenO+64QwcPHsyy/d9//52rGC/2uBMSEvTYY49JkipXruxefiExMdEnz93Bgwd17733qnz58oqMjFSJEiXUsmVLffHFFzk+Nz/99JNcLpc+/PBD99jmzZvlcrlUp04dj227d+/u8c0OSTLGaNGiRbr55ptzPMe/JSUlXTAHmY91y5Yt6tGjh4oUKeLx7YSLvdbPP862bdvUs2dPxcXFqWjRoho2bJjS0tL0888/69prr1VsbKwqVaqkCRMm5Cp+SVq8eLFcLpe+/PLLLPe98cYb7vNeKP9nzpzR5ZdfrmrVqnnkcP/+/SpVqpRat26t9PT0XMWT0zIfeVnO5+jRo5o+fbrat2+vcuXKaffu3dlut3btWrVu3drjA4fY2FhdffXVWrdunfbt22fpvJK0aNEiFSxYUD179vQY79evn/bu3atvvvnG8rbeeB348rUEAAC8xAAAgIA4dOiQkWSGDBliUlNTTWpqqvn777/Nu+++a2JjY83dd9+dp+P27t3bhIeHm0WLFl303Lfeeqtp27atiYyMNNOmTbN8rkGDBpkZM2ZcdLvRo0ebkJAQ079/f/PZZ5+Zjz76yNSrV8+UL1/epKSkWN7OitKlS5sCBQqYWrVqmffee88sX77c3HbbbUZSjo/59OnT5v333zfdunUzERERJioqyvTo0cMsWLDAnDlzJlfnXblypZFk4uPjTWhoqImNjTUdO3Y0q1ev9tguLS3NREdHm+bNm1t6XD/99JOJi4sz9erVM++++65Zvny5eeSRR0xISIhJSEhwb7dr1y7jcrnM0KFDs+wvyYwYMcLSeTMlJiaa8PBw06hRIzN//nyzePFi07FjR+Nyucy8efPc240ePdpIMjVr1jSjRo0yK1asMC+99JKJjIw0/fr18zjmjBkzjCSzZ88e99jll19uWrZsmeX8TZo0MU2aNLlgjJnnrlixonnsscfM559/bl566SVToEABc/nll5tz585ZjjE3jzspKck8+OCDRpJZuHChWb9+vVm/fr1JTk72yXPXqVMnU6JECfPWW2+ZxMREs3jxYjNq1CiPY2WndOnS5t5773XfHjdunImOjjaSzF9//WWMMSY1NdUUKlTIPP744x77rlmzxkgyO3fu9GoOKlasaIYPH25WrFhhFi9ebIzJ/Wv9/Ofs2WefNStWrDCPP/64kWQGDx5sLrvsMvPqq6+aFStWmH79+hlJZsGCBRd8DJlSU1NNfHy8uf3227Pc17RpU3PFFVcYYy6e/507d5rY2Fhz0003GWOMSU9PN23btjXx8fFm7969uYrFGOM+bubPV199ZcqWLWtKlSrlPteFnDx50sybN890797dREREmOjoaHPzzTebDz/80Jw9ezbbfSIiIsydd96ZZbxXr15Gkvn888/dY7n9HXjllVdm+2/5xx9/NJLMm2++aXlbb7wOfPlaAgAA3kFjGwCAAFm+fLmRlOUnLCzMPPfcc3k+blpa2kWb2/8+d1RUlNmwYUOez3cxn3zyiZFkJkyY4DG+c+dOI8nMnj3b0nZW/Pnnn0aSqVKlijl27Jh7/Ny5c6ZUqVKma9euFz3G0aNHzTvvvGM6duxowsLCTFxcnLnrrrvM559/btLS0nLcb8uWLeahhx4yixYtMl9//bV55513TK1atUxoaKhZtmyZe7v9+/cbSea2227Lcoy0tDT3hx6pqakmIyPDfV+nTp1MuXLlsjSwBg8ebKKiosyRI0fcY9dcc40pXry4u4lojDGPPPJIrhqTObnyyitNfHy8xwcOaWlppm7duqZcuXLuWDObQ+fndeDAgSYqKsrjMWXX2M4c27p1q3ts48aNRpKZNWvWBWPMPPfDDz/sMf7+++97vKasxJjbxz1x4sQsj8X
  519. "text/plain": [
  520. "<Figure size 1800x600 with 2 Axes>"
  521. ]
  522. },
  523. "metadata": {},
  524. "output_type": "display_data"
  525. }
  526. ],
  527. "source": [
  528. "#in abhängigkeit von der energie der elektronen\n",
  529. "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(18,6))\n",
  530. "\n",
  531. "\n",
  532. "ax[0].hist(up_energyloss_lost, bins=100, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=\"lost\")\n",
  533. "ax[0].hist(up_energyloss_found, bins=100, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=\"found\")\n",
  534. "ax[0].set_xticks(np.arange(0,1.1,0.1), minor=True,)\n",
  535. "ax[0].set_yticks(np.arange(0,11,1), minor=True)\n",
  536. "ax[0].set_xlabel(r\"$E_\\gamma/E_0$\")\n",
  537. "ax[0].set_ylabel(\"counts (normed)\")\n",
  538. "ax[0].set_title(\"Upstream\")\n",
  539. "ax[0].legend()\n",
  540. "ax[0].grid()\n",
  541. "\n",
  542. "ax[1].hist(down_energyloss_lost, bins=100, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=\"lost\")\n",
  543. "ax[1].hist(down_energyloss_found, bins=100, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=\"found\")\n",
  544. "ax[1].set_xticks(np.arange(0,1.1,0.1), minor=True,)\n",
  545. "ax[1].set_yticks(np.arange(0,11,1), minor=True)\n",
  546. "ax[1].set_xlabel(r\"$E_\\gamma/E_0$\")\n",
  547. "ax[1].set_ylabel(\"counts (normed)\")\n",
  548. "ax[1].set_title(\"Downstream\")\n",
  549. "ax[1].legend()\n",
  550. "ax[1].grid()\n",
  551. "\n",
  552. "\"\"\"\n",
  553. "electrons that lose most of their energy downstream are almost always lost\n",
  554. "\"\"\"\n",
  555. "fig.suptitle(r\"$B\\rightarrow K^\\ast ee$, $p>5$GeV, only photons w/ brem_vtx_z$<9500$mm\")\n",
  556. "plt.show()"
  557. ]
  558. },
  559. {
  560. "cell_type": "code",
  561. "execution_count": 11,
  562. "metadata": {},
  563. "outputs": [
  564. {
  565. "data": {
  566. "image/png": "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cWn5v/nmmyLLVNS+zs8333wjh8Oh999/37lt+/btcjgcqlOnjktst27dXFa3GWO0bNky/elPfyow/UsdPHiwyH1gR5/zVF+SpOXLl8vhcOiTTz7J89rrr7/uzLew/X/+/HndfPPNuv766132YVpamhISEtSyZUtlZ2dbKk9Bt5RyOBz68ccfLddL+v02jW+99Zbatm2ra6+9Vj/88EO+cZ9//rlatmzpMiEVFRWlP/7xj9q0aZOOHDniVr6StGzZMpUpU0a9evVy2T5gwAAdPnxYX3zxxRXFFrcveLIvAQAA+zD5AQAA/Nqvv/6qAwcOqH79+srKylJWVpaOHTumuXPnasyYMXrooYd02223uZ3utm3b1Lt370InQHLzrlKlitq3b6/p06dr1qxZ+sc//lHgl++5rr32WnXp0sVlW+6X7CEhIfm+Z9SoUWrRooUqV66shQsX6s0339TBgwfVpk0bnTlzxu04d2zfvl3/93//p1dffVVPPfWUPvjgAzVv3lwvvfSS3n777Xzf06RJE82ZM0chISEaOHCgKlSooF69emnp0qW6cOGCW/k/+uijCg4OVnR0tDp06KCNGze6vJ6dna1169apUaNGqlixouV09+zZo1tvvVW7d+/W5MmTtWLFCnXu3FlDhgzR6NGjnXEPPPCAHA5Hnrru2bNHX375pfr163dVf3HcvXt3XX/99frnP/+pUaNGafny5erQoYMuXrzojElOTtby5cv14osvatWqVXrzzTfVtm1b/frrr5Kkhx56SI8//rgkaenSpdq8ebM2b96sW265xZlGjx49dP311+v999/XzJkznXW20maHDx9WuXLlNH78eKWmpuq1115TcHCwGjdurL179+apU+/evVW/fn0tWbJEAwcO1Kuvvqonn3xSd911lzp37qxly5apdevWevrpp7V06VJb2yrXn/70J91www1asmSJnnnmGS1YsEBPPvmk8/X169erdevWysjI0FtvvaWFCxcqKipKXbt21eLFiy21q5U03CmTVPS+zk+dOnVUsWJFlwmSNWvWKCIiQnv27NHhw4clSVlZWVq/fr3atm3rjMv9otvq5Ic7+6A4fS6XJ/pSly5dVKFCBb3zzjt5Xps9e7ZuueUWJSUlFbr/w8PD9d577+nYsWN64IEHJEk5OTm69957ZYzRwoULLZ9HctPN/Vu7dq0qVaqkhIQExcXFFfn+3377TYsXL9add96phIQEPf744ypbtqwWL16sm266Kd/3ZGZmKiwsLM/23G35TQ4Xde7evXu3ateureBg15tW5K7W3L179xXF5ipuX/DUeQkAANjEAAAA+LFVq1YZSXn+goODzcsvv3zF6WZlZZm+ffuakJAQs2zZsiLzDg8PN1u2bLni/Iry4YcfGklmwoQJLtv37dtnJJl58+a5FeeOQ4cOGUmmRo0a5uTJk87tmZmZJiEhwXTp0qXINNLT083bb79t2rdvb4KDg01MTIzp37+/+fjjj01WVlaB79uxY4d54oknzLJly8yGDRvM22+/bWrXrm2CgoJMamqqMy4tLc1IMvfcc0+eNLKysszFixedfzk5Oc7XOnToYK699lqTkZHh8p7HHnvMhIeHmxMnTji3tWjRwpQvX95kZmY6tw0fPtxIMvv27SuyDfKTkpJiJJnjx4/n+3q
  567. "text/plain": [
  568. "<Figure size 2000x600 with 3 Axes>"
  569. ]
  570. },
  571. "metadata": {},
  572. "output_type": "display_data"
  573. }
  574. ],
  575. "source": [
  576. "#energyloss in abh von der energie der elektronen\n",
  577. "#upstream\n",
  578. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(20,6))\n",
  579. "\n",
  580. "a0=ax0.hist2d(up_energyloss_found, up_energy_found, bins=(np.linspace(0,1,70), np.linspace(0,1.5e5,70)), cmap=plt.cm.jet, cmin=1, vmax=15)\n",
  581. "ax0.set_ylim(0,1.5e5)\n",
  582. "ax0.set_xlim(0,1)\n",
  583. "ax0.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  584. "ax0.set_ylabel(r\"$E_0$\")\n",
  585. "ax0.set_title(\"found energyloss wrt electron energy\")\n",
  586. "\n",
  587. "a1=ax1.hist2d(up_energyloss_lost, up_energy_lost, bins=(np.linspace(0,1,70), np.linspace(0,1.5e5,70)), cmap=plt.cm.jet, cmin=1, vmax=15)\n",
  588. "ax1.set_ylim(0,1.5e5)\n",
  589. "ax1.set_xlim(0,1)\n",
  590. "ax1.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  591. "ax1.set_ylabel(r\"$E_0$\")\n",
  592. "ax1.set_title(\"lost energyloss wrt electron energy\")\n",
  593. "\n",
  594. "fig.colorbar(a1[3],ax=ax1)\n",
  595. "fig.suptitle(r\"$B\\rightarrow K^\\ast ee$, $p>5$GeV, Upstream photons w/ brem_vtx_z$<9500$mm\")\n",
  596. "\n",
  597. "\n",
  598. "plt.show()"
  599. ]
  600. },
  601. {
  602. "cell_type": "code",
  603. "execution_count": 12,
  604. "metadata": {},
  605. "outputs": [
  606. {
  607. "data": {
  608. "image/png": "iVBORw0KGgoAAAANSUhEUgAABk0AAAJOCAYAAAAat0B0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAADOuklEQVR4nOzdd3hUVf7H8c+kTUJIhgCSEDqIFGkK0tfQixQVAQUNRUVWRETAgooBV0DpK4i4rgLSdSmisAgBBKlSRERcwBUFhQBqSACBkOT8/uCXWYa0O2HCpLxfzzMPzL3fe8q9d+6cmzPnHpsxxggAAAAAAAAAAKCQ8/F2AQAAAAAAAAAAAPICOk0AAAAAAAAAAABEpwkAAAAAAAAAAIAkOk0AAAAAAAAAAAAk0WkCAAAAAAAAAAAgiU4TAAAAAAAAAAAASXSaAAAAAAAAAAAASKLTBAAAAAAAAAAAQBKdJgAAAAAAAAAAAJLoNAEAALjp9u/fr2PHjnm7GAAAAAAA4Dp0mgAAANxk//jHP7RhwwZvFwMAAAAAAFyHThMAAICbYPPmzRowYIBOnz7tXHbw4EF169ZNp06d8mLJAAAAAABAGjpNAABAvrN69WrZbDaXV2hoqOrXr6+PPvropuT94YcfuiyPj49Xx44dFRAQoBkzZqTbrn79+goPD1edOnW0fv16zZgxQ23btlWHDh10yy235GqZ85Mvvvgi3bFNe+3YsSPDbfbv36/HHntMVapUUVBQkIKCglS1alUNHDhQu3fvdrsM999/v4KCgnT27NlMYx5++GH5+/u73eE1Z84clzoFBgYqIiJCLVu21Pjx41061fKjbdu2afTo0Vnuu8Jg9OjRstls+u233zyWZmHYtykpKSpVqpSmTp2aaUxu7Nv8oCAf/6+++krt27dXSEiIihYtqpYtW2rr1q0uMe5+N5w/f15Dhw5VZGSkAgMDVa9ePS1evDjHcQAAoHDx83YBAAAA3LV3715J0ieffKJSpUrJGKNjx44pJiZGvXr1UvXq1VWnTp1czbt+/frOZfv379f999+vCxcuaMOGDWrevHm67YKDg/Xaa68pNTVV48ePl4+PjxYsWKCHHnooV8qZ340bN04tW7Z0WVarVq10ce+++64GDx6satWq6ZlnntHtt98um82m77//XosWLdJdd92lH374QVWqVLGc92OPPaYVK1Zo4cKFGjRoULr1CQkJWr58uTp37qzw8HD3Kydp9uzZql69uq5cuaLTp09ry5YtevPNNzVp0iQtWbJEbdq0yVG63rZt2zaNGTNG/fr1U7FixbxdnAKlMOzbzZs368yZM+rWrZu3i5LnFNTjv2vXLt19991q2LCh5s2bJ2OMJkyYoNatW2vjxo1q0qSJS7zV74Zu3bpp165deuONN3Tbbbdp4cKF6tWrl1JTU9W7d2+34wAAQOFCpwkAAMh39u7dK4fDoa5duzqXNWnSRMnJyXrkkUf09ddf52qnSVBQkKpXry5JWrx4sR577DHVqVNHS5cuVWRkZIbbffvtt4qOjlZERITuueceRUZGauzYsZo3b57mzp2rkiVL5kp5b6Y//vhDqampHqlL1apV1bhx4yxjtm7dqkGDBqlTp07617/+pYCAAOe6Vq1a6amnntLHH3+soKAgt/Lu2LGjIiMj9cEHH2TYabJo0SJdvHhRjz32mFvpXqtWrVpq0KCB8/0DDzygZ599Vs2bN1e3bt105MiRHHfI5Cd//vmnihQp4u1iII/417/+pQYNGqhChQq5kj7n28138uRJBQcHKzQ0NMP1o0aNUrFixbRmzRrnsWnTpo0qV66sESNGpBtxYuW7YfXq1Vq3bp2zA0SSWrZsqZ9//lnPPfecHnzwQfn6+lqOAwAAhQ+P5wIAAPnOnj17VK9evXTLf/nlF0lSjRo13E5z6tSpWrFihVt5jxgxQr169dLDDz+sTZs2ZdphIklhYWF6/fXXtWbNGlWqVEnNmjXTvn371LNnTzkcjky327Jli9q1ayeHw6GwsDB16tRJR44cyXGcVV26dFGDBg303nvvqW7dugoKClK5cuUUExOj1NTUDLfZv3+/SpcurY4dO+rDDz/UuXPncpy/FePGjZOvr6/effddlw6Ta/Xo0SPdcTly5Ih69+6tUqVKyW63q0aNGnr77bed6319fdW3b1/t2bNH3377bbo0Z8+e7aynJ5UvX16TJ0/WuXPn9O6777qs27Jli1q3bq2QkBAVKVJETZs21apVq5zrv/vuO9lsNn388cfOZXv27JHNZtPtt9/uklbXrl1dRkqlPe7ou+++U69eveRwOBQeHq5HH31UCQkJzrgzZ87oiSeeULly5WS323XLLbeoWbNmio2Ndabz3HPPSZIqVarkfHTOF1984ZLP3r171b17d4WFhTlHAGV3TNL88MMP6t+/v6pWraoiRYqoTJky6tKlS7rjlJbX/v371aNHDzkcDhUvXlzDhg1TcnKyDh06pA4dOigkJEQVK1bUhAkTsj0+aWl+/fXX6tatm0JDQ+VwOPTII4/ozJkzGW5z6tSpLPdpmuyOb3b7Nrvtr6/DjR7rjNzIOShJxhgtX75cDzzwQKZ5XOv48eNZHoeszjfJ2jmXG+fRtVasWCGbzab169enW/fOO+84887s+K9Zs0Z33HGHbr31VpfjFxcXp4iICLVo0UIpKSmWypLZo69sNpt++uknt+oVHx+v999/X23atFHZsmX1448/Zhq7detWtWjRwqUzKyQkRHfffbe2bdumkydPupW3JC1fvlxFixZVjx49XJb3799fJ06c0M6dO92Kk278XMjtcwkAAHgWnSYAACBf+f3333Xs2DHVrVtXycnJSk5O1unTpzVv3jyNHTtWjz/+uBo2bOh2urt371bPnj2z7DhJy7t8+fJq166dZsyYoffee0//+Mc/Mv2jfZqyZcuqc+fOLsvS/jjv7++f4TajR49WVFSUypUrp0WLFumf//ynjh8/rtatW+v8+fNux7ljz549+s9//qOpU6fqueee08qVK9W8eXO99tpr+uCDDzLcpnHjxpo7d678/f01YMAAlSpVSj169NCyZct0+fJlt/J/6qmn5Ofnp9DQULVv315btmxxWZ+SkqKNGzeqQYMGKl26tOV0Dx48qLvuuksHDhzQ5MmT9dlnn6lTp04aMmSIxowZ44x79NFHZbPZ0tX14MGD+uqrr9S3b99c+QXyPffcI19fX23evNm5bNOmTWrVqpUSEhL0/vvva9GiRQoJCVGXLl20ZMkSSdLtt9+u0qVLu/xROzY2VkFBQTp48KBOnDghSUpOTtamTZsyfPzXAw88oNtuu01Lly7Viy++qIULF+rZZ591ro+OjtaKFSv06quvau3atfrnP/+pNm3a6Pfff5ckPf7443r66aclScuWLdP27du1fft23XnnnS75dOvWTbfeeqs+/vhjzZo1y/IxkaQTJ06oRIkSeuONN7RmzRq9/fbb8vPzU6NGjXTo0KF0derZs6fq1q2rpUuXasCAAZo6daqeffZZ3XffferUqZOWL1+uVq1a6YUXXtCyZcssHaP7779ft956q/71r39p9OjRWrFihdq3b68rV664vU8la8c3q31rZXt3y5Xdsc7IjZ6DaX8gt9ppYvU4XH++SdavA2ly4zySpM6dO6tUqVKaPXt2unVz5szRnXfeqTp16mR6/Js2baqPPvpIp0+f1qOPPipJSk1N1cMPPyxjjBYtWmT5OpWWZtprw4YNKlOmjCIiIlS8ePFst//zzz+1ZMkS3XvvvYqIiNDTTz+tYsWKacmSJapZs2am2yUlJclut6dbnrbs+g7R7L4bJOnAgQOqUaOG/PxcH6yRNgL1wIEDbsVd60bPhdw6lwAAgIcZAACAfGTt2rVGUrqXn5+fef3113OcbnJysundu7fx9/c3y5cvzzbvwMBAs2PHjhznl51PP/3USDITJkxwWX748GEjycyfP9+tOHf88ssvRpKpXLmyOXv2rHN5UlKSiYiIMJ07d842jfj4ePPBBx+Ydu3aGT8/P+NwOEy/fv3M559/bpKTkzPdbu/
  609. "text/plain": [
  610. "<Figure size 2000x600 with 3 Axes>"
  611. ]
  612. },
  613. "metadata": {},
  614. "output_type": "display_data"
  615. }
  616. ],
  617. "source": [
  618. "#downstream\n",
  619. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(20,6))\n",
  620. "\n",
  621. "a0=ax0.hist2d(down_energyloss_found, down_energy_found, bins=(np.linspace(0,1,70), np.linspace(0,1.5e5,70)), cmap=plt.cm.jet, cmin=1, vmax=20)\n",
  622. "ax0.set_ylim(0,1.5e5)\n",
  623. "ax0.set_xlim(0,1)\n",
  624. "ax0.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  625. "ax0.set_ylabel(r\"$E_0$\")\n",
  626. "ax0.set_title(\"found energyloss wrt electron energy\")\n",
  627. "\n",
  628. "a1=ax1.hist2d(down_energyloss_lost, down_energy_lost, bins=(np.linspace(0,1,70), np.linspace(0,1.5e5,70)), cmap=plt.cm.jet, cmin=1, vmax=20)\n",
  629. "ax1.set_ylim(0,1.5e5)\n",
  630. "ax1.set_xlim(0,1)\n",
  631. "ax1.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  632. "ax1.set_ylabel(r\"$E_0$\")\n",
  633. "ax1.set_title(\"lost energyloss wrt electron energy\")\n",
  634. "\n",
  635. "fig.colorbar(a1[3],ax=ax1)\n",
  636. "fig.suptitle(r\"$B\\rightarrow K^\\ast ee$, $p>5$GeV, Downstream photons w/ brem_vtx_z$<9500$mm\")\n",
  637. "\n",
  638. "\n",
  639. "plt.show()"
  640. ]
  641. },
  642. {
  643. "cell_type": "code",
  644. "execution_count": 13,
  645. "metadata": {},
  646. "outputs": [
  647. {
  648. "data": {
  649. "image/png": "iVBORw0KGgoAAAANSUhEUgAABk4AAAJOCAYAAADxgPt3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAADfLElEQVR4nOzdd3gU1f7H8c+mbUJIltASQgfpXTqoAenSLBRBQxW5AiICFlSqCioIKNiuVw3SVXoRIVTpXQS9AlcQFAKoEIoEUs7vD8n+XFJ2Qzb9/XqefWBnvnPmzJnZyZw9e86xGGOMAAAAAAAAAAAAII+szgAAAAAAAAAAAEB2QcMJAAAAAAAAAADALTScAAAAAAAAAAAA3ELDCQAAAAAAAAAAwC00nAAAAAAAAAAAANxCwwkAAAAAAAAAAMAtNJwAAAAAAAAAAADcQsMJAAAAAAAAAADALTScAAAAAAAAAAAA3ELDCQAAAAAAAAAAwC00nAAAgGylT58+ioiIyOpswEWHDh3SqVOnsjobAAAAAAC4DQ0nAAAAuGP//ve/tWHDhqzOBgAAAAAAbkPDCQAAyFUWLlyoatWqyc/PTxaLRQcPHszqLKVq9erVslgsDq/AwEDVrVtXX3zxRabt//PPP3dYfvHiRbVr104+Pj6aOXOmw7otW7ZowIABOn/+vH3ZDz/8oIcffljnzp3L8DznJJs2bUpyfhNfO3fuTBJ/6NAh9e/fX+XLl5efn5/8/PxUoUIFDRw4UHv37r2jPDz00EPy8/PTpUuXUox57LHH5O3tnebzN27cOFksFv3+++/Jrq9evbqaNWuWpjRdtX37do0bNy7V48oLnJ2DO5EXyjY+Pl5FixbVtGnTUozJiLLNCXLz+d+9e7fatGmjgIAA5c+fX82bN9e2bdscYtJ637569aqGDRum0NBQ+fr6qnbt2lqwYEGy+09LLAAAyFo0nAAAgCzXoUMHFShQQAUKFNC8efM0aNAg+/s33njD5XQuXLig8PBwlS9fXmvWrNGOHTtUsWLFDMx5+u3fv1+StGzZMu3YsUPbt2/Xxx9/rGvXrqlHjx46dOhQpuy/bt269mWHDh1SvXr1dODAAW3YsEFDhgxx2KZu3boKDg5WzZo1tX79es2cOVOtWrVS27ZtVaRIkQzNb041ceJE7dixw+FVvXp1h5iPPvpIdevW1a5du/TMM89o5cqVWrVqlYYNG6YjR46ofv36+t///pfmfffv318xMTGaN29esuujo6O1ZMkSdejQQcHBwXd0fFlh+/btGj9+fK78cjer5YWy3bJliy5cuKCHH344q7OS7eTW879nzx7dd999un79umbPnq3Zs2crJiZGLVq00I4dO5LEu3LflqSHH35Ys2bN0tixY/X111+rfv366tGjR7L33LTEAgCArOWV1RkAAABYuXKl/f99+vRRs2bN1KdPnzSnc/ToUcXGxurxxx9XWFhYinF//fWX8uXLdydZdbv9+/fLZrOpU6dO9mWNGzdWXFycHn/8cR04cEA1a9bM0P37+fmpcuXKkqQFCxaof//+qlmzphYtWqTQ0NAk2/j7+2vChAlKSEjQpEmT5OHhoblz5+rRRx/NsHxmhT///FMJCQkqXLhwutOqUKGCGjVqlOL6bdu2adCgQWrfvr2++uor+fj42Nfdf//9Gjx4sL788kv5+fmled/t2rVTaGioPv30Uw0aNCjJ+vnz5+v69evq379/mtPOSbLT5x5Z76uvvlK9evVUunTpDEmf6y1rnD17Vv7+/goMDEyybvTo0SpQoIDWrFljPzctW7ZUuXLlNHLkyCQ9T5zdt6W/e22uW7dO8+bNU48ePSRJzZs31y+//KLnnntO3bt3l6enZ5pjAQBA1qPHCQAAyBBbt25V69atZbPZFBQUpPbt2+vYsWMZtr8+ffronnvukSR1795dFotFzZo1sw+1sn//fnXp0kVBQUEqX768Qz5btGihgIAA5cuXT02aNNGqVasc0k5M49ChQ+ratatsNpsKFiyo4cOHKy4uTj/99JPatm2rgIAAlSlTRm+99ZbL+d63b59q166dZPmvv/4qSapSpcodlIY0bdo0LV26NE37HzlypHr06KHHHntMmzdvTrbRRJK+//573X333dq/f78eeOAB9evXT6+//rrat2/vdEgbV68Ld18/HTt2VL169fTxxx+rVq1a8vPzU8mSJTV27FglJCQku82hQ4dUrFgxtWvXTp9//rmuXLlyx/t3ZuLEifL09NRHH33k0GjyT127dk1yTo4dO6aePXuqaNGislqtqlKlit577z2HGE9PT/Xu3Vv79u3T999/nyTdzz77zH6cGS3xs3TgwAE9/PDDCgwMlM1m0+OPP64LFy7Y4y5cuKAnn3xSJUuWlNVqVZEiRdS0aVNFRkba03nuueckSWXLlrUPo7Np0yaH/aT0uXel3I4fP66+ffuqQoUKypcvn4oXL66OHTsmKcOMuj+4WlaJzp07px49eshmsyk4OFj9+vVTdHR0kjhn9zxnZevKPfOf+T9y5Eiq+XJ2rpNz5MgRWSwWffnll/Zl+/btk8ViUbVq1RxiO3Xq5NCjTpKMMVqyZIkeeeSRFPfxT6dPn071HLjjesvIvzOStHTpUlksFq1fvz7Jug8++MC+75TO/5o1a1SnTh3dddddDucvKipKISEhatasmeLj413OT0pDYVksFp08eTJNx3bx4kV98sknatmypUqUKKGff/452bht27apWbNmDg1aAQEBuu+++7R9+3adPXs2TfuVpCVLlih//vzq2rWrw/K+ffvqzJkz2rVrV5pj03stZPS1BABAnmEAAADcbOzYscbDw8P069fPrFq1ynz11VemRo0apmTJkubKlSsZss/jx4+b9957z0gyEydONDt27DBHjhwxY8eONZJM6dKlzQsvvGDWrVtnli5daowxZtOmTcbb29vUrVvXLFy40CxdutS0bt3aWCwWs2DBAofjkWQqVapkXn31VbNu3Trz/PPPG0lmyJAhpnLlyubdd98169atM3379jWSzKJFi5zm+ffffzeSzNChQ01sbKyJjY01586dM59//rkJCAgwTzzxxB2XR8+ePY23t7dZsmSJ0/13797d3H///cZqtZqPP/7YadqnT582K1asMMYYM3jwYPPZZ5+ZuLg4ExERYW7evJnidq5eFxlx/RQrVsz4+/ubKlWqmNmzZ5u1a9eaRx991EhK8ZivX79u5s6dazp27Gh8fHyMr6+v6dKli1m0aJGJiYlxab8bN240kkzRokWNp6enCQgIMK1btzbffvutPSYuLs74+fmZxo0bp+mYjhw5Ymw2m6lRo4b5/PPPzdq1a82IESOMh4eHGTdunEPssWPHjMViMcOGDUuShiTz4osvpmnfiRI/GxcuXEh2fbVq1UxYWFiS+NKlS5vnnnvOfPPNN2bq1KnG39/f1KlTx379tGnTxhQpUsT8+9//Nps2bTJLly41Y8aMsX8uT58+bZ5++mkjySxevNjs2LHD7Nixw0RHRyfZz+2fe1fLbfPmzWbEiBHmq6++Mps3bzZLliwxDz74oPHz8zP//e9/kxyTu+8PrpbVP/c/ZswYs27dOjN16lRjtVpN3759HdJ05Z6XWtm6es9MS76cneuUFCtWzDz55JP292+88Ybx8/Mzksxvv/1mjDEmNjbWBAYGmueff95h261btxpJ5ujRo249B+m53jLqOkoUGxtrihYtah577LEk6xo0aGDuvvtuY0zq5//o0aMmICDAPPzww8YYY+Lj4839999vihYtas6cOeNyXowx9nQTXxs2bDDFixc3ISEh9s9xaq5du2YWLFhgOnXqZHx8fIyfn5955JFHzJdffmlu3LiR7DY+Pj6mV69eSZb36NHDSDLffPONMca1+3aiRo0amfr16ydZfvjwYSPJfPTRR2mOTe+1kNHXEgAAeQUNJwAAwK1WrFhhJJm33nrLYfnRo0eNJDNnzpwk27Rt29b4+/sn+3r99ddd3nfilx1ffvmlfVniFwhjxoxJEt+oUSNTtGhRhy/j4+LiTPXq1U2JEiVMQkK
  650. "text/plain": [
  651. "<Figure size 2000x600 with 3 Axes>"
  652. ]
  653. },
  654. "metadata": {},
  655. "output_type": "display_data"
  656. }
  657. ],
  658. "source": [
  659. "#plot residual energy against energyloss and try to find a good split (eg energyloss before and after the magnet)\n",
  660. "#upstream\n",
  661. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(20,6))\n",
  662. "\n",
  663. "a0=ax0.hist2d(up_energyloss_found, up_residual_found, bins=(np.linspace(0,1,80), np.linspace(0,1.5e5,80)), cmap=plt.cm.jet, cmin=1, vmax=20)\n",
  664. "ax0.set_ylim(0,1.5e5)\n",
  665. "ax0.set_xlim(0,1)\n",
  666. "ax0.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  667. "ax0.set_ylabel(r\"$E_0-E_\\gamma$\")\n",
  668. "ax0.set_title(\"found energyloss wrt residual electron energy\")\n",
  669. "\n",
  670. "a1=ax1.hist2d(up_energyloss_lost, up_residual_lost, bins=(np.linspace(0,1,80), np.linspace(0,1.5e5,80)), cmap=plt.cm.jet, cmin=1, vmax=20) \n",
  671. "ax1.set_ylim(0,1.5e5)\n",
  672. "ax1.set_xlim(0,1)\n",
  673. "ax1.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  674. "ax1.set_ylabel(r\"$E_0-E_\\gamma$\")\n",
  675. "ax1.set_title(\"lost energyloss wrt residual electron energy\")\n",
  676. "\n",
  677. "fig.colorbar(a1[3],ax=ax1)\n",
  678. "fig.suptitle(r\"$e^\\pm$ from $B\\rightarrow K^\\ast ee$, $p>5$GeV, Upstream photons w/ brem_vtx_z$<9500$mm\")\n",
  679. "\n",
  680. "\"\"\"\n",
  681. "\"\"\"\n",
  682. "plt.show()"
  683. ]
  684. },
  685. {
  686. "cell_type": "code",
  687. "execution_count": 14,
  688. "metadata": {},
  689. "outputs": [
  690. {
  691. "data": {
  692. "image/png": "iVBORw0KGgoAAAANSUhEUgAABk4AAAJOCAYAAADxgPt3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAADYBklEQVR4nOzdd3hUxf7H8c+mh5AsoSWGDtK7dFAD0iWAhSJoqCJXQETAgkpVQQQFBdvPewVFEFR6lSpIlSqCBbiCgBBAhASQQBLm9wdkL0uS3U2y6e/X8+wDe873zJlTcnZmZ2fGYowxAgAAAAAAAAAAgDyyOgMAAAAAAAAAAADZBQ0nAAAAAAAAAAAAt9BwAgAAAAAAAAAAcAsNJwAAAAAAAAAAALfQcAIAAAAAAAAAAHALDScAAAAAAAAAAAC30HACAAAAAAAAAABwCw0nAAAAAAAAAAAAt9BwAgAAAAAAAAAAcAsNJwAAAAAAAAAAALfQcAIAADJUr169NHPmzKzOBly0f/9+HT9+PKuzAQAAAABAlqHhBAAAADb/93//p/Xr12d1NgAAAAAAyDI0nAAAgGxt3rx5qlq1qvz9/WWxWLRv376szpJDK1askMVisXsFBQWpTp06+uqrrzJt/59//rnd8gsXLqht27by8fHR9OnT7dZt2rRJ/fr109mzZ23Lfv75Zz3yyCM6c+ZMhuc5J/nuu++SXN/E1/bt25PE79+/X3379lW5cuXk7+8vf39/lS9fXv3799euXbvSlIeHH35Y/v7+unjxYooxjz/+uLy9vVN9/WbOnGl3TH5+fgoNDVWzZs00YcIEu3skJ9q6davGjBnj8NzlBWPGjJHFYtFff/3llvTywnlNSEhQ0aJFNWXKlBRj3H1ec4rcfP1/+OEHtW7dWoGBgcqfP7+aNWumLVu2JIlLzWfD5cuXNWTIEIWFhcnPz0+1atXS3Llzk91/amIBAIB70XACAADcLiIiQgUKFFCBAgU0Z84cDRgwwPb+zTffdDmdc+fOKTIyUuXKldOqVau0bds2VahQIQNznn579uyRJC1evFjbtm3T1q1b9cknn+jKlSvq1q2b9u/fnyn7r1Onjm3Z/v37VbduXe3du1fr16/XoEGD7LapU6eOQkJCVKNGDa1bt07Tp09Xy5Yt1aZNGxUpUiRD85tTjR8/Xtu2bbN7VatWzS7m448/Vp06dbRjxw49++yzWrZsmZYvX64hQ4bo4MGDqlevnv773/+met99+/ZVbGys5syZk+z66OhoLVy4UBEREQoJCUnT8c2YMUPbtm3TmjVr9P7776tWrVqaOHGiKleurLVr16Ypzexg69atGjt2bK78gjcr5YXzumnTJp07d06PPPJIVmcl28mt13/nzp26//77dfXqVc2aNUuzZs1SbGysmjdvrm3btiW7jSufDY888og+++wzjR49WitXrlS9evXUrVu3ZJ/pqYkFAADu5ZXVGQAAALnPsmXLbP/v1auXmjZtql69eqU6nUOHDikuLk5PPPGEwsPDU4z7559/lC9fvrRk1e327Nkjq9WqDh062JY1atRI8fHxeuKJJ7R3717VqFEjQ/fv7++vSpUqSZLmzp2rvn37qkaNGpo/f77CwsKSbBMQEKBx48bpxo0bmjBhgjw8PDR79mw99thjGZbPrPD333/rxo0bKly4cLrTKl++vBo2bJji+i1btmjAgAFq166dvvnmG/n4+NjWPfDAAxo4cKC+/vpr+fv7p3rfbdu2VVhYmD799FMNGDAgyfovv/xSV69eVd++fVOddqJq1aqpbt26tvePPvqonnvuOd1777165JFHdPjw4TQ3yuQU2em5gqz3zTffqG7duipVqlSG7YN7LvOdPn1aAQEBCgoKSrJu5MiRKlCggFatWmW7Li1atFDZsmU1fPjwZHueOPtsWLFihdasWaM5c+aoW7dukqRmzZrpjz/+0PPPP6+uXbvK09Mz1bEAAMD96HECAABcsnnzZrVq1UpWq1XBwcFq166dDh8+nGH769Wrl+69915JUteuXWWxWNS0aVPbUCh79uxRp06dFBwcrHLlytnls3nz5goMDFS+fPnUuHFjLV++3C7txDT279+vzp07y2q1qmDBgho6dKji4+P122+/qU2bNgoMDFTp0qX11ltvuZzv3bt3q1atWkmWnzx5UpJUuXLlNJwNacqUKVq0aFGq9j98+HB169ZNjz/+uDZu3Jhso4kk/fTTT7rnnnu0Z88ePfjgg+rTp4/eeOMNtWvXzumQM67eF+6+f9q3b6+6devqk08+Uc2aNeXv768SJUpo9OjRunHjRrLb7N+/X3fddZfatm2rzz//XJcuXUrz/p0ZP368PD099fHHH9s1mtyuc+fOSa7J4cOH1b17dxUtWlS+vr6qXLmy3n//fbsYT09P9ezZU7t379ZPP/2UJN0ZM2bYjtOdSpYsqbfffluXLl3Sxx9/bFvuyt/cwYMHZbFY9PXXX9uW7d69WxaLRVWrVrWL7dChg63HVOLf6sGDB9WtWzdZrVaFhISoT58+io6Ottvu3Llzeuqpp1SiRAn5+vqqSJEiatKkia2HzJgxY/T8889LksqUKWMbRue7775z+lxx5bocOXJEvXv3Vvny5ZUvXz4VK1ZM7du3T3KNMur5k5ju3r179cgjjygoKEhWq1VPPPGEzp07l+w2Z86ccXpenV1fR+fV1TRuz787rnVy0noPSpIxRgsXLtSjjz6aYvq3O3HihNNr4I57LiM/yxYtWiSLxaJ169YlWffhhx/a9uvo+sfGxqp27dq6++677a5hVFSUQkND1bRpUyUkJLiUn5SGwbJYLDp27JjLxyXdHLryP//5j1q0aKHixYvr999/TzZuy5Ytatq0qV1jVmBgoO6//35t3bpVp0+fTtV+JWnhwoXKnz+/OnfubLe8d+/eOnXqlHbs2JGm2PTeCxl5LwEAkGMZAAAAJ0aPHm08PDxMnz59zPLly80333xjqlevbkqUKGEuXbqUIfs8cuSIef/9940kM378eLNt2zZz8OBBM3r0aCPJlCpVyrz44otmzZo1ZtGiRcYYY7777jvj7e1t6tSpY+bNm2cWLVpkWrVqZSwWi5k7d67d8UgyFStWNK+99ppZs2aNeeGFF4wkM2jQIFOpUiXz3nvvmTVr1pjevXsbSWb+/PlO8/zXX38ZSWbw4MEmLi7OxMXFmTNnzpjPP//cBAYGmieffDLN56N79+7G29vbLFy40On+u3btah544AHj6+trPvnkE6dpnzhxwixdutQYY8zAgQPNjBkzTHx8vJk5c6a5fv16itu5el9kxP1z1113mYCAAFO5cmUza9Yss3r1avPYY48ZSSke89WrV83s2bNN+/btjY+Pj/Hz8zOdOnUy8+fPN7GxsS7td8OGDUaSKVq0qPH09DSBgYGmVatW5vvvv7fFxMfHG39/f9OoUaNUHdPBgweN1Wo11atXN59//rlZvXq1GTZsmPHw8DBjxoyxiz18+LCxWCxmyJAhSdKQZF566aVU7TvRjBkzjCSzc+fOZNdfvnzZeHp6mubNmxtjXP+bM+bmNXvqqads7998803j7+9vJJk///zTGGNMXFycCQoKMi+88IIxxv5vddSoUWbNmjXmnXfeMb6+vqZ379526bdu3doUKVLE/N///Z/57rvvzKJFi8yoUaNs+Thx4oR55plnjCSzYMECs23bNrNt2zYTHR3t8Lni6nXZuHGjGTZsmPnmm2/Mxo0bzcKFC81DDz1k/P39za+//mqLy6jnz+3H8Pzzz5tvv/3WvPPOOyYgIMDUrl3b7m/Z1fPqyvV1dF5Tc4+481qnJC33oDHGbN682Ugyhw4dcvs1SM89l1H3UuJ5KFq0qHn88ceTrKtfv7655557jDHOr/+hQ4dMYGCgeeSRR4wxxiQkJJgHHnjAFC1a1Jw6dcqlvBhjbOkmvtavX2+KFStmQkNDbfty5MqVK2bu3LmmQ4cOxsfHx/j7+5tHH33UfP311+batWvJbuPj42N69OiRZHm3bt2MJPPtt9/alrny2WCMMQ0bNjT16tVLkuaBAwe
  693. "text/plain": [
  694. "<Figure size 2000x600 with 3 Axes>"
  695. ]
  696. },
  697. "metadata": {},
  698. "output_type": "display_data"
  699. }
  700. ],
  701. "source": [
  702. "#downstream\n",
  703. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(20,6))\n",
  704. "\n",
  705. "a0=ax0.hist2d(down_energyloss_found, down_residual_found, bins=(np.linspace(0,1,80), np.linspace(0,1.5e5,80)), cmap=plt.cm.jet, cmin=1, vmax=20)\n",
  706. "ax0.set_ylim(0,1.5e5)\n",
  707. "ax0.set_xlim(0,1)\n",
  708. "ax0.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  709. "ax0.set_ylabel(r\"$E_0-E_\\gamma$\")\n",
  710. "ax0.set_title(\"found energyloss wrt residual electron energy\")\n",
  711. "\n",
  712. "a1=ax1.hist2d(down_energyloss_lost, down_residual_lost, bins=(np.linspace(0,1,80), np.linspace(0,1.5e5,80)), cmap=plt.cm.jet, cmin=1, vmax=20) \n",
  713. "ax1.set_ylim(0,1.5e5)\n",
  714. "ax1.set_xlim(0,1)\n",
  715. "ax1.set_xlabel(r\"energyloss $E_\\gamma/E_0$\")\n",
  716. "ax1.set_ylabel(r\"$E_0-E_\\gamma$\")\n",
  717. "ax1.set_title(\"lost energyloss wrt residual electron energy\")\n",
  718. "\n",
  719. "fig.colorbar(a1[3],ax=ax1)\n",
  720. "fig.suptitle(r\"$e^\\pm$ from $B\\rightarrow K^\\ast ee$, $p>5$GeV, Downstream photons w/ brem_vtx_z$<9500$mm\")\n",
  721. "\n",
  722. "\"\"\"\n",
  723. "\"\"\"\n",
  724. "plt.show()"
  725. ]
  726. },
  727. {
  728. "cell_type": "code",
  729. "execution_count": null,
  730. "metadata": {},
  731. "outputs": [],
  732. "source": []
  733. }
  734. ],
  735. "metadata": {
  736. "kernelspec": {
  737. "display_name": "env1",
  738. "language": "python",
  739. "name": "python3"
  740. },
  741. "language_info": {
  742. "codemirror_mode": {
  743. "name": "ipython",
  744. "version": 3
  745. },
  746. "file_extension": ".py",
  747. "mimetype": "text/x-python",
  748. "name": "python",
  749. "nbconvert_exporter": "python",
  750. "pygments_lexer": "ipython3",
  751. "version": "3.11.5"
  752. }
  753. },
  754. "nbformat": 4,
  755. "nbformat_minor": 2
  756. }