{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Analysis of an open dataset with RDataFrame\n", "
\n", "This ROOTbook produces a plot of the dimuon invariant mass spectrum starting from a subset of the CMS collision events of Run2010B. \n", "Every entry in the dataset represents a muon pair. The columns available and their types are:\n", "\n", "| Column Name | Type | Quantity |\n", "| :-----------: |:--------:| :--------------------------------------------:|\n", "| *E1* | double | Energy of the first muon |\n", "| *eta1* | double | Pseudorapidity of the first muon |\n", "| *phi1* | double | Phi of the first muon |\n", "| *px1* | double | X component of the momentum of the first muon |\n", "| *py1* | double | Y component of the momentum of the first muon |\n", "| *pz1* | double | Z component of the momentum of the first muon |\n", "| *pt1* | double | Transverse momentum of the first muon |\n", "| *C1* | Long64_t | Charge of the momentum of the first muon |\n", "| *E2* | double | Energy of the second muon |\n", "| *eta2* | double | Pseudorapidity of the second muon |\n", "| *phi2* | double | Phi of the second muon |\n", "| *px2* | double | X component of the momentum of the second muon |\n", "| *py2* | double | Y component of the momentum of the second muon |\n", "| *pz2* | double | Z component of the momentum of the second muon |\n", "| *pt2* | double | Transverse momentum of the second muon |\n", "| *C2* | Long64_t | Charge of the momentum of the second muon |\n", "\n", "\n", "\n", "Dataset Reference:
\n", "McCauley, T. (2014). Dimuon event information derived from the Run2010B public Mu dataset. CERN Open Data Portal. DOI: [10.7483/OPENDATA.CMS.CB8H.MFFA](http://opendata.cern.ch/record/700).\n", "\n", "## Objective of this exercise\n", "The objective is to illustrate how to use RDataFrame to produce the plot of the dimuon invariant mass spectrum, apply some cuts and inspect their efficiency and create some control plots.\n", "In some sense, this is a minimal form of what could be conceptually called an \"analysis\".\n", "\n", "### RDataFrame creation\n", "Let's create a *RDataFrame*, which is located in the *ROOT* namespace. The filename(s) can be specified as a string (with a path or a glob) or a list of strings.\n", "The file path is **https://root.cern/files/teaching/CMS_Open_Dataset.root** and it contains a tree called **data**." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "using RDataFrame = ROOT::RDataFrame;\n", "auto fileName = \"https://root.cern/files/teaching/CMS_Open_Dataset.root\";\n", "auto tdf = RDataFrame(\"data\", fileName);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definition of the \"analisys\" cuts\n", "We need to apply some quality cuts to our muons:\n", "- Central muons, with a pseudorapidity smaller than 2.3\n", "- Muons of opposite charge :)\n", "- Muons with transverse momentum greater than 2 GeV\n", "\n", "In addition, we will define the charge cut as a C++ lambda and the other two as strings. Remember that the strings need to be valid **C++**!\n", "\n", "The dataframe needs to be saved in a variable: we'll need that later. The filters have a name: this will be used at the end of the \"analysis\" to study the efficiency of the selections." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "auto chargeCut = [](Long64_t c1, Long64_t c2){ return c1 != c2;};\n", "auto etaCutStr = \"fabs(eta1) < 2.3 && fabs(eta2) < 2.3\";\n", "auto ptCutStr = \"pt1 > 2 && pt2 > 2\";\n", "auto tdf_f = tdf.Filter(chargeCut, {\"C1\", \"C2\"}, \"Opposite Charge\")\n", " .Filter(etaCutStr, \"Central Muons\")\n", " .Filter(ptCutStr, \"Sane Pt\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creation of a column holding the invariant mass of the dimuon system\n", "Here we create a new column, which does not exist in the original dataset. \n", "We can create it with the usual invariant mass formula, packed in a string.\n", "\\begin{align}\n", "m = \\sqrt{(E1+E2)^2 - (px1+px2)^2 - (py1+py2)^2 - (pz1+pz2)^2 }\n", "\\end{align}\n", "Remember that the string needs to be valid **C++**!" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "auto invMassFormula = \"sqrt(pow(E1+E2, 2) - (pow(px1+px2, 2) + pow(py1+py2, 2) + pow(pz1+pz2, 2)))\";\n", "auto tdf_fd = tdf_f.Define(\"invMass\", invMassFormula);" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Creation of the histograms and cutflow efficiency reports\n", "We now create our histograms. We'll prepare some control plots and the invariant mass plot.\n", "The control plots needed are:\n", "- A histogram of the transverse momenta of the muons (1 histogram for each of the leptons) before all cuts\n", "- A 2D histogram with the phi of the first muon on the x axis and the phi of the second muon on the y axis\n", "\n", "The main plot with the invariant mass of the dimuon system has 512 bins from 5 to 110 GeV.\n", "\n", "This is perhaps an opportunity to try out the automatic colouring.\n", "\n", "In addition, after drawing, you will invoke the **Report()** method on the top level node to inspect the efficiency of the cuts.\n", "\n", "**BE CAREFUL!!** When using notebooks, it's good practice to create **TCanvas** instances explicitly - to display the images you *need* to **Draw** the canvases too (there is no asynchronicity in a notebook: drawing must be explicit)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nIP1fh429W5doMjoAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "auto pt1_h = tdf.Histo1D(\"pt1\");\n", "auto pt2_h = tdf.Histo1D(\"pt2\");\n", "\n", "auto invMass_h = tdf_fd.Histo1D({\"invMass\",\"CMS Opendata;#mu#mu mass [GeV];Events\",512,5,110},\"invMass\");\n", "auto pi = TMath::Pi();\n", "auto phis_h = tdf_fd.Histo2D({\"\", \"\", 64, -pi, pi, 64, -pi, pi}, \"phi1\", \"phi2\");\n", "\n", "TCanvas muonsPts;\n", "pt1_h->Draw(\"PL PLC PMC\");\n", "pt2_h->Draw(\"Same PL PLC PMC\");\n", "muonsPts.SetLogy();\n", "muonsPts.SetLogx();\n", "muonsPts.Draw();\n", "\n", "TCanvas phis;\n", "phis_h->Draw(\"col\");\n", "phis.Draw();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we print the efficiency of the cuts" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Opposite Charge: pass=57688 all=90000 -- 64.098 %\n", "Central Muons: pass=53303 all=57688 -- 92.399 %\n", "Sane Pt : pass=42431 all=53303 -- 79.603 %\n" ] } ], "source": [ "tdf.Report()->Print();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The final plot with a little extra: interactive ROOT JavaScript visualisation. Feel free to zoom and modify the plot using your mouse and keyboard." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%jsroot on\n", "TCanvas invMass;\n", "invMass_h->Draw();\n", "invMass.SetLogy();\n", "invMass.SetLogx();\n", "invMass.SetGrid();\n", "invMass.Draw();" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "What resonances do you recognise?" ] } ], "metadata": { "kernelspec": { "display_name": "ROOT C++", "language": "c++", "name": "root" }, "language_info": { "codemirror_mode": "text/x-c++src", "file_extension": ".C", "mimetype": " text/x-c++src", "name": "c++" } }, "nbformat": 4, "nbformat_minor": 2 }