46                                 "dataframe" + 
os.sep, 
"df103_NanoAODHiggsAnalysis_python.h")
 
   53    """Reconstruct Higgs from two electrons and two muons""" 
   57    df_z_mass = 
df_base.Define(
"Z_mass", 
"compute_z_masses_2el2mu(Electron_pt, Electron_eta, Electron_phi," 
   58                               " Electron_mass, Muon_pt, Muon_eta, Muon_phi, Muon_mass)")
 
   62    df_h_mass = 
df_z_cut.Define(
"H_mass", 
"compute_higgs_mass_2el2mu(Electron_pt, Electron_eta, Electron_phi," 
   63                                " Electron_mass, Muon_pt, Muon_eta, Muon_phi, Muon_mass)")
 
   69    """Select interesting events with two electrons and two muons""" 
   70    df_ge2el2mu = 
df.Filter(
"nElectron>=2 && nMuon>=2", 
"At least two electrons and two muons")
 
   71    df_eta = 
df_ge2el2mu.Filter(
"All(abs(Electron_eta)<2.5) && All(abs(Muon_eta)<2.4)", 
"Eta cuts")
 
   73    df_pt = 
df_eta.Filter(
"pt_cuts(Muon_pt, Electron_pt)", 
"Pt cuts")
 
   75    df_dr = 
df_pt.Filter(
"dr_cuts(Muon_eta, Muon_phi, Electron_eta, Electron_phi)", 
"Dr cuts")
 
   77    df_iso = 
df_dr.Filter(
"All(abs(Electron_pfRelIso03_all)<0.40) && All(abs(Muon_pfRelIso04_all)<0.40)",
 
   78                          "Require good isolation")
 
   79    df_el_ip3d = 
df_iso.Define(
"Electron_ip3d_el", 
"sqrt(Electron_dxy*Electron_dxy + Electron_dz*Electron_dz)")
 
   81                                    "Electron_ip3d_el/sqrt(Electron_dxyErr*Electron_dxyErr + " 
   82                                    "Electron_dzErr*Electron_dzErr)")
 
   83    df_el_track = 
df_el_sip3d.Filter(
"All(Electron_sip3d_el<4) && All(abs(Electron_dxy)<0.5) &&" 
   84                                     " All(abs(Electron_dz)<1.0)",
 
   85                                     "Electron track close to primary vertex with small uncertainty")
 
   86    df_mu_ip3d = 
df_el_track.Define(
"Muon_ip3d_mu", 
"sqrt(Muon_dxy*Muon_dxy + Muon_dz*Muon_dz)")
 
   89                                    "Muon_ip3d_mu/sqrt(Muon_dxyErr*Muon_dxyErr + Muon_dzErr*Muon_dzErr)")
 
   90    df_mu_track = 
df_mu_sip3d.Filter(
"All(Muon_sip3d_mu<4) && All(abs(Muon_dxy)<0.5) && All(abs(Muon_dz)<1.0)",
 
   91                                     "Muon track close to primary vertex with small uncertainty")
 
   93                                 "Two opposite charged electron and muon pairs")
 
   99    """Reconstruct Higgs from four muons""" 
  104    df_z_idx = 
df_base.Define(
"Z_idx", 
"reco_zz_to_4l(Muon_pt, Muon_eta, Muon_phi, Muon_mass, Muon_charge)")
 
  107    df_z_dr = 
df_z_idx.Filter(
"filter_z_dr(Z_idx, Muon_eta, Muon_phi)", 
"Delta R separation of muons building Z system")
 
  110    df_z_mass = 
df_z_dr.Define(
"Z_mass", 
"compute_z_masses_4l(Z_idx, Muon_pt, Muon_eta, Muon_phi, Muon_mass)")
 
  116    df_h_mass = 
df_z_cut.Define(
"H_mass", 
"compute_higgs_mass_4l(Z_idx, Muon_pt, Muon_eta, Muon_phi, Muon_mass)")
 
  122    """Select interesting events with four muons""" 
  123    df_ge4m = 
df.Filter(
"nMuon>=4", 
"At least four muons")
 
  125    df_iso = 
df_ge4m.Filter(
"All(abs(Muon_pfRelIso04_all)<0.40)", 
"Require good isolation")
 
  126    df_kin = 
df_iso.Filter(
"All(Muon_pt>5) && All(abs(Muon_eta)<2.4)", 
"Good muon kinematics")
 
  127    df_ip3d = 
df_kin.Define(
"Muon_ip3d", 
"sqrt(Muon_dxy*Muon_dxy + Muon_dz*Muon_dz)")
 
  128    df_sip3d = 
df_ip3d.Define(
"Muon_sip3d", 
"Muon_ip3d/sqrt(Muon_dxyErr*Muon_dxyErr + Muon_dzErr*Muon_dzErr)")
 
  129    df_pv = 
df_sip3d.Filter(
"All(Muon_sip3d<4) && All(abs(Muon_dxy)<0.5) && All(abs(Muon_dz)<1.0)",
 
  130                            "Track close to primary vertex with small uncertainty")
 
  131    df_2p2n = 
df_pv.Filter(
"nMuon==4 && Sum(Muon_charge==1)==2 && Sum(Muon_charge==-1)==2",
 
  132                           "Two positive and two negative muons")
 
  138    """Apply selection on reconstructed Z candidates""" 
  139    df_z1_cut = 
df.Filter(
"Z_mass[0] > 40 && Z_mass[0] < 120", 
"Mass of first Z candidate in [40, 120]")
 
  140    df_z2_cut = 
df_z1_cut.Filter(
"Z_mass[1] > 12 && Z_mass[1] < 120", 
"Mass of second Z candidate in [12, 120]")
 
  146    """Reconstruct Higgs from four electrons""" 
  152                              "reco_zz_to_4l(Electron_pt, Electron_eta, Electron_phi, Electron_mass, Electron_charge)")
 
  155    df_z_dr = 
df_z_idx.Filter(
"filter_z_dr(Z_idx, Electron_eta, Electron_phi)",
 
  156                              "Delta R separation of Electrons building Z system")
 
  160                               "compute_z_masses_4l(Z_idx, Electron_pt, Electron_eta, Electron_phi, Electron_mass)")
 
  167                                "compute_higgs_mass_4l(Z_idx, Electron_pt, Electron_eta, Electron_phi, Electron_mass)")
 
  173    """Select interesting events with four electrons""" 
  174    df_ge4el = 
df.Filter(
"nElectron>=4", 
"At least our electrons")
 
  175    df_iso = 
df_ge4el.Filter(
"All(abs(Electron_pfRelIso03_all)<0.40)", 
"Require good isolation")
 
  176    df_kin = 
df_iso.Filter(
"All(Electron_pt>7) && All(abs(Electron_eta)<2.5)", 
"Good Electron kinematics")
 
  177    df_ip3d = 
df_kin.Define(
"Electron_ip3d", 
"sqrt(Electron_dxy*Electron_dxy + Electron_dz*Electron_dz)")
 
  179                              "Electron_ip3d/sqrt(Electron_dxyErr*Electron_dxyErr + Electron_dzErr*Electron_dzErr)")
 
  180    df_pv = 
df_sip3d.Filter(
"All(Electron_sip3d<4) && All(abs(Electron_dxy)<0.5) && All(abs(Electron_dz)<1.0)",
 
  181                            "Track close to primary vertex with small uncertainty")
 
  182    df_2p2n = 
df_pv.Filter(
"nElectron==4 && Sum(Electron_charge==1)==2 && Sum(Electron_charge==-1)==2",
 
  183                           "Two positive and two negative electrons")
 
  188def plot(sig, bkg, data, x_label, filename):
 
  190    Plot invariant mass for signal and background processes from simulated 
  191    events overlay the measured data. 
  261def df103_NanoAODHiggsAnalysis():
 
  264    path = 
"root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod/" 
  266    if run_fast: path = 
"root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod_skimmed/" 
  282    df_data_doublemu = 
ROOT.RDataFrame(
"Events", (path + f 
for f 
in [
"Run2012B_DoubleMuParked.root", 
"Run2012C_DoubleMuParked.root"]))
 
  283    df_data_doubleel = 
ROOT.RDataFrame(
"Events", (path + f 
for f 
in [
"Run2012B_DoubleElectron.root", 
"Run2012C_DoubleElectron.root"]))
 
  292    nevt_ZZTo4mu = 1499064.0  
 
  295    nevt_ZZTo4el = 1499093.0  
 
  297    xsec_ZZTo2el2mu = 0.18  
 
  298    nevt_ZZTo2el2mu = 1497445.0  
 
  300    xsec_SMHiggsToZZTo4L = 0.0065  
 
  301    nevt_SMHiggsToZZTo4L = 299973.0  
 
  304    weight_sig_4mu = luminosity * xsec_SMHiggsToZZTo4L / nevt_SMHiggsToZZTo4L
 
  305    weight_bkg_4mu = luminosity * xsec_ZZTo4mu * scale_ZZTo4l / nevt_ZZTo4mu
 
  307    weight_sig_4el = luminosity * xsec_SMHiggsToZZTo4L / nevt_SMHiggsToZZTo4L
 
  308    weight_bkg_4el = luminosity * xsec_ZZTo4el * scale_ZZTo4l / nevt_ZZTo4el
 
  310    weight_sig_2el2mu = luminosity * xsec_SMHiggsToZZTo4L / nevt_SMHiggsToZZTo4L
 
  311    weight_bkg_2el2mu = luminosity * xsec_ZZTo2el2mu * scale_ZZTo4l / nevt_ZZTo2el2mu
 
  317                                  .Histo1D((
"h_sig_4mu", 
"", nbins, 70, 180), 
"H_mass", 
"weight")
 
  322                                  .Histo1D((
"h_bkg_4mu", 
"", nbins, 70, 180), 
"H_mass", 
"weight")
 
  327                                    .Histo1D((
"h_data_4mu", 
"", nbins, 70, 180), 
"H_mass", 
"weight")
 
  333                                  .Histo1D((
"h_sig_4el", 
"", nbins, 70, 180), 
"H_mass", 
"weight")
 
  338                                  .Histo1D((
"h_bkg_4el", 
"", nbins, 70, 180), 
"H_mass", 
"weight")
 
  343                                    .Histo1D((
"h_data_4el", 
"", nbins, 70, 180), 
"H_mass", 
"weight")
 
  349                                        .Histo1D((
"h_sig_2el2mu", 
"", nbins, 70, 180), 
"H_mass", 
"weight")
 
  354                                        .Histo1D((
"h_bkg_2el2mu", 
"", nbins, 70, 180), 
"H_mass", 
"weight")
 
  359                                          .Histo1D((
"h_data_2el2mu_doublemu", 
"", nbins, 70, 180), 
"H_mass", 
"weight")
 
  366                        df_h_sig_4el, df_h_bkg_4el, df_h_data_4el,
 
  367                        df_h_sig_2el2mu, df_h_bkg_2el2mu, df_h_data_2el2mu])
 
  383    plot(signal_4mu, background_4mu, data_4mu, 
"m_{4#mu} (GeV)", 
"higgs_4mu.pdf")
 
  384    plot(signal_4el, background_4el, data_4el, 
"m_{4e} (GeV)", 
"higgs_4el.pdf")
 
  385    plot(signal_2el2mu, background_2el2mu, data_2el2mu, 
"m_{2e2#mu} (GeV)", 
"higgs_2el2mu.pdf")
 
  392    h_sig_4l = signal_4mu
 
  396    h_bkg_4l = background_4mu
 
  405    plot(h_sig_4l, h_bkg_4l, h_data_4l, 
"m_{4l} (GeV)", 
"higgs_4l.pdf")
 
  408if __name__ == 
"__main__":
 
  409    df103_NanoAODHiggsAnalysis()
 
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 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 Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t format
ROOT's RDataFrame offers a modern, high-level interface for analysis of data stored in TTree ,...