16 #include <boost/algorithm/string.hpp>
18 #include "TGraphAsymmErrors.h"
65 std::vector<std::string> activeFilters;
66 std::vector<std::string> activeEleFilters;
67 std::vector<std::string> activeEle2LegFilters;
68 std::vector<std::string> activePhoFilters;
69 std::vector<std::string> activePho2LegFilters;
71 hltConfig, activeFilters, activeEleFilters, activeEle2LegFilters, activePhoFilters, activePho2LegFilters);
94 std::vector<std::string>
regions;
106 eleHLTFilterName, eleHLTFilterName +
"_gsfEle_" + eleEffTag,
region,
eleN1EffVars_, ibooker, igetter);
120 for (
size_t effNr = 0; effNr <
eleEffTags_.size(); effNr++) {
121 std::string trigNameLeg1 = filterNr.substr(0, filterNr.find(
"::"));
123 std::string trigNameLeg2 = filterNr.substr(filterNr.find(
"::") + 2);
138 phoHLTFilterName, phoHLTFilterName +
"_pho_" + phoEffTag,
region,
phoN1EffVars_, ibooker, igetter);
172 const std::vector<std::string>&
varNames,
192 for (
auto const& varName :
varNames) {
197 if (numer !=
nullptr &&
denom !=
nullptr) {
198 std::string effHistName(baseName +
"_HLToverOffline_" + varName +
"_" +
203 effHistTitle =
"Barrel " + baseName +
" HLToverOffline " + varName;
205 effHistTitle =
"Endcap " + baseName +
" HLToverOffline " + varName;
220 if (
num->GetSumw2N() == 0)
223 TH1F* den =
denom->getTH1F();
224 if (den->GetSumw2N() == 0)
227 auto* h_eff = (TH1F*)
num->Clone(
name.c_str());
228 h_eff->Divide(
num, den, 1, 1,
"B");
229 h_eff->SetTitle(
title.c_str());
231 if (eff ==
nullptr) {
243 const std::vector<std::string>&
varNames,
249 for (
auto const& varName :
varNames) {
252 if (numer !=
nullptr &&
denom !=
nullptr) {
253 std::string effHistName(baseName +
"_n1Eff_" + varName +
"_" +
260 effHistTitle =
"Barrel " + baseName +
" N1eff " + varName;
262 effHistTitle =
"Endcap " + baseName +
" N1eff " + varName;
273 const std::vector<std::string>&
varNames,
278 for (
auto const& varName :
varNames) {
281 if (numer !=
nullptr &&
denom !=
nullptr) {
282 std::string effHistName(baseName +
"_singleEff_" + varName +
"_" +
288 effHistTitle =
"Barrel " + baseName +
" SingleEff " + varName;
290 effHistTitle =
"Endcap " + baseName +
" SingleEff " + varName;
300 const std::vector<std::string>& vsVarNames,
304 for (
auto const& vsVarName : vsVarNames) {
306 "_all_" + vsVarName +
"_" +
region);
308 if (
all ==
nullptr) {
312 "_pass_" + vsVarName +
"_" +
region);
314 if (pass ==
nullptr) {
322 effHistTitle =
"Barrel " +
filterName +
"_" +
objName +
" TrigTagProbeEff vs " + vsVarName;
324 effHistTitle =
"Endcap " +
filterName +
"_" +
objName +
" TrigTagProbeEff vs " + vsVarName;
340 const std::vector<std::string>& vsVarNames,
344 for (
auto const& vsVarName : vsVarNames) {
353 "_passNotTag_" + vsVarName +
"_" +
region);
355 if (passNotTag ==
nullptr) {
362 if (passTagTag ==
nullptr) {
367 "_fail_" + vsVarName +
"_" +
region);
369 if (fail ==
nullptr) {
378 effHistTitle =
"Barrel " +
filterName +
"_" +
objName +
" TrigTagProbeEff vs " + vsVarName;
380 effHistTitle =
"Endcap " +
filterName +
"_" +
objName +
" TrigTagProbeEff vs " + vsVarName;
398 const std::vector<std::string>& vsVarNames,
402 for (
auto const& vsVarName : vsVarNames) {
403 std::string allName(
dirName_ +
"/Source_Histos/" + filterNameLeg2 +
"/" + filterNameLeg2 +
"_trigTagProbe_" +
406 if (
all ==
nullptr) {
407 edm::LogInfo(
"EgHLTOfflineClient") <<
" couldnt get hist " << allName;
411 std::string Leg2NotLeg1SourceName(
dirName_ +
"/Source_Histos/" + filterNameLeg2 +
"/" + filterNameLeg2 +
412 "_trigTagProbe_" +
objName +
"_passLeg2failLeg1_" + vsVarName +
"_" +
region);
414 if (Leg2NotLeg1Source ==
nullptr) {
415 edm::LogInfo(
"EgHLTOfflineClient") <<
" couldnt get hist " << Leg2NotLeg1SourceName;
419 std::string Leg1EffName(
dirName_ +
"/Client_Histos/" + filterNameLeg1 +
"/" + filterNameLeg1 +
"_trigTagProbeEff_" +
422 if (Leg1Eff ==
nullptr) {
423 edm::LogInfo(
"EgHLTOfflineClient") <<
" couldnt get hist " << Leg1EffName;
427 std::string effHistTitle(filterNameLeg2 +
"_trigTagProbeEff2Leg_" +
objName +
"_vs_" + vsVarName +
"_" +
431 effHistTitle =
"Barrel " + filterNameLeg2 +
"_" +
objName +
" TrigTagProbeEff2Leg vs " + vsVarName;
433 effHistTitle =
"Endcap " + filterNameLeg2 +
"_" +
objName +
" TrigTagProbeEff2Leg vs " + vsVarName;
436 filterNameLeg2 +
"_trigTagProbeEff2Leg_" +
objName +
"_vs_" + vsVarName +
"_" +
region,
448 const std::vector<std::string>& vsVarNames,
452 for (
auto const& vsVarName : vsVarNames) {
453 for (
auto const& tightLooseTrigName : tightLooseTrigNames) {
463 "_failTrig_" + vsVarName +
"_" +
region);
464 if (fail ==
nullptr) {
469 "_passTrig_" + vsVarName +
"_" +
region);
470 if (pass ==
nullptr) {
474 const std::string newHistName(tightTrig +
"_trigEffTo_" + looseTrig +
"_" +
objName +
"_vs_" + vsVarName +
"_" +
480 effHistTitle =
"Barrel " + tightTrig +
"_TrigEffTo_" + looseTrig +
"_" +
objName +
" vs " + vsVarName;
482 effHistTitle =
"Endcap " + tightTrig +
"_TrigEffTo_" + looseTrig +
"_" +
objName +
" vs " + vsVarName;
498 TH1F* passHist = pass->
getTH1F();
499 if (passHist->GetSumw2N() == 0)
504 auto* effHist = (TH1F*)passHist->Clone(
name.c_str());
505 effHist->Divide(passHist,
allHist, 1, 1,
"B");
507 effHist->SetTitle(
title.c_str());
510 if (eff ==
nullptr) {
528 TH1F* passHist = passNotTag->
getTH1F();
529 if (passHist->GetSumw2N() == 0)
531 TH1F* failHist = fail->
getTH1F();
532 if (failHist->GetSumw2N() == 0)
534 TH1F* tagtagHist = tagtag->
getTH1F();
535 if (tagtagHist->GetSumw2N() == 0)
537 auto* numer = (TH1F*)passHist->Clone(
name.c_str());
538 if (numer->GetSumw2N() == 0)
540 numer->Add(tagtagHist, passHist, 2, 1);
541 auto*
denom = (TH1F*)passHist->Clone(
name.c_str());
542 if (
denom->GetSumw2N() == 0)
544 denom->Add(tagtagHist, passHist, 2, 1);
545 denom->Add(failHist, 1);
546 auto* effHist = (TH1F*)passHist->Clone(
name.c_str());
548 effHist->Divide(numer,
denom, 1, 1,
"B");
551 effHist->SetTitle(
title.c_str());
554 if (eff ==
nullptr) {
573 if (
allHist->GetSumw2() ==
nullptr)
575 TH1F* Leg2NotLeg1SourceHist = Leg2NotLeg1Source->
getTH1F();
576 if (Leg2NotLeg1SourceHist->GetSumw2() ==
nullptr)
577 Leg2NotLeg1SourceHist->Sumw2();
579 auto* effHistLeg2NotLeg1 = (TH1F*)
allHist->Clone(
name.c_str());
580 if (effHistLeg2NotLeg1->GetSumw2() ==
nullptr)
581 effHistLeg2NotLeg1->Sumw2();
582 effHistLeg2NotLeg1->Divide(Leg2NotLeg1SourceHist,
allHist, 1, 1,
"B");
584 TH1F* Leg1EffHist = Leg1Eff->
getTH1F();
585 if (Leg1EffHist->GetSumw2() ==
nullptr)
586 Leg1EffHist->Sumw2();
588 auto* effHistTerm1 = (TH1F*)
allHist->Clone(
name.c_str());
589 if (effHistTerm1->GetSumw2() ==
nullptr)
590 effHistTerm1->Sumw2();
591 effHistTerm1->Multiply(Leg1EffHist, Leg1EffHist, 1, 1,
"B");
593 auto* effHistTerm2 = (TH1F*)
allHist->Clone(
name.c_str());
594 if (effHistTerm2->GetSumw2() ==
nullptr)
595 effHistTerm2->Sumw2();
596 effHistTerm2->Multiply(Leg1EffHist, effHistLeg2NotLeg1, 1, 1,
"B");
597 effHistTerm2->Scale(2);
599 auto* effHist = (TH1F*)
allHist->Clone(
name.c_str());
600 if (effHist->GetSumw2() ==
nullptr)
602 effHist->Add(effHistTerm1, effHistTerm2, 1, 1);
603 effHist->SetTitle(
title.c_str());
606 if (eff ==
nullptr) {
623 TH1F* failHist = fail->
getTH1F();
624 if (failHist->GetSumw2N() == 0)
626 TH1F* passHist = pass->
getTH1F();
627 if (passHist->GetSumw2N() == 0)
630 auto* effHist = (TH1F*)passHist->Clone(
name.c_str());
631 effHist->Add(failHist);
632 effHist->Divide(passHist, effHist, 1, 1,
"B");
634 effHist->SetTitle(
title.c_str());
637 if (eff ==
nullptr) {