{"cells": [{"cell_type": "code", "execution_count": 1, "metadata": {"trusted": true}, "outputs": [{"name": "stdout", "output_type": "stream", "text": "Welcome to JupyROOT 6.15/01\n"}], "source": "import ROOT\nfrom ROOT import TCanvas\nfrom DistROOT import DistTree"}, {"cell_type": "code", "execution_count": 73, "metadata": {"collapsed": true, "trusted": true}, "outputs": [], "source": "def runAnalysis(rdf):\n\n # Branches clasified by diagonal\n diagonals = {\n # return a tuple: ([left] verticals in 45, [right] verticals in 56))\n \"d45b_56t\" : ([\"track_rp_5\", \"track_rp_21\", \"track_rp_25\"],\n [\"track_rp_104\", \"track_rp_120\", \"track_rp_124\"]),\n \"ad45b_56b\" : ([\"track_rp_5\", \"track_rp_21\", \"track_rp_25\"],\n [\"track_rp_105\", \"track_rp_121\", \"track_rp_125\"]),\n \"d45t_56b\" : ([\"track_rp_4\", \"track_rp_20\", \"track_rp_24\"],\n [\"track_rp_105\", \"track_rp_121\", \"track_rp_125\"]),\n \"ad45t_56t\" : ([\"track_rp_4\", \"track_rp_20\", \"track_rp_24\"],\n [\"track_rp_104\", \"track_rp_120\", \"track_rp_124\"])\n }\n\n selected_diagonal = \"d45b_56t\"\n\n rp_left, rp_right = diagonals[selected_diagonal]\n \n # Columns per branch\n attributes = ['valid', 'x', 'y']\n\n full_branches = [\"{}.{}\".format(c,a) for a in attributes for c in rp_left+rp_right ]\n\n # Split left and right branch on valid, x and y\n valids = [ \"(unsigned int) {}\".format(v) for v in full_branches[0:6]]\n xs = full_branches[6:12]\n ys = full_branches[12:18]\n\n # Filter and define output branches\n filter_code = \"\"\"({0}.valid + {1}.valid + {2}.valid ) >= 2 &&\n ({3}.valid + {4}.valid + {5}.valid ) >= 2\n \"\"\".format(*(rp_left+rp_right))\n\n # Input tree\n treename= \"TotemNtuple\"\n #rdf = RDF(treename, vec_input_files)\n\n # Filter and define output branches\n r = rdf.Filter(filter_code) \\\n .Define(\"v_L_1_F\", valids[0]) \\\n .Define(\"v_L_2_N\", valids[1]) \\\n .Define(\"v_L_2_F\", valids[2]) \\\n .Define(\"v_R_1_F\", valids[3]) \\\n .Define(\"v_R_2_N\", valids[4]) \\\n .Define(\"v_R_2_F\", valids[5]) \\\n .Define(\"x_L_1_F\", xs[0]) \\\n .Define(\"x_L_2_N\", xs[1]) \\\n .Define(\"x_L_2_F\", xs[2]) \\\n .Define(\"x_R_1_F\", xs[3]) \\\n .Define(\"x_R_2_N\", xs[4]) \\\n .Define(\"x_R_2_F\", xs[5]) \\\n .Define(\"y_L_1_F\", ys[0]) \\\n .Define(\"y_L_2_N\", ys[1]) \\\n .Define(\"y_L_2_F\", ys[2]) \\\n .Define(\"y_R_1_F\", ys[3]) \\\n .Define(\"y_R_2_N\", ys[4]) \\\n .Define(\"y_R_2_F\", ys[5]) \\\n .Define(\"timestamp\", \"(unsigned int) (event_info.timestamp - 1444860000)\") \\\n .Define(\"run_num\", \"(unsigned int) event_info.run_no\") \\\n .Define(\"bunch_num\", \"trigger_data.bunch_num\") \\\n .Define(\"event_num\", \"trigger_data.event_num\") \\\n .Define(\"trigger_num\", \"trigger_data.trigger_num\") \\\n .Define(\"trigger_bits\", \"trigger_data.input_status_bits\")\n\n timestamp_min = 20.9E3\n timestamp_max = 31.5E3\n timestamp_bins = timestamp_max - timestamp_min + 1.; \n model = (\"h_timestamp_dgn\", \";timestamp;rate (Hz)\", int(timestamp_bins), timestamp_min-0.5, timestamp_max+0.5)\n h_timestamp_dgn = r.Histo1D(model, \"timestamp\")\n\n # Save output tree\n return h_timestamp_dgn"}, {"cell_type": "code", "execution_count": 77, "metadata": {"collapsed": true, "trusted": true}, "outputs": [], "source": "\ndef fillHist(tdf):\n hist = runAnalysis(tdf)\n return hist"}, {"cell_type": "code", "execution_count": 78, "metadata": {"collapsed": true, "trusted": true}, "outputs": [], "source": "def mergeHist(h1, h2):\n h1.Add(h2)\n return h1"}, {"cell_type": "code", "execution_count": 79, "metadata": {"trusted": true}, "outputs": [], "source": "dTree = DistTree(filelist = ['root://eostotem//eos/totem/data/cmstotem/2015/90m/Totem/Ntuple/version2/4495/TotemNTuple_9883.040.ntuple.root',],\n treename = \"TotemNtuple\",\n npartitions = 2)\n\nmyHist = dTree.ProcessAndMerge(fillHist, mergeHist)"}, {"cell_type": "markdown", "metadata": {}, "source": "Plot the resulting histogram. Note how we activate the JavaScript graphics of ROOT with the `jsroot` magic."}, {"cell_type": "code", "execution_count": 80, "metadata": {"trusted": true}, "outputs": [{"data": {"text/html": "\n