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.

859 lines
1.3 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. {
  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. "51"
  31. ]
  32. },
  33. "execution_count": 2,
  34. "metadata": {},
  35. "output_type": "execute_result"
  36. }
  37. ],
  38. "source": [
  39. "file = uproot.open(\"tracking_losses_ntuple_Dst0ToD0EE.root:PrDebugTrackingLosses.PrDebugTrackingTool/Tuple;1\")\n",
  40. "\n",
  41. "\n",
  42. "#selektiere nur elektronen von D*0->D0ee und nur solche mit einem momentum von unter 5 GeV \n",
  43. "allcolumns = file.arrays()\n",
  44. "found = allcolumns[(allcolumns.isElectron) & (~allcolumns.lost) & (allcolumns.fromSignal) & (allcolumns.p < 5e3)] #D: 2591\n",
  45. "lost = allcolumns[(allcolumns.isElectron) & (allcolumns.lost) & (allcolumns.fromSignal) & (allcolumns.p < 5e3)] #D: 1908\n",
  46. "\n",
  47. "#ak.num(lost, axis=0)\n",
  48. "ak.num(allcolumns[(allcolumns.fromPairProd) & (allcolumns.isElectron) & (~allcolumns.lost) & (allcolumns.fromSignal)],axis=0)\n",
  49. "#found[0]"
  50. ]
  51. },
  52. {
  53. "cell_type": "code",
  54. "execution_count": 3,
  55. "metadata": {},
  56. "outputs": [
  57. {
  58. "data": {
  59. "text/plain": [
  60. "0.5759057568348522"
  61. ]
  62. },
  63. "execution_count": 3,
  64. "metadata": {},
  65. "output_type": "execute_result"
  66. }
  67. ],
  68. "source": [
  69. "def t_eff(found, lost):\n",
  70. " sel = found[\"energy\"]\n",
  71. " des = lost[\"energy\"]\n",
  72. " return ak.count(sel,axis=None)/(ak.count(sel,axis=None)+ak.count(des,axis=None))\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. "data": {
  84. "text/plain": [
  85. "0.7960893854748603"
  86. ]
  87. },
  88. "execution_count": 4,
  89. "metadata": {},
  90. "output_type": "execute_result"
  91. }
  92. ],
  93. "source": [
  94. "#finden wir die elektronen die keine bremsstrahlung gemacht haben mit hoher effizienz?\n",
  95. "\n",
  96. "#statistics\n",
  97. "\n",
  98. "nobrem_found = found[found[\"brem_photons_pe_length\"]==0]\n",
  99. "nobrem_lost = lost[lost[\"brem_photons_pe_length\"]==0]\n",
  100. "\n",
  101. "\"\"\"\n",
  102. "die effizienz mit der wir elektronen finden, die keine bremsstrahlung gemacht haben, ist nicht besonders gut, aber trotzdem besser als\n",
  103. "für alle elektronen.\n",
  104. "Auch hier handelt es sich um eine recht geringe sample size (~350)\n",
  105. "\"\"\"\n",
  106. "\n",
  107. "t_eff(nobrem_found, nobrem_lost)\n",
  108. "#ak.num(nobrem_lost, axis=0)"
  109. ]
  110. },
  111. {
  112. "cell_type": "code",
  113. "execution_count": 5,
  114. "metadata": {},
  115. "outputs": [
  116. {
  117. "data": {
  118. "text/plain": [
  119. "0.5568703211784594"
  120. ]
  121. },
  122. "execution_count": 5,
  123. "metadata": {},
  124. "output_type": "execute_result"
  125. }
  126. ],
  127. "source": [
  128. "#wie viel energie relativ zur anfangsenergie verlieren die elektronen durch bremstrahlung und hat das einen einfluss darauf ob wir sie finden oder nicht?\n",
  129. "brem_found = found[found[\"brem_photons_pe_length\"]!=0]\n",
  130. "energy_found = ak.to_numpy(brem_found[\"energy\"])\n",
  131. "eph_found = ak.to_numpy(ak.sum(brem_found[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  132. "energyloss_found = eph_found/energy_found\n",
  133. "\n",
  134. "\n",
  135. "brem_lost = lost[lost[\"brem_photons_pe_length\"]!=0]\n",
  136. "energy_lost = ak.to_numpy(brem_lost[\"energy\"])\n",
  137. "eph_lost = ak.to_numpy(ak.sum(brem_lost[\"brem_photons_pe\"], axis=-1, keepdims=False))\n",
  138. "energyloss_lost = eph_lost/energy_lost\n",
  139. "\n",
  140. "t_eff(brem_found,brem_lost)"
  141. ]
  142. },
  143. {
  144. "cell_type": "code",
  145. "execution_count": 6,
  146. "metadata": {},
  147. "outputs": [
  148. {
  149. "name": "stdout",
  150. "output_type": "stream",
  151. "text": [
  152. "mean energyloss relative to initial energy (found): 0.4422334194682742\n",
  153. "mean energyloss relative to initial energy (lost): 0.5885317187224427\n"
  154. ]
  155. }
  156. ],
  157. "source": [
  158. "mean_energyloss_found = ak.mean(energyloss_found)\n",
  159. "mean_energyloss_lost = ak.mean(energyloss_lost)\n",
  160. "print(\"mean energyloss relative to initial energy (found): \", mean_energyloss_found)\n",
  161. "print(\"mean energyloss relative to initial energy (lost): \", mean_energyloss_lost)"
  162. ]
  163. },
  164. {
  165. "cell_type": "code",
  166. "execution_count": 7,
  167. "metadata": {},
  168. "outputs": [
  169. {
  170. "data": {
  171. "image/png": "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
  172. "text/plain": [
  173. "<Figure size 640x480 with 1 Axes>"
  174. ]
  175. },
  176. "metadata": {},
  177. "output_type": "display_data"
  178. }
  179. ],
  180. "source": [
  181. "plt.hist(energyloss_lost, bins=150, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=\"lost\")\n",
  182. "plt.hist(energyloss_found, bins=150, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=\"found\")\n",
  183. "plt.xticks(np.arange(0,1.1,0.1), minor=True,)\n",
  184. "plt.yticks(np.arange(0,5,0.5), minor=True)\n",
  185. "plt.xlabel(r\"$E_\\gamma/E_0$\")\n",
  186. "plt.ylabel(\"counts (normed)\")\n",
  187. "plt.title(r'$E_{ph}/E_0$')\n",
  188. "plt.legend()\n",
  189. "plt.grid()\n",
  190. "\n",
  191. "\"\"\"\n",
  192. "found: elektronen verlieren durchschnittlich 0.44 ihrer anfangsenergie durch bremsstrahlung\n",
  193. "lost: elektronen verlieren durchschnittlich 0.59 ihrer anfangsenergie durch bremsstrahlung\n",
  194. "\n",
  195. "-> lost electrons lose slightly more energy than found electrons. This is however nowhere near as extreme as for the B decay\n",
  196. "\"\"\"\n",
  197. "\n",
  198. "#check if pt near 1 have small eta; perhaps exclude pt with eta outside range; or 2d plot\n",
  199. "\n",
  200. "plt.show()"
  201. ]
  202. },
  203. {
  204. "cell_type": "code",
  205. "execution_count": 8,
  206. "metadata": {},
  207. "outputs": [],
  208. "source": [
  209. "#ist die shape der teilspur im scifi anders? (koenntest du zum beispiel durch vergleich der verteilungen der fit parameter studieren,\n",
  210. "#in meiner thesis findest du das fitmodell -- ist einfach ein polynom dritten grades)\n",
  211. "z_ref=8520 #mm\n",
  212. "\n",
  213. "def scifi_track(z, a, b, c, d):\n",
  214. " return a + b*(z-z_ref) + c*(z-z_ref)**2 + d*(z-z_ref)**3\n",
  215. "\n",
  216. "def z_mag(xv, zv, tx, a, b):\n",
  217. " \"\"\" optical centre of the magnet is defined as the intersection between the trajectory tangents before and after the magnet\n",
  218. "\n",
  219. " Args:\n",
  220. " xv (double): velo x track\n",
  221. " zv (double): velo z track\n",
  222. " tx (double): velo x slope\n",
  223. " a (double): ax parameter of track fit\n",
  224. " b (double): bx parameter of track fit\n",
  225. "\n",
  226. " Returns:\n",
  227. " double: z_mag\n",
  228. " \"\"\"\n",
  229. " return (xv-tx*zv-a+b*z_ref)/(b-tx)"
  230. ]
  231. },
  232. {
  233. "cell_type": "code",
  234. "execution_count": 9,
  235. "metadata": {},
  236. "outputs": [],
  237. "source": [
  238. "scifi_found = found[found[\"scifi_hit_pos_x_length\"]>3]\n",
  239. "scifi_lost = lost[lost[\"scifi_hit_pos_x_length\"]>3]\n",
  240. "\n",
  241. "scifi_x_found = scifi_found[\"scifi_hit_pos_x\"]\n",
  242. "scifi_z_found = scifi_found[\"scifi_hit_pos_z\"]\n",
  243. "\n",
  244. "tx_found = scifi_found[\"velo_track_tx\"]\n",
  245. "\n",
  246. "scifi_x_lost = scifi_lost[\"scifi_hit_pos_x\"]\n",
  247. "scifi_z_lost = scifi_lost[\"scifi_hit_pos_z\"]\n",
  248. "\n",
  249. "tx_lost = scifi_lost[\"velo_track_tx\"]\n",
  250. "\n",
  251. "xv_found = scifi_found[\"velo_track_x\"]\n",
  252. "zv_found = scifi_found[\"velo_track_z\"]\n",
  253. "\n",
  254. "xv_lost = scifi_lost[\"velo_track_x\"]\n",
  255. "zv_lost = scifi_lost[\"velo_track_z\"]\n",
  256. "\n",
  257. "\n",
  258. "\n",
  259. "#ak.num(scifi_found[\"energy\"], axis=0)\n",
  260. "#scifi_found.snapshot()"
  261. ]
  262. },
  263. {
  264. "cell_type": "code",
  265. "execution_count": 10,
  266. "metadata": {},
  267. "outputs": [],
  268. "source": [
  269. "scifi_fitpars_found = ak.ArrayBuilder()\n",
  270. "\n",
  271. "for i in range(0,ak.num(scifi_found[\"energy\"], axis=0)):\n",
  272. " popt, pcov = curve_fit(scifi_track,ak.to_numpy(scifi_z_found[i,:]),ak.to_numpy(scifi_x_found[i,:]))\n",
  273. " scifi_fitpars_found.begin_list()\n",
  274. " scifi_fitpars_found.real(popt[0])\n",
  275. " scifi_fitpars_found.real(popt[1])\n",
  276. " scifi_fitpars_found.real(popt[2])\n",
  277. " scifi_fitpars_found.real(popt[3])\n",
  278. " scifi_fitpars_found.end_list()\n",
  279. "\n",
  280. "scifi_fitpars_lost = ak.ArrayBuilder()\n",
  281. "\n",
  282. "for i in range(0,ak.num(scifi_lost[\"energy\"], axis=0)):\n",
  283. " popt, pcov = curve_fit(scifi_track,ak.to_numpy(scifi_z_lost[i,:]),ak.to_numpy(scifi_x_lost[i,:]))\n",
  284. " scifi_fitpars_lost.begin_list()\n",
  285. " scifi_fitpars_lost.real(popt[0])\n",
  286. " scifi_fitpars_lost.real(popt[1])\n",
  287. " scifi_fitpars_lost.real(popt[2])\n",
  288. " scifi_fitpars_lost.real(popt[3])\n",
  289. " scifi_fitpars_lost.end_list()\n",
  290. "\n",
  291. "\n",
  292. "scifi_fitpars_lost = scifi_fitpars_lost.to_numpy()\n",
  293. "scifi_fitpars_found = scifi_fitpars_found.to_numpy()\n",
  294. "\n",
  295. "\n",
  296. "\n",
  297. "dtx_found = scifi_fitpars_found[:,1] - tx_found\n",
  298. "dtx_lost = scifi_fitpars_lost[:,1] - tx_lost\n"
  299. ]
  300. },
  301. {
  302. "cell_type": "code",
  303. "execution_count": 11,
  304. "metadata": {},
  305. "outputs": [
  306. {
  307. "data": {
  308. "image/png": "iVBORw0KGgoAAAANSUhEUgAABOwAAANVCAYAAADLJ2G2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAADqDElEQVR4nOzdeVzU1f7H8ffIjguKC4gLkmWuWUkq5IKZGKlZ6dX0XtxNMzOlm7kmWmmrl8zUFotsUW+praZSiUuQpaJlaouplIGK5q6s398f/ZjrMAMM6wzwej4e86g5c77n+/l+vzPj4TPne47JMAxDAAAAAAAAAJxCNUcHAAAAAAAAAOB/SNgBAAAAAAAAToSEHQAAAAAAAOBESNgBAAAAAAAAToSEHQAAAAAAAOBESNgBAAAAAAAAToSEHQAAAAAAAOBESNgBAAAAAAAAToSEHQAAAAAAAOBESNgBFcDq1avVpk0beXl5yWQyac+ePYqOjpbJZLKot2TJEsXGxjomSCf33nvvKSYmxtFhlFh8fLxMJpPi4+MdHYrdYmNjZTKZdOTIEYvyWbNmqWnTpnJ1dVXt2rUlSWFhYQoLCyu0TWd4r5tMJk2cONGhMQAAKj76eSXniH5eWFiY2rZtW+rtNmvWTCNGjCj1dsuSyWRSdHS0RdmXX36p4OBgVa9eXSaTSR9++GG+fcK8EhISFB0drTNnzpRZzIUZMWKEatSo4bD9AxIJO8DpnTx5UpGRkWrevLk2bNigxMREtWjRQmPGjFFiYqJFXTpy+assCbuKqE+fPkpMTFTDhg3NZR999JGeeuopDRs2TFu2bNEXX3wh6e/38JIlSwptk/c6AKAyoJ9XOujnOVZiYqLGjBljfm4YhgYNGiQ3Nzd9/PHHSkxMVPfu3W32CW1JSEjQ3LlzHZqwA5yBq6MDAFCwn3/+WZmZmfrXv/6l7t27m8u9vb3VuHFjB0Zm7fLly/L09LT6Rbgyu3z5sry8vBwdRrFdunRJ3t7eZbqP+vXrq379+hZl+/btkyRNmjRJDRo0MJe3bt261PefmZkpk8kkV1f+yQMAOBf6ec6tovfzsrOzlZWVJQ8PjzLdT+fOnS2e//nnnzp9+rTuuece9ezZ0+K1vH3C0lDRrxOQH0bYAU5sxIgR6tKliyRp8ODBMplM5tsF894q0axZM/3444/asmWLTCaTTCaTmjVrJul/t1G+8847ioqKkr+/v7y8vNS9e3clJSVZ7HPnzp2677771KxZM3l5ealZs2YaMmSIjh49alEvd0j7pk2bNGrUKNWvX1/e3t5KT0/Xr7/+qpEjR+q6666Tt7e3GjVqpH79+umHH36waCM3rvfee0+PPfaYGjZsqBo1aqhfv346fvy4zp8/r/vvv1/16tVTvXr1NHLkSF24cMGiDcMwtGTJEt14443y8vJSnTp1NHDgQP3222/mOmFhYfrss8909OhR87m5+txlZGToySefVMuWLeXh4aH69etr5MiROnnypMW+mjVrpr59+2rt2rW66aab5Onpqblz5+Z7/eLi4tS/f381btxYnp6euvbaazVu3DilpaXlu83VDh48qDvuuEPe3t6qV6+exo8fr/Pnz9us+8UXX6hnz56qVauWvL29deutt+rLL7+0qJP7ntm9e7cGDhyoOnXqqHnz5vnu/9KlS/r3v/+toKAgeXp6ytfXV8HBwVq5cqVFvR07dqhfv36qW7euPD091bx5c02ePNn8et7bH5o1a6ZZs2ZJkvz8/Cxuo7Dnllh73utvv/22HnnkETVq1EgeHh769ddfdfLkSU2YMEGtW7dWjRo11KBBA912223atm2b1T7S09M1b948tWrVSp6enqpbt6569OihhISEfOMyDEMzZsyQm5ubXnvttQKPAQAA+nkVu5+Xa9u2bercubO8vLzUqFEjzZ49W9nZ2YVul5mZqalTp8rf31/e3t7q0qWLvv32W5t1U1NTNW7cODVu3Fju7u4KCgrS3LlzlZWVZa5z5MgRmUwmPfvss3ryyScVFBQkDw8Pbd68Od8Y3n//fXXq1Ek+Pj7y9vbWNddco1GjRlnUOXPmjB555BFdc8018vDwUIMGDXTnnXfq4MGD5jpX9+Wio6PNyebHHnvM4r1qzy2x0dHRevTRRyVJQUFB5uuZOx1MQdfp5ZdfVrdu3dSgQQNVr15d7dq107PPPqvMzEyr/WzYsEE9e/Y0H3urVq20YMGCfOOSpK+//lr16tVT3759dfHixQLrAqWB4QaAE5s9e7Y6duyoBx98UPPnz1ePHj1Uq1Ytm3XXrVungQMHysfHx3xLYd5f02bMmKGbb75Zr7/+us6ePavo6GiFhYUpKSlJ11xzjaS//7G//vrrdd9998nX11cpKSlaunSpbrnlFu3fv1/16tWzaHPUqFHq06eP3n77bV28eFFubm76888/VbduXT399NOqX7++Tp8+rbfeekudOnVSUlKSrr/+equ4evToodjYWB05ckT//ve/NWTIELm6uqp9+/ZauXKlkpKSNGPGDNWsWVOLFi0ybztu3DjFxsZq0qRJeuaZZ3T69GnNmzdPoaGh2rt3r/z8/LRkyRLdf//9OnTokNatW2ex75ycHPXv31/btm3T1KlTFRoaqqNHj2rOnDkKCwvTzp07LX6x2717tw4cOKBZs2YpKChI1atXz/f6HTp0SCEhIRozZox8fHx05MgRLVy4UF26dNEPP/wgNze3fLc9fvy4unfvLjc3Ny1ZskR+fn569913bc6Z9s4772jYsGHq37+/3nrrLbm5uemVV15R7969tXHjRqtfNu+9917dd999Gj9+fIGdjaioKL399tt68sknddNNN+nixYvat2+fTp06Za6zceNG9evXT61atdLChQvVtGlTHTlyRJs2bcq33XXr1unll1/W8uXLtWHDBvn4+BRpFIE97/Xp06crJCREy5YtU7Vq1dSgQQNzx3zOnDny9/fXhQsXtG7dOoWFhenLL780/5GUlZWliIgIbdu2TZMnT9Ztt92mrKwsffPNN0pOTlZoaKhVTOnp6RoxYoQ+++wzffLJJ7rjjjvsPh4AQNVEP69i9/OkvxNp9913n6ZNm6Z58+bps88+05NPPqm//vpLixcvLnDbsWPHasWKFfr3v/+tXr16ad++fbr33nutfpxNTU1Vx44dVa1aNT3++ONq3ry5EhMT9eSTT+rIkSN68803LeovWrRILVq00PPPP69atWrpuuuus7n/xMREDR48WIMHD1Z0dLQ8PT119OhRffXVV+Y658+fV5cuXXTkyBE99thj6tSpky5cuKCtW7cqJSVFLVu2tGp3zJgxat++ve6991499NBDGjp0aJFG+I0ZM0anT5/WSy+9pLVr15pvn736Loz8rtOhQ4c0dOhQBQUFyd3dXXv37tVTTz2lgwcP6o033jBvv3z5co0dO1bdu3fXsmXL1KBBA/3888/mO0Bs+e9//6thw4Zp1KhReumll+Ti4mL3MQHFZgBwaps3bzYkGe+//75F+Zw5c4y8H+E2bdoY3bt3z7eNm2++2cjJyTGXHzlyxHBzczPGjBmT7/6zsrKMCxcuGNWrVzdefPFFc/mbb75pSDKGDRtW6DFkZWUZGRkZxnXXXWdMmTLFKq5+/fpZ1J88ebIhyZg0aZJF+d133234+vqanycmJhqSjBdeeMGi3u+//254eXkZU6dONZf16dPHCAwMtIpt5cqVhiRjzZo1FuXfffedIclYsmSJuSwwMNBwcXExfvrpp0KPOa+cnBwjMzPTOHr0qCHJ+Oijjwqs/9hjjxkmk8nYs2ePRXmvXr0MScbmzZsNwzCMixcvGr6+vlbnMDs722jfvr3RsWNHc1nue+bxxx+3K+a2bdsad999d4F1mjdvbjRv3ty4fPlyvnVy3yuHDx+2iuXkyZMWdbt3727zPZxXYe/1bt26FdpGVlaWkZmZafTs2dO45557zOUrVqwwJBmvvfZagdtLMh588EHj1KlTRpcuXYxGjRpZXS8AAApCP+9/Klo/r3v37jb7dGPHjjWqVatmHD16NN9tDxw4YEiyOF+GYRj
  309. "text/plain": [
  310. "<Figure size 1500x1000 with 4 Axes>"
  311. ]
  312. },
  313. "metadata": {},
  314. "output_type": "display_data"
  315. }
  316. ],
  317. "source": [
  318. "fig, ((ax0, ax1), (ax2, ax3)) = plt.subplots(nrows=2, ncols=2, figsize=(15,10))\n",
  319. "\n",
  320. "ax0.hist(scifi_fitpars_found[:,0], bins=100, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=r\"$a_x$ found\")\n",
  321. "ax0.hist(scifi_fitpars_lost[:,0], bins=100, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=r\"$a_x$ lost\")\n",
  322. "ax0.set_xlabel(\"a\")\n",
  323. "ax0.set_ylabel(\"normed\")\n",
  324. "ax0.set_title(\"fitparameter a der scifi track\")\n",
  325. "ax0.legend()\n",
  326. "\n",
  327. "ax1.hist(scifi_fitpars_found[:,1], bins=100, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=r\"$b_x$ found\")\n",
  328. "ax1.hist(scifi_fitpars_lost[:,1], bins=100, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=r\"$b_x$ lost\")\n",
  329. "ax1.set_xlabel(\"b\")\n",
  330. "ax1.set_ylabel(\"normed\")\n",
  331. "ax1.set_title(\"fitparameter b der scifi track\")\n",
  332. "ax1.legend()\n",
  333. "\n",
  334. "ax2.hist(scifi_fitpars_found[:,2], bins=200, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=r\"$c_x$ found\")\n",
  335. "ax2.hist(scifi_fitpars_lost[:,2], bins=1000, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=r\"$c_x$ lost\")\n",
  336. "ax2.set_xlim([-4e-5,4e-5])\n",
  337. "ax2.set_xticks(np.arange(-4e-5,4.5e-5,1e-5),minor=False)\n",
  338. "ax2.set_xlabel(\"c\")\n",
  339. "ax2.set_ylabel(\"normed\")\n",
  340. "ax2.set_title(\"fitparameter c der scifi track\")\n",
  341. "ax2.legend()\n",
  342. "\n",
  343. "ax3.hist(scifi_fitpars_found[:,3], bins=200, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=r\"$d_x$ found\")\n",
  344. "ax3.hist(scifi_fitpars_lost[:,3], bins=1000, density=True, alpha=0.5, histtype='bar', color=\"darkorange\", label=r\"$d_x$ lost\")\n",
  345. "ax3.set(xlim=(-5e-8,5e-8))\n",
  346. "#ax3.text(-4e-8,3e8,\"d negligible <1e-7\")\n",
  347. "ax3.set_xlabel(\"d\")\n",
  348. "ax3.set_ylabel(\"normed\")\n",
  349. "ax3.set_title(\"fitparameter d der scifi track\")\n",
  350. "ax3.legend()\n",
  351. "\n",
  352. "\"\"\"\n",
  353. "a_x: virtual hit on the reference plane\n",
  354. "\"\"\"\n",
  355. "\n",
  356. "plt.show()"
  357. ]
  358. },
  359. {
  360. "cell_type": "code",
  361. "execution_count": 12,
  362. "metadata": {},
  363. "outputs": [
  364. {
  365. "name": "stdout",
  366. "output_type": "stream",
  367. "text": [
  368. "found\n",
  369. "a = 18.04180550457298\n",
  370. "b = 0.0057651944487250376\n",
  371. "c = 9.480277789440454e-08\n",
  372. "d = -4.452015498411874e-11\n",
  373. "lost\n",
  374. "a = -35.48371609662243\n",
  375. "b = -0.010382326385451382\n",
  376. "c = -6.208301288913938e-07\n",
  377. "d = 9.580933791481267e-11\n"
  378. ]
  379. }
  380. ],
  381. "source": [
  382. "print(\"found\")\n",
  383. "print(\"a = \", str(np.mean(scifi_fitpars_found[:,0])))\n",
  384. "print(\"b = \", str(np.mean(scifi_fitpars_found[:,1])))\n",
  385. "print(\"c = \", str(np.mean(scifi_fitpars_found[:,2])))\n",
  386. "print(\"d = \", str(np.mean(scifi_fitpars_found[:,3])))\n",
  387. "\n",
  388. "print(\"lost\")\n",
  389. "print(\"a = \", str(np.mean(scifi_fitpars_lost[:,0])))\n",
  390. "print(\"b = \", str(np.mean(scifi_fitpars_lost[:,1])))\n",
  391. "print(\"c = \", str(np.mean(scifi_fitpars_lost[:,2])))\n",
  392. "print(\"d = \", str(np.mean(scifi_fitpars_lost[:,3])))"
  393. ]
  394. },
  395. {
  396. "cell_type": "code",
  397. "execution_count": 13,
  398. "metadata": {},
  399. "outputs": [
  400. {
  401. "data": {
  402. "text/plain": [
  403. "-1.5438992626615335e-08"
  404. ]
  405. },
  406. "execution_count": 13,
  407. "metadata": {},
  408. "output_type": "execute_result"
  409. }
  410. ],
  411. "source": [
  412. "np.min(scifi_fitpars_found[:,3])"
  413. ]
  414. },
  415. {
  416. "cell_type": "code",
  417. "execution_count": 14,
  418. "metadata": {},
  419. "outputs": [
  420. {
  421. "data": {
  422. "image/png": "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/zPuBDQY/kZ87nOfY8mSJXzkIx/hzjvvZM2aNaeWcT7wwAO8+93v5rLLLuMXv/gFhUKBu+++m9WrV7Np06ZToeBP9cQTT9DZ2cmXv/xlXC4Xd999N29729vo7u6msbERgE2bNnHNNdewfPlyHnzwQVRV5e677z4VUl7NPffcwwc/+EH6+vp45JFHzlrn29/+Ni0tLfz7v/87Ho+H5uZmCoUC0WiUf/7nf6aqqopiscjGjRu57rrruPfee7nllltOff62227j/vvv533vex9f/vKXkSSJffv2veIzS3Rd55Of/CTf/va3+eEPf3hqEurBBx/k9ttv5x/+4R/493//d0RR5MSJE3R1db3qOebzedasWUNfXx9f+tKXmDt3Ltu2beOuu+7iwIEDPPHEE6eWdNx+++0kEgl+/vOfA698p9zAwADr169n5cqV/PjHP8bn8zE6OsrTTz9NsVjE4XCgKArr1q1j27Zt3HHHHVx88cUoisLOnTsZGhpixYoVZ7S7fv16duzYwfLly7nhhhv4xCc+8arn9mre//73s379eh544AGGh4f55Cc/yd/93d+xefPms9avqKjg6aef5oorruB973sf73//+wFOTQzefPPN7Nu3j3/7t3+jpaWFeDzOvn37iEQif3YfDQaDwWA4391111185jOf4aabbuKuu+4iEonwxS9+keXLl9PZ2UlzczMAV1555amMVltby/T0NNu3bycejwO/fzzIDTfcgNfrPfW4jldbebFjxw4uvvhi1qxZw+c+9zmAsz5eZP369fzsZz8jk8lgsVgYGxsjGAzyta99jZKSEqLRKD/5yU9YunQp+/fvZ+bMmcDvLyZeeOGFDAwM8KlPfYqlS5eSTqfZunUr4+PjtLa2ntGneDzOddddx7Fjx9iyZQsLFy4E4OMf/zg/+9nP+OpXv8r8+fPJZDIcOXLkNTNEd3c3K1asoLS0lG9/+9sEg0Huv/9+brvtNiYnJ/mXf/mXPzk7nUueHB0dZfHixciyzGc+8xnmzp1LJBLhmWeeIRaLUVZWdka7r/Z7wp9ClmWuvvpq3ve+9/GJT3yCrVu38pWvfAWv18vnP//5s35m/fr13HnnnXzmM5/hu9/9LgsWLACgqamJTCbDpZdeSkNDA9/97ncpKytjYmKC559/nlQq9Sf3z2AwALrBYPib8fzzz+uA/qtf/epUmaqqemVlpT5nzhxdVdVT5alUSi8tLdVXrFhxquzWW2/V6+rqzmj3C1/4gv7H/50AellZmZ5MJk+VTUxM6KIo6nfdddepsqVLl+qVlZV6Lpc7VZZMJvVAIHBGm2ezfv36s/apv79fB/Smpia9WCy+ahuKouiyLOvve9/79Pnz558q37p1qw7on/3sZ1/183V1dfr69ev1bDarX3/99brX69U3btx4Wp2PfvSjus/ne83z+WPf//73dUD/5S9/eVr517/+dR3Qn3322VNlq1at0tvb21+zzV//+tc6oB84cOAV6/z0pz/VAf1//ud/XrWturo6/dZbbz2tDNA/8pGPnFb28t+9559//lXbu/fee3VAv/32208rv/vuu3VAHx8fP1W2atUqfdWqVadeh8NhHdC/8IUvnNGuy+XS77jjjlc9tsFgMBgMb2Uv/4zt7+/XdV3XY7GYbrfb9SuvvPK0ekNDQ7r
  423. "text/plain": [
  424. "<Figure size 1500x600 with 2 Axes>"
  425. ]
  426. },
  427. "metadata": {},
  428. "output_type": "display_data"
  429. }
  430. ],
  431. "source": [
  432. "fig, ((ax0, ax1)) = plt.subplots(nrows=1, ncols=2, figsize=(15,6))\n",
  433. "\n",
  434. "for i in range(0,ak.num(scifi_found[\"energy\"], axis=0)):\n",
  435. " z_coord = np.linspace(scifi_z_found[i,0],12000,300)\n",
  436. " fit = scifi_track(z_coord, *scifi_fitpars_found[i])\n",
  437. " ax0.plot(z_coord, fit, \"-\", lw=0.5)\n",
  438. " ax0.errorbar(ak.to_numpy(scifi_z_found[i,:]),ak.to_numpy(scifi_x_found[i,:]),fmt=\".\",ms=2)\n",
  439. "\n",
  440. "#ax0.legend()\n",
  441. "ax0.set_xlabel(\"z [mm]\")\n",
  442. "ax0.set_ylabel(\"x [mm]\")\n",
  443. "ax0.set_title(\"found tracks of scifi hits\")\n",
  444. "ax0.set(xlim=(7e3,12000), ylim=(-4000,4000))\n",
  445. "ax0.grid()\n",
  446. "\n",
  447. "for i in range(0,ak.num(scifi_lost[\"energy\"], axis=0)):\n",
  448. " z_coord = np.linspace(scifi_z_lost[i,0],12000,300)\n",
  449. " fit = scifi_track(z_coord, *scifi_fitpars_lost[i])\n",
  450. " ax1.plot(z_coord, fit, \"-\", lw=0.5)\n",
  451. " ax1.errorbar(ak.to_numpy(scifi_z_lost[i,:]),ak.to_numpy(scifi_x_lost[i,:]),fmt=\".\",ms=2)\n",
  452. "\n",
  453. "#ax1.legend()\n",
  454. "ax1.set_xlabel(\"z [mm]\")\n",
  455. "ax1.set_ylabel(\"x [mm]\")\n",
  456. "ax1.set_title(\"lost tracks of scifi hits\")\n",
  457. "ax1.set(xlim=(7e3,12000), ylim=(-4000,4000))\n",
  458. "ax1.grid()\n",
  459. "\n",
  460. "plt.show()"
  461. ]
  462. },
  463. {
  464. "cell_type": "code",
  465. "execution_count": 15,
  466. "metadata": {},
  467. "outputs": [
  468. {
  469. "name": "stdout",
  470. "output_type": "stream",
  471. "text": [
  472. "found \n",
  473. "zmag = 5318.452650242005\n",
  474. "lost \n",
  475. "zmag = 5425.137423441005\n"
  476. ]
  477. }
  478. ],
  479. "source": [
  480. "#vergleich der zmag werte\n",
  481. "zmag_found = z_mag(xv_found, zv_found, tx_found, scifi_fitpars_found[:,0], scifi_fitpars_found[:,1])\n",
  482. "zmag_lost = z_mag(xv_lost, zv_lost, tx_lost, scifi_fitpars_lost[:,0], scifi_fitpars_lost[:,1])\n",
  483. "zmag_lost = zmag_lost[~np.isnan(zmag_lost)]\n",
  484. "zmag_found = zmag_found[~np.isnan(zmag_found)]\n",
  485. "\n",
  486. "print(\"found \\nzmag = \", str(np.mean(zmag_found)))\n",
  487. "print(\"lost \\nzmag = \", str(np.mean(zmag_lost)))"
  488. ]
  489. },
  490. {
  491. "cell_type": "code",
  492. "execution_count": 16,
  493. "metadata": {},
  494. "outputs": [
  495. {
  496. "data": {
  497. "image/png": "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8x8jybz99tvGGGM6depkGjVqZM6ePWvPk5mZadq2bWuaNGlib8NatWqZ8ePHF3jM3OdpTP5t6ixvUetS1H/3olqzZo3x8vIyf//734u1n1WK+vm4Un7XkzEl+/wNHz7cBAcH50nPafuCyi9O/fL7fBT1mjXGmMjISBMUFGT+/PNPe1paWpqpV69enro6c++995oWLVrY3/fq1cuMGjXK+Pv7mzfeeMMYY8yXX35pJJkNGzbkW86mTZuMJPPee+85pBfnuijqdetMfm2cU+Y///nPfPctahmluf+X9j5cnM9EfudclPtYVcPQYSV02223ObwPDQ2VzWZTv3797Gnu7u5q1aqVfvnlF3taZmamnnvuOYWFhcnT01Pu7u7y9PTU4cOHdejQIUnS+fPn9c0332jQoEHy9PS071urVi3dfvvt+dZpwIABDu/bt2+vixcvKiUlRRcvXtRnn32mO+64Qz4+PsrMzLS/+vfvr4sXL+qrr74qVZs8++yzGjFihGbNmqW5c+eqRo38P9oXLlzQli1bNHTo0CLP2yhO+bkNGzbM4f3QoUPl7u6uTZs26fz589qxY4fuvPNO1apVy57Hzc1NsbGx+vXXX/X9999Lkm688UYtX75czzzzjL766itlZGQUuQ5FUZy65Cjo372o3nrrLd1111168skn9eKLL5buJMpAUT8fRbmeSlN+aZW0fpKKdc2eP39eO3fu1ODBg+Xt7W0vo3bt2gXeM650yy236KefftKRI0d08eJFbdu2TX379tVNN92k+Ph4SZd7uby8vOzDg1Yr6LrNUdw2HjJkSJ604pZR0vt/ae/DJd0/9zlbfR+riAi0KqF69eo5vPf09JSPj4/DTS4n/eLFi/b3EydO1NSpUzVo0CB9+OGH2rFjh3bu3KnrrrtOf/75pyTpzJkzMsYoICAgz3GdpeWoX7++w/ucoY8///xTp06dUmZmpl599VV5eHg4vPr37y9JpV4+4e2339ZVV12lu+++u9C8Z86cUVZWlpo0aWJJ+bk1btzY4b27u7vq16+vU6dO2dvb2S//goKCJMnepb5y5UoNHz5c//73v9W5c2fVq1dP9913n5KTk4tdJ2eKU5ccBf27F8X8+fN1//3365VXXtGTTz7psG3u3Lm66667dM8996hOnTqKjIxUcnKyxo0bp3r16qlt27b2L5Jjx46pX79+atiwoerWrauHHnpI2dnZki5/kf3jH/9Q48aN1bJlSy1evNg+Pya/dijK56Mo11Npyi+tktZPUrGu2TNnzig7OzvP51zK+9nPT69evSRdDqa2bdumjIwM3XzzzerVq5c+++wz+7YuXbqoZs2aRW6D0ijous1R3DZ2dm0Vt4yS3v9Lex8u6f65z9nq+1hFxBytauTtt9/Wfffdp+eee84h/eTJk6pbt64kyd/fXzabzencipJeCP7+/vZekTFjxjjNExISUqKyc6xfv14xMTHq1q2bPvvsMwUHB+ebt169enJzc9Ovv/5qSfm5JScn66qrrrK/z8zM1KlTp1S/fn35+/urRo0aSkpKyrPfb7/9Jklq0KCB/b9z5szRnDlzdPToUa1du1aTJ09WSkqK1q9fX+T65Kc4dSkLzz77rKZPn67XX39d9913X57t+/bt09dff63Vq1fr9ddfV1RUlG655RbNnTt
  498. "text/plain": [
  499. "<Figure size 640x480 with 1 Axes>"
  500. ]
  501. },
  502. "metadata": {},
  503. "output_type": "display_data"
  504. }
  505. ],
  506. "source": [
  507. "plt.hist(zmag_found, bins=100, density=True, alpha=0.5, histtype='bar', color=\"blue\", label=\"found\")\n",
  508. "plt.hist(zmag_lost, bins=3000, density=True, alpha=0.5, histtype=\"bar\",color=\"darkorange\", label=\"lost\")\n",
  509. "plt.xlabel(\"$z_{mag}$ [mm]\")\n",
  510. "plt.ylabel(\"normed\")\n",
  511. "plt.title(\"magnet kick position $z_{mag}$ calculated w fitparameters\")\n",
  512. "plt.legend()\n",
  513. "plt.xticks(np.arange(5100,5805,5), minor=True)\n",
  514. "plt.yticks(np.arange(0,0.011,0.001), minor=True)\n",
  515. "plt.xlim(5100,5800)\n",
  516. "\n",
  517. "\"\"\"\n",
  518. "wir können definitiv einen unterschied zwischen den z_mag werten, bzw deren verteilungen für lost and found, erkennen\n",
  519. "\"\"\"\n",
  520. "\n",
  521. "plt.show()"
  522. ]
  523. },
  524. {
  525. "cell_type": "code",
  526. "execution_count": 32,
  527. "metadata": {},
  528. "outputs": [
  529. {
  530. "name": "stdout",
  531. "output_type": "stream",
  532. "text": [
  533. "2591\n",
  534. "1908\n",
  535. "4499\n",
  536. "5767\n"
  537. ]
  538. }
  539. ],
  540. "source": [
  541. "both = ak.concatenate([found,lost],axis=0)\n",
  542. "print(ak.num(found,axis=0))\n",
  543. "print(ak.num(lost,axis=0))\n",
  544. "print(ak.num(both,axis=0))\n",
  545. "\n",
  546. "tracks = allcolumns[(allcolumns.fromSignal) & (allcolumns.isElectron) & (~allcolumns.lost)]\n",
  547. "alltracks = allcolumns[(allcolumns.fromSignal) & (allcolumns.isElectron)]\n",
  548. "print(ak.num(tracks,axis=0))"
  549. ]
  550. },
  551. {
  552. "cell_type": "code",
  553. "execution_count": 33,
  554. "metadata": {},
  555. "outputs": [
  556. {
  557. "name": "stdout",
  558. "output_type": "stream",
  559. "text": [
  560. "#events w/ shared track electrons from found and lost: 35\n",
  561. "event_count: [359, 359]\n",
  562. "velo idx: [25, 25]\n",
  563. "mcp_index: [2926, 2936]\n",
  564. "\n",
  565. "velo x: [5.89, 5.89]\n",
  566. "velo y: [9.81, 9.81]\n",
  567. "\n",
  568. "velo tx: [0.00824, 0.00824]\n",
  569. "velo ty: [0.0135, 0.0135]\n",
  570. "percentage of e with shared tracks: 0.7488\n"
  571. ]
  572. }
  573. ],
  574. "source": [
  575. "#versuche teilchen von denselben events mit shared tracks zu finden. \n",
  576. "#idee: alle teilchen eines events sind durch event_count auffindbar. \n",
  577. "a_f_itr = tracks[\"event_count\"].to_numpy()\n",
  578. "f_itr = np.unique(a_f_itr)\n",
  579. "\n",
  580. "shared = ak.ArrayBuilder()\n",
  581. "count = 0\n",
  582. "\n",
  583. "for itr in f_itr:\n",
  584. " temp = alltracks[alltracks[\"event_count\"]==itr]\n",
  585. " if ak.num(temp,axis=0)>1:\n",
  586. " #iterate over cols in temp and append all with duplicate velo_track_idx, such that possibles is array with possible shared tracks particles\n",
  587. " #idea: look at one event at a time and at one velo track at a time. if there are at least two e with the same velo_track_idx in the same event,\n",
  588. " #concatenate to the array of other shared track particles\n",
  589. " _jitr = temp[\"velo_track_idx\"].to_numpy()\n",
  590. " jitr = np.unique(_jitr)\n",
  591. " for jentry in jitr:\n",
  592. " jtem = temp[temp[\"velo_track_idx\"]==jentry]\n",
  593. " if ak.num(jtem,axis=0)>1:\n",
  594. " shared.append(jtem)\n",
  595. " else:\n",
  596. " continue\n",
  597. " else:\n",
  598. " continue\n",
  599. "shared = ak.Array(shared)\n",
  600. "\n",
  601. "idx=0\n",
  602. "print(\"#events w/ shared track electrons from found and lost: \",ak.num(shared, axis=0))\n",
  603. "\n",
  604. "print(\"event_count: \", shared[idx,:,\"event_count\"])\n",
  605. "print(\"velo idx: \" ,shared[idx,:,\"velo_track_idx\"])\n",
  606. "print(\"mcp_index: \", shared[idx,:,\"mcp_idx\"])\n",
  607. "\n",
  608. "print(\"\\nvelo x: \" ,shared[idx,:,\"velo_track_x\"])\n",
  609. "print(\"velo y: \" ,shared[idx,:,\"velo_track_y\"])\n",
  610. "\n",
  611. "print(\"\\nvelo tx: \" ,shared[idx,:,\"velo_track_tx\"])\n",
  612. "print(\"velo ty: \" ,shared[idx,:,\"velo_track_ty\"])\n",
  613. "\n",
  614. "\n",
  615. "\n",
  616. "print(\"percentage of e with shared tracks: \", np.round((ak.num(shared,axis=0)*2)/(ak.num(alltracks,axis=0))*100,4)) #error for percentage"
  617. ]
  618. },
  619. {
  620. "cell_type": "code",
  621. "execution_count": 82,
  622. "metadata": {},
  623. "outputs": [
  624. {
  625. "name": "stdout",
  626. "output_type": "stream",
  627. "text": [
  628. "#velo_track_idx in all events: 217\n",
  629. "velo idx: [0, 0, 0]\n",
  630. "mcp_index: [1066, 1251, 666]\n",
  631. "event_count: [5735, 7049, 7378]\n",
  632. "\n",
  633. "velo x: [-2.21, 9.45, -18.5]\n",
  634. "velo y: [-21.6, -33.4, 17.4]\n",
  635. "\n",
  636. "velo tx: [-0.0022, 0.0153, -0.0224]\n",
  637. "velo ty: [-0.0263, -0.0469, 0.0212]\n"
  638. ]
  639. }
  640. ],
  641. "source": [
  642. "#electrons with same velo_track_idx from all events\n",
  643. "temp_ = found[\"velo_track_idx\"].to_numpy()\n",
  644. "temp = np.unique(temp_)\n",
  645. "count=0\n",
  646. "psb=ak.ArrayBuilder()\n",
  647. "for jentry in temp:\n",
  648. " jtem = found[found[\"velo_track_idx\"]==jentry]\n",
  649. " if ak.num(jtem,axis=0)>1:\n",
  650. " psb.append(jtem)\n",
  651. " else:\n",
  652. " continue\n",
  653. "\n",
  654. "psb = ak.Array(psb)\n",
  655. "\n",
  656. "print(\"#velo_track_idx in all events: \",ak.num(psb,axis=0))\n",
  657. "idx = 0\n",
  658. "print(\"velo idx: \" ,psb[idx,:,\"velo_track_idx\"])\n",
  659. "print(\"mcp_index: \", psb[idx,:,\"mcp_idx\"])\n",
  660. "print(\"event_count: \", psb[idx,:,\"event_count\"])\n",
  661. "print(\"\\nvelo x: \" ,psb[idx,:,\"velo_track_x\"])\n",
  662. "print(\"velo y: \" ,psb[idx,:,\"velo_track_y\"])\n",
  663. "\n",
  664. "print(\"\\nvelo tx: \" ,psb[idx,:,\"velo_track_tx\"])\n",
  665. "print(\"velo ty: \" ,psb[idx,:,\"velo_track_ty\"])\n",
  666. "\n"
  667. ]
  668. },
  669. {
  670. "cell_type": "code",
  671. "execution_count": null,
  672. "metadata": {},
  673. "outputs": [],
  674. "source": []
  675. },
  676. {
  677. "cell_type": "code",
  678. "execution_count": 28,
  679. "metadata": {},
  680. "outputs": [
  681. {
  682. "name": "stdout",
  683. "output_type": "stream",
  684. "text": [
  685. "#events w/ shared track electrons from Photon Conversions: 951\n",
  686. "shared_idx: 0\n",
  687. "event_count: [11, 11]\n",
  688. "velo idx: [27, 27]\n",
  689. "mcp_index: [1211, 1215]\n",
  690. "\n",
  691. "velo x: [-20.4, -20.4]\n",
  692. "velo y: [-24.4, -24.4]\n",
  693. "\n",
  694. "velo tx: [-0.0234, -0.0234]\n",
  695. "velo ty: [-0.028, -0.028]\n",
  696. "percentage of e with shared tracks: 5.59\n"
  697. ]
  698. }
  699. ],
  700. "source": [
  701. "#generell: wie viele elektronen von photon conversions teilen sich einen track?\n",
  702. "conv = allcolumns[(allcolumns.fromPairProd) & (allcolumns.isElectron) & (~allcolumns.lost)]\n",
  703. "\n",
  704. "conv_it = conv[\"event_count\"].to_numpy()\n",
  705. "conv_itr = np.unique(conv_it)\n",
  706. "\n",
  707. "cshared = ak.ArrayBuilder()\n",
  708. "count = 0\n",
  709. "\n",
  710. "for itr in conv_itr:\n",
  711. " temp = conv[conv[\"event_count\"]==itr]\n",
  712. " if ak.num(temp,axis=0)>1:\n",
  713. " #iterate over cols in temp and append all with duplicate velo_track_idx, such that possibles is array with possible shared tracks particles\n",
  714. " #idea: look at one event at a time and at one velo track at a time. if there are at least two e with the same velo_track_idx in the same event,\n",
  715. " #concatenate to the array of other shared track particles\n",
  716. " _jitr = temp[\"velo_track_idx\"].to_numpy()\n",
  717. " jitr = np.unique(_jitr)\n",
  718. " for jentry in jitr:\n",
  719. " jtem = temp[temp[\"velo_track_idx\"]==jentry]\n",
  720. " if ak.num(jtem,axis=0)>1:\n",
  721. " cshared.append(jtem)\n",
  722. " else:\n",
  723. " continue\n",
  724. " else:\n",
  725. " continue\n",
  726. "cshared = ak.Array(cshared)\n",
  727. "\n",
  728. "\n",
  729. "print(\"#events w/ shared track electrons from Photon Conversions: \",ak.num(cshared, axis=0))\n",
  730. "idx = 0\n",
  731. "print(\"shared_idx: \", idx)\n",
  732. "print(\"event_count: \", cshared[idx,:,\"event_count\"])\n",
  733. "print(\"velo idx: \" ,cshared[idx,:,\"velo_track_idx\"])\n",
  734. "print(\"mcp_index: \", cshared[idx,:,\"mcp_idx\"])\n",
  735. "\n",
  736. "print(\"\\nvelo x: \" ,cshared[idx,:,\"velo_track_x\"])\n",
  737. "print(\"velo y: \" ,cshared[idx,:,\"velo_track_y\"])\n",
  738. "\n",
  739. "print(\"\\nvelo tx: \" ,cshared[idx,:,\"velo_track_tx\"])\n",
  740. "print(\"velo ty: \" ,cshared[idx,:,\"velo_track_ty\"])\n",
  741. "\n",
  742. "print(\"percentage of e with shared tracks: \", np.round((ak.num(cshared,axis=0)*2)/(ak.num(conv,axis=0))*100,4))\n",
  743. "\n",
  744. "#constrain z pos of brem vtx; only interested in conversions in velo z<770\n"
  745. ]
  746. },
  747. {
  748. "cell_type": "code",
  749. "execution_count": 29,
  750. "metadata": {},
  751. "outputs": [
  752. {
  753. "data": {
  754. "text/plain": [
  755. "34025"
  756. ]
  757. },
  758. "execution_count": 29,
  759. "metadata": {},
  760. "output_type": "execute_result"
  761. }
  762. ],
  763. "source": [
  764. "ak.num(conv,axis=0)"
  765. ]
  766. },
  767. {
  768. "cell_type": "code",
  769. "execution_count": null,
  770. "metadata": {},
  771. "outputs": [],
  772. "source": []
  773. },
  774. {
  775. "cell_type": "code",
  776. "execution_count": null,
  777. "metadata": {},
  778. "outputs": [],
  779. "source": []
  780. },
  781. {
  782. "cell_type": "code",
  783. "execution_count": null,
  784. "metadata": {},
  785. "outputs": [],
  786. "source": []
  787. },
  788. {
  789. "cell_type": "code",
  790. "execution_count": null,
  791. "metadata": {},
  792. "outputs": [],
  793. "source": []
  794. },
  795. {
  796. "cell_type": "code",
  797. "execution_count": null,
  798. "metadata": {},
  799. "outputs": [],
  800. "source": []
  801. },
  802. {
  803. "cell_type": "code",
  804. "execution_count": null,
  805. "metadata": {},
  806. "outputs": [],
  807. "source": [
  808. "\"\"\"\n",
  809. "was meinst du? velo track sharen? wie überprüfe ich das? versuche ich einfach e teilchen mit identischen velo tracks und slopes zu finden?\n",
  810. "benutze ich mother key um elektronen von gleichen events zu finden? meinst du wie viele elektronen vom selben event teilen sich einen track,\n",
  811. "oder wie viele teilchen von unterschiedlichen events haben dieselben tracks?\n",
  812. "\"\"\"\n"
  813. ]
  814. },
  815. {
  816. "cell_type": "code",
  817. "execution_count": null,
  818. "metadata": {},
  819. "outputs": [],
  820. "source": []
  821. },
  822. {
  823. "cell_type": "code",
  824. "execution_count": null,
  825. "metadata": {},
  826. "outputs": [],
  827. "source": []
  828. },
  829. {
  830. "cell_type": "code",
  831. "execution_count": null,
  832. "metadata": {},
  833. "outputs": [],
  834. "source": []
  835. }
  836. ],
  837. "metadata": {
  838. "kernelspec": {
  839. "display_name": "env1",
  840. "language": "python",
  841. "name": "python3"
  842. },
  843. "language_info": {
  844. "codemirror_mode": {
  845. "name": "ipython",
  846. "version": 3
  847. },
  848. "file_extension": ".py",
  849. "mimetype": "text/x-python",
  850. "name": "python",
  851. "nbconvert_exporter": "python",
  852. "pygments_lexer": "ipython3",
  853. "version": "3.11.5"
  854. },
  855. "orig_nbformat": 4
  856. },
  857. "nbformat": 4,
  858. "nbformat_minor": 2
  859. }