{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 5 minutes intro to IPython for ROOT users\n", "\n", "In this notebook we show how to use inside IPython __ROOT__ (C++ library, de-facto standard in High Energy Physics).\n", "\n", "This notebook is aimed to help __ROOT__ users.\n", "\n", "Working using ROOT-way loops is very slow in python and in most cases useless.\n", "\n", "You're proposed to use `root_numpy` — a very convenient python library to operate with ROOT (`root_numpy` is included in REP docker image, but it is installed quite easily)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Allowing inline plots" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating ROOT file using root_numpy\n", "\n", "There are two libraries to work with ROOT files\n", "\n", "* rootpy http://www.rootpy.org - direct wrapper to ROOT methods.\n", "* root_numpy http://rootpy.github.io/root_numpy/ - new-style, efficient and simple library to deal with ROOT files from python\n", "\n", "Let's show how to use the second library." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy\n", "import root_numpy\n", "# generating random data\n", "data = numpy.random.normal(size=[10000, 2])\n", "# adding names of columns\n", "data = data.view([('first', float), ('second', float)])\n", "# saving to file\n", "root_numpy.array2root(data, filename='./toy_datasets/random.root', treename='tree', mode='recreate')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MiniBooNE_PID.txt README.md magic04.data random.root wget-log\r\n" ] } ], "source": [ "!ls ./toy_datasets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Add column to the ROOT file using root_numpy" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from rootpy.io import root_open\n", "with root_open('./toy_datasets/random.root', mode='a') as myfile:\n", " new_column = numpy.array(numpy.ones([10000, 1]) , dtype=[('new', 'f8')])\n", " root_numpy.array2tree(new_column, tree=myfile.tree)\n", " myfile.write()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([(-0.7293706390084891, -0.6434950644122529),\n", " (0.9144554461677479, 0.18204403981590392),\n", " (1.4880249632214615, 1.0750267248542769), ...,\n", " (0.8314923070439978, -0.18743518192156958),\n", " (0.43746295194683626, -0.3003532169872483),\n", " (0.8587695590082538, 0.17430817995134756)], \n", " dtype=[('first', '" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import ROOT\n", "from rep.plotting import canvas\n", "canvas = canvas('my_canvas')\n", "function1 = ROOT.TF1( 'fun1', 'abs(sin(x)/x)', 0, 10)\n", "canvas.SetGridx()\n", "canvas.SetGridy()\n", "function1.Draw()\n", "# Drawing output (last line is considered as output of cell)\n", "canvas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Plot histogram using ROOT for branch in root file" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxwAAAI8CAIAAAD0vjrdAAAABmJLR0QAAAAAAAD5Q7t/AAAgAElE\nQVR4nO3dS7LkRnK2YcdvWgS1gKqihtIGgJwWTd3UJlhD1YQmagRgJJm1Bt3Dqk3o0tacJrACTUnW\nArQM/APXCUUBSJzMSFw8HO9jNBoqDzIPvkRe/DgCgWIYBgEAAMBz/t/RGwAAAOABRRUAAMAKKKoA\nAABWQFEFAACwAooqAACAFVBUAQAArICiCgAAYAUUVQAAACugqAJwgJ9++umnn34K/3z//v2BGwMA\nq/irozcAwOkURaELv/zyy3/8x3/83d/93X//93//9V//9f/8z/8cu2EA8Aw6VQB29e233+rC73//\n+7C8rh9//PHdu3e/+93vtnhwALiFThWAXf36668i8k//9E//+q//qrd88803f/u3f/vNN9+s+Ct+\n++23tR4NAO5EUQXgYD///PPRmwAAK6CoAnCAX3755c41//mf//mXX37593//9/jGjx8/fvnyRUTe\nvHnzxz/+cf3tA4DHFcMwHL0NAE7h+++//8///M/4lt///vdhoPo333wTBqrrSPZhGP7mb/5Gy6+f\nfvrpX/7lX0Tku+++m3a23r9//5e//EVEfvzxx3/7t38b/ZRPOQD7YKA6gJ18++2379690+V37969\ne/dueaD6P/zDP4waWh8/ftSK6s2bN+/fv3///v2bN29E5Oeff/748aOI/OEPf3j79m1Y/+3bt3//\n93+/ehAAmEWnCsCutAsVD1S/1akSke+//z4+8Ke3v3nzJh6H/vbt2y9fvsQ3/u53v/vzn//89u1b\nHRQPAPtgTBUAo7799tvRUCo1min0/fv3Or4KAI5FUQXAqO+//3729p9//jkenM5AdQBGMKYKgFE6\nMj32j//4jyLy5cuXoijevn373Xff6VAqALCAThWAbGhT6k9/+pOIfPnyRY/6/elPfxqNsgKAQ9Cp\nApCTP/7xj8MwDMMQTv2Tl97VsRsGABRVALL0l7/85bfffhuGQY8JigiHAgEci6IKQB4+fvxYFMW0\nIxUGqnMOIIBjUVQByEMonr777rvZFcLRQAA4BAPVAWTjzZs3X758+fnnn9++fRtKqHDVmtHcCr/9\n9tuPP/4oIn/4wx923k4A50RRBSAbv/32m86fHk79U6Oz/969e/fnP/9ZRPQ6gBRVAPbBZWoAZObj\n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\n/wexQeUPJpSYVwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "File = ROOT.TFile(\"toy_datasets/random.root\")\n", "Tree = File.Get(\"tree\")\n", "Tree.Draw(\"first\")\n", "canvas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## use histogram settings" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxwAAAI8CAIAAAD0vjrdAAAABmJLR0QAAAAAAAD5Q7t/AAAgAElE\nQVR4nO3dz5Lj1nn//we/ykVoLZXG0tK5AYCpUhajkVJl34NHXsklJamKLYlg/i1SScpeJaOL8CKR\ntLDKInAFWdqWStrmMvBdnN+cYAAQDbIBPueD835VyuGw2d1vosnuRwcgWHRdZwAAAHic/887AAAA\nYA8YqgAAAFbAUAUAALAChioAAIAVMFQBAACsgKEKAABgBQxVAAAAK2CoAgAAWAFDFbA3n3766aef\nfrrklk+fPt06xsw++eSTTz755A7fCAB8FZxRHdiTTz/99B//8R/N7MGn9p//+Z//z//8z2uvvfa/\n//u/G8V88skn//RP/xQu/+pXvwphALBXrFQBuM5bb7311ltv/e3f/u2Dt/ztb38bLvzkJz/ZOOqx\n3n777bffftu7AoC2P/MOAODjtdde+/GPf/zaa69d+4l/+tOfFt7yD3/4g4msUf3xj3/0TgAgj6EK\nyNRXX311n2+U/kQFAKtgqAL27NNPPw3LRW+//fY//MM/LPysd999N1x48803f/3rXz+y4ZNPPpmc\nqz7++ONvv/32yZMn//Zv/za+3szGH7r0RQY3vuor9P3yl7/853/+5/H1f/3Xfx1S//Vf/7V//Qcf\nfPDDDz+Y2euvv/6f//mfM1/55z//+ffff29mb7zxxn/8x38sTwKgpAOwI/F1dpMvuOvf8sc//rGZ\nvfbaa/0r33zzzfFnffjhh+GjP/rRjwYfev/99yczxscn/epXv+q67smTJ2b20UcfPXv2LFz/5MmT\n+FkfffTR+Ls/e/as/5XDbZ48eTK+cbhl+BZ9H3300cwWe+uttwa3/7u/+7v4dT7++OP33ntvnPr8\n+fNx6jvvvDP++h988MHCWwJQx4HqwD6FxaGf/vSnP/3pT+OIUxTFzKc8efLku+++M7M333zz6dOn\n8YQLv/nNb8KF999/P85VP3pp8kv1j/seHwP+7bfffvHFF/Gbhgsff/zxv//7v4fLz549e/bsWfjQ\nF198Ecea/lcINw63DFd+8cUXRVGEJaX+9fHLXkqNc1U4Bn/wjf77v/873uVw4YMPPnjx4kW4/M47\n77zzzjuvv/66mX399dd/+Zd/2f/0n//853EFK9wyXB7fEsAeeE91ANbUX6CavD5eM16pCjeI61KX\n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\n", "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# we need to keep histogram in any variable, otherwise it will be deleted automatically\n", "h1 = ROOT.TH1F(\"h1\",\"hist from tree\",50, -0.25, 0.25)\n", "Tree.Draw(\"first>>h1\")\n", "canvas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# root_numpy + ipython way\n", "\n", "But IPython provides it's own plotting / data manipulation techniques. Brief demostration below.\n", "\n", "Pay attention that there is column-expression which is evaluated on-the-fly." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "data = root_numpy.root2array(\"toy_datasets/random.root\", \n", " treename='tree', \n", " branches=['first', 'second', 'sin(first) * exp(second)'], \n", " selection='first > 0')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__in the example above__ we selected three branches (one of which is an expression and was computed on-the-fly) and selections" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# taking, i.e. first 10 elements using python slicing:\n", "data2 = data[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Convert to pandas\n", "\n", "pandas allows easy manipulations with data." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
firstsecondsin(first) * exp(second)
00.9144550.1820440.950413
11.4880251.0750272.920040
20.104062-0.6006260.056972
30.947616-1.3858990.203087
42.5287591.4088112.353142
\n", "
" ], "text/plain": [ " first second sin(first) * exp(second)\n", "0 0.914455 0.182044 0.950413\n", "1 1.488025 1.075027 2.920040\n", "2 0.104062 -0.600626 0.056972\n", "3 0.947616 -1.385899 0.203087\n", "4 2.528759 1.408811 2.353142" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas\n", "dataframe = pandas.DataFrame(data)\n", "# looking at first elements\n", "dataframe.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
firstsecondsin(first) * exp(second)
00.9144550.1820440.950413
11.4880251.0750272.920040
42.5287591.4088112.353142
70.2485521.7901091.473571
80.2486342.0854821.980567
\n", "
" ], "text/plain": [ " first second sin(first) * exp(second)\n", "0 0.914455 0.182044 0.950413\n", "1 1.488025 1.075027 2.920040\n", "4 2.528759 1.408811 2.353142\n", "7 0.248552 1.790109 1.473571\n", "8 0.248634 2.085482 1.980567" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# taking elements, that satisfy some condition, again showing only first\n", "dataframe[dataframe['second'] > 0].head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
firstsecondsin(first) * exp(second)third
00.9144550.1820440.9504131.096499
11.4880251.0750272.9200402.563052
20.104062-0.6006260.056972-0.496564
30.947616-1.3858990.203087-0.438283
42.5287591.4088112.3531423.937570
\n", "
" ], "text/plain": [ " first second sin(first) * exp(second) third\n", "0 0.914455 0.182044 0.950413 1.096499\n", "1 1.488025 1.075027 2.920040 2.563052\n", "2 0.104062 -0.600626 0.056972 -0.496564\n", "3 0.947616 -1.385899 0.203087 -0.438283\n", "4 2.528759 1.408811 2.353142 3.937570" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# adding new column as result of some operation\n", "dataframe['third'] = dataframe['first'] + dataframe['second'] \n", "dataframe.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Histograms in python\n", "\n", "Default library for plotting in python is matplotlib." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nLUN17/2q7qr6O0le2d3/aP7zP0hydXffuKXM0VlODgBHRHfvOOUta2Tk0SRft+Xny+fXvuRCKgsA\nrJ5lrRn5rSQvrqorquriJK9NcueS7gUAHGJLGRnp7r+oqjcmuSubgefd3f3QMu4FABxuS1kzAgAw\n1dJ3YJ2y+VlV/ZuqOlVV91fVVcuu035Z1PaqekVV/XFVfXJ+/IsR9dxrVfXuqtqoqk+dp8yq9vl5\n277CfX55Vd1TVQ9W1QNVdeM5yq1cv09p+wr3+7Gqureq7pu3/2fPUW6l+n1Ku1e1z59WVc+at2vb\nJRg77vPuXtqRzbDz+0muSPIVSe5P8pKzyrw6yQfn59+e5DeXWaf9Oia2/RVJ7hxd1yW0/W8muSrJ\np87x+kr2+cS2r2qfryW5an7+vCSfPkL/r09p+0r2+7xtz53/99lJfjPJy49Ivy9q98r2+bx9/zTJ\nf9yujRfS58seGZmy+dl1SX4xSbr73iSXVNWlS67Xfpi68dvKPVXU3R9L8rnzFFnVPp/S9mQ1+/xM\nd98/P38syUPZ3G9oq5Xs94ltT1aw35Oku78wPz2WzV/Czv7zv6r9vqjdyYr2eVVdnuT7krzrHEV2\n3OfLDiPbbX529v+kZ5d5dJsyh9GUtifJd86HsT5YVS/dn6oNt6p9PtVK93lVHc/m6NC9Z7208v1+\nnrYnK9rv8+H6+5KcSTLr7pNnFVnJfp/Q7mRF+zzJLyT5Zzn3znI77nPf2jvWbyf5uu6+Kpvf5fNf\nB9eH5VvpPq+q5yX5lSRvno8SHBkL2r6y/d7dT3X3y7K5n9R3VdUrRtdpP0xo90r2eVX97SQb89HA\nyh6N/iw7jCzc/Gz+89cuKHMYTdn47bGnh/q6+0NJvqKq/ur+VXGYVe3zhVa5z6vqomz+Y/y+7v7A\nNkVWtt8XtX2V+/1p3f0nST6Y5FvPemll+z05d7tXuM9fnuTaqvqfSf5Tku+uql88q8yO+3zZYWTK\n5md3JvnhJKmq70jyx929seR67YeFbd86h1ZVV2fzUes/2t9qLs35EvOq9vnTztn2Fe/z9yQ52d1v\nP8frq9zv5237qvZ7VX11VV0yP39Oku/N5mL9rVau36e0e1X7vLvf0t1f191fn81/1+7p7h8+q9iO\n+3xZ28EnOffmZ1X1hs2X+99393+rqu+rqt9P8qdJ/uEy67RfprQ9yd+tqh9P8kSSP0vy98bVeO9U\n1fuTrCf5qqr6TDa/S/zirHifJ4vbntXt85cn+aEkD8zn0TvJW7L5NNlK9/uUtmdF+z3J1yS5raoq\nm3/Pva+7f/0I/B2/sN1Z3T7f1m773KZnAMBQFrACAEMJIwDAUMIIADCUMAIADCWMAABDCSMAwFDC\nCLArVfWmqjpZVX9YVf98B++7oqp+cJl1Aw4H+4wAu1JVDyX5W939v87x+rO7+y+2ub6e5Ce7+/uX\nXEXggBNGgAtWVf8uyeuS/G6S9yb56939pqp6b5IvJnlZko9lc3vot2dzd9JO8l1J7k7ykiR/kOS2\n82wjD6y4pW4HD6y27v7xqnplNrfAvzbP/Erxy7r7O5Kkqu5MckN3//eqem42g8pN2RwZuXafqw0c\nMNaMAHthuy8G/OUt5x9P8gtV9aYkL+jup/anWsBhIIwAy/KnT590961JfizJc5J8vKr+xrBaAQeO\naRpgt7YbFXlmgaqv7+4HkzxYVd+WzbUin03y/GVXDjj4jIwAu7XdKvizr/2Tqnqgqu5P8udJPpTk\nU0n+oqruq6o3L7uSwMHlaRoAYCgjIwDAUMIIADCUMAIADCWMAABDCSMAwFDCCAAwlDACAAz1/wEm\nRExFZ96u8gAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.figure(figsize=(9, 7))\n", "plt.hist(data['first'], bins=50)\n", "plt.xlabel('first')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nb0nyA1X113bjXGdrll/0szzlcCf29zflxqIrwHAbi67AAm0sugILtLHoCszRzp6Gu7+v8dPt1u20\nVyQ53t33JUlV3ZTkmiS/u0vn+3O+/OUv50Uv+nt54IEHty134YVPG1Gdx6ytHXzsm/Onfuqnhp4b\ngN305xcsO9M1/sILn5kHH7x3YJ2W024Fj4uS3L/l6y9kM4wM8Wd/9mf5+Mc/mnPP/cvblrv//ntm\n/MTpK+Cdc86Tc/Lkl2b4rE5yePI6E3M4APaeU70iyeNd40+c+AtTf5fMK5xs/UN3xPl2orrnP2eg\nqv5Bkpd09z+dfP2Pk1zR3T+6pcxen6wAAJymu7dNV7vV4/FAkm/c8vXFk32PmVYxAGD17NZdLZ9I\ncmlVPbOqzk9ybZJbdulcAMAesSs9Ht39lap6XZJbsxlu3t3dx3bjXADA3rErczwAAM5kKVYurao3\nVNXJqvpLi67LKFX1pqr6dFUdqarbquriRddplKp6e1Udm7T9v1TV1y66TiNU1T+sqs9W1Veq6nmL\nrs8Ie2UhwXmrqndX1Ymq+syi6zJaVV1cVR+rqnuq6u6q+tHpR+19VXWgqu6oqrsmbX/Lous0WlWd\nU1Wfqqptp1YsPHhMfuG+OMl8V+lafm/v7r/e3ZcneV8e//7aVXRrkm+ZtP14kusXXJ9R7k7y95P8\n10VXZIS9tJDgLvjlbLZ7P3o0yb/s7m9J8p1J/vl++H/v7oeTvKi7n5vkOUm+q6pesOBqjfb6JEen\nFVp48Ejyb5L82KIrMVp3P7Tly69J8n8WVZfRuvu27j45+fLj2bzraeV19+e6+3j2z2Itjy0k2N2P\nJDm1kODK6+7fSvLFRddjEbr7we4+Mtl+KMmxbK7ttPK6+9RiTgey+ft133wPTDoRvjfJu6aVXWjw\nqKqrk9zf3Xcvsh6LUlVvrqrPJ3llkrcuuDqL8qokH1x0JdgVZ1pIcF/8AmJTVR1McnmSOxZbkzEm\nQw13JXkwyUZ3T/3rf4Wc6kSYOnF0t9bxeExVfSTJhVt3ZbNiP5nkjdkcZtn63srYpu0/0d3v7+6f\nTPKTk7Hvn0/ywwuo5q6Y1vZJmZ9I8kh337iAKu6KWdoN+0FVPSXJryV5/Wk9vCtr0pP73Mm8tVur\n6oXdvfJDq1X1d5Kc6O4jVbWeKb/Ldz14dPeLz7S/qr41ycEkn67NNWQvTvLJqrqiu/9gt+s1wuO1\n/QxuTPKbu1mX0aa1vapemc1uue8aUqFBdvB/vh9MXUiQ1VRV52UzdLynu9+36PqM1t1/VFW/keTb\nsz/mdL0gydVV9b1JnpTkL1bVr3T3D52p8MKGWrr7s9291t3f1N2XZLMb9rmrEjqmqapLt3z50iRH\nFlWX0arqqmx2yV09mZC1H61U797j2O8LCVb2x//zmfxSkqPd/QuLrsgoVfW0qrpgsv2kbPbm74vr\nene/sbu/sbu/KZs/5x97vNCRLMfk0lM6++uH9Ker6jOT8cD1JG9YcH1G+sUkT0nykcmtV+9cdIVG\nqKqXVtX9Sb4jyQeqaqXntnT3V5KcWkjwniQ37ZeFBKvqxiT/I8lfrarPV9XKDKNOM7mT4wezeVfH\nXZOf8asWXa8BnpHk9sk1/eNJbunujy64TkvJAmIAwDDL1OMBAKw4wQMAGEbwAACGETwAgGEEDwBg\nGMEDABhG8ACWVlW9sKosNQ8rRPAAlp3FhmCFCB7A46qqJ1fVByYrUH6mqr6vqp5XVRtV9Ymq+mBV\nXTgp+1eq6iNVdaSqfqeqLpns/5mquruqPl1VL5/se2FV3V5Vv1pVx6rqPVvOedVk3+8kedlCGg7s\nml1/SBywp12V5IHu/rtJMnnq5gez+ZydP5wEibck+ZEk703ylu6+ZfJslnOq6mVJntPd31ZVT0/y\niao69dCsy5M8O5uPEP/tqvqbST6Z5N8nWe/u36uq/zywrcAAggewnbuT/GxVvTXJbyT5YpJvzeZz\ndiqbvab/a/II9Iu6+5Yk6e4vJ0lV/a0k/2my7w+qaiPJ85P8cZI7u/v3J+WOZPNp1X+S5Pe6+/cm\n5/+PSf7JgHYCgwgewOPq7uNV9bwk35vkXye5Pclnu/sFW8tNgscsczG2Pghy65OJv5KvXo/208Mi\nYd8xxwN4XFX1jCR/2t03JvnZJH8jyddX1XdM3j+vqp7d3Q8l+UJVXTPZf/7k0eD/Pcn3V9U5VfX1\nSf52kju3OeXvJnnmqfkhSX5gd1oGLIoeD2A735bkZ6rqZJIvJ/lnSR5N8otVdUGSc5P8fJKjSX4o\nyb+rqjdNyn5fd/96VX1nkk8nOZnkxyZDLpeddp5Oku5+uKpek+Q3q+pPshlcnrLrrQSGqW53qgEA\nYxhqAQCGETwAgGEEDwBgGMEDABhG8AAAhhE8AIBhBA8AYJj/B5b34/cCqA8KAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(9, 7))\n", "plt.hist(data['second'], bins=50)\n", "plt.xlabel('second')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "- you can work in standard way with ROOT (by using rootpy), but it is slow\n", "- you can benefit serously from python tools (those are fast and very flexible):\n", " - matplotlib for plotting\n", " - numpy / pandas for manipating arrays/dataframes\n", "- to deal with ROOT files, you can use `root_numpy` as a very nice bridge between two worlds." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }