{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m Status\u001b[22m\u001b[39m `/home/jiling/UnROOT_RDataFrame_MiniBenchmark/Project.toml`\n", " \u001b[90m [68837c9b] \u001b[39mFHist v0.6.1\n", " \u001b[90m [7073ff75] \u001b[39mIJulia v1.23.2\n", " \u001b[90m [3a55db76] \u001b[39mLVCyl v0.1.0 `https://github.com/JuliaHEP/LVCyl.jl#master`\n", " \u001b[90m [f517fe37] \u001b[39mPolyester v0.4.2\n", " \u001b[90m [3cd96dde] \u001b[39mUnROOT v0.5.1\n" ] } ], "source": [ "using Pkg\n", "Pkg.status()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "┌ Info: Precompiling UnROOT [3cd96dde-e98d-4713-81e9-a4a1b0235ce9]\n", "└ @ Base loading.jl:1423\n", "┌ Info: Precompiling FHist [68837c9b-b678-4cd5-9925-8a54edc8f695]\n", "└ @ Base loading.jl:1423\n", "┌ Info: Precompiling Polyester [f517fe37-dbe3-4b94-8317-1923a5111588]\n", "└ @ Base loading.jl:1423\n", "┌ Info: Precompiling LVCyl [3a55db76-103f-4f27-8e51-63f2a02e4e27]\n", "└ @ Base loading.jl:1423\n" ] } ], "source": [ "using UnROOT, FHist, Polyester, LVCyl" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"./Run2012BC_DoubleMuParked_Muons.root\"" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# http://opendata.web.cern.ch/record/12341\n", "rootfname = \"./Run2012BC_DoubleMuParked_Muons.root\"" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.0903061451390386" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filesize(rootfname) / 1024^3 # in GB" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "const r = ROOTFile(rootfname);" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "const mytree = LazyTree(r, \"Events\");" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div class=\"data-frame\"><p>3 rows × 6 columns (omitted printing of 1 columns)</p><table class=\"data-frame\"><thead><tr><th></th><th>nMuon</th><th>Muon_pt</th><th>Muon_eta</th><th>Muon_phi</th><th>Muon_mass</th></tr><tr><th></th><th title=\"UInt32\">UInt32</th><th title=\"SubArray{Float32, 1, Vector{Float32}, Tuple{UnitRange{Int64}}, true}\">SubArra…</th><th title=\"SubArray{Float32, 1, Vector{Float32}, Tuple{UnitRange{Int64}}, true}\">SubArra…</th><th title=\"SubArray{Float32, 1, Vector{Float32}, Tuple{UnitRange{Int64}}, true}\">SubArra…</th><th title=\"SubArray{Float32, 1, Vector{Float32}, Tuple{UnitRange{Int64}}, true}\">SubArra…</th></tr></thead><tbody><tr><th>1</th><td>2</td><td>[10.7637, 15.7365]</td><td>[1.06683, -0.563787]</td><td>[-0.0342727, 2.54262]</td><td>[0.105658, 0.105658]</td></tr><tr><th>2</th><td>2</td><td>[10.5385, 16.3271]</td><td>[-0.42778, 0.349225]</td><td>[-0.274792, 2.53978]</td><td>[0.105658, 0.105658]</td></tr><tr><th>3</th><td>1</td><td>[3.27533]</td><td>[2.21086]</td><td>[-1.22341]</td><td>[0.105658]</td></tr></tbody></table></div>" ], "text/latex": [ "\\begin{tabular}{r|cccccc}\n", "\t& nMuon & Muon\\_pt & Muon\\_eta & Muon\\_phi & Muon\\_mass & \\\\\n", "\t\\hline\n", "\t& UInt32 & SubArra… & SubArra… & SubArra… & SubArra… & \\\\\n", "\t\\hline\n", "\t1 & 2 & [10.7637, 15.7365] & [1.06683, -0.563787] & [-0.0342727, 2.54262] & [0.105658, 0.105658] & $\\dots$ \\\\\n", "\t2 & 2 & [10.5385, 16.3271] & [-0.42778, 0.349225] & [-0.274792, 2.53978] & [0.105658, 0.105658] & $\\dots$ \\\\\n", "\t3 & 1 & [3.27533] & [2.21086] & [-1.22341] & [0.105658] & $\\dots$ \\\\\n", "\\end{tabular}\n" ], "text/plain": [ "\u001b[1m Row \u001b[0m│\u001b[1m nMuon \u001b[0m\u001b[1m Muon_pt \u001b[0m\u001b[1m Muon_eta \u001b[0m\u001b[1m Muon_phi \u001b[0m\u001b[1m Muon_mass\u001b[0m ⋯\n", "\u001b[1m \u001b[0m│\u001b[90m UInt32 \u001b[0m\u001b[90m SubArray{Float3 \u001b[0m\u001b[90m SubArray{Float3 \u001b[0m\u001b[90m SubArray{Float3 \u001b[0m\u001b[90m SubArray{\u001b[0m ⋯\n", "─────┼──────────────────────────────────────────────────────────────────────────\n", " 1 │ 2 Float32[10.76369 Float32[1.066827 Float32[-0.03427 Float32[0 ⋯\n", " 2 │ 2 Float32[10.53849 Float32[-0.42778 Float32[-0.27479 Float32[0 ⋯\n", " 3 │ 1 Float32[3.275326 Float32[2.210855 Float32[-1.22341 Float32[0 ⋯\n", "\u001b[36m 2 columns omitted\u001b[0m\n" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mytree[begin:3]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "reco_zz_to_4l (generic function with 1 method)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "const z_mass = 91.2\n", "const LV32 = LorentzVectorCyl{Float32}\n", "function reco_zz_to_4l(pts, etas, phis, masses, charges)\n", " idx = [Int[], Int[]]\n", "\n", " # Find first lepton pair with invariant mass closest to Z mass\n", " best_mass = -Inf\n", " best_i1 = best_i2 = 1\n", " for i1 in eachindex(pts), i2 in (i1 + 1):lastindex(pts)\n", " charges[i1] == charges[i2] && continue\n", " p1 = LV32(pts[i1], etas[i1], phis[i1], masses[i1])\n", " p2 = LV32(pts[i2], etas[i2], phis[i2], masses[i2])\n", " this_mass = (p1+p2).mass\n", " if (abs(z_mass - this_mass) < abs(z_mass - best_mass))\n", " best_mass = this_mass\n", " best_i1 = i1\n", " best_i2 = i2\n", " end\n", " end\n", " push!(idx[1], best_i1)\n", " push!(idx[1], best_i2)\n", "\n", " #Reconstruct second Z from remaining lepton pair\n", " for i in 1:4\n", " if (i != best_i1 && i != best_i2)\n", " push!(idx[2], i)\n", " end\n", " end\n", "\n", " # Return indices of the pairs building two Z bosons\n", " return idx\n", "end\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "filter_z_dr (generic function with 1 method)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function filter_z_dr(idx, etas, phis)\n", " for pair in idx\n", " i1, i2 = pair\n", " dr = sqrt((etas[i1]-etas[i2])^2 + (phis[i1]-phis[i2])^2)\n", " dr < 0.02 && return false;\n", " end\n", " return true\n", "end" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "filter_z_candidates (generic function with 1 method)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function filter_z_candidates(Z_mass)\n", " 40 < Z_mass[1] < 120 || return false\n", " 12 < Z_mass[2] < 120 || return false\n", " return true\n", "end" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "compute_z_masses_4l (generic function with 1 method)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function compute_z_masses_4l(idx, pts, etas, phis, masses)\n", " z_masses = zeros(2)\n", " for (i, pair) in enumerate(idx)\n", " i1, i2 = pair\n", " p1 = LV32(pts[i1], etas[i1], phis[i1], masses[i1])\n", " p2 = LV32(pts[i2], etas[i2], phis[i2], masses[i2])\n", " z_masses[i] = (p1+p2).mass\n", " end\n", " return abs(z_masses[1] - z_mass) < abs(z_masses[2] - z_mass) ?\n", " z_masses : reverse!(z_masses);\n", "end" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "compute_higgs_mass_4l (generic function with 1 method)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function compute_higgs_mass_4l(idx, pts, etas, phis, masses)\n", " ((i1, i2), (i3, i4)) = idx\n", " p1 = LV32(pts[i1], etas[i1], phis[i1], masses[i1]);\n", " p2 = LV32(pts[i2], etas[i2], phis[i2], masses[i2]);\n", " p3 = LV32(pts[i3], etas[i3], phis[i3], masses[i3]);\n", " p4 = LV32(pts[i4], etas[i4], phis[i4], masses[i4]);\n", " return (p1 + p2 + p3 + p4).mass\n", "end" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 23.127858 seconds (18.04 M allocations: 24.054 GiB, 19.15% gc time)\n" ] }, { "data": { "text/html": [ "<div style=\"display: flex;\">\n", " <div style=\"float:left; margin:5px\"><svg width=\"250\" height=\"200\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n", " <polyline points=\"12.5,180.0,12.5,19.999999999999996,18.92857142857143,19.999999999999996,18.92857142857143,130.56237879767292,25.357142857142858,130.56237879767292,25.357142857142858,130.58536235006824,31.78571428571429,130.58536235006824,31.78571428571429,131.13696760755585,38.214285714285715,131.13696760755585,38.214285714285715,134.6189757954464,44.642857142857146,134.6189757954464,44.642857142857146,139.20419449831215,51.07142857142858,139.20419449831215,51.07142857142858,141.36464842347195,57.50000000000001,141.36464842347195,57.50000000000001,144.08819938231701,63.92857142857143,144.08819938231701,63.92857142857143,148.58148387560152,70.35714285714286,148.58148387560152,70.35714285714286,149.46635064282123,76.78571428571429,149.46635064282123,76.78571428571429,152.71852330675858,83.21428571428572,152.71852330675858,83.21428571428572,153.86770092652446,89.64285714285715,153.86770092652446,89.64285714285715,155.69489334195217,96.07142857142858,155.69489334195217,96.07142857142858,158.02772391007684,102.50000000000001,158.02772391007684,102.50000000000001,159.4641959347842,108.92857142857143,159.4641959347842,108.92857142857143,160.211161387632,115.35714285714286,160.211161387632,115.35714285714286,162.00387847446672,121.78571428571429,162.00387847446672,121.78571428571429,163.15305609423257,128.21428571428572,163.15305609423257,128.21428571428572,164.40565969977735,134.64285714285717,164.40565969977735,134.64285714285717,164.12985707103354,141.07142857142858,164.12985707103354,141.07142857142858,165.65826330532215,147.5,165.65826330532215,147.5,166.79594914889034,153.92857142857144,166.79594914889034,153.92857142857144,167.50843927314517,160.35714285714286,167.50843927314517,160.35714285714286,168.89894419306185,166.7857142857143,168.89894419306185,166.7857142857143,169.3011563599799,173.21428571428572,169.3011563599799,173.21428571428572,170.20900667959492,179.64285714285717,170.20900667959492,179.64285714285717,170.64569417510594,186.07142857142858,170.64569417510594,186.07142857142858,171.43862673274438,192.50000000000003,171.43862673274438,192.50000000000003,172.51885369532428,198.92857142857144,172.51885369532428,198.92857142857144,173.19686849098613,205.35714285714286,173.19686849098613,205.35714285714286,173.82891618185735,211.7857142857143,173.82891618185735,211.7857142857143,173.77145730086906,218.21428571428572,173.77145730086906,218.21428571428572,174.24262012497306,224.64285714285717,174.24262012497306,224.64285714285717,174.88615959204193,231.07142857142858,174.88615959204193,231.07142857142858,118.87524240465417,237.50000000000003,118.87524240465417,237.5,180.0,12.5,180.0\" stroke=\"black\" fill=\"#ffffff00\" stroke-width=\"1\"/>\n", " <polyline points=\"12.5,180.0,237.5,180.0\" stroke=\"black\" stroke-width=\"1\"/>\n", " <text x=\"12.5\" y=\"190.0\" dominant-baseline=\"middle\" text-anchor=\"start\" fill=\"black\">70.0</text>\n", " <text x=\"237.5\" y=\"190.0\" dominant-baseline=\"middle\" text-anchor=\"end\" fill=\"black\">180.0</text>\n", "</svg>\n", "</div>\n", " <div style=\"float:left; margin:5px; max-width: 50%; display:flex; justify-content:center; align-items:center;\">\n", " <ul>\n", " <li>edges: 70.0:3.142857142857143:180.0</li>\n", " <li>bin counts: [13923.0, 4302.0, 4300.0, 4252.0, 3949.0, 3550.0, 3362.0, 3125.0, 2734.0, 2657.0 … 852.0, 814.0, 745.0, 651.0, 592.0, 537.0, 542.0, 501.0, 445.0, 5319.0]</li>\n", " <li>maximum count: 13923.0</li>\n", " <li>total count: 80487.0</li>\n", " </ul>\n", " </div>\n", "</div>\n", "\n" ], "text/plain": [ " \u001b[90m┌ ┐\u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 70.0\u001b[90m, \u001b[0m 73.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█████████████████████\u001b[39m\u001b[38;5;2m \u001b[39m\u001b[0m 13923.0\u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 73.0\u001b[90m, \u001b[0m 76.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██████\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 4302.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 76.0\u001b[90m, \u001b[0m 79.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██████\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 4300.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 79.0\u001b[90m, \u001b[0m 82.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██████\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 4252.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 83.0\u001b[90m, \u001b[0m 86.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█████\u001b[39m\u001b[38;5;2m▉\u001b[39m\u001b[0m 3949.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 86.0\u001b[90m, \u001b[0m 89.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█████\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 3550.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 89.0\u001b[90m, \u001b[0m 92.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█████\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 3362.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 92.0\u001b[90m, \u001b[0m 95.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m████\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 3125.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 95.0\u001b[90m, \u001b[0m 98.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m████\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 2734.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 98.0\u001b[90m, \u001b[0m101.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m████\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 2657.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m101.0\u001b[90m, \u001b[0m104.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m███\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 2374.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m105.0\u001b[90m, \u001b[0m108.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m███\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 2274.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m108.0\u001b[90m, \u001b[0m111.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m███\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 2115.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m111.0\u001b[90m, \u001b[0m114.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 1912.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m114.0\u001b[90m, \u001b[0m117.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 1787.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m117.0\u001b[90m, \u001b[0m120.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 1722.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m120.0\u001b[90m, \u001b[0m123.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 1566.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m123.0\u001b[90m, \u001b[0m126.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 1466.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m127.0\u001b[90m, \u001b[0m130.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 1357.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m130.0\u001b[90m, \u001b[0m133.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 1381.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m133.0\u001b[90m, \u001b[0m136.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 1248.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m136.0\u001b[90m, \u001b[0m139.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 1149.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m139.0\u001b[90m, \u001b[0m142.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 1087.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m142.0\u001b[90m, \u001b[0m145.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 966.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m145.0\u001b[90m, \u001b[0m148.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 931.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m149.0\u001b[90m, \u001b[0m152.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 852.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m152.0\u001b[90m, \u001b[0m155.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 814.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m155.0\u001b[90m, \u001b[0m158.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 745.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m158.0\u001b[90m, \u001b[0m161.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▉\u001b[39m\u001b[0m 651.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m161.0\u001b[90m, \u001b[0m164.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 592.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m164.0\u001b[90m, \u001b[0m167.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 537.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m167.0\u001b[90m, \u001b[0m170.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 542.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m171.0\u001b[90m, \u001b[0m174.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 501.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m174.0\u001b[90m, \u001b[0m177.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 445.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m177.0\u001b[90m, \u001b[0m180.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m████████\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 5319.0 \u001b[90m \u001b[39m \n", " \u001b[90m└ ┘\u001b[39m \n", "edges: 70.0:3.142857142857143:180.0\n", "bin counts: [13923.0, 4302.0, 4300.0, 4252.0, 3949.0, 3550.0, 3362.0, 3125.0, 2734.0, 2657.0 … 852.0, 814.0, 745.0, 651.0, 592.0, 537.0, 542.0, 501.0, 445.0, 5319.0]\n", "total count: 80487.0" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "let H = Hist1D(Float64; bins = range(70, 180; length=36), overflow=true)\n", " #@time @batch for evt in mytree\n", " @time for evt in mytree\n", " evt.nMuon != 4 && continue\n", " \n", " pts, etas = evt.Muon_pt, evt.Muon_eta\n", " \n", " (all(pts .> 5) && all(abs.(etas) .< 2.4)) || continue\n", " \n", " phis, masses, charges = evt.Muon_phi, evt.Muon_mass, evt.Muon_charge\n", " \n", " sum(charges) != 0 && continue\n", " \n", " Z_idx = reco_zz_to_4l(pts, etas, phis, masses, charges)\n", " \n", " filter_z_dr(Z_idx, etas, phis) || continue\n", "\n", " Z_mass = compute_z_masses_4l(Z_idx, pts, etas, phis, masses)\n", "\n", " filter_z_candidates(Z_mass) || continue\n", " h_mass = compute_higgs_mass_4l(Z_idx, pts, etas, phis, masses)\n", " push!(H, h_mass)\n", " end\n", " H\n", "end" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Threads.nthreads()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 6.702241 seconds (21.68 M allocations: 25.134 GiB, 5.03% gc time, 0.35% compilation time)\n" ] }, { "data": { "text/html": [ "<div style=\"display: flex;\">\n", " <div style=\"float:left; margin:5px\"><svg width=\"250\" height=\"200\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n", " <polyline points=\"12.5,180.0,12.5,19.999999999999996,18.92857142857143,19.999999999999996,18.92857142857143,130.56237879767292,25.357142857142858,130.56237879767292,25.357142857142858,130.58536235006824,31.78571428571429,130.58536235006824,31.78571428571429,131.13696760755585,38.214285714285715,131.13696760755585,38.214285714285715,134.6189757954464,44.642857142857146,134.6189757954464,44.642857142857146,139.20419449831215,51.07142857142858,139.20419449831215,51.07142857142858,141.36464842347195,57.50000000000001,141.36464842347195,57.50000000000001,144.08819938231701,63.92857142857143,144.08819938231701,63.92857142857143,148.58148387560152,70.35714285714286,148.58148387560152,70.35714285714286,149.46635064282123,76.78571428571429,149.46635064282123,76.78571428571429,152.71852330675858,83.21428571428572,152.71852330675858,83.21428571428572,153.86770092652446,89.64285714285715,153.86770092652446,89.64285714285715,155.69489334195217,96.07142857142858,155.69489334195217,96.07142857142858,158.02772391007684,102.50000000000001,158.02772391007684,102.50000000000001,159.4641959347842,108.92857142857143,159.4641959347842,108.92857142857143,160.211161387632,115.35714285714286,160.211161387632,115.35714285714286,162.00387847446672,121.78571428571429,162.00387847446672,121.78571428571429,163.15305609423257,128.21428571428572,163.15305609423257,128.21428571428572,164.40565969977735,134.64285714285717,164.40565969977735,134.64285714285717,164.12985707103354,141.07142857142858,164.12985707103354,141.07142857142858,165.65826330532215,147.5,165.65826330532215,147.5,166.79594914889034,153.92857142857144,166.79594914889034,153.92857142857144,167.50843927314517,160.35714285714286,167.50843927314517,160.35714285714286,168.89894419306185,166.7857142857143,168.89894419306185,166.7857142857143,169.3011563599799,173.21428571428572,169.3011563599799,173.21428571428572,170.20900667959492,179.64285714285717,170.20900667959492,179.64285714285717,170.64569417510594,186.07142857142858,170.64569417510594,186.07142857142858,171.43862673274438,192.50000000000003,171.43862673274438,192.50000000000003,172.51885369532428,198.92857142857144,172.51885369532428,198.92857142857144,173.19686849098613,205.35714285714286,173.19686849098613,205.35714285714286,173.82891618185735,211.7857142857143,173.82891618185735,211.7857142857143,173.77145730086906,218.21428571428572,173.77145730086906,218.21428571428572,174.24262012497306,224.64285714285717,174.24262012497306,224.64285714285717,174.88615959204193,231.07142857142858,174.88615959204193,231.07142857142858,118.87524240465417,237.50000000000003,118.87524240465417,237.5,180.0,12.5,180.0\" stroke=\"black\" fill=\"#ffffff00\" stroke-width=\"1\"/>\n", " <polyline points=\"12.5,180.0,237.5,180.0\" stroke=\"black\" stroke-width=\"1\"/>\n", " <text x=\"12.5\" y=\"190.0\" dominant-baseline=\"middle\" text-anchor=\"start\" fill=\"black\">70.0</text>\n", " <text x=\"237.5\" y=\"190.0\" dominant-baseline=\"middle\" text-anchor=\"end\" fill=\"black\">180.0</text>\n", "</svg>\n", "</div>\n", " <div style=\"float:left; margin:5px; max-width: 50%; display:flex; justify-content:center; align-items:center;\">\n", " <ul>\n", " <li>edges: 70.0:3.142857142857143:180.0</li>\n", " <li>bin counts: [13923.0, 4302.0, 4300.0, 4252.0, 3949.0, 3550.0, 3362.0, 3125.0, 2734.0, 2657.0 … 852.0, 814.0, 745.0, 651.0, 592.0, 537.0, 542.0, 501.0, 445.0, 5319.0]</li>\n", " <li>maximum count: 13923.0</li>\n", " <li>total count: 80487.0</li>\n", " </ul>\n", " </div>\n", "</div>\n", "\n" ], "text/plain": [ " \u001b[90m┌ ┐\u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 70.0\u001b[90m, \u001b[0m 73.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█████████████████████\u001b[39m\u001b[38;5;2m \u001b[39m\u001b[0m 13923.0\u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 73.0\u001b[90m, \u001b[0m 76.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██████\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 4302.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 76.0\u001b[90m, \u001b[0m 79.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██████\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 4300.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 79.0\u001b[90m, \u001b[0m 82.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██████\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 4252.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 83.0\u001b[90m, \u001b[0m 86.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█████\u001b[39m\u001b[38;5;2m▉\u001b[39m\u001b[0m 3949.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 86.0\u001b[90m, \u001b[0m 89.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█████\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 3550.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 89.0\u001b[90m, \u001b[0m 92.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█████\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 3362.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 92.0\u001b[90m, \u001b[0m 95.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m████\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 3125.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 95.0\u001b[90m, \u001b[0m 98.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m████\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 2734.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m 98.0\u001b[90m, \u001b[0m101.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m████\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 2657.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m101.0\u001b[90m, \u001b[0m104.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m███\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 2374.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m105.0\u001b[90m, \u001b[0m108.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m███\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 2274.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m108.0\u001b[90m, \u001b[0m111.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m███\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 2115.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m111.0\u001b[90m, \u001b[0m114.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 1912.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m114.0\u001b[90m, \u001b[0m117.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 1787.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m117.0\u001b[90m, \u001b[0m120.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 1722.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m120.0\u001b[90m, \u001b[0m123.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 1566.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m123.0\u001b[90m, \u001b[0m126.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 1466.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m127.0\u001b[90m, \u001b[0m130.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 1357.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m130.0\u001b[90m, \u001b[0m133.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m██\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 1381.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m133.0\u001b[90m, \u001b[0m136.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 1248.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m136.0\u001b[90m, \u001b[0m139.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 1149.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m139.0\u001b[90m, \u001b[0m142.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 1087.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m142.0\u001b[90m, \u001b[0m145.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▌\u001b[39m\u001b[0m 966.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m145.0\u001b[90m, \u001b[0m148.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 931.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m149.0\u001b[90m, \u001b[0m152.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▍\u001b[39m\u001b[0m 852.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m152.0\u001b[90m, \u001b[0m155.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 814.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m155.0\u001b[90m, \u001b[0m158.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m█\u001b[39m\u001b[38;5;2m▎\u001b[39m\u001b[0m 745.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m158.0\u001b[90m, \u001b[0m161.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▉\u001b[39m\u001b[0m 651.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m161.0\u001b[90m, \u001b[0m164.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 592.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m164.0\u001b[90m, \u001b[0m167.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 537.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m167.0\u001b[90m, \u001b[0m170.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 542.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m171.0\u001b[90m, \u001b[0m174.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▊\u001b[39m\u001b[0m 501.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m174.0\u001b[90m, \u001b[0m177.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m▋\u001b[39m\u001b[0m 445.0 \u001b[90m \u001b[39m \n", " \u001b[0m\u001b[90m[\u001b[0m177.0\u001b[90m, \u001b[0m180.0\u001b[90m)\u001b[0m \u001b[90m┤\u001b[39m\u001b[38;5;2m████████\u001b[39m\u001b[38;5;2m▏\u001b[39m\u001b[0m 5319.0 \u001b[90m \u001b[39m \n", " \u001b[90m└ ┘\u001b[39m \n", "edges: 70.0:3.142857142857143:180.0\n", "bin counts: [13923.0, 4302.0, 4300.0, 4252.0, 3949.0, 3550.0, 3362.0, 3125.0, 2734.0, 2657.0 … 852.0, 814.0, 745.0, 651.0, 592.0, 537.0, 542.0, 501.0, 445.0, 5319.0]\n", "total count: 80487.0" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "let H = Hist1D(Float64; bins = range(70, 180; length=36), overflow=true)\n", " @time @batch for evt in mytree\n", " evt.nMuon != 4 && continue\n", " \n", " pts, etas = evt.Muon_pt, evt.Muon_eta\n", " \n", " (all(pts .> 5) && all(abs.(etas) .< 2.4)) || continue\n", " \n", " phis, masses, charges = evt.Muon_phi, evt.Muon_mass, evt.Muon_charge\n", " \n", " sum(charges) != 0 && continue\n", " \n", " Z_idx = reco_zz_to_4l(pts, etas, phis, masses, charges)\n", " \n", " filter_z_dr(Z_idx, etas, phis) || continue\n", "\n", " Z_mass = compute_z_masses_4l(Z_idx, pts, etas, phis, masses)\n", "\n", " filter_z_candidates(Z_mass) || continue\n", "\n", " h_mass = compute_higgs_mass_4l(Z_idx, pts, etas, phis, masses)\n", " push!(H, h_mass)\n", " end\n", " H\n", "end" ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "kernelspec": { "display_name": "Julia 1.7.0-beta4", "language": "julia", "name": "julia-1.7" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.7.0" } }, "nbformat": 4, "nbformat_minor": 5 }