File indexing completed on 2023-03-17 10:58:24
0001 #include "DQMOffline/RecoB/interface/EffPurFromHistos.h"
0002 #include "DQMOffline/RecoB/interface/Tools.h"
0003 #include "FWCore/Utilities/interface/Exception.h"
0004 #include "TStyle.h"
0005 #include "TCanvas.h"
0006
0007 #include <iostream>
0008 #include <cmath>
0009
0010 #include "DQMServices/Core/interface/DQMStore.h"
0011 #include "FWCore/ServiceRegistry/interface/Service.h"
0012
0013 using namespace std;
0014 using namespace RecoBTag;
0015
0016 EffPurFromHistos::EffPurFromHistos(const std::string& ext,
0017 TH1F* h_d,
0018 TH1F* h_u,
0019 TH1F* h_s,
0020 TH1F* h_c,
0021 TH1F* h_b,
0022 TH1F* h_g,
0023 TH1F* h_ni,
0024 TH1F* h_dus,
0025 TH1F* h_dusg,
0026 TH1F* h_pu,
0027 const std::string& label,
0028 unsigned int mc,
0029 int nBin,
0030 double startO,
0031 double endO)
0032 : fromDiscriminatorDistr(false),
0033 mcPlots_(mc),
0034 doCTagPlots_(false),
0035 label_(label),
0036 histoExtension(ext),
0037 effVersusDiscr_d(h_d),
0038 effVersusDiscr_u(h_u),
0039 effVersusDiscr_s(h_s),
0040 effVersusDiscr_c(h_c),
0041 effVersusDiscr_b(h_b),
0042 effVersusDiscr_g(h_g),
0043 effVersusDiscr_ni(h_ni),
0044 effVersusDiscr_dus(h_dus),
0045 effVersusDiscr_dusg(h_dusg),
0046 effVersusDiscr_pu(h_pu),
0047 nBinOutput(nBin),
0048 startOutput(startO),
0049 endOutput(endO) {
0050
0051 check();
0052 }
0053
0054 EffPurFromHistos::EffPurFromHistos(const FlavourHistograms<double>& dDiscriminatorFC,
0055 const std::string& label,
0056 unsigned int mc,
0057 DQMStore::IBooker& ibook,
0058 int nBin,
0059 double startO,
0060 double endO)
0061 : fromDiscriminatorDistr(true),
0062 mcPlots_(mc),
0063 doCTagPlots_(false),
0064 label_(label),
0065 nBinOutput(nBin),
0066 startOutput(startO),
0067 endOutput(endO) {
0068 histoExtension = "_" + dDiscriminatorFC.baseNameTitle();
0069
0070 discrNoCutEffic =
0071 std::make_unique<FlavourHistograms<double>>("totalEntries" + histoExtension,
0072 "Total Entries: " + dDiscriminatorFC.baseNameDescription(),
0073 dDiscriminatorFC.nBins(),
0074 dDiscriminatorFC.lowerBound(),
0075 dDiscriminatorFC.upperBound(),
0076 false,
0077 true,
0078 false,
0079 "b",
0080 label,
0081 mcPlots_,
0082 ibook);
0083
0084
0085
0086 discrCutEfficScan =
0087 std::make_unique<FlavourHistograms<double>>("effVsDiscrCut" + histoExtension,
0088 "Eff. vs Disc. Cut: " + dDiscriminatorFC.baseNameDescription(),
0089 dDiscriminatorFC.nBins(),
0090 dDiscriminatorFC.lowerBound(),
0091 dDiscriminatorFC.upperBound(),
0092 false,
0093 true,
0094 false,
0095 "b",
0096 label,
0097 mcPlots_,
0098 ibook);
0099 discrCutEfficScan->SetMinimum(1E-4);
0100 if (mcPlots_) {
0101 if (mcPlots_ > 2) {
0102 effVersusDiscr_d = discrCutEfficScan->histo_d();
0103 effVersusDiscr_u = discrCutEfficScan->histo_u();
0104 effVersusDiscr_s = discrCutEfficScan->histo_s();
0105 effVersusDiscr_g = discrCutEfficScan->histo_g();
0106 effVersusDiscr_dus = discrCutEfficScan->histo_dus();
0107 } else {
0108 effVersusDiscr_d = nullptr;
0109 effVersusDiscr_u = nullptr;
0110 effVersusDiscr_s = nullptr;
0111 effVersusDiscr_g = nullptr;
0112 effVersusDiscr_dus = nullptr;
0113 }
0114 effVersusDiscr_c = discrCutEfficScan->histo_c();
0115 effVersusDiscr_b = discrCutEfficScan->histo_b();
0116 effVersusDiscr_ni = discrCutEfficScan->histo_ni();
0117 effVersusDiscr_dusg = discrCutEfficScan->histo_dusg();
0118 effVersusDiscr_pu = discrCutEfficScan->histo_pu();
0119
0120 if (mcPlots_ > 2) {
0121 effVersusDiscr_d->SetXTitle("Discriminant");
0122 effVersusDiscr_d->GetXaxis()->SetTitleOffset(0.75);
0123 effVersusDiscr_u->SetXTitle("Discriminant");
0124 effVersusDiscr_u->GetXaxis()->SetTitleOffset(0.75);
0125 effVersusDiscr_s->SetXTitle("Discriminant");
0126 effVersusDiscr_s->GetXaxis()->SetTitleOffset(0.75);
0127 effVersusDiscr_g->SetXTitle("Discriminant");
0128 effVersusDiscr_g->GetXaxis()->SetTitleOffset(0.75);
0129 effVersusDiscr_dus->SetXTitle("Discriminant");
0130 effVersusDiscr_dus->GetXaxis()->SetTitleOffset(0.75);
0131 }
0132 effVersusDiscr_c->SetXTitle("Discriminant");
0133 effVersusDiscr_c->GetXaxis()->SetTitleOffset(0.75);
0134 effVersusDiscr_b->SetXTitle("Discriminant");
0135 effVersusDiscr_b->GetXaxis()->SetTitleOffset(0.75);
0136 effVersusDiscr_ni->SetXTitle("Discriminant");
0137 effVersusDiscr_ni->GetXaxis()->SetTitleOffset(0.75);
0138 effVersusDiscr_dusg->SetXTitle("Discriminant");
0139 effVersusDiscr_dusg->GetXaxis()->SetTitleOffset(0.75);
0140 effVersusDiscr_pu->SetXTitle("Discriminant");
0141 effVersusDiscr_pu->GetXaxis()->SetTitleOffset(0.75);
0142 } else {
0143 effVersusDiscr_d = nullptr;
0144 effVersusDiscr_u = nullptr;
0145 effVersusDiscr_s = nullptr;
0146 effVersusDiscr_c = nullptr;
0147 effVersusDiscr_b = nullptr;
0148 effVersusDiscr_g = nullptr;
0149 effVersusDiscr_ni = nullptr;
0150 effVersusDiscr_dus = nullptr;
0151 effVersusDiscr_dusg = nullptr;
0152 effVersusDiscr_pu = nullptr;
0153 }
0154
0155
0156 vector<TH1F*> discrCfHistos = dDiscriminatorFC.getHistoVector();
0157
0158
0159 vector<TH1F*> discrNoCutHistos = discrNoCutEffic->getHistoVector();
0160
0161
0162 vector<TH1F*> discrCutHistos = discrCutEfficScan->getHistoVector();
0163
0164 const int& dimHistos = discrCfHistos.size();
0165
0166
0167
0168
0169
0170 const int& nBins = dDiscriminatorFC.nBins();
0171
0172
0173 for (int iFlav = 0; iFlav < dimHistos; iFlav++) {
0174 if (discrCfHistos[iFlav] == nullptr)
0175 continue;
0176 discrNoCutHistos[iFlav]->SetXTitle("Discriminant");
0177 discrNoCutHistos[iFlav]->GetXaxis()->SetTitleOffset(0.75);
0178
0179
0180
0181 const double& nJetsFlav = discrCfHistos[iFlav]->GetEntries();
0182 double sum = discrCfHistos[iFlav]->GetBinContent(nBins + 1);
0183
0184 for (int iDiscr = nBins; iDiscr > 0; --iDiscr) {
0185
0186 discrNoCutHistos[iFlav]->SetBinContent(iDiscr, nJetsFlav);
0187 discrNoCutHistos[iFlav]->SetBinError(iDiscr, sqrt(nJetsFlav));
0188 sum += discrCfHistos[iFlav]->GetBinContent(iDiscr);
0189 discrCutHistos[iFlav]->SetBinContent(iDiscr, sum);
0190 discrCutHistos[iFlav]->SetBinError(iDiscr, sqrt(sum));
0191 }
0192 }
0193
0194
0195 discrCutEfficScan->divide(*discrNoCutEffic);
0196 discrCutEfficScan->setEfficiencyFlag();
0197 }
0198
0199 EffPurFromHistos::~EffPurFromHistos() {}
0200
0201 void EffPurFromHistos::epsPlot(const std::string& name) {
0202 if (fromDiscriminatorDistr) {
0203 discrNoCutEffic->epsPlot(name);
0204 discrCutEfficScan->epsPlot(name);
0205 }
0206 plot(name, ".eps");
0207 }
0208
0209 void EffPurFromHistos::psPlot(const std::string& name) { plot(name, ".ps"); }
0210
0211 void EffPurFromHistos::plot(const std::string& name, const std::string& ext) {
0212 std::string hX = "";
0213 std::string Title = "";
0214 if (!doCTagPlots_) {
0215 hX = "FlavEffVsBEff";
0216 Title = "b";
0217 } else {
0218 hX = "FlavEffVsCEff";
0219 Title = "c";
0220 }
0221 TCanvas tc((hX + histoExtension).c_str(),
0222 ("Flavour misidentification vs. " + Title + "-tagging efficiency " + histoExtension).c_str());
0223 plot(&tc);
0224 tc.Print((name + hX + histoExtension + ext).c_str());
0225 }
0226
0227 void EffPurFromHistos::plot(TPad* plotCanvas ) {
0228
0229 bool btppNI = false;
0230 bool btppColour = true;
0231
0232
0233 setTDRStyle()->cd();
0234
0235 if (plotCanvas)
0236 plotCanvas->cd();
0237
0238 gPad->UseCurrentStyle();
0239 gPad->SetFillColor(0);
0240 gPad->SetLogy(1);
0241 gPad->SetGridx(1);
0242 gPad->SetGridy(1);
0243
0244 int col_c;
0245 int col_g;
0246 int col_dus;
0247 int col_ni;
0248
0249 int mStyle_c;
0250 int mStyle_g;
0251 int mStyle_dus;
0252 int mStyle_ni;
0253
0254
0255 float mSize = gPad->GetWh() * gPad->GetHNDC() / 500.;
0256
0257 if (btppColour) {
0258 col_c = 6;
0259 col_g = 3;
0260 col_dus = 4;
0261 col_ni = 5;
0262 mStyle_c = 20;
0263 mStyle_g = 20;
0264 mStyle_dus = 20;
0265 mStyle_ni = 20;
0266 } else {
0267 col_c = 1;
0268 col_g = 1;
0269 col_dus = 1;
0270 col_ni = 1;
0271 mStyle_c = 22;
0272 mStyle_g = 29;
0273 mStyle_dus = 20;
0274 mStyle_ni = 27;
0275 }
0276
0277 TString Title = "";
0278 if (!doCTagPlots_) {
0279 Title = "b";
0280 } else {
0281 Title = "c";
0282 }
0283
0284
0285 if (mcPlots_ > 2) {
0286 EffFlavVsXEff_dus->getTH1F()->GetXaxis()->SetTitle(Title + "-jet efficiency");
0287 EffFlavVsXEff_dus->getTH1F()->GetYaxis()->SetTitle("non " + Title + "-jet efficiency");
0288 EffFlavVsXEff_dus->getTH1F()->GetYaxis()->SetTitleOffset(0.25);
0289 EffFlavVsXEff_dus->getTH1F()->SetMaximum(1.1);
0290 EffFlavVsXEff_dus->getTH1F()->SetMinimum(1.e-5);
0291 EffFlavVsXEff_dus->getTH1F()->SetMarkerColor(col_dus);
0292 EffFlavVsXEff_dus->getTH1F()->SetLineColor(col_dus);
0293 EffFlavVsXEff_dus->getTH1F()->SetMarkerSize(mSize);
0294 EffFlavVsXEff_dus->getTH1F()->SetMarkerStyle(mStyle_dus);
0295 EffFlavVsXEff_dus->getTH1F()->SetStats(false);
0296 EffFlavVsXEff_dus->getTH1F()->Draw("pe");
0297
0298 EffFlavVsXEff_g->getTH1F()->SetMarkerColor(col_g);
0299 EffFlavVsXEff_g->getTH1F()->SetLineColor(col_g);
0300 EffFlavVsXEff_g->getTH1F()->SetMarkerSize(mSize);
0301 EffFlavVsXEff_g->getTH1F()->SetMarkerStyle(mStyle_g);
0302 EffFlavVsXEff_g->getTH1F()->SetStats(false);
0303 EffFlavVsXEff_g->getTH1F()->Draw("peSame");
0304 }
0305 EffFlavVsXEff_c->getTH1F()->SetMarkerColor(col_c);
0306 EffFlavVsXEff_c->getTH1F()->SetLineColor(col_c);
0307 EffFlavVsXEff_c->getTH1F()->SetMarkerSize(mSize);
0308 EffFlavVsXEff_c->getTH1F()->SetMarkerStyle(mStyle_c);
0309 EffFlavVsXEff_c->getTH1F()->SetStats(false);
0310 EffFlavVsXEff_c->getTH1F()->Draw("peSame");
0311
0312 if (mcPlots_ > 2) {
0313 EffFlavVsXEff_d->getTH1F()->SetMinimum(0.01);
0314 EffFlavVsXEff_u->getTH1F()->SetMinimum(0.01);
0315 EffFlavVsXEff_s->getTH1F()->SetMinimum(0.01);
0316 EffFlavVsXEff_g->getTH1F()->SetMinimum(0.01);
0317 EffFlavVsXEff_dus->getTH1F()->SetMinimum(0.01);
0318 }
0319 EffFlavVsXEff_c->getTH1F()->SetMinimum(0.01);
0320 EffFlavVsXEff_b->getTH1F()->SetMinimum(0.01);
0321 EffFlavVsXEff_ni->getTH1F()->SetMinimum(0.01);
0322 EffFlavVsXEff_dusg->getTH1F()->SetMinimum(0.01);
0323 EffFlavVsXEff_pu->getTH1F()->SetMinimum(0.01);
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353 if (btppNI) {
0354 EffFlavVsXEff_ni->getTH1F()->SetMarkerColor(col_ni);
0355 EffFlavVsXEff_ni->getTH1F()->SetLineColor(col_ni);
0356 EffFlavVsXEff_ni->getTH1F()->SetMarkerSize(mSize);
0357 EffFlavVsXEff_ni->getTH1F()->SetMarkerStyle(mStyle_ni);
0358 EffFlavVsXEff_ni->getTH1F()->SetStats(false);
0359 EffFlavVsXEff_ni->getTH1F()->Draw("peSame");
0360 }
0361 }
0362
0363 void EffPurFromHistos::check() {
0364
0365
0366 int nBins_d = 0;
0367 int nBins_u = 0;
0368 int nBins_s = 0;
0369 int nBins_g = 0;
0370 int nBins_dus = 0;
0371 if (mcPlots_ > 2) {
0372 nBins_d = effVersusDiscr_d->GetNbinsX();
0373 nBins_u = effVersusDiscr_u->GetNbinsX();
0374 nBins_s = effVersusDiscr_s->GetNbinsX();
0375 nBins_g = effVersusDiscr_g->GetNbinsX();
0376 nBins_dus = effVersusDiscr_dus->GetNbinsX();
0377 }
0378 const int& nBins_c = effVersusDiscr_c->GetNbinsX();
0379 const int& nBins_b = effVersusDiscr_b->GetNbinsX();
0380 const int& nBins_ni = effVersusDiscr_ni->GetNbinsX();
0381 const int& nBins_dusg = effVersusDiscr_dusg->GetNbinsX();
0382 const int& nBins_pu = effVersusDiscr_pu->GetNbinsX();
0383
0384 const bool& lNBins = ((nBins_d == nBins_u && nBins_d == nBins_s && nBins_d == nBins_c && nBins_d == nBins_b &&
0385 nBins_d == nBins_g && nBins_d == nBins_ni && nBins_d == nBins_dus && nBins_d == nBins_dusg) ||
0386 (nBins_c == nBins_b && nBins_c == nBins_dusg && nBins_c == nBins_ni && nBins_c == nBins_pu));
0387
0388 if (!lNBins) {
0389 throw cms::Exception("Configuration") << "Input histograms do not all have the same number of bins!\n";
0390 }
0391
0392
0393 float sBin_d = 0;
0394 float sBin_u = 0;
0395 float sBin_s = 0;
0396 float sBin_g = 0;
0397 float sBin_dus = 0;
0398 if (mcPlots_ > 2) {
0399 sBin_d = effVersusDiscr_d->GetBinCenter(1);
0400 sBin_u = effVersusDiscr_u->GetBinCenter(1);
0401 sBin_s = effVersusDiscr_s->GetBinCenter(1);
0402 sBin_g = effVersusDiscr_g->GetBinCenter(1);
0403 sBin_dus = effVersusDiscr_dus->GetBinCenter(1);
0404 }
0405 const float& sBin_c = effVersusDiscr_c->GetBinCenter(1);
0406 const float& sBin_b = effVersusDiscr_b->GetBinCenter(1);
0407 const float& sBin_ni = effVersusDiscr_ni->GetBinCenter(1);
0408 const float& sBin_dusg = effVersusDiscr_dusg->GetBinCenter(1);
0409 const float& sBin_pu = effVersusDiscr_pu->GetBinCenter(1);
0410
0411 const bool& lSBin = ((sBin_d == sBin_u && sBin_d == sBin_s && sBin_d == sBin_c && sBin_d == sBin_b &&
0412 sBin_d == sBin_g && sBin_d == sBin_ni && sBin_d == sBin_dus && sBin_d == sBin_dusg) ||
0413 (sBin_c == sBin_b && sBin_c == sBin_dusg && sBin_c == sBin_ni && sBin_c == sBin_pu));
0414
0415 if (!lSBin) {
0416 throw cms::Exception("Configuration")
0417 << "EffPurFromHistos::check() : Input histograms do not all have the same start bin!\n";
0418 }
0419
0420
0421 float eBin_d = 0;
0422 float eBin_u = 0;
0423 float eBin_s = 0;
0424 float eBin_g = 0;
0425 float eBin_dus = 0;
0426 if (mcPlots_ > 2) {
0427 eBin_d = effVersusDiscr_d->GetBinCenter(nBins_d - 1);
0428 eBin_u = effVersusDiscr_u->GetBinCenter(nBins_d - 1);
0429 eBin_s = effVersusDiscr_s->GetBinCenter(nBins_d - 1);
0430 eBin_g = effVersusDiscr_g->GetBinCenter(nBins_d - 1);
0431 eBin_dus = effVersusDiscr_dus->GetBinCenter(nBins_d - 1);
0432 }
0433 const float& eBin_c = effVersusDiscr_c->GetBinCenter(nBins_d - 1);
0434 const float& eBin_b = effVersusDiscr_b->GetBinCenter(nBins_d - 1);
0435 const float& eBin_ni = effVersusDiscr_ni->GetBinCenter(nBins_d - 1);
0436 const float& eBin_dusg = effVersusDiscr_dusg->GetBinCenter(nBins_d - 1);
0437 const float& eBin_pu = effVersusDiscr_pu->GetBinCenter(nBins_d - 1);
0438
0439 const bool& lEBin = ((eBin_d == eBin_u && eBin_d == eBin_s && eBin_d == eBin_c && eBin_d == eBin_b &&
0440 eBin_d == eBin_g && eBin_d == eBin_ni && eBin_d == eBin_dus && eBin_d == eBin_dusg) ||
0441 (eBin_c == eBin_b && eBin_c == eBin_dusg && eBin_c == eBin_ni && eBin_c == eBin_pu));
0442
0443 if (!lEBin) {
0444 throw cms::Exception("Configuration")
0445 << "EffPurFromHistos::check() : Input histograms do not all have the same end bin!\n";
0446 }
0447 }
0448
0449 void EffPurFromHistos::compute(DQMStore::IBooker& ibook) {
0450 if (!mcPlots_) {
0451 EffFlavVsXEff_d = nullptr;
0452 EffFlavVsXEff_u = nullptr;
0453 EffFlavVsXEff_s = nullptr;
0454 EffFlavVsXEff_c = nullptr;
0455 EffFlavVsXEff_b = nullptr;
0456 EffFlavVsXEff_g = nullptr;
0457 EffFlavVsXEff_ni = nullptr;
0458 EffFlavVsXEff_dus = nullptr;
0459 EffFlavVsXEff_dusg = nullptr;
0460 EffFlavVsXEff_pu = nullptr;
0461 return;
0462 }
0463
0464
0465 const std::string& hE = histoExtension;
0466 std::string hX = "";
0467 TString Title = "";
0468 if (!doCTagPlots_) {
0469 hX = "FlavEffVsBEff_";
0470 Title = "b";
0471 } else {
0472 hX = "FlavEffVsCEff_";
0473 Title = "c";
0474 }
0475
0476
0477
0478 HistoProviderDQM prov("Btag", label_, ibook);
0479 if (mcPlots_ > 2) {
0480 EffFlavVsXEff_d = (prov.book1D(hX + "D" + hE, hX + "D" + hE, nBinOutput, startOutput, endOutput));
0481 EffFlavVsXEff_d->setEfficiencyFlag();
0482 EffFlavVsXEff_u = (prov.book1D(hX + "U" + hE, hX + "U" + hE, nBinOutput, startOutput, endOutput));
0483 EffFlavVsXEff_u->setEfficiencyFlag();
0484 EffFlavVsXEff_s = (prov.book1D(hX + "S" + hE, hX + "S" + hE, nBinOutput, startOutput, endOutput));
0485 EffFlavVsXEff_s->setEfficiencyFlag();
0486 EffFlavVsXEff_g = (prov.book1D(hX + "G" + hE, hX + "G" + hE, nBinOutput, startOutput, endOutput));
0487 EffFlavVsXEff_g->setEfficiencyFlag();
0488 EffFlavVsXEff_dus = (prov.book1D(hX + "DUS" + hE, hX + "DUS" + hE, nBinOutput, startOutput, endOutput));
0489 EffFlavVsXEff_dus->setEfficiencyFlag();
0490 } else {
0491 EffFlavVsXEff_d = nullptr;
0492 EffFlavVsXEff_u = nullptr;
0493 EffFlavVsXEff_s = nullptr;
0494 EffFlavVsXEff_g = nullptr;
0495 EffFlavVsXEff_dus = nullptr;
0496 }
0497 EffFlavVsXEff_c = (prov.book1D(hX + "C" + hE, hX + "C" + hE, nBinOutput, startOutput, endOutput));
0498 EffFlavVsXEff_c->setEfficiencyFlag();
0499 EffFlavVsXEff_b = (prov.book1D(hX + "B" + hE, hX + "B" + hE, nBinOutput, startOutput, endOutput));
0500 EffFlavVsXEff_b->setEfficiencyFlag();
0501 EffFlavVsXEff_ni = (prov.book1D(hX + "NI" + hE, hX + "NI" + hE, nBinOutput, startOutput, endOutput));
0502 EffFlavVsXEff_ni->setEfficiencyFlag();
0503 EffFlavVsXEff_dusg = (prov.book1D(hX + "DUSG" + hE, hX + "DUSG" + hE, nBinOutput, startOutput, endOutput));
0504 EffFlavVsXEff_dusg->setEfficiencyFlag();
0505 EffFlavVsXEff_pu = (prov.book1D(hX + "PU" + hE, hX + "PU" + hE, nBinOutput, startOutput, endOutput));
0506 EffFlavVsXEff_pu->setEfficiencyFlag();
0507
0508 if (mcPlots_ > 2) {
0509 EffFlavVsXEff_d->getTH1F()->SetXTitle(Title + "-jet efficiency");
0510 EffFlavVsXEff_d->getTH1F()->SetYTitle("non " + Title + "-jet efficiency");
0511 EffFlavVsXEff_d->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0512 EffFlavVsXEff_d->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0513 EffFlavVsXEff_u->getTH1F()->SetXTitle(Title + "-jet efficiency");
0514 EffFlavVsXEff_u->getTH1F()->SetYTitle("non " + Title + "-jet efficiency");
0515 EffFlavVsXEff_u->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0516 EffFlavVsXEff_u->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0517 EffFlavVsXEff_s->getTH1F()->SetXTitle(Title + "-jet efficiency");
0518 EffFlavVsXEff_s->getTH1F()->SetYTitle("non " + Title + "-jet efficiency");
0519 EffFlavVsXEff_s->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0520 EffFlavVsXEff_s->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0521 EffFlavVsXEff_g->getTH1F()->SetXTitle(Title + "-jet efficiency");
0522 EffFlavVsXEff_g->getTH1F()->SetYTitle("non " + Title + "-jet efficiency");
0523 EffFlavVsXEff_g->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0524 EffFlavVsXEff_g->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0525 EffFlavVsXEff_dus->getTH1F()->SetXTitle(Title + "-jet efficiency");
0526 EffFlavVsXEff_dus->getTH1F()->SetYTitle("non " + Title + "-jet efficiency");
0527 EffFlavVsXEff_dus->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0528 EffFlavVsXEff_dus->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0529 }
0530 EffFlavVsXEff_c->getTH1F()->SetXTitle(Title + "-jet efficiency");
0531 EffFlavVsXEff_c->getTH1F()->SetYTitle("c-jet efficiency");
0532 EffFlavVsXEff_c->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0533 EffFlavVsXEff_c->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0534 EffFlavVsXEff_b->getTH1F()->SetXTitle(Title + "-jet efficiency");
0535 EffFlavVsXEff_b->getTH1F()->SetYTitle("b-jet efficiency");
0536 EffFlavVsXEff_b->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0537 EffFlavVsXEff_b->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0538 EffFlavVsXEff_ni->getTH1F()->SetXTitle(Title + "-jet efficiency");
0539 EffFlavVsXEff_ni->getTH1F()->SetYTitle("non " + Title + "-jet efficiency");
0540 EffFlavVsXEff_ni->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0541 EffFlavVsXEff_ni->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0542 EffFlavVsXEff_dusg->getTH1F()->SetXTitle(Title + "-jet efficiency");
0543 EffFlavVsXEff_dusg->getTH1F()->SetYTitle("non " + Title + "-jet efficiency");
0544 EffFlavVsXEff_dusg->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0545 EffFlavVsXEff_dusg->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0546 EffFlavVsXEff_pu->getTH1F()->SetXTitle(Title + "-jet efficiency");
0547 EffFlavVsXEff_pu->getTH1F()->SetYTitle("non " + Title + "-jet efficiency");
0548 EffFlavVsXEff_pu->getTH1F()->GetXaxis()->SetTitleOffset(0.75);
0549 EffFlavVsXEff_pu->getTH1F()->GetYaxis()->SetTitleOffset(0.75);
0550
0551
0552
0553
0554
0555 MonitorElement* EffFlavVsXEff = EffFlavVsXEff_b;
0556
0557 const int& nBinX = EffFlavVsXEff->getTH1F()->GetNbinsX();
0558
0559 for (int iBinX = 1; iBinX <= nBinX; iBinX++) {
0560
0561 const float& effXBinWidth = EffFlavVsXEff->getTH1F()->GetBinWidth(iBinX);
0562 const float& effXMid = EffFlavVsXEff->getTH1F()->GetBinCenter(iBinX);
0563 const float& effXLeft = effXMid - 0.5 * effXBinWidth;
0564 const float& effXRight = effXMid + 0.5 * effXBinWidth;
0565
0566
0567 int binClosest = -1;
0568 if (!doCTagPlots_) {
0569 binClosest = findBinClosestYValue(effVersusDiscr_b, effXMid, effXLeft, effXRight);
0570 } else {
0571 binClosest = findBinClosestYValue(effVersusDiscr_c, effXMid, effXLeft, effXRight);
0572 }
0573
0574 const bool& binFound = (binClosest > 0);
0575
0576 if (binFound) {
0577
0578 if (mcPlots_ > 2) {
0579 EffFlavVsXEff_d->Fill(effXMid, effVersusDiscr_d->GetBinContent(binClosest));
0580 EffFlavVsXEff_u->Fill(effXMid, effVersusDiscr_u->GetBinContent(binClosest));
0581 EffFlavVsXEff_s->Fill(effXMid, effVersusDiscr_s->GetBinContent(binClosest));
0582 EffFlavVsXEff_g->Fill(effXMid, effVersusDiscr_g->GetBinContent(binClosest));
0583 EffFlavVsXEff_dus->Fill(effXMid, effVersusDiscr_dus->GetBinContent(binClosest));
0584 }
0585 EffFlavVsXEff_c->Fill(effXMid, effVersusDiscr_c->GetBinContent(binClosest));
0586 EffFlavVsXEff_b->Fill(effXMid, effVersusDiscr_b->GetBinContent(binClosest));
0587 EffFlavVsXEff_ni->Fill(effXMid, effVersusDiscr_ni->GetBinContent(binClosest));
0588 EffFlavVsXEff_dusg->Fill(effXMid, effVersusDiscr_dusg->GetBinContent(binClosest));
0589 EffFlavVsXEff_pu->Fill(effXMid, effVersusDiscr_pu->GetBinContent(binClosest));
0590
0591 if (mcPlots_ > 2) {
0592 EffFlavVsXEff_d->getTH1F()->SetBinError(iBinX, effVersusDiscr_d->GetBinError(binClosest));
0593 EffFlavVsXEff_u->getTH1F()->SetBinError(iBinX, effVersusDiscr_u->GetBinError(binClosest));
0594 EffFlavVsXEff_s->getTH1F()->SetBinError(iBinX, effVersusDiscr_s->GetBinError(binClosest));
0595 EffFlavVsXEff_g->getTH1F()->SetBinError(iBinX, effVersusDiscr_g->GetBinError(binClosest));
0596 EffFlavVsXEff_dus->getTH1F()->SetBinError(iBinX, effVersusDiscr_dus->GetBinError(binClosest));
0597 }
0598 EffFlavVsXEff_c->getTH1F()->SetBinError(iBinX, effVersusDiscr_c->GetBinError(binClosest));
0599 EffFlavVsXEff_b->getTH1F()->SetBinError(iBinX, effVersusDiscr_b->GetBinError(binClosest));
0600 EffFlavVsXEff_ni->getTH1F()->SetBinError(iBinX, effVersusDiscr_ni->GetBinError(binClosest));
0601 EffFlavVsXEff_dusg->getTH1F()->SetBinError(iBinX, effVersusDiscr_dusg->GetBinError(binClosest));
0602 EffFlavVsXEff_pu->getTH1F()->SetBinError(iBinX, effVersusDiscr_pu->GetBinError(binClosest));
0603 }
0604 }
0605 }
0606
0607 #include <memory>
0608
0609 #include <typeinfo>