28path =
"root://eospublic.cern.ch//eos/opendata/atlas/OutreachDatasets/2020-01-22"
29files = json.load(open(os.path.join(ROOT.gROOT.GetTutorialsDir(),
"dataframe/df106_HiggsToFourLeptons.json")))
31processes = files.keys()
43 samples.append(sample)
47ROOT.gInterpreter.Declare(
"""
48using cRVecF = const ROOT::RVecF &;
49bool GoodElectronsAndMuons(const ROOT::RVecI & type, cRVecF pt, cRVecF eta, cRVecF phi, cRVecF e, cRVecF trackd0pv, cRVecF tracksigd0pv, cRVecF z0)
51 for (size_t i = 0; i < type.size(); i++) {
52 ROOT::Math::PtEtaPhiEVector p(pt[i] / 1000.0, eta[i], phi[i], e[i] / 1000.0);
54 if (pt[i] < 7000 || abs(eta[i]) > 2.47 || abs(trackd0pv[i] / tracksigd0pv[i]) > 5 || abs(z0[i] * sin(p.Theta())) > 0.5) return false;
56 if (abs(trackd0pv[i] / tracksigd0pv[i]) > 5 || abs(z0[i] * sin(p.Theta())) > 0.5) return false;
65 df[s] = df[s].Filter(
"trigE || trigM")
71 df[s] = df[s].Define(
"good_lep",
"abs(lep_eta) < 2.5 && lep_pt > 5000 && lep_ptcone30 / lep_pt < 0.3 && lep_etcone20 / lep_pt < 0.3")\
72 .Filter(
"Sum(good_lep) == 4")\
73 .Filter(
"Sum(lep_charge[good_lep]) == 0")\
74 .Define(
"goodlep_sumtypes",
"Sum(lep_type[good_lep])")\
75 .Filter(
"goodlep_sumtypes == 44 || goodlep_sumtypes == 52 || goodlep_sumtypes == 48")
78 df[s] = df[s].Filter(
"GoodElectronsAndMuons(lep_type[good_lep], lep_pt[good_lep], lep_eta[good_lep], lep_phi[good_lep], lep_E[good_lep], lep_trackd0pvunbiased[good_lep], lep_tracksigd0pvunbiased[good_lep], lep_z0[good_lep])")
81 df[s] = df[s].Define(
"goodlep_pt",
"lep_pt[good_lep]")\
82 .Define(
"goodlep_eta",
"lep_eta[good_lep]")\
83 .Define(
"goodlep_phi",
"lep_phi[good_lep]")\
84 .Define(
"goodlep_E",
"lep_E[good_lep]")
87 df[s] = df[s].Filter(
"goodlep_pt[0] > 25000 && goodlep_pt[1] > 15000 && goodlep_pt[2] > 10000")
93 df[s] = df[s].Define(
"weight",
"1.0")
95 df[s] = df[s].Define(
"weight",
"scaleFactor_ELE * scaleFactor_MUON * scaleFactor_LepTRIGGER * scaleFactor_PILEUP * mcWeight * {} / {} * {}".
format(xsecs[s], sumws[s], lumi))
98ROOT.gInterpreter.Declare(
"""
99float ComputeInvariantMass(cRVecF pt, cRVecF eta, cRVecF phi, cRVecF e)
101 ROOT::Math::PtEtaPhiEVector p1(pt[0], eta[0], phi[0], e[0]);
102 ROOT::Math::PtEtaPhiEVector p2(pt[1], eta[1], phi[1], e[1]);
103 ROOT::Math::PtEtaPhiEVector p3(pt[2], eta[2], phi[2], e[2]);
104 ROOT::Math::PtEtaPhiEVector p4(pt[3], eta[3], phi[3], e[3]);
105 return (p1 + p2 + p3 + p4).M() / 1000;
111 df[s] = df[s].Define(
"m4l",
"ComputeInvariantMass(goodlep_pt, goodlep_eta, goodlep_phi, goodlep_E)")
122def merge_histos(label):
124 for i, d
in enumerate(files[label]):
125 t = histos[d[1]].GetValue()
126 if i == 0: h = t.Clone()
128 h.SetNameTitle(label, label)
131data = merge_histos(
"data")
132higgs = merge_histos(
"higgs")
133zz = merge_histos(
"zz")
134other = merge_histos(
"other")
142ROOT.gROOT.SetStyle(
"ATLAS")
145c = ROOT.TCanvas(
"c",
"", 600, 600)
146pad = ROOT.TPad(
"upper_pad",
"", 0, 0, 1, 1)
153stack = ROOT.THStack()
154for h, color
in zip([other, zz, higgs], [(155, 152, 204), (100, 192, 232), (191, 34, 41)]):
157 h.SetFillColor(ROOT.TColor.GetColor(*color))
160stack.GetXaxis().SetLabelSize(0.04)
161stack.GetXaxis().SetTitleSize(0.045)
162stack.GetXaxis().SetTitleOffset(1.3)
163stack.GetXaxis().SetTitle(
"m_{4l}^{H#rightarrow ZZ} [GeV]")
164stack.GetYaxis().SetTitle(
"Events")
165stack.GetYaxis().SetLabelSize(0.04)
166stack.GetYaxis().SetTitleSize(0.045)
168stack.GetYaxis().ChangeLabel(1, -1, 0)
171data.SetMarkerStyle(20)
172data.SetMarkerSize(1.2)
174data.SetLineColor(ROOT.kBlack)
178legend = ROOT.TLegend(0.60, 0.65, 0.92, 0.92)
179legend.SetTextFont(42)
180legend.SetFillStyle(0)
181legend.SetBorderSize(0)
182legend.SetTextSize(0.04)
183legend.SetTextAlign(32)
184legend.AddEntry(data,
"Data" ,
"lep")
185legend.AddEntry(higgs,
"Higgs",
"f")
186legend.AddEntry(zz,
"ZZ",
"f")
187legend.AddEntry(other,
"Other",
"f")
194text.SetTextSize(0.045)
195text.DrawLatex(0.21, 0.86,
"ATLAS")
197text.DrawLatex(0.21 + 0.16, 0.86,
"Open Data")
198text.SetTextSize(0.04)
199text.DrawLatex(0.21, 0.80,
"#sqrt{s} = 13 TeV, 10 fb^{-1}")
202c.SaveAs(
"df106_HiggsToFourLeptons.png")
203print(
"Saved figure to df106_HiggsToFourLeptons.png")
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 ,...
void RunGraphs(std::vector< RResultHandle > handles)
Trigger the event loop of multiple RDataFrames concurrently.
A struct which stores the parameters of a TH1D.