52 for (
size_t i = 0; i <
type.size(); i++) {
53 PtEtaPhiEVectorF
p(0.001 *
pt[i], eta[i], phi[i], 0.001 *
e[i]);
55 if (
pt[i] < 7000 ||
abs(eta[i]) > 2.47 ||
abs(trackd0pv[i] / tracksigd0pv[i]) > 5 ||
56 abs(z0[i] *
sin(
p.Theta())) > 0.5)
59 if (
abs(trackd0pv[i] / tracksigd0pv[i]) > 5 ||
abs(z0[i] *
sin(
p.Theta())) > 0.5)
69 PtEtaPhiEVectorF p1(
pt[0], eta[0], phi[0],
e[0]);
70 PtEtaPhiEVectorF p2(
pt[1], eta[1], phi[1],
e[1]);
71 PtEtaPhiEVectorF p3(
pt[2], eta[2], phi[2],
e[2]);
72 PtEtaPhiEVectorF p4(
pt[3], eta[3], phi[3],
e[3]);
73 return 0.001 * (p1 + p2 + p3 + p4).M();
84 std::string dataset_spec =
gROOT->GetTutorialsDir() + std::string(
"/dataframe/df106_HiggsToFourLeptons_spec.json");
96 "bool GoodElectronsAndMuons(const ROOT::RVecI &type, const RVecF &pt, const RVecF &eta, const RVecF &phi, const RVecF &e,"
97 "const RVecF &trackd0pv, const RVecF &tracksigd0pv, const RVecF &z0);"
98 "float ComputeInvariantMass(const RVecF &pt, const RVecF &eta, const RVecF &phi, const RVecF &e);"
109 .DefinePerSample(
"lumi", [](
unsigned int slot,
const RSampleInfo &
id) {
return id.GetD(
"lumi"); })
110 .DefinePerSample(
"sumws", [](
unsigned int slot,
const RSampleInfo &
id) {
return id.GetD(
"sumws"); })
111 .DefinePerSample(
"sample_category",
112 [](
unsigned int slot,
const RSampleInfo &
id) {
return id.GetS(
"sample_category"); })
114 .DefinePerSample(
"scale",
116 return id.Contains(
"mc_363490.llll.4lep.root") ? 1.3f : 1.0f;
125 "abs(lep_eta) < 2.5 && lep_pt > 5000 && lep_ptcone30 / lep_pt < 0.3 && lep_etcone20 / lep_pt < 0.3")
126 .Filter(
"Sum(good_lep) == 4")
127 .Filter(
"Sum(lep_charge[good_lep]) == 0")
128 .Define(
"goodlep_sumtypes",
"Sum(lep_type[good_lep])")
129 .Filter(
"goodlep_sumtypes == 44 || goodlep_sumtypes == 52 || goodlep_sumtypes == 48")
132 "GoodElectronsAndMuons(lep_type[good_lep], lep_pt[good_lep], lep_eta[good_lep], lep_phi[good_lep], "
133 "lep_E[good_lep], lep_trackd0pvunbiased[good_lep], lep_tracksigd0pvunbiased[good_lep], lep_z0[good_lep])")
135 .Define(
"goodlep_pt",
"lep_pt[good_lep]")
136 .Define(
"goodlep_eta",
"lep_eta[good_lep]")
137 .Define(
"goodlep_phi",
"lep_phi[good_lep]")
138 .Define(
"goodlep_E",
"lep_E[good_lep]")
139 .Define(
"goodlep_type",
"lep_type[good_lep]")
141 .Filter(
"goodlep_pt[0] > 25000 && goodlep_pt[1] > 15000 && goodlep_pt[2] > 10000")
143 .Define(
"m4l",
"ComputeInvariantMass(goodlep_pt, goodlep_eta, goodlep_phi, goodlep_E)")
145 .DefinePerSample(
"reweighting", [](
unsigned int slot,
const RSampleInfo &
id) {
return id.Contains(
"mc"); });
148 auto df_mc = df_analysis.Filter(
"reweighting == true")
149 .Define(
"weight", (
"scaleFactor_ELE * scaleFactor_MUON * scaleFactor_LepTRIGGER * "
150 "scaleFactor_PILEUP * mcWeight * scale * xsecs / sumws * lumi"));
153 auto df_higgs = df_mc.Filter(R
"(sample_category == "higgs")")
155 auto df_zz = df_mc.Filter(
"sample_category == \"zz\"")
157 auto df_other = df_mc.Filter(
"sample_category == \"other\"")
161 auto df_h_mass_data = df_analysis.Filter(
"reweighting == false")
162 .Filter(
"sample_category == \"data\"")
163 .Define(
"weight_", []() {
return 1; })
174 const std::vector<double>
x{5.50e3, 5.52e3, 12.54e3, 17.43e3, 22.40e3, 27.48e3, 30e3, 10000e3};
175 const std::vector<double>
y{0.06628, 0.06395, 0.06396, 0.03372, 0.02441, 0.01403, 0, 0};
181 auto df_with_variations_mc =
188 {
"weight",
"goodlep_pt",
"goodlep_type"}, {
"up",
"down"})
195 for (
unsigned int i = 0; i < histos_mc[
"nominal"].GetXaxis()->GetNbins(); i++) {
196 histos_mc[
"nominal"].SetBinError(
197 i, (histos_mc[
"weight:up"].GetBinContent(i) - histos_mc[
"nominal"].GetBinContent(i)));
201 gROOT->SetStyle(
"ATLAS");
204 auto c =
new TCanvas(
"c",
" ", 600, 600);
205 auto pad =
new TPad(
"upper_pad",
"", 0, 0, 1, 1);
213 df_other->SetFillColor(
kViolet - 9);
214 df_zz->SetFillColor(
kAzure - 9);
215 df_higgs->SetFillColor(
kRed + 2);
217 auto stack =
new THStack(
"stack",
"");
218 auto h_other =
static_cast<TH1 *
>(df_other->Clone());
220 auto h_zz =
static_cast<TH1 *
>(df_zz->Clone());
222 auto h_higgs =
static_cast<TH1 *
>(df_higgs->Clone());
227 stack->GetHistogram()->SetTitle(
"");
228 stack->GetHistogram()->GetXaxis()->SetLabelSize(0.035);
229 stack->GetHistogram()->GetXaxis()->SetTitleSize(0.045);
230 stack->GetHistogram()->GetXaxis()->SetTitleOffset(1.3);
231 stack->GetHistogram()->GetXaxis()->SetTitle(
"m_{4l}^{H#rightarrow ZZ} [GeV]");
232 stack->GetHistogram()->GetYaxis()->SetLabelSize(0.035);
233 stack->GetHistogram()->GetYaxis()->SetTitleSize(0.045);
234 stack->GetHistogram()->GetYaxis()->SetTitle(
"Events");
235 stack->SetMaximum(35);
236 stack->GetHistogram()->GetYaxis()->ChangeLabel(1, -1, 0);
239 histos_mc[
"nominal"].SetFillColor(
kBlack);
240 histos_mc[
"nominal"].SetFillStyle(3254);
241 auto h_nominal = histos_mc[
"nominal"].DrawClone(
"E2 same");
242 histos_mc[
"weight:up"].SetLineColor(
kGreen + 2);
243 auto h_weight_up = histos_mc[
"weight:up"].DrawClone(
"HIST same");
244 histos_mc[
"weight:down"].SetLineColor(
kBlue + 2);
245 auto h_weight_down = histos_mc[
"weight:down"].DrawClone(
"HIST same");
248 df_h_mass_data->SetMarkerStyle(20);
249 df_h_mass_data->SetMarkerSize(1.);
250 df_h_mass_data->SetLineWidth(2);
251 df_h_mass_data->SetLineColor(
kBlack);
252 df_h_mass_data->SetStats(
false);
253 auto h_mass_data = df_h_mass_data->DrawClone(
"E sames");
256 auto legend =
new TLegend(0.57, 0.65, 0.94, 0.94);
257 legend->SetTextFont(42);
258 legend->SetFillStyle(0);
259 legend->SetBorderSize(0);
260 legend->SetTextSize(0.025);
261 legend->SetTextAlign(32);
262 legend->AddEntry(h_mass_data,
"Data",
"lep");
263 legend->AddEntry(h_higgs,
"Higgs MC",
"f");
264 legend->AddEntry(h_zz,
"ZZ MC",
"f");
265 legend->AddEntry(h_other,
"Other MC",
"f");
266 legend->AddEntry(h_weight_down,
"Total MC Variations Down",
"l");
267 legend->AddEntry(h_weight_up,
"Total MC Variations Up",
"l");
268 legend->AddEntry(h_nominal,
"Total MC Uncertainty",
"f");
278 data_label.
DrawLatexNDC(0.19 + 0.13, 0.85,
"Open Data");
282 header.
DrawLatexNDC(0.21, 0.8,
"#sqrt{s} = 13 TeV, 10 fb^{-1}");
285 c->
SaveAs(
"df106_HiggsToFourLeptons_cpp.png");
286 std::cout <<
"Saved figure to df106_HiggsToFourLeptons_cpp.png" << std::endl;
winID h TVirtualViewer3D TVirtualGLPainter p
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 type
Class describing a generic LorentzVector in the 4D space-time, using the specified coordinate system ...
RInterface< Proxied, DS_t > DefinePerSample(std::string_view name, F expression)
Define a new column that is updated when the input sample changes.
This type represents a sample identifier, to be used in conjunction with RDataFrame features such as ...
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.
A TGraph is an object made of two arrays X and Y with npoints each.
TH1 is the base class of all histogram classes in ROOT.
virtual Bool_t Add(TF1 *h1, Double_t c1=1, Option_t *option="")
Performs the operation: this = this + c1*f1 if errors are defined (see TH1::Sumw2),...
The Histogram stack class.
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.
The most important graphics class in the ROOT system.
RVec< PromoteType< T > > abs(const RVec< T > &v)
auto Map(Args &&... args)
Create new collection applying a callable to the elements of the input collection.
RVec< PromoteType< T > > sin(const RVec< T > &v)
RVec< T > Filter(const RVec< T > &v, F &&f)
Create a new collection with the elements passing the filter expressed by the predicate.
ROOT::RDataFrame FromSpec(const std::string &jsonFile)
Factory method to create an RDataFrame from a JSON specification file.
RResultMap< T > VariationsFor(RResultPtr< T > resPtr)
Produce all required systematic variations for the given result.
void AddProgressBar(ROOT::RDF::RNode df)
Add ProgressBar to a ROOT::RDF::RNode.
void EnableImplicitMT(UInt_t numthreads=0)
Enable ROOT's implicit multi-threading for all objects and methods that provide an internal paralleli...
Double_t Mean(Long64_t n, const T *a, const Double_t *w=nullptr)
Returns the weighted mean of an array a with length n.
A struct which stores the parameters of a TH1D.