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.

813 lines
1.4 MiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 1,
  6. "metadata": {},
  7. "outputs": [],
  8. "source": [
  9. "import uproot\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. "%matplotlib inline"
  20. ]
  21. },
  22. {
  23. "cell_type": "code",
  24. "execution_count": 2,
  25. "metadata": {},
  26. "outputs": [
  27. {
  28. "data": {
  29. "text/plain": [
  30. "9056"
  31. ]
  32. },
  33. "execution_count": 2,
  34. "metadata": {},
  35. "output_type": "execute_result"
  36. }
  37. ],
  38. "source": [
  39. "file = uproot.open(\"tracking_losses_ntuple_Bd2KstEE.root:PrDebugTrackingLosses.PrDebugTrackingTool/Tuple;1\")\n",
  40. "#file = uproot.open(\"tracking_losses_ntuple_Dst0ToD0EE.root:PrDebugTrackingLosses.PrDebugTrackingTool/Tuple;1\")\n",
  41. "\n",
  42. "\n",
  43. "#selektiere nur elektronen von B->K*ee und nur solche mit einem momentum von ueber 5 GeV \n",
  44. "allcolumns = file.arrays()\n",
  45. "found = allcolumns[(allcolumns.isElectron) & (~allcolumns.lost) & (allcolumns.fromSignal) & (allcolumns.p > 5e3)] #B: 9056\n",
  46. "lost = allcolumns[(allcolumns.isElectron) & (allcolumns.lost) & (allcolumns.fromSignal) & (allcolumns.p > 5e3)] #B: 1466\n",
  47. "\n",
  48. "ak.num(found, axis=0)\n",
  49. "#ak.count(found, axis=None)\n"
  50. ]
  51. },
  52. {
  53. "cell_type": "code",
  54. "execution_count": 3,
  55. "metadata": {},
  56. "outputs": [
  57. {
  58. "data": {
  59. "text/plain": [
  60. "0.8606728758791105"
  61. ]
  62. },
  63. "execution_count": 3,
  64. "metadata": {},
  65. "output_type": "execute_result"
  66. }
  67. ],
  68. "source": [
  69. "def t_eff(found, lost, axis = 0):\n",
  70. " sel = ak.num(found, axis=axis)\n",
  71. " des = ak.num(lost, axis=axis)\n",
  72. " return sel/(sel + des)\n",
  73. "\n",
  74. "t_eff(found, lost)"
  75. ]
  76. },
  77. {
  78. "cell_type": "code",
  79. "execution_count": 4,
  80. "metadata": {},
  81. "outputs": [
  82. {
  83. "name": "stdout",
  84. "output_type": "stream",
  85. "text": [
  86. "sample size: 32\n",
  87. "eff (cutoff = 0 ) = 0.96875\n",
  88. "sample size: 32\n",
  89. "eff (cutoff = 50 ) = 0.96875\n",
  90. "sample size: 32\n",
  91. "eff (cutoff = 100 ) = 0.96875\n",
  92. "sample size: 43\n",
  93. "eff (cutoff = 150 ) = 0.9767441860465116\n",
  94. "sample size: 65\n",
  95. "eff (cutoff = 200 ) = 0.9692307692307692\n",
  96. "sample size: 97\n",
  97. "eff (cutoff = 250 ) = 0.9587628865979382\n",
  98. "sample size: 129\n",
  99. "eff (cutoff = 300 ) = 0.9457364341085271\n",
  100. "sample size: 150\n",
  101. "eff (cutoff = 350 ) = 0.9533333333333334\n",
  102. "sample size: 169\n",
  103. "eff (cutoff = 400 ) = 0.9408284023668639\n",
  104. "sample size: 197\n",
  105. "eff (cutoff = 450 ) = 0.9390862944162437\n",
  106. "sample size: 227\n",
  107. "eff (cutoff = 500 ) = 0.920704845814978\n",
  108. "sample size: 257\n",
  109. "eff (cutoff = 550 ) = 0.9260700389105059\n",
  110. "sample size: 297\n",
  111. "eff (cutoff = 600 ) = 0.9326599326599326\n",
  112. "sample size: 334\n",
  113. "eff (cutoff = 650 ) = 0.9281437125748503\n",
  114. "sample size: 366\n",
  115. "eff (cutoff = 700 ) = 0.9289617486338798\n",
  116. "sample size: 400\n",
  117. "eff (cutoff = 750 ) = 0.925\n",
  118. "sample size: 436\n",
  119. "eff (cutoff = 800 ) = 0.9151376146788991\n",
  120. "sample size: 468\n",
  121. "eff (cutoff = 850 ) = 0.9102564102564102\n",
  122. "sample size: 500\n",
  123. "eff (cutoff = 900 ) = 0.912\n",
  124. "sample size: 533\n",
  125. "eff (cutoff = 950 ) = 0.9136960600375235\n",
  126. "sample size: 562\n",
  127. "eff (cutoff = 1000 ) = 0.9163701067615658\n",
  128. "\n",
  129. "sample size: 150\n"
  130. ]
  131. },
  132. {
  133. "data": {
  134. "text/plain": [
  135. "0.9533333333333334"
  136. ]
  137. },
  138. "execution_count": 4,
  139. "metadata": {},
  140. "output_type": "execute_result"
  141. }
  142. ],
  143. "source": [
  144. "#finden wir die elektronen die keine bremsstrahlung gemacht haben mit hoher effizienz?\n",
  145. "#von energie der photonen abmachen\n",
  146. "#scan ab welcher energie der photonen die effizienz abfällt\n",
  147. "\n",
  148. "#abhängigkeit vom ort der emission untersuchen <- noch nicht gemacht\n",
  149. "\n",
  150. "\n",
  151. "\n",
  152. "#idea: we make an event cut st all events that contain a photon of energy > cutoff_energy are not included\n",
  153. "\"\"\"\n",
  154. "ph_e = found[\"brem_photons_pe\"]\n",
  155. "event_cut = ak.all(ph_e<cutoff_energy,axis=1)\n",
  156. "ph_e = ph_e[event_cut]\n",
  157. "\"\"\"\n",
  158. "\n",
  159. "\n",
  160. "\n",
  161. "for cutoff_energy in range(0,1050,50):\n",
  162. "\tnobrem_f = found[ak.all(found[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  163. "\tnobrem_l = lost[ak.all(lost[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  164. "\tprint(\"sample size: \",ak.num(nobrem_f,axis=0)+ak.num(nobrem_l,axis=0))\n",
  165. "\tprint(\"eff (cutoff = \",str(cutoff_energy),\") = \",str(t_eff(nobrem_f,nobrem_l)))\n",
  166. "\n",
  167. "\"\"\"\n",
  168. "we see that a cutoff energy of 350MeV is ideal because the efficiency drops significantly for higher values\n",
  169. "\"\"\"\n",
  170. "cutoff_energy = 350.0 #MeV\n",
  171. "\n",
  172. "\"\"\"\n",
  173. "better statistics: cutoff=350MeV - sample size: 150 events and efficiency=0.9533\n",
  174. "\"\"\"\n",
  175. "nobrem_found = found[ak.all(found[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  176. "nobrem_lost = lost[ak.all(lost[\"brem_photons_pe\"]<cutoff_energy,axis=1)]\n",
  177. "\n",
  178. "print(\"\\nsample size: \",ak.num(nobrem_found,axis=0)+ak.num(nobrem_lost,axis=0))\n",
  179. "t_eff(nobrem_found, nobrem_lost)"
  180. ]
  181. },
  182. {
  183. "cell_type": "code",
  184. "execution_count": null,
  185. "metadata": {},
  186. "outputs": [],
  187. "source": []
  188. },
  189. {
  190. "cell_type": "code",
  191. "execution_count": 5,
  192. "metadata": {},
  193. "outputs": [
  194. {
  195. "name": "stdout",
  196. "output_type": "stream",
  197. "text": [
  198. "31\n"
  199. ]
  200. },
  201. {
  202. "data": {
  203. "text/plain": [
  204. "0.96875"
  205. ]
  206. },
  207. "execution_count": 5,
  208. "metadata": {},
  209. "output_type": "execute_result"
  210. }
  211. ],
  212. "source": [
  213. "#hier wird ohne rücksicht auf energie der photonen getrennt\n",
  214. "\n",
  215. "nobrem_found = found[found[\"brem_photons_pe_length\"]==0]\n",
  216. "nobrem_lost = lost[lost[\"brem_photons_pe_length\"]==0]\n",
  217. "\n",
  218. "\"\"\"\n",
  219. "die effizienz mit der wir elektronen finden, die keine bremsstrahlung gemacht haben, ist gut mit 0.9688.\n",
  220. "allerdings haben wir hier nur sehr wenige teilchen (<100)\n",
  221. "\"\"\"\n",
  222. "print(ak.num(nobrem_found,axis=0))\n",
  223. "t_eff(nobrem_found, nobrem_lost)\n"
  224. ]
  225. },
  226. {
  227. "cell_type": "code",
  228. "execution_count": 6,
  229. "metadata": {},
  230. "outputs": [],
  231. "source": [
  232. "#wie viel energie relativ zur anfangsenergie verlieren die elektronen durch bremstrahlung und hat das einen einfluss darauf ob wir sie finden oder nicht?\n"
  233. ]
  234. },
  235. {
  236. "cell_type": "code",
  237. "execution_count": 7,
  238. "metadata": {},
  239. "outputs": [
  240. {
  241. "data": {
  242. "text/plain": [
  243. "0.8603431839847474"
  244. ]
  245. },
  246. "execution_count": 7,
  247. "metadata": {},
  248. "output_type": "execute_result"
  249. }
  250. ],
  251. "source": [
  252. "#keine rücksicht auf energie der photonen\n",
  253. "brem_found = found[found[\"brem_photons_pe_length\"]!=0]\n",
  254. "energy_found = ak.to_numpy(brem_found[\"energy\"])\n",
  255. "eph_found = ak.to_numpy(ak.sum(brem_found[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  256. "energyloss_found = eph_found/energy_found\n",
  257. "\n",
  258. "\n",
  259. "brem_lost = lost[lost[\"brem_photons_pe_length\"]!=0]\n",
  260. "energy_lost = ak.to_numpy(brem_lost[\"energy\"])\n",
  261. "eph_lost = ak.to_numpy(ak.sum(brem_lost[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  262. "energyloss_lost = eph_lost/energy_lost\n",
  263. "\n",
  264. "t_eff(brem_found,brem_lost)"
  265. ]
  266. },
  267. {
  268. "cell_type": "code",
  269. "execution_count": 8,
  270. "metadata": {},
  271. "outputs": [
  272. {
  273. "name": "stdout",
  274. "output_type": "stream",
  275. "text": [
  276. "mean energyloss relative to initial energy (found): 0.6475128752780828\n",
  277. "mean energyloss relative to initial energy (lost): 0.8241268441538472\n"
  278. ]
  279. }
  280. ],
  281. "source": [
  282. "mean_energyloss_found = ak.mean(energyloss_found)\n",
  283. "mean_energyloss_lost = ak.mean(energyloss_lost)\n",
  284. "print(\"mean energyloss relative to initial energy (found): \", mean_energyloss_found)\n",
  285. "print(\"mean energyloss relative to initial energy (lost): \", mean_energyloss_lost)"
  286. ]
  287. },
  288. {
  289. "cell_type": "code",
  290. "execution_count": 9,
  291. "metadata": {},
  292. "outputs": [
  293. {
  294. "data": {
  295. "image/png": "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
  296. "text/plain": [
  297. "<Figure size 640x480 with 1 Axes>"
  298. ]
  299. },
  300. "metadata": {},
  301. "output_type": "display_data"
  302. }
  303. ],
  304. "source": [
  305. "#in abhängigkeit von der energie der elektronen\n",
  306. "\n",
  307. "plt.hist(energyloss_lost, bins=200, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=\"lost\")\n",
  308. "plt.hist(energyloss_found, bins=100, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=\"found\")\n",
  309. "plt.xticks(np.arange(0,1.1,0.1), minor=True,)\n",
  310. "plt.yticks(np.arange(0,10,1), minor=True)\n",
  311. "plt.xlabel(r\"$E_\\gamma/E_0$\")\n",
  312. "plt.ylabel(\"counts (normed)\")\n",
  313. "plt.title(r'$E_{ph}/E_0$')\n",
  314. "plt.legend()\n",
  315. "plt.grid()\n",
  316. "\n",
  317. "\"\"\"\n",
  318. "found: elektronen verlieren durchschnittlich 0.65 ihrer anfangsenergie durch bremsstrahlung\n",
  319. "lost: elektronen verlieren durchschnittlich 0.82 ihrer anfangsenergie durch bremsstrahlung\n",
  320. "\n",
  321. "-> wir können sofort erkennen, dass verlorene elektronen im schnitt mehr energie durch bremsstrahlung verlieren als gefundene, \n",
  322. "aber auch die rate der gefundenen elektronen steigt für raten nahe 1, wenn auch wesentlich schwächer als für verlorene elektronen.\n",
  323. "die meisten verlorenen elektronen verlieren >0.8 ihrer anfangsenergie.\n",
  324. "\"\"\"\n",
  325. "\n",
  326. "plt.show()"
  327. ]
  328. },
  329. {
  330. "cell_type": "code",
  331. "execution_count": 10,
  332. "metadata": {},
  333. "outputs": [],
  334. "source": [
  335. "#ist die shape der teilspur im scifi anders? (koenntest du zum beispiel durch vergleich der verteilungen der fit parameter studieren,\n",
  336. "#in meiner thesis findest du das fitmodell -- ist einfach ein polynom dritten grades)\n",
  337. "z_ref=8520 #mm\n",
  338. "\n",
  339. "def scifi_track(z, a, b, c, d):\n",
  340. " return a + b*(z-z_ref) + c*(z-z_ref)**2 + d*(z-z_ref)**3\n",
  341. "\n",
  342. "def z_mag(xv, zv, tx, a, b):\n",
  343. " \"\"\" optical centre of the magnet is defined as the intersection between the trajectory tangents before and after the magnet\n",
  344. "\n",
  345. " Args:\n",
  346. " xv (double): velo x track\n",
  347. " zv (double): velo z track\n",
  348. " tx (double): velo x slope\n",
  349. " a (double): ax parameter of track fit\n",
  350. " b (double): bx parameter of track fit\n",
  351. "\n",
  352. " Returns:\n",
  353. " double: z_mag\n",
  354. " \"\"\"\n",
  355. " return (xv-tx*zv-a+b*z_ref)/(b-tx)"
  356. ]
  357. },
  358. {
  359. "cell_type": "code",
  360. "execution_count": 11,
  361. "metadata": {},
  362. "outputs": [],
  363. "source": [
  364. "scifi_found = found[found[\"scifi_hit_pos_x_length\"]>3]\n",
  365. "scifi_lost = lost[lost[\"scifi_hit_pos_x_length\"]>3]\n",
  366. "#should be fulfilled by all candidates\n",
  367. "\n",
  368. "scifi_x_found = scifi_found[\"scifi_hit_pos_x\"]\n",
  369. "scifi_z_found = scifi_found[\"scifi_hit_pos_z\"]\n",
  370. "\n",
  371. "tx_found = scifi_found[\"velo_track_tx\"]\n",
  372. "\n",
  373. "scifi_x_lost = scifi_lost[\"scifi_hit_pos_x\"]\n",
  374. "scifi_z_lost = scifi_lost[\"scifi_hit_pos_z\"]\n",
  375. "\n",
  376. "tx_lost = scifi_lost[\"velo_track_tx\"]\n",
  377. "\n",
  378. "xv_found = scifi_found[\"velo_track_x\"]\n",
  379. "zv_found = scifi_found[\"velo_track_z\"]\n",
  380. "\n",
  381. "xv_lost = scifi_lost[\"velo_track_x\"]\n",
  382. "zv_lost = scifi_lost[\"velo_track_z\"]\n",
  383. "\n",
  384. "\n",
  385. "\n",
  386. "#ak.num(scifi_found[\"energy\"], axis=0)\n",
  387. "#scifi_found.snapshot()"
  388. ]
  389. },
  390. {
  391. "cell_type": "code",
  392. "execution_count": 12,
  393. "metadata": {},
  394. "outputs": [],
  395. "source": [
  396. "#tx_lost.show()"
  397. ]
  398. },
  399. {
  400. "cell_type": "code",
  401. "execution_count": 13,
  402. "metadata": {},
  403. "outputs": [],
  404. "source": [
  405. "scifi_fitpars_found = ak.ArrayBuilder()\n",
  406. "\n",
  407. "for i in range(0,ak.num(scifi_found[\"energy\"], axis=0)):\n",
  408. " popt, pcov = curve_fit(scifi_track,ak.to_numpy(scifi_z_found[i,:]),ak.to_numpy(scifi_x_found[i,:]))\n",
  409. " scifi_fitpars_found.begin_list()\n",
  410. " scifi_fitpars_found.real(popt[0])\n",
  411. " scifi_fitpars_found.real(popt[1])\n",
  412. " scifi_fitpars_found.real(popt[2])\n",
  413. " scifi_fitpars_found.real(popt[3])\n",
  414. " scifi_fitpars_found.end_list()\n",
  415. "\n",
  416. "scifi_fitpars_lost = ak.ArrayBuilder()\n",
  417. "\n",
  418. "for i in range(0,ak.num(scifi_lost[\"energy\"], axis=0)):\n",
  419. " popt, pcov = curve_fit(scifi_track,ak.to_numpy(scifi_z_lost[i,:]),ak.to_numpy(scifi_x_lost[i,:]))\n",
  420. " scifi_fitpars_lost.begin_list()\n",
  421. " scifi_fitpars_lost.real(popt[0])\n",
  422. " scifi_fitpars_lost.real(popt[1])\n",
  423. " scifi_fitpars_lost.real(popt[2])\n",
  424. " scifi_fitpars_lost.real(popt[3])\n",
  425. " scifi_fitpars_lost.end_list()\n",
  426. "\n",
  427. "\n",
  428. "scifi_fitpars_lost = scifi_fitpars_lost.to_numpy()\n",
  429. "scifi_fitpars_found = scifi_fitpars_found.to_numpy()\n",
  430. "\n",
  431. "\n",
  432. "\n",
  433. "dtx_found = scifi_fitpars_found[:,1] - tx_found\n",
  434. "dtx_lost = scifi_fitpars_lost[:,1] - tx_lost\n"
  435. ]
  436. },
  437. {
  438. "cell_type": "code",
  439. "execution_count": null,
  440. "metadata": {},
  441. "outputs": [],
  442. "source": []
  443. },
  444. {
  445. "cell_type": "code",
  446. "execution_count": 14,
  447. "metadata": {},
  448. "outputs": [
  449. {
  450. "data": {
  451. "image/png": "iVBORw0KGgoAAAANSUhEUgAABPEAAANVCAYAAAAZd2vuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAD1JklEQVR4nOzdeVyU5f7/8ffI7oYrmyuau2mGpZALZmJumelRq4NaapGZKZWJaaItZpmHLJcsyspSzzlqq5lYgnqkTiqa5lJ5VMwgww1XFrl/f/Rjvg0z4IADM8Dr+XjMo+bic1/Xdd8zDB8/c1/3bTIMwxAAAAAAAAAAl1XF2RMAAAAAAAAAUDSKeAAAAAAAAICLo4gHAAAAAAAAuDiKeAAAAAAAAICLo4gHAAAAAAAAuDiKeAAAAAAAAICLo4gHAAAAAAAAuDiKeAAAAAAAAICLo4gHAAAAAAAAuDiKeEA5tXr1arVr104+Pj4ymUzavXu3YmNjZTKZLOIWL16s5cuXO2eSLu6jjz5SXFycs6dx3RITE2UymZSYmOjsqdht+fLlMplMOnr0qEX7jBkz1LhxY7m7u6tWrVqSpPDwcIWHh1+zT1d4r5tMJk2cONGpcwAAlH/kedfPGXleeHi42rdv7/B+mzZtqjFjxji839JkMpkUGxtr0fb111+rc+fOqlatmkwmkz7++ONCc8KCtm/frtjYWJ09e7bU5nwtY8aMUfXq1Z02PiBRxAPKpT/++EORkZFq3ry5NmzYoOTkZLVs2VLjxo1TcnKyRSzJXeEqShGvPBowYICSk5MVGBhobvvkk0/0wgsvaNSoUUpKStKmTZsk/fkeXrx48TX75L0OAKgIyPMcgzzPuZKTkzVu3Djzc8MwNHz4cHl4eOjTTz9VcnKyevbsaTMntGX79u2aPXu2U4t4gCtwd/YEABTfTz/9pJycHP39739Xz549ze1Vq1ZVw4YNnTgza5cvX5a3t7fVN8cV2eXLl+Xj4+PsaZTYpUuXVLVq1VIdo379+qpfv75F2759+yRJkyZNkp+fn7m9bdu2Dh8/JydHJpNJ7u78GQQAuBbyPNdW3vO8q1evKjc3V15eXqU6TteuXS2e//bbbzp9+rSGDBmi3r17W/ysYE7oCOX9dQIKw5l4QDkzZswYdevWTZI0YsQImUwm81LDgsssmjZtqh9//FFJSUkymUwymUxq2rSppP9bgrlixQpFR0crICBAPj4+6tmzp1JSUizG3LFjh0aOHKmmTZvKx8dHTZs21b333qtjx45ZxOWfDr9x40Y9+OCDql+/vqpWraqsrCz98ssveuCBB9SiRQtVrVpVDRo00KBBg7R3716LPvLn9dFHH+npp59WYGCgqlevrkGDBun333/X+fPn9dBDD6levXqqV6+eHnjgAV24cMGiD8MwtHjxYt10003y8fFR7dq1NWzYMP3vf/8zx4SHh+uLL77QsWPHzMfmr8cuOztbzz//vFq3bi0vLy/Vr19fDzzwgP744w+LsZo2baqBAwdq7dq16tSpk7y9vTV79uxCX7+EhAQNHjxYDRs2lLe3t2644QY9/PDDysjIKHSbvzp48KDuvPNOVa1aVfXq1VNUVJTOnz9vM3bTpk3q3bu3atasqapVq+q2227T119/bRGT/57ZtWuXhg0bptq1a6t58+aFjn/p0iU9+eSTCg4Olre3t+rUqaPOnTtr5cqVFnHfffedBg0apLp168rb21vNmzfX5MmTzT8vuHSiadOmmjFjhiTJ39/fYgmGPctp7Xmvf/DBB3riiSfUoEEDeXl56ZdfftEff/yhCRMmqG3btqpevbr8/Px0++23a+vWrVZjZGVlac6cOWrTpo28vb1Vt25d9erVS9u3by90XoZhaPr06fLw8NBbb71V5D4AAECeV77zvHxbt25V165d5ePjowYNGmjmzJm6evXqNbfLycnR1KlTFRAQoKpVq6pbt27673//azM2PT1dDz/8sBo2bChPT08FBwdr9uzZys3NNcccPXpUJpNJL7/8sp5//nkFBwfLy8tLmzdvLnQO//rXv9SlSxf5+vqqatWqatasmR588EGLmLNnz+qJJ55Qs2bN5OXlJT8/P/Xv318HDx40x/w1l4uNjTUXoJ9++mmL96o9y2ljY2P11FNPSZKCg4PNr2f+pWSKep0WLVqkHj16yM/PT9WqVdONN96ol19+WTk5OVbjbNiwQb179zbve5s2bTR37txC5yVJ//nPf1SvXj0NHDhQFy9eLDIWcAROQQDKmZkzZ+rWW2/Vo48+qhdffFG9evVSzZo1bcauW7dOw4YNk6+vr3k5YsFv3aZPn66bb75Zb7/9ts6dO6fY2FiFh4crJSVFzZo1k/RnAtCqVSuNHDlSderUUVpampYsWaJbbrlF+/fvV7169Sz6fPDBBzVgwAB98MEHunjxojw8PPTbb7+pbt26eumll1S/fn2dPn1a7733nrp06aKUlBS1atXKal69evXS8uXLdfToUT355JO699575e7uro4dO2rlypVKSUnR9OnTVaNGDS1cuNC87cMPP6zly5dr0qRJmjdvnk6fPq05c+YoLCxMe/bskb+/vxYvXqyHHnpIhw8f1rp16yzGzsvL0+DBg7V161ZNnTpVYWFhOnbsmGbNmqXw8HDt2LHD4pu9Xbt26cCBA5oxY4aCg4NVrVq1Ql+/w4cPKzQ0VOPGjZOvr6+OHj2qBQsWqFu3btq7d688PDwK3fb3339Xz5495eHhocWLF8vf318ffvihzWuwrVixQqNGjdLgwYP13nvvycPDQ2+++ab69u2rr776yuob0HvuuUcjR45UVFRUkQlIdHS0PvjgAz3//PPq1KmTLl68qH379unUqVPmmK+++kqDBg1SmzZttGDBAjVu3FhHjx7Vxo0bC+133bp1WrRokeLj47Vhwwb5+voW62wDe97rMTExCg0N1dKlS1WlShX5+fmZk/VZs2YpICBAFy5c0Lp16xQeHq6vv/7a/A+n3Nxc9evXT1u3btXkyZN1++23Kzc3V99++61SU1MVFhZmNaesrCyNGTNGX3zxhT777DPdeeeddu8PAKByIs8r33me9GdxbeTIkZo2bZrmzJmjL774Qs8//7zOnDmjN954o8htx48fr/fff19PPvmk+vTpo3379umee+6x+sI2PT1dt956q6pUqaJnn31WzZs3V3Jysp5//nkdPXpU7777rkX8woUL1bJlS82fP181a9ZUixYtbI6fnJysESNGaMSIEYqNjZW3t7eOHTumb775xhxz/vx5devWTUePHtXTTz+tLl266MKFC9qyZYvS0tLUunVrq37HjRunjh076p577tFjjz2m++67r1hnAo4bN06nT5/W66+/rrVr15qX3v51tUZhr9Phw4d13333KTg4WJ6entqzZ49eeOEFHTx4UO+88455+/j4eI0fP149e/bU0qVL5efnp59++sm8UsSWf/7znxo1apQefPBBvf7663Jzc7N7n4ASMwCUO5s3bzYkGf/6178s2mfNmmUU/LVu166d0bNnz0L7uPnmm428vDxz+9GjRw0PDw9j3LhxhY6fm5trXLhwwahWrZrx2muvmdvfffddQ5IxatSoa+5Dbm6ukZ2dbbRo0cKYMmWK1bwGDRpkET958mRDkjFp0iSL9rvvvtuoU6eO+XlycrIhyXj11Vct4o4fP274+PgYU6dONbcNGDDAaNKkidXcVq5caUgy1qxZY9H+/fffG5KMxYsXm9uaNGliuLm5GYcOHbrmPheUl5dn5OTkGMeOHTMkGZ988kmR8U8//bRhMpmM3bt3W7T36dPHkGRs3rzZMAzDuHjxolGnTh2rY3j16lWjY8eOxq233mpuy3/PPPvss3bNuX379sbdd99dZEzz5s2N5s2bG5cvXy40Jv+9cuTIEau5/PHHHxaxPXv2tPkeLuha7/UePXpcs4/c3FwjJyfH6N27tzFkyBBz+/vvv29IMt56660it5dkPProo8apU6eMbt26GQ0aNLB6vQAAKAp53v8pb3lez549beZ048ePN6pUqWIcO3as0G0PHDhgSLI
  452. "text/plain": [
  453. "<Figure size 1500x1000 with 4 Axes>"
  454. ]
  455. },
  456. "metadata": {},
  457. "output_type": "display_data"
  458. }
  459. ],
  460. "source": [
  461. "fig, ((ax0, ax1), (ax2, ax3)) = plt.subplots(nrows=2, ncols=2, figsize=(15,10))\n",
  462. "\n",
  463. "ax0.hist(scifi_fitpars_found[:,0], bins=100, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=r\"$a_x$ found\")\n",
  464. "ax0.hist(scifi_fitpars_lost[:,0], bins=100, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=r\"$a_x$ lost\")\n",
  465. "ax0.set_xlabel(\"a\")\n",
  466. "ax0.set_ylabel(\"normed\")\n",
  467. "ax0.set_title(\"fitparameter a der scifi track\")\n",
  468. "ax0.legend()\n",
  469. "\n",
  470. "ax1.hist(scifi_fitpars_found[:,1], bins=100, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=r\"$b_x$ found\")\n",
  471. "ax1.hist(scifi_fitpars_lost[:,1], bins=100, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=r\"$b_x$ lost\")\n",
  472. "ax1.set_xlabel(\"b\")\n",
  473. "ax1.set_ylabel(\"normed\")\n",
  474. "ax1.set_title(\"fitparameter b der scifi track\")\n",
  475. "ax1.legend()\n",
  476. "#evtl multiple scattering candidates (lost); findet man einen gewissen endvtx_type (mult scattering)\n",
  477. "#steiler velo winkel (eta)? vertex type? evtl bremsstrahlung?\n",
  478. "\n",
  479. "\n",
  480. "ax2.hist(scifi_fitpars_found[:,2], bins=500, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=r\"$c_x$ found\")\n",
  481. "ax2.hist(scifi_fitpars_lost[:,2], bins=500, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=r\"$c_x$ lost\")\n",
  482. "ax2.set_xlim([-3e-5,3e-5])\n",
  483. "ax2.set_xticks(np.arange(-3e-5,3.5e-5,1e-5),minor=False)\n",
  484. "ax2.set_xlabel(\"c\")\n",
  485. "ax2.set_ylabel(\"normed\")\n",
  486. "ax2.set_title(\"fitparameter c der scifi track\")\n",
  487. "ax2.legend()\n",
  488. "\n",
  489. "ax3.hist(scifi_fitpars_found[:,3], bins=500, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=r\"$d_x$ found\")\n",
  490. "ax3.hist(scifi_fitpars_lost[:,3], bins=500, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=r\"$d_x$ lost\")\n",
  491. "ax3.set(xlim=(-5e-8,5e-8))\n",
  492. "ax3.text(-4e-8,3e8,\"d negligible <1e-7\")\n",
  493. "ax3.set_xlabel(\"d\")\n",
  494. "ax3.set_ylabel(\"normed\")\n",
  495. "ax3.set_title(\"fitparameter d der scifi track\")\n",
  496. "ax3.legend()\n",
  497. "\n",
  498. "\"\"\"\n",
  499. "a_x: virtual hit on the reference plane\n",
  500. "\"\"\"\n",
  501. "\n",
  502. "plt.show()"
  503. ]
  504. },
  505. {
  506. "cell_type": "code",
  507. "execution_count": 15,
  508. "metadata": {},
  509. "outputs": [
  510. {
  511. "name": "stdout",
  512. "output_type": "stream",
  513. "text": [
  514. "found\n",
  515. "a = -0.6718207391527037\n",
  516. "b = 0.0013778237292529144\n",
  517. "c = 3.3126998287416195e-08\n",
  518. "d = -1.0330674442255529e-10\n",
  519. "lost\n",
  520. "a = -36.98764338200992\n",
  521. "b = -0.015685137956233643\n",
  522. "c = -8.265859479503501e-07\n",
  523. "d = -1.541510766903436e-11\n"
  524. ]
  525. }
  526. ],
  527. "source": [
  528. "print(\"found\")\n",
  529. "print(\"a = \", str(np.mean(scifi_fitpars_found[:,0])))\n",
  530. "print(\"b = \", str(np.mean(scifi_fitpars_found[:,1])))\n",
  531. "print(\"c = \", str(np.mean(scifi_fitpars_found[:,2])))\n",
  532. "print(\"d = \", str(np.mean(scifi_fitpars_found[:,3])))\n",
  533. "\n",
  534. "print(\"lost\")\n",
  535. "print(\"a = \", str(np.mean(scifi_fitpars_lost[:,0])))\n",
  536. "print(\"b = \", str(np.mean(scifi_fitpars_lost[:,1])))\n",
  537. "print(\"c = \", str(np.mean(scifi_fitpars_lost[:,2])))\n",
  538. "print(\"d = \", str(np.mean(scifi_fitpars_lost[:,3])))"
  539. ]
  540. },
  541. {
  542. "cell_type": "code",
  543. "execution_count": 16,
  544. "metadata": {},
  545. "outputs": [
  546. {
  547. "data": {
  548. "text/plain": [
  549. "-4.6785491318157854e-07"
  550. ]
  551. },
  552. "execution_count": 16,
  553. "metadata": {},
  554. "output_type": "execute_result"
  555. }
  556. ],
  557. "source": [
  558. "np.min(scifi_fitpars_found[:,3])"
  559. ]
  560. },
  561. {
  562. "cell_type": "code",
  563. "execution_count": 17,
  564. "metadata": {},
  565. "outputs": [
  566. {
  567. "data": {
  568. "image/png": "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
  569. "text/plain": [
  570. "<Figure size 1500x600 with 2 Axes>"
  571. ]
  572. },
  573. "metadata": {},
  574. "output_type": "display_data"
  575. }
  576. ],
  577. "source": [
  578. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(15,6))\n",
  579. "\n",
  580. "for i in range(0,ak.num(scifi_found[\"energy\"], axis=0)):\n",
  581. " z_coord = np.linspace(scifi_z_found[i,0],12000,300)\n",
  582. " fit = scifi_track(z_coord, *scifi_fitpars_found[i])\n",
  583. " ax0.plot(z_coord, fit, \"-\", lw=0.5)\n",
  584. " ax0.errorbar(ak.to_numpy(scifi_z_found[i,:]),ak.to_numpy(scifi_x_found[i,:]),fmt=\".\",ms=2)\n",
  585. "\n",
  586. "#ax0.legend()\n",
  587. "ax0.set_xlabel(\"z [mm]\")\n",
  588. "ax0.set_ylabel(\"x [mm]\")\n",
  589. "ax0.set_title(\"found tracks of scifi hits\")\n",
  590. "ax0.set(xlim=(7e3,12000), ylim=(-4000,4000))\n",
  591. "ax0.grid()\n",
  592. "\n",
  593. "for i in range(0,ak.num(scifi_lost[\"energy\"], axis=0)):\n",
  594. " z_coord = np.linspace(scifi_z_lost[i,0],12000,300)\n",
  595. " fit = scifi_track(z_coord, *scifi_fitpars_lost[i])\n",
  596. " ax1.plot(z_coord, fit, \"-\", lw=0.5)\n",
  597. " ax1.errorbar(ak.to_numpy(scifi_z_lost[i,:]),ak.to_numpy(scifi_x_lost[i,:]),fmt=\".\",ms=2)\n",
  598. "\n",
  599. "#ax1.legend()\n",
  600. "ax1.set_xlabel(\"z [mm]\")\n",
  601. "ax1.set_ylabel(\"x [mm]\")\n",
  602. "ax1.set_title(\"lost tracks of scifi hits\")\n",
  603. "ax1.set(xlim=(7e3,12000), ylim=(-4000,4000))\n",
  604. "ax1.grid()\n",
  605. "\n",
  606. "plt.show()"
  607. ]
  608. },
  609. {
  610. "cell_type": "code",
  611. "execution_count": 18,
  612. "metadata": {},
  613. "outputs": [
  614. {
  615. "name": "stdout",
  616. "output_type": "stream",
  617. "text": [
  618. "found \n",
  619. "zmag = 5215.5640412342\n",
  620. "lost \n",
  621. "zmag = 5450.484726770035\n"
  622. ]
  623. }
  624. ],
  625. "source": [
  626. "#vergleich der zmag werte\n",
  627. "zmag_found = z_mag(xv_found, zv_found, tx_found, scifi_fitpars_found[:,0], scifi_fitpars_found[:,1])\n",
  628. "zmag_lost = z_mag(xv_lost, zv_lost, tx_lost, scifi_fitpars_lost[:,0], scifi_fitpars_lost[:,1])\n",
  629. "zmag_lost = zmag_lost[~np.isnan(zmag_lost)]\n",
  630. "zmag_found = zmag_found[~np.isnan(zmag_found)]\n",
  631. "\n",
  632. "print(\"found \\nzmag = \", str(np.mean(zmag_found)))\n",
  633. "print(\"lost \\nzmag = \", str(np.mean(zmag_lost)))"
  634. ]
  635. },
  636. {
  637. "cell_type": "code",
  638. "execution_count": 19,
  639. "metadata": {},
  640. "outputs": [
  641. {
  642. "data": {
  643. "image/png": "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
  644. "text/plain": [
  645. "<Figure size 640x480 with 1 Axes>"
  646. ]
  647. },
  648. "metadata": {},
  649. "output_type": "display_data"
  650. }
  651. ],
  652. "source": [
  653. "plt.hist(zmag_found, bins=5000, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=\"found\")\n",
  654. "plt.hist(zmag_lost, bins=300, density=True, alpha=0.5, histtype=\"bar\",color=\"darkorange\", label=\"lost\")\n",
  655. "plt.xlabel(\"$z_{mag}$ [mm]\")\n",
  656. "plt.ylabel(\"normed\")\n",
  657. "plt.title(\"magnet kick position $z_{mag}$ calculated w fitparameters\")\n",
  658. "plt.legend()\n",
  659. "plt.xticks(np.arange(5100,5800,5), minor=True)\n",
  660. "plt.yticks(np.arange(0,0.015,0.001), minor=True)\n",
  661. "plt.xlim(5100,5800)\n",
  662. "\n",
  663. "\"\"\"\n",
  664. "wir können einen radikalen unterschied für den z_mag wert erkennen, zwischen den found and lost elektronen.\n",
  665. "\"\"\"\n",
  666. "\n",
  667. "plt.show()"
  668. ]
  669. },
  670. {
  671. "cell_type": "code",
  672. "execution_count": 20,
  673. "metadata": {},
  674. "outputs": [
  675. {
  676. "name": "stdout",
  677. "output_type": "stream",
  678. "text": [
  679. "name | typename | interpretation \n",
  680. "---------------------+--------------------------+-------------------------------\n",
  681. "all_endvtx_types_... | int32_t | AsDtype('>i4')\n",
  682. "all_endvtx_types | float[] | AsJagged(AsDtype('>f4'))\n",
  683. "all_endvtx_x_length | int32_t | AsDtype('>i4')\n",
  684. "all_endvtx_x | float[] | AsJagged(AsDtype('>f4'))\n",
  685. "all_endvtx_y_length | int32_t | AsDtype('>i4')\n",
  686. "all_endvtx_y | float[] | AsJagged(AsDtype('>f4'))\n",
  687. "all_endvtx_z_length | int32_t | AsDtype('>i4')\n",
  688. "all_endvtx_z | float[] | AsJagged(AsDtype('>f4'))\n",
  689. "brem_photons_pe_l... | int32_t | AsDtype('>i4')\n",
  690. "brem_photons_pe | float[] | AsJagged(AsDtype('>f4'))\n",
  691. "brem_photons_px_l... | int32_t | AsDtype('>i4')\n",
  692. "brem_photons_px | float[] | AsJagged(AsDtype('>f4'))\n",
  693. "brem_photons_py_l... | int32_t | AsDtype('>i4')\n",
  694. "brem_photons_py | float[] | AsJagged(AsDtype('>f4'))\n",
  695. "brem_photons_pz_l... | int32_t | AsDtype('>i4')\n",
  696. "brem_photons_pz | float[] | AsJagged(AsDtype('>f4'))\n",
  697. "brem_vtx_x_length | int32_t | AsDtype('>i4')\n",
  698. "brem_vtx_x | float[] | AsJagged(AsDtype('>f4'))\n",
  699. "brem_vtx_y_length | int32_t | AsDtype('>i4')\n",
  700. "brem_vtx_y | float[] | AsJagged(AsDtype('>f4'))\n",
  701. "brem_vtx_z_length | int32_t | AsDtype('>i4')\n",
  702. "brem_vtx_z | float[] | AsJagged(AsDtype('>f4'))\n",
  703. "endvtx_type | int32_t | AsDtype('>i4')\n",
  704. "endvtx_x | double | AsDtype('>f8')\n",
  705. "endvtx_y | double | AsDtype('>f8')\n",
  706. "endvtx_z | double | AsDtype('>f8')\n",
  707. "energy | double | AsDtype('>f8')\n",
  708. "eta | double | AsDtype('>f8')\n",
  709. "event_count | int32_t | AsDtype('>i4')\n",
  710. "fromB | bool | AsDtype('bool')\n",
  711. "fromD | bool | AsDtype('bool')\n",
  712. "fromDecay | bool | AsDtype('bool')\n",
  713. "fromHadInt | bool | AsDtype('bool')\n",
  714. "fromPV | bool | AsDtype('bool')\n",
  715. "fromPairProd | bool | AsDtype('bool')\n",
  716. "fromSignal | bool | AsDtype('bool')\n",
  717. "fromStrange | bool | AsDtype('bool')\n",
  718. "isElectron | bool | AsDtype('bool')\n",
  719. "isKaon | bool | AsDtype('bool')\n",
  720. "isMuon | bool | AsDtype('bool')\n",
  721. "isPion | bool | AsDtype('bool')\n",
  722. "isProton | bool | AsDtype('bool')\n",
  723. "lost | bool | AsDtype('bool')\n",
  724. "lost_in_track_fit | bool | AsDtype('bool')\n",
  725. "match_fraction | float | AsDtype('>f4')\n",
  726. "mcp_idx | int32_t | AsDtype('>i4')\n",
  727. "mother_id | int32_t | AsDtype('>i4')\n",
  728. "mother_key | int32_t | AsDtype('>i4')\n",
  729. "originvtx_type | int32_t | AsDtype('>i4')\n",
  730. "originvtx_x | double | AsDtype('>f8')\n",
  731. "originvtx_y | double | AsDtype('>f8')\n",
  732. "originvtx_z | double | AsDtype('>f8')\n",
  733. "p | double | AsDtype('>f8')\n",
  734. "phi | double | AsDtype('>f8')\n",
  735. "pid | int32_t | AsDtype('>i4')\n",
  736. "pt | double | AsDtype('>f8')\n",
  737. "px | double | AsDtype('>f8')\n",
  738. "py | double | AsDtype('>f8')\n",
  739. "pz | double | AsDtype('>f8')\n",
  740. "scifi_hit_pos_x_l... | int32_t | AsDtype('>i4')\n",
  741. "scifi_hit_pos_x | float[] | AsJagged(AsDtype('>f4'))\n",
  742. "scifi_hit_pos_y_l... | int32_t | AsDtype('>i4')\n",
  743. "scifi_hit_pos_y | float[] | AsJagged(AsDtype('>f4'))\n",
  744. "scifi_hit_pos_z_l... | int32_t | AsDtype('>i4')\n",
  745. "scifi_hit_pos_z | float[] | AsJagged(AsDtype('>f4'))\n",
  746. "track_p | double | AsDtype('>f8')\n",
  747. "track_pt | double | AsDtype('>f8')\n",
  748. "tx | double | AsDtype('>f8')\n",
  749. "ty | double | AsDtype('>f8')\n",
  750. "ut_hit_pos_x_length | int32_t | AsDtype('>i4')\n",
  751. "ut_hit_pos_x | float[] | AsJagged(AsDtype('>f4'))\n",
  752. "ut_hit_pos_y_length | int32_t | AsDtype('>i4')\n",
  753. "ut_hit_pos_y | float[] | AsJagged(AsDtype('>f4'))\n",
  754. "ut_hit_pos_z_length | int32_t | AsDtype('>i4')\n",
  755. "ut_hit_pos_z | float[] | AsJagged(AsDtype('>f4'))\n",
  756. "velo_hit_pos_x_le... | int32_t | AsDtype('>i4')\n",
  757. "velo_hit_pos_x | float[] | AsJagged(AsDtype('>f4'))\n",
  758. "velo_hit_pos_y_le... | int32_t | AsDtype('>i4')\n",
  759. "velo_hit_pos_y | float[] | AsJagged(AsDtype('>f4'))\n",
  760. "velo_hit_pos_z_le... | int32_t | AsDtype('>i4')\n",
  761. "velo_hit_pos_z | float[] | AsJagged(AsDtype('>f4'))\n",
  762. "velo_track_idx | int32_t | AsDtype('>i4')\n",
  763. "velo_track_tx | double | AsDtype('>f8')\n",
  764. "velo_track_ty | double | AsDtype('>f8')\n",
  765. "velo_track_x | double | AsDtype('>f8')\n",
  766. "velo_track_y | double | AsDtype('>f8')\n",
  767. "velo_track_z | double | AsDtype('>f8')\n"
  768. ]
  769. }
  770. ],
  771. "source": [
  772. "\n",
  773. "file.show()"
  774. ]
  775. },
  776. {
  777. "cell_type": "code",
  778. "execution_count": null,
  779. "metadata": {},
  780. "outputs": [],
  781. "source": []
  782. },
  783. {
  784. "cell_type": "code",
  785. "execution_count": null,
  786. "metadata": {},
  787. "outputs": [],
  788. "source": []
  789. }
  790. ],
  791. "metadata": {
  792. "kernelspec": {
  793. "display_name": "env1",
  794. "language": "python",
  795. "name": "python3"
  796. },
  797. "language_info": {
  798. "codemirror_mode": {
  799. "name": "ipython",
  800. "version": 3
  801. },
  802. "file_extension": ".py",
  803. "mimetype": "text/x-python",
  804. "name": "python",
  805. "nbconvert_exporter": "python",
  806. "pygments_lexer": "ipython3",
  807. "version": "3.11.5"
  808. },
  809. "orig_nbformat": 4
  810. },
  811. "nbformat": 4,
  812. "nbformat_minor": 2
  813. }