60   auto df_ge4m = df.Filter(
"nMuon>=4", 
"At least four muons");
 
   61   auto df_iso = 
df_ge4m.Filter(
"All(abs(Muon_pfRelIso04_all)<0.40)", 
"Require good isolation");
 
   62   auto df_kin = 
df_iso.Filter(
"All(Muon_pt>5) && All(abs(Muon_eta)<2.4)", 
"Good muon kinematics");
 
   63   auto df_ip3d = 
df_kin.Define(
"Muon_ip3d", 
"sqrt(Muon_dxy*Muon_dxy + Muon_dz*Muon_dz)");
 
   64   auto df_sip3d = 
df_ip3d.Define(
"Muon_sip3d", 
"Muon_ip3d/sqrt(Muon_dxyErr*Muon_dxyErr + Muon_dzErr*Muon_dzErr)");
 
   65   auto df_pv = 
df_sip3d.Filter(
"All(Muon_sip3d<4) && All(abs(Muon_dxy)<0.5) && All(abs(Muon_dz)<1.0)",
 
   66                                "Track close to primary vertex with small uncertainty");
 
   67   auto df_2p2n = 
df_pv.Filter(
"nMuon==4 && Sum(Muon_charge==1)==2 && Sum(Muon_charge==-1)==2",
 
   68                               "Two positive and two negative muons");
 
   75   auto df_ge4el = df.Filter(
"nElectron>=4", 
"At least our electrons");
 
   76   auto df_iso = 
df_ge4el.Filter(
"All(abs(Electron_pfRelIso03_all)<0.40)", 
"Require good isolation");
 
   77   auto df_kin = 
df_iso.Filter(
"All(Electron_pt>7) && All(abs(Electron_eta)<2.5)", 
"Good Electron kinematics");
 
   78   auto df_ip3d = 
df_kin.Define(
"Electron_ip3d", 
"sqrt(Electron_dxy*Electron_dxy + Electron_dz*Electron_dz)");
 
   80                                  "Electron_ip3d/sqrt(Electron_dxyErr*Electron_dxyErr + Electron_dzErr*Electron_dzErr)");
 
   81   auto df_pv = 
df_sip3d.Filter(
"All(Electron_sip3d<4) && All(abs(Electron_dxy)<0.5) && " 
   82                                "All(abs(Electron_dz)<1.0)",
 
   83                                "Track close to primary vertex with small uncertainty");
 
   84   auto df_2p2n = 
df_pv.Filter(
"nElectron==4 && Sum(Electron_charge==1)==2 && Sum(Electron_charge==-1)==2",
 
   85                               "Two positive and two negative electrons");
 
   92   auto df_ge2el2mu = df.Filter(
"nElectron>=2 && nMuon>=2", 
"At least two electrons and two muons");
 
   93   auto df_eta = 
df_ge2el2mu.Filter(
"All(abs(Electron_eta)<2.5) && All(abs(Muon_eta)<2.4)", 
"Eta cuts");
 
  114   auto df_dr = 
df_pt.Filter(
dr_cuts, {
"Muon_eta", 
"Muon_phi", 
"Electron_eta", 
"Electron_phi"}, 
"Dr cuts");
 
  115   auto df_iso = 
df_dr.Filter(
"All(abs(Electron_pfRelIso03_all)<0.40) && All(abs(Muon_pfRelIso04_all)<0.40)",
 
  116                              "Require good isolation");
 
  117   auto df_el_ip3d = 
df_iso.Define(
"Electron_ip3d_el", 
"sqrt(Electron_dxy*Electron_dxy + Electron_dz*Electron_dz)");
 
  119                                        "Electron_ip3d_el/sqrt(Electron_dxyErr*Electron_dxyErr + " 
  120                                        "Electron_dzErr*Electron_dzErr)");
 
  121   auto df_el_track = 
df_el_sip3d.Filter(
"All(Electron_sip3d_el<4) && All(abs(Electron_dxy)<0.5) && All(abs(Electron_dz)<1.0)",
 
  122                                         "Electron track close to primary vertex with small uncertainty");
 
  125                                        "Muon_ip3d_mu/sqrt(Muon_dxyErr*Muon_dxyErr + Muon_dzErr*Muon_dzErr)");
 
  126   auto df_mu_track = 
df_mu_sip3d.Filter(
"All(Muon_sip3d_mu<4) && All(abs(Muon_dxy)<0.5) && All(abs(Muon_dz)<1.0)",
 
  127                                         "Muon track close to primary vertex with small uncertainty");
 
  129                                     "Two opposite charged electron and muon pairs");
 
  137   idx[0].reserve(2); idx[1].reserve(2);
 
  143   for (
size_t i = 0; i < 
idx_cmb[0].size(); i++) {
 
  161   for (
size_t i = 0; i < 4; i++) {
 
  163         idx[1].emplace_back(i);
 
  175   for (
size_t i = 0; i < 2; i++) {
 
  176      const auto i1 = idx[i][0]; 
const auto i2 = idx[i][1];
 
  191   const auto i1 = idx[0][0]; 
const auto i2 = idx[0][1];
 
  192   const auto i3 = idx[1][0]; 
const auto i4 = idx[1][1];
 
  203   auto df_z1_cut = df.Filter(
"Z_mass[0] > 40 && Z_mass[0] < 120", 
"Mass of first Z candidate in [40, 120]");
 
  204   auto df_z2_cut = 
df_z1_cut.Filter(
"Z_mass[1] > 12 && Z_mass[1] < 120", 
"Mass of second Z candidate in [12, 120]");
 
  216      df_base.Define(
"Z_idx", 
reco_zz_to_4l, {
"Muon_pt", 
"Muon_eta", 
"Muon_phi", 
"Muon_mass", 
"Muon_charge"});
 
  220      for (
size_t i = 0; i < 2; i++) {
 
  221         const auto i1 = idx[i][0];
 
  222         const auto i2 = idx[i][1];
 
  231      df_z_idx.Filter(
filter_z_dr, {
"Z_idx", 
"Muon_eta", 
"Muon_phi"}, 
"Delta R separation of muons building Z system");
 
  255                                  {
"Electron_pt", 
"Electron_eta", 
"Electron_phi", 
"Electron_mass", 
"Electron_charge"});
 
  259      for (
size_t i = 0; i < 2; i++) {
 
  260         const auto i1 = idx[i][0];
 
  261         const auto i2 = idx[i][1];
 
  270                                  "Delta R separation of Electrons building Z system");
 
  274                                   {
"Z_idx", 
"Electron_pt", 
"Electron_eta", 
"Electron_phi", 
"Electron_mass"});
 
  281                                    {
"Z_idx", 
"Electron_pt", 
"Electron_eta", 
"Electron_phi", 
"Electron_mass"});
 
  327                                                       "Muon_pt", 
"Muon_eta", 
"Muon_phi", 
"Muon_mass"});
 
  335      {
"Electron_pt", 
"Electron_eta", 
"Electron_phi", 
"Electron_mass", 
"Muon_pt", 
"Muon_eta", 
"Muon_phi", 
"Muon_mass"});
 
  347   auto c = 
new TCanvas(
"", 
"", 800, 700);
 
  348   c->SetLeftMargin(0.15);
 
  353   auto h_cmb = 
static_cast<TH1 *
>(sig->Clone());
 
  358   h_cmb->GetXaxis()->SetTitleSize(0.04);
 
  359   h_cmb->GetYaxis()->SetTitle(
"N_{Events}");
 
  360   h_cmb->GetYaxis()->SetTitleSize(0.04);
 
  362   h_cmb->SetLineWidth(2);
 
  363   h_cmb->SetMaximum(18);
 
  366   h_bkg->SetLineWidth(2);
 
  367   h_bkg->SetFillStyle(1001);
 
  374   h_data->SetMarkerStyle(20);
 
  375   h_data->SetMarkerSize(1.0);
 
  381   h_bkg->Draw(
"HIST SAME");
 
  388   legend->SetTextSize(0.03);
 
  397   cms_label.DrawLatexNDC(0.16, 0.92, 
"#bf{CMS Open Data}");
 
  400   header.
DrawLatexNDC(0.63, 0.92, 
"#sqrt{s} = 8 TeV, L_{int} = 11.6 fb^{-1}");
 
  413   std::string path = 
"root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod/";
 
  414   if (
run_fast) path = 
"root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod_skimmed/";
 
  430      "Events", {path + 
"Run2012B_DoubleMuParked.root", path + 
"Run2012C_DoubleMuParked.root"});
 
  432      "Events", {path + 
"Run2012B_DoubleElectron.root", path + 
"Run2012C_DoubleElectron.root"});
 
  439   const auto nbins = 36;                      
 
  442         .Histo1D({
"h_sig_4mu", 
"", nbins, 70, 180}, 
"H_mass", 
"weight");
 
  450         .Histo1D({
"h_bkg_4mu", 
"", nbins, 70, 180}, 
"H_mass", 
"weight");
 
  454         .Define(
"weight", [] { 
return 1.0; })
 
  455         .Histo1D({
"h_data_4mu", 
"", nbins, 70, 180}, 
"H_mass", 
"weight");
 
  461         .Histo1D({
"h_sig_4el", 
"", nbins, 70, 180}, 
"H_mass", 
"weight");
 
  468         .Histo1D({
"h_bkg_4el", 
"", nbins, 70, 180}, 
"H_mass", 
"weight");
 
  472                           .Histo1D({
"h_data_4el", 
"", nbins, 70, 180}, 
"H_mass", 
"weight");
 
  478         .Histo1D({
"h_sig_2el2mu", 
"", nbins, 70, 180}, 
"H_mass", 
"weight");
 
  485         .Histo1D({
"h_bkg_2el2mu", 
"", nbins, 70, 180}, 
"H_mass", 
"weight");
 
  489                              .Histo1D({
"h_data_2el2mu_doublemu", 
"", nbins, 70, 180}, 
"H_mass", 
"weight");
 
  519   df103_NanoAODHiggsAnalysis(
true);
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
winID h TVirtualViewer3D TVirtualGLPainter char TVirtualGLPainter plot
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
 
R__EXTERN TStyle * gStyle
 
ROOT's RDataFrame offers a modern, high-level interface for analysis of data stored in TTree ,...
 
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
 
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
 
TH1 is the base class of all histogram classes in ROOT.
 
To draw Mathematical Formula.
 
TLatex * DrawLatexNDC(Double_t x, Double_t y, const char *text)
Draw this TLatex with new coordinates in NDC.
 
This class displays a legend box (TPaveText) containing several legend entries.
 
virtual void SaveAs(const char *filename="", Option_t *option="") const
Save this object in the file specified by filename.
 
Vector1::Scalar DeltaR(const Vector1 &v1, const Vector2 &v2)
Find difference in pseudorapidity (Eta) and Phi between two generic vectors The only requirements on ...
 
RVec< T > Reverse(const RVec< T > &v)
Return copy of reversed vector.
 
RVec< RVec< std::size_t > > Combinations(const std::size_t size1, const std::size_t size2)
Return the indices that represent all combinations of the elements of two RVecs.
 
RInterface<::ROOT::Detail::RDF::RNodeBase, void > RNode
 
unsigned int RunGraphs(std::vector< RResultHandle > handles)
Run the event loops of multiple RDataFrames concurrently.
 
void EnableImplicitMT(UInt_t numthreads=0)
Enable ROOT's implicit multi-threading for all objects and methods that provide an internal paralleli...