File indexing completed on 2024-04-06 12:18:57
0001 #include "HLTriggerOffline/SUSYBSM/interface/HltSusyExoPostProcessor.h"
0002
0003 #include "DQMServices/Core/interface/DQMStore.h"
0004 #include "FWCore/Framework/interface/MakerMacros.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006 #include "FWCore/ServiceRegistry/interface/Service.h"
0007
0008 #include "TH1.h"
0009 #include "TProfile.h"
0010 #include <cmath>
0011 #include <cstring>
0012 #include <fstream>
0013 #include <iomanip>
0014 #include <iostream>
0015
0016 using namespace std;
0017 using namespace edm;
0018
0019 HltSusyExoPostProcessor::HltSusyExoPostProcessor(const edm::ParameterSet &pset)
0020 : subDir_(pset.getUntrackedParameter<std::string>("subDir", std::string("HLT/SusyExo"))),
0021 mcFlag(pset.getUntrackedParameter<bool>("mc_flag", true)),
0022 reco_parametersets(pset.getParameter<VParameterSet>("reco_parametersets")),
0023 mc_parametersets(pset.getParameter<VParameterSet>("mc_parametersets")) {
0024 for (unsigned int i = 0; i < reco_parametersets.size(); ++i) {
0025 reco_dirs.push_back(reco_parametersets[i].getParameter<string>("name"));
0026 }
0027 for (unsigned int i = 0; i < mc_parametersets.size(); ++i) {
0028 mc_dirs.push_back(mc_parametersets[i].getParameter<string>("name"));
0029 }
0030 }
0031
0032 void HltSusyExoPostProcessor::dqmEndJob(DQMStore::IBooker &iBooker_, DQMStore::IGetter &iGetter_) {
0033 LogDebug("HltSusyExoPostProcessor") << "Start dqmEndJob";
0034
0035
0036 if (iGetter_.dirExists(subDir_))
0037 iGetter_.cd(subDir_);
0038 else {
0039 edm::LogWarning("HltSusyExoPostProcessor") << "cannot find directory: " << subDir_ << " , skipping";
0040 return;
0041 }
0042
0043 LogDebug("HltSusyExoPostProcessor") << "DQMStore cd";
0044
0045
0046 std::string triggerBitsDir = "/TriggerBits";
0047 std::string recoSelBitsDir = "/RecoSelection";
0048 std::string mcSelBitsDir = "/McSelection";
0049 std::string byEventDir = "/By_Event";
0050 std::string byMuonDir = "/By_Muon";
0051
0052
0053
0054
0055
0056 int nL1bins = (iGetter_.get(iBooker_.pwd() + triggerBitsDir + "/L1Bits")->getNbinsX());
0057 int nHltbins = (iGetter_.get(iBooker_.pwd() + triggerBitsDir + "/HltBits")->getNbinsX());
0058
0059 std::vector<int> L1placement;
0060 L1placement.reserve(nL1bins - 1 * mcFlag);
0061 for (int i = 0; i < nL1bins - 1 * mcFlag; ++i)
0062 L1placement.push_back(6);
0063 std::vector<int> Hltplacement;
0064 Hltplacement.reserve(nHltbins - 1 * mcFlag);
0065 for (int i = 0; i < nHltbins - 1 * mcFlag; ++i)
0066 Hltplacement.push_back(7);
0067 int L1bins[7];
0068 for (unsigned int i = 0; i < sizeof(L1bins) / sizeof(L1bins[0]); ++i)
0069 L1bins[i] = 0;
0070 int Hltbins[8];
0071 for (unsigned int i = 0; i < sizeof(Hltbins) / sizeof(Hltbins[0]); ++i)
0072 Hltbins[i] = 0;
0073 string L1search[8] = {"Mu", "EG", "Jet", "ET", "TauJet", "X", ""};
0074 string L1search3 = "HTT", L1search6 = "Bias";
0075 string Hltsearch[8] = {"Mu", "Ele", "Jet", "Photon", "MET", "Tau", "X", ""};
0076 string Hltsearch4 = "HT", Hltsearch5 = "BTag", Hltsearch6_1 = "EG", Hltsearch6_2 = "ET", Hltsearch7_1 = "Bias",
0077 Hltsearch7_2 = "AlCa";
0078
0079 LogDebug("HltSusyExoPostProcessor") << "number of L1 bins = " << nL1bins << " number of HLT bins = " << nHltbins;
0080 double value = 0;
0081 double error = 0;
0082
0083
0084 iGetter_.setCurrentFolder(subDir_ + triggerBitsDir);
0085 TH1F *hL1Paths = iGetter_.get(subDir_ + triggerBitsDir + "/L1Paths")->getTH1F();
0086 MonitorElement *hL1EffBeforeCuts = bookEffMEProfileFromTH1(hL1Paths, "Eff", iBooker_);
0087 TH1F *hHltPaths = iGetter_.get(subDir_ + triggerBitsDir + "/HltPaths")->getTH1F();
0088 MonitorElement *hHltEffBeforeCuts = bookEffMEProfileFromTH1(hHltPaths, "Eff", iBooker_);
0089
0090 LogDebug("HltSusyExoPostProcessor") << "MonitorElements booked";
0091
0092
0093 float nTotalBeforeCuts = -1;
0094 int reference_bin = -1;
0095 if (mcFlag) {
0096 nTotalBeforeCuts = iGetter_.get(subDir_ + triggerBitsDir + "/L1Bits")->getBinContent(nL1bins);
0097 reference_bin = nL1bins;
0098 } else {
0099 for (int i = 0; i < nHltbins; ++i) {
0100 string triggername = ((TProfile *)hHltEffBeforeCuts->getTProfile())->GetXaxis()->GetBinLabel(i + 1);
0101 string eff_search = "HLT_ZeroBias";
0102 if (triggername.find(eff_search) != string::npos && triggername.size() == eff_search.size()) {
0103 nTotalBeforeCuts = ((TProfile *)hHltEffBeforeCuts->getTProfile())->GetBinContent(i + 1);
0104 reference_bin = i + 1;
0105 break;
0106 }
0107 }
0108 if (nTotalBeforeCuts == -1) {
0109 nTotalBeforeCuts = iGetter_.get(subDir_ + triggerBitsDir + "/L1Bits")->getBinContent(nL1bins);
0110 reference_bin = nHltbins;
0111 }
0112 }
0113 LogDebug("HltSusyExoPostProcessor") << "Total number of events = " << nTotalBeforeCuts;
0114
0115
0116 for (int i = 0; i < nL1bins - 1 * mcFlag; i++) {
0117 value =
0118 (double)iGetter_.get(subDir_ + triggerBitsDir + "/L1Paths")->getBinContent(i + 1) / (double)nTotalBeforeCuts;
0119 error = sqrt(value * (1 - value) / (double)nTotalBeforeCuts);
0120 hL1EffBeforeCuts->setBinContent(i + 1, value);
0121 hL1EffBeforeCuts->setBinEntries(i + 1, 1);
0122 hL1EffBeforeCuts->setBinError(i + 1, error);
0123
0124
0125 string triggername = ((TProfile *)hL1EffBeforeCuts->getTProfile())->GetXaxis()->GetBinLabel(i + 1);
0126 if (triggername.find(L1search6) == string::npos) {
0127 for (unsigned int j = 0; j < sizeof(L1search) / sizeof(L1search[0]) - 2; ++j) {
0128 if (triggername.find(L1search[j]) != string::npos || (j == 3 && triggername.find(L1search3) != string::npos)) {
0129 if (L1placement[i] == 6)
0130 L1placement[i] = j;
0131 else if (L1placement[i] == 2 && j == 4)
0132 L1placement[i] = 4;
0133 else
0134 L1placement[i] = 5;
0135 } else if (triggername.empty() || triggername.find("Total") != string::npos)
0136 L1placement[i] = -1;
0137 }
0138 }
0139 }
0140
0141 for (unsigned int i = 0; i < L1placement.size(); ++i)
0142 if (L1placement[i] != -1)
0143 ++L1bins[L1placement[i]];
0144
0145 for (int i = 0; i < nHltbins - 1 * mcFlag; i++) {
0146 value =
0147 (double)iGetter_.get(subDir_ + triggerBitsDir + "/HltPaths")->getBinContent(i + 1) / (double)nTotalBeforeCuts;
0148 error = sqrt(value * (1 - value) / (double)nTotalBeforeCuts);
0149 hHltEffBeforeCuts->setBinContent(i + 1, value);
0150 hHltEffBeforeCuts->setBinEntries(i + 1, 1);
0151 hHltEffBeforeCuts->setBinError(i + 1, error);
0152
0153
0154 string triggername = ((TProfile *)hHltEffBeforeCuts->getTProfile())->GetXaxis()->GetBinLabel(i + 1);
0155 if (triggername.find(Hltsearch7_1) == string::npos && triggername.find(Hltsearch7_2) == string::npos) {
0156 for (unsigned int j = 0; j < sizeof(Hltsearch) / sizeof(Hltsearch[0]) - 2; ++j) {
0157 if (triggername.find(Hltsearch[j]) != string::npos ||
0158 (j == 4 && triggername.find(Hltsearch4) != string::npos) ||
0159 (j == 5 && triggername.find(Hltsearch5) != string::npos)) {
0160 if (Hltplacement[i] == 7)
0161 Hltplacement[i] = j;
0162 else if (triggername.find(Hltsearch5) != string::npos)
0163 Hltplacement[i] = 5;
0164 else
0165 Hltplacement[i] = 6;
0166 } else if (triggername.empty() || triggername.find("Total") != string::npos)
0167 Hltplacement[i] = -1;
0168 }
0169 if (Hltplacement[i] >= 0 && Hltplacement[i] <= 5 &&
0170 (triggername.find(Hltsearch6_1) != string::npos ||
0171 (triggername.find(Hltsearch6_2) != string::npos && Hltplacement[i] != 4)))
0172 Hltplacement[i] = 6;
0173 }
0174 }
0175
0176 for (unsigned int i = 0; i < Hltplacement.size(); ++i)
0177 if (Hltplacement[i] != -1)
0178 ++Hltbins[Hltplacement[i]];
0179
0180 LogDebug("HltSusyExoPostProcessor") << "MonitorElements filled";
0181
0182
0183 iBooker_.setCurrentFolder(subDir_ + triggerBitsDir);
0184 MonitorElement *hL1EffSorted[7] = {
0185 iBooker_.bookProfile("L1_Mu", new TProfile("L1_Mu", "Efficiencies of L1 Muon Triggers", L1bins[0], 0, L1bins[0])),
0186 iBooker_.bookProfile("L1_EG", new TProfile("L1_EG", "Efficiencies of L1 EG Triggers", L1bins[1], 0, L1bins[1])),
0187 iBooker_.bookProfile("L1_Jet",
0188 new TProfile("L1_Jet", "Efficiencies of L1 Jet Triggers", L1bins[2], 0, L1bins[2])),
0189 iBooker_.bookProfile(
0190 "L1_ETM_ETT_HTT",
0191 new TProfile("L1_ETM_ETT_HTT", "Efficiencies of L1 ETM, ETT, and HTT Triggers", L1bins[3], 0, L1bins[3])),
0192 iBooker_.bookProfile("L1_TauJet",
0193 new TProfile("L1_TauJet", "Efficiencies of L1 TauJet Triggers", L1bins[4], 0, L1bins[4])),
0194 iBooker_.bookProfile("L1_XTrigger",
0195 new TProfile("L1_XTrigger", "Efficiencies of L1 Cross Triggers", L1bins[5], 0, L1bins[5])),
0196 iBooker_.bookProfile(
0197 "L1_Overflow", new TProfile("L1_Overflow", "Efficiencies of L1 Unsorted Triggers", L1bins[6], 0, L1bins[6]))};
0198
0199 MonitorElement *hHltEffSorted[8] = {
0200 iBooker_.bookProfile("Hlt_Mu",
0201 new TProfile("Hlt_Mu", "Efficiencies of HL Muon Triggers", Hltbins[0], 0, Hltbins[0])),
0202 iBooker_.bookProfile("Hlt_Ele",
0203 new TProfile("Hlt_Ele", "Efficiencies of HL Electron Triggers", Hltbins[1], 0, Hltbins[1])),
0204 iBooker_.bookProfile("Hlt_Jet",
0205 new TProfile("Hlt_Jet", "Efficiencies of HL Jet Triggers", Hltbins[2], 0, Hltbins[2], "s")),
0206 iBooker_.bookProfile("Hlt_Photon",
0207 new TProfile("Hlt_Photon", "Efficiencies of HL Photon Triggers", Hltbins[3], 0, Hltbins[3])),
0208 iBooker_.bookProfile(
0209 "Hlt_MET_HT",
0210 new TProfile("Hlt_MET_HT", "Efficiencies of HL MET and HT Triggers", Hltbins[4], 0, Hltbins[4])),
0211 iBooker_.bookProfile(
0212 "Hlt_Tau_BTag",
0213 new TProfile("Hlt_Tau_Btag", "Efficiencies of HL Tau and BTag Triggers", Hltbins[5], 0, Hltbins[5])),
0214 iBooker_.bookProfile(
0215 "Hlt_XTrigger", new TProfile("Hlt_XTrigger", "Efficiencies of HL Cross Triggers", Hltbins[6], 0, Hltbins[6])),
0216 iBooker_.bookProfile(
0217 "Hlt_Overflow",
0218 new TProfile("Hlt_Overflow", "Efficiencies of HL Unsorted Triggers", Hltbins[7], 0, Hltbins[7]))};
0219
0220 int L1bincounter[8];
0221 for (unsigned int i = 0; i < sizeof(L1bincounter) / sizeof(L1bincounter[0]); ++i)
0222 L1bincounter[i] = 0;
0223 int Hltbincounter[8];
0224 for (unsigned int i = 0; i < sizeof(Hltbincounter) / sizeof(Hltbincounter[0]); ++i)
0225 Hltbincounter[i] = 0;
0226 TProfile *hL1_ = (TProfile *)hL1EffBeforeCuts->getTProfile();
0227 TProfile *hHlt_ = (TProfile *)hHltEffBeforeCuts->getTProfile();
0228
0229
0230 for (unsigned int i = 0; i < L1placement.size(); ++i) {
0231 if (L1placement[i] != -1) {
0232 hL1EffSorted[L1placement[i]]->setBinLabel(L1bincounter[L1placement[i]] + 1, hL1_->GetXaxis()->GetBinLabel(i + 1));
0233 hL1EffSorted[L1placement[i]]->setBinContent(L1bincounter[L1placement[i]] + 1, hL1_->GetBinContent(i + 1));
0234 hL1EffSorted[L1placement[i]]->setBinEntries(L1bincounter[L1placement[i]] + 1, 1);
0235 hL1EffSorted[L1placement[i]]->setBinError(L1bincounter[L1placement[i]] + 1, hL1_->GetBinError(i + 1));
0236 ++L1bincounter[L1placement[i]];
0237 }
0238 }
0239 for (unsigned int i = 0; i < Hltplacement.size(); ++i) {
0240 if (Hltplacement[i] != -1) {
0241 hHltEffSorted[Hltplacement[i]]->setBinLabel(Hltbincounter[Hltplacement[i]] + 1,
0242 hHlt_->GetXaxis()->GetBinLabel(i + 1));
0243 hHltEffSorted[Hltplacement[i]]->setBinContent(Hltbincounter[Hltplacement[i]] + 1, hHlt_->GetBinContent(i + 1));
0244 hHltEffSorted[Hltplacement[i]]->setBinEntries(Hltbincounter[Hltplacement[i]] + 1, 1);
0245 hHltEffSorted[Hltplacement[i]]->setBinError(Hltbincounter[Hltplacement[i]] + 1, hHlt_->GetBinError(i + 1));
0246 ++Hltbincounter[Hltplacement[i]];
0247 }
0248 }
0249
0250 for (unsigned int i = 0; i < mc_dirs.size(); ++i) {
0251
0252 iGetter_.setCurrentFolder(subDir_ + mcSelBitsDir + "/" + mc_dirs[i]);
0253
0254 char set_name_L1[256], set_name_Hlt[256];
0255 sprintf(set_name_L1, "L1Eff_%s", mc_dirs[i].c_str());
0256 sprintf(set_name_Hlt, "HltEff_%s", mc_dirs[i].c_str());
0257 MonitorElement *hL1EffAfterMcCuts = bookEffMEProfileFromTH1(
0258 iGetter_.get(subDir_ + mcSelBitsDir + "/" + mc_dirs[i] + "/L1Paths_" + mc_dirs[i])->getTH1F(),
0259 (std::string)set_name_L1,
0260 iBooker_);
0261 hL1EffAfterMcCuts->setTitle("L1 Efficiencies for " + mc_dirs[i] + " selection");
0262 MonitorElement *hHltEffAfterMcCuts = bookEffMEProfileFromTH1(
0263 iGetter_.get(subDir_ + mcSelBitsDir + "/" + mc_dirs[i] + "/HltPaths_" + mc_dirs[i])->getTH1F(),
0264 (std::string)set_name_Hlt,
0265 iBooker_);
0266 hHltEffAfterMcCuts->setTitle("HLT Efficiencies for " + mc_dirs[i] + " selection");
0267
0268 LogDebug("HltSusyExoPostProcessor") << "MonitorElements for " << mc_dirs[i] << " selection booked";
0269
0270
0271 float nTotalAfterMcCuts;
0272 if (mcFlag)
0273 nTotalAfterMcCuts =
0274 iGetter_.get(subDir_ + mcSelBitsDir + "/" + mc_dirs[i] + "/L1Bits_" + mc_dirs[i])->getBinContent(nL1bins);
0275 else
0276 nTotalAfterMcCuts = iGetter_.get(subDir_ + mcSelBitsDir + "/" + mc_dirs[i] + "/HltBits_" + mc_dirs[i])
0277 ->getBinContent(reference_bin);
0278
0279 LogDebug("HltSusyExoPostProcessor") << "Total number of events = " << nTotalAfterMcCuts;
0280
0281 MonitorElement *hL1EffSorted_mc[7];
0282 MonitorElement *hHltEffSorted_mc[8];
0283 char buffer1[256], buffer2[256];
0284 string L1_nametags[7] = {"Mu", "EG", "Jet", "ETM_ETT_HTT", "TauJet", "XTrigger", "Overflow"};
0285 string L1_titletags[7] = {"Muon", "EG", "Jet", "ETM, ETT, and HTT", "TauJet", "Cross", "Unsorted"};
0286 string Hlt_nametags[8] = {"Mu", "Ele", "Jet", "Photon", "MET_HT", "Tau_BTag", "XTrigger", "Overflow"};
0287 string Hlt_titletags[8] = {"Muon", "Electron", "Jet", "Photon", "MET and HT", "Tau and BTag", "Cross", "Unsorted"};
0288 for (unsigned int j = 0; j < sizeof(hL1EffSorted_mc) / sizeof(hL1EffSorted_mc[0]); ++j) {
0289 sprintf(buffer1, "L1_%s_%s", mc_dirs[i].c_str(), L1_nametags[j].c_str());
0290 sprintf(buffer2, "Efficiencies of L1 %s Triggers for %s Selection", L1_titletags[j].c_str(), mc_dirs[i].c_str());
0291 hL1EffSorted_mc[j] = iBooker_.bookProfile(buffer1, new TProfile(buffer1, buffer2, L1bins[j], 0, L1bins[j]));
0292 }
0293 for (unsigned int j = 0; j < sizeof(hHltEffSorted_mc) / sizeof(hHltEffSorted_mc[0]); ++j) {
0294 sprintf(buffer1, "Hlt_%s_%s", mc_dirs[i].c_str(), Hlt_nametags[j].c_str());
0295 sprintf(buffer2, "Efficiencies of HL %s Triggers for %s Selection", Hlt_titletags[j].c_str(), mc_dirs[i].c_str());
0296 hHltEffSorted_mc[j] = iBooker_.bookProfile(buffer1, new TProfile(buffer1, buffer2, Hltbins[j], 0, Hltbins[j]));
0297 }
0298
0299
0300 int L1bincounter_mc[8];
0301 for (unsigned int j = 0; j < sizeof(L1bincounter_mc) / sizeof(L1bincounter_mc[0]); ++j)
0302 L1bincounter_mc[j] = 0;
0303 int Hltbincounter_mc[8];
0304 for (unsigned int j = 0; j < sizeof(Hltbincounter_mc) / sizeof(Hltbincounter_mc[0]); ++j)
0305 Hltbincounter_mc[j] = 0;
0306 TProfile *hL1_mc = (TProfile *)hL1EffAfterMcCuts->getTProfile();
0307 TProfile *hHlt_mc = (TProfile *)hHltEffAfterMcCuts->getTProfile();
0308 for (unsigned int j = 0; j < L1placement.size(); j++) {
0309 value = nTotalAfterMcCuts
0310 ? (float)iGetter_.get(subDir_ + mcSelBitsDir + "/" + mc_dirs[i] + "/L1Paths_" + mc_dirs[i])
0311 ->getBinContent(j + 1) /
0312 nTotalAfterMcCuts
0313 : 0;
0314 error = nTotalAfterMcCuts ? sqrt(value * (1 - value) / nTotalAfterMcCuts) : 0;
0315 hL1EffAfterMcCuts->setBinContent(j + 1, value);
0316 hL1EffAfterMcCuts->setBinEntries(j + 1, 1);
0317 hL1EffAfterMcCuts->setBinError(j + 1, error);
0318 if (L1placement[j] != -1) {
0319 hL1EffSorted_mc[L1placement[j]]->setBinLabel(L1bincounter_mc[L1placement[j]] + 1,
0320 hL1_mc->GetXaxis()->GetBinLabel(j + 1));
0321 hL1EffSorted_mc[L1placement[j]]->setBinContent(L1bincounter_mc[L1placement[j]] + 1,
0322 hL1_mc->GetBinContent(j + 1));
0323 hL1EffSorted_mc[L1placement[j]]->setBinEntries(L1bincounter_mc[L1placement[j]] + 1, 1);
0324 hL1EffSorted_mc[L1placement[j]]->setBinError(L1bincounter_mc[L1placement[j]] + 1, hL1_mc->GetBinError(j + 1));
0325 ++L1bincounter_mc[L1placement[j]];
0326 }
0327 }
0328 if (nL1bins != int(L1placement.size())) {
0329 value = nTotalAfterMcCuts
0330 ? (float)iGetter_.get(subDir_ + mcSelBitsDir + "/" + mc_dirs[i] + "/L1Paths_" + mc_dirs[i])
0331 ->getBinContent(nL1bins) /
0332 nTotalAfterMcCuts
0333 : 0;
0334 error = nTotalAfterMcCuts ? sqrt(value * (1 - value) / nTotalAfterMcCuts) : 0;
0335 hL1EffAfterMcCuts->setBinContent(nL1bins, value);
0336 hL1EffAfterMcCuts->setBinEntries(nL1bins, 1);
0337 hL1EffAfterMcCuts->setBinError(nL1bins, error);
0338 }
0339 for (unsigned int j = 0; j < Hltplacement.size(); j++) {
0340 value = nTotalAfterMcCuts
0341 ? (float)iGetter_.get(subDir_ + mcSelBitsDir + "/" + mc_dirs[i] + "/HltPaths_" + mc_dirs[i])
0342 ->getBinContent(j + 1) /
0343 nTotalAfterMcCuts
0344 : 0;
0345 error = nTotalAfterMcCuts ? sqrt(value * (1 - value) / nTotalAfterMcCuts) : 0;
0346 hHltEffAfterMcCuts->setBinContent(j + 1, value);
0347 hHltEffAfterMcCuts->setBinEntries(j + 1, 1);
0348 hHltEffAfterMcCuts->setBinError(j + 1, error);
0349 if (Hltplacement[j] != -1) {
0350 hHltEffSorted_mc[Hltplacement[j]]->setBinLabel(Hltbincounter_mc[Hltplacement[j]] + 1,
0351 hHlt_mc->GetXaxis()->GetBinLabel(j + 1));
0352 hHltEffSorted_mc[Hltplacement[j]]->setBinContent(Hltbincounter_mc[Hltplacement[j]] + 1,
0353 hHlt_mc->GetBinContent(j + 1));
0354 hHltEffSorted_mc[Hltplacement[j]]->setBinEntries(Hltbincounter_mc[Hltplacement[j]] + 1, 1);
0355 hHltEffSorted_mc[Hltplacement[j]]->setBinError(Hltbincounter_mc[Hltplacement[j]] + 1,
0356 hHlt_mc->GetBinError(j + 1));
0357 ++Hltbincounter_mc[Hltplacement[j]];
0358 }
0359 }
0360 if (nHltbins != int(Hltplacement.size())) {
0361 value = nTotalAfterMcCuts
0362 ? (float)iGetter_.get(subDir_ + mcSelBitsDir + "/" + mc_dirs[i] + "/HltPaths_" + mc_dirs[i])
0363 ->getBinContent(nHltbins) /
0364 nTotalAfterMcCuts
0365 : 0;
0366 error = nTotalAfterMcCuts ? sqrt(value * (1 - value) / nTotalAfterMcCuts) : 0;
0367 hHltEffAfterMcCuts->setBinContent(nHltbins, value);
0368 hHltEffAfterMcCuts->setBinEntries(nHltbins, 1);
0369 hHltEffAfterMcCuts->setBinError(nHltbins, error);
0370 }
0371 LogDebug("HltSusyExoPostProcessor") << "MonitorElements filled for " << mc_dirs[i] << " selection";
0372 }
0373
0374 for (unsigned int i = 0; i < reco_dirs.size(); ++i) {
0375
0376 iGetter_.setCurrentFolder(subDir_ + recoSelBitsDir + "/" + reco_dirs[i]);
0377
0378 char set_name_L1[256], set_name_Hlt[256];
0379 sprintf(set_name_L1, "L1Eff_%s", reco_dirs[i].c_str());
0380 sprintf(set_name_Hlt, "HltEff_%s", reco_dirs[i].c_str());
0381 MonitorElement *hL1EffAfterRecoCuts = bookEffMEProfileFromTH1(
0382 iGetter_.get(subDir_ + recoSelBitsDir + "/" + reco_dirs[i] + "/L1Paths_" + reco_dirs[i])->getTH1F(),
0383 (std::string)set_name_L1,
0384 iBooker_);
0385 hL1EffAfterRecoCuts->setTitle("L1 Efficiencies for " + reco_dirs[i] + " selection");
0386 MonitorElement *hHltEffAfterRecoCuts = bookEffMEProfileFromTH1(
0387 iGetter_.get(subDir_ + recoSelBitsDir + "/" + reco_dirs[i] + "/HltPaths_" + reco_dirs[i])->getTH1F(),
0388 (std::string)set_name_Hlt,
0389 iBooker_);
0390 hHltEffAfterRecoCuts->setTitle("HLT Efficiencies for " + reco_dirs[i] + " selection");
0391
0392 LogDebug("HltSusyExoPostProcessor") << "MonitorElements for " << reco_dirs[i] << " selection booked";
0393
0394
0395 float nTotalAfterRecoCuts;
0396 if (mcFlag)
0397 nTotalAfterRecoCuts = iGetter_.get(subDir_ + recoSelBitsDir + "/" + reco_dirs[i] + "/L1Bits_" + reco_dirs[i])
0398 ->getBinContent(nL1bins);
0399 else
0400 nTotalAfterRecoCuts = iGetter_.get(subDir_ + recoSelBitsDir + "/" + reco_dirs[i] + "/HltBits_" + reco_dirs[i])
0401 ->getBinContent(reference_bin);
0402
0403 LogDebug("HltSusyExoPostProcessor") << "Total number of events = " << nTotalAfterRecoCuts;
0404
0405 MonitorElement *hL1EffSorted_reco[7];
0406 MonitorElement *hHltEffSorted_reco[8];
0407 char buffer1[256], buffer2[256];
0408 string L1_nametags[7] = {"Mu", "EG", "Jet", "ETM_ETT_HTT", "TauJet", "XTrigger", "Overflow"};
0409 string L1_titletags[7] = {"Muon", "EG", "Jet", "ETM, ETT, and HTT", "TauJet", "Cross", "Unsorted"};
0410 string Hlt_nametags[8] = {"Mu", "Ele", "Jet", "Photon", "MET_HT", "Tau_BTag", "XTrigger", "Overflow"};
0411 string Hlt_titletags[8] = {"Muon", "Electron", "Jet", "Photon", "MET and HT", "Tau and BTag", "Cross", "Unsorted"};
0412 for (unsigned int j = 0; j < sizeof(hL1EffSorted_reco) / sizeof(hL1EffSorted_reco[0]); ++j) {
0413 sprintf(buffer1, "L1_%s_%s", reco_dirs[i].c_str(), L1_nametags[j].c_str());
0414 sprintf(
0415 buffer2, "Efficiencies of L1 %s Triggers for %s Selection", L1_titletags[j].c_str(), reco_dirs[i].c_str());
0416 hL1EffSorted_reco[j] = iBooker_.bookProfile(buffer1, new TProfile(buffer1, buffer2, L1bins[j], 0, L1bins[j]));
0417 }
0418 for (unsigned int j = 0; j < sizeof(hHltEffSorted_reco) / sizeof(hHltEffSorted_reco[0]); ++j) {
0419 sprintf(buffer1, "Hlt_%s_%s", reco_dirs[i].c_str(), Hlt_nametags[j].c_str());
0420 sprintf(
0421 buffer2, "Efficiencies of HL %s Triggers for %s Selection", Hlt_titletags[j].c_str(), reco_dirs[i].c_str());
0422 hHltEffSorted_reco[j] = iBooker_.bookProfile(buffer1, new TProfile(buffer1, buffer2, Hltbins[j], 0, Hltbins[j]));
0423 }
0424
0425
0426 int L1bincounter_reco[8];
0427 for (unsigned int j = 0; j < sizeof(L1bincounter_reco) / sizeof(L1bincounter_reco[0]); ++j)
0428 L1bincounter_reco[j] = 0;
0429 int Hltbincounter_reco[8];
0430 for (unsigned int j = 0; j < sizeof(Hltbincounter_reco) / sizeof(Hltbincounter_reco[0]); ++j)
0431 Hltbincounter_reco[j] = 0;
0432 TProfile *hL1_reco = (TProfile *)hL1EffAfterRecoCuts->getTProfile();
0433 TProfile *hHlt_reco = (TProfile *)hHltEffAfterRecoCuts->getTProfile();
0434 for (unsigned int j = 0; j < L1placement.size(); j++) {
0435 value = nTotalAfterRecoCuts
0436 ? (float)iGetter_.get(subDir_ + recoSelBitsDir + "/" + reco_dirs[i] + "/L1Paths_" + reco_dirs[i])
0437 ->getBinContent(j + 1) /
0438 nTotalAfterRecoCuts
0439 : 0;
0440 error = nTotalAfterRecoCuts ? sqrt(value * (1 - value) / nTotalAfterRecoCuts) : 0;
0441 hL1EffAfterRecoCuts->setBinContent(j + 1, value);
0442 hL1EffAfterRecoCuts->setBinEntries(j + 1, 1);
0443 hL1EffAfterRecoCuts->setBinError(j + 1, error);
0444 if (L1placement[j] != -1) {
0445 hL1EffSorted_reco[L1placement[j]]->setBinLabel(L1bincounter_reco[L1placement[j]] + 1,
0446 hL1_reco->GetXaxis()->GetBinLabel(j + 1));
0447 hL1EffSorted_reco[L1placement[j]]->setBinContent(L1bincounter_reco[L1placement[j]] + 1,
0448 hL1_reco->GetBinContent(j + 1));
0449 hL1EffSorted_reco[L1placement[j]]->setBinEntries(L1bincounter_reco[L1placement[j]] + 1, 1);
0450 hL1EffSorted_reco[L1placement[j]]->setBinError(L1bincounter_reco[L1placement[j]] + 1,
0451 hL1_reco->GetBinError(j + 1));
0452 ++L1bincounter_reco[L1placement[j]];
0453 }
0454 }
0455 if (nL1bins != int(L1placement.size())) {
0456 value = nTotalAfterRecoCuts
0457 ? (float)iGetter_.get(subDir_ + recoSelBitsDir + "/" + reco_dirs[i] + "/L1Paths_" + reco_dirs[i])
0458 ->getBinContent(nL1bins) /
0459 nTotalAfterRecoCuts
0460 : 0;
0461 error = nTotalAfterRecoCuts ? sqrt(value * (1 - value) / nTotalAfterRecoCuts) : 0;
0462 hL1EffAfterRecoCuts->setBinContent(nL1bins, value);
0463 hL1EffAfterRecoCuts->setBinEntries(nL1bins, 1);
0464 hL1EffAfterRecoCuts->setBinError(nL1bins, error);
0465 }
0466 for (unsigned int j = 0; j < Hltplacement.size(); j++) {
0467 value = nTotalAfterRecoCuts
0468 ? (float)iGetter_.get(subDir_ + recoSelBitsDir + "/" + reco_dirs[i] + "/HltPaths_" + reco_dirs[i])
0469 ->getBinContent(j + 1) /
0470 nTotalAfterRecoCuts
0471 : 0;
0472 error = nTotalAfterRecoCuts ? sqrt(value * (1 - value) / nTotalAfterRecoCuts) : 0;
0473 hHltEffAfterRecoCuts->setBinContent(j + 1, value);
0474 hHltEffAfterRecoCuts->setBinEntries(j + 1, 1);
0475 hHltEffAfterRecoCuts->setBinError(j + 1, error);
0476 if (Hltplacement[j] != -1) {
0477 hHltEffSorted_reco[Hltplacement[j]]->setBinLabel(Hltbincounter_reco[Hltplacement[j]] + 1,
0478 hHlt_reco->GetXaxis()->GetBinLabel(j + 1));
0479 hHltEffSorted_reco[Hltplacement[j]]->setBinContent(Hltbincounter_reco[Hltplacement[j]] + 1,
0480 hHlt_reco->GetBinContent(j + 1));
0481 hHltEffSorted_reco[Hltplacement[j]]->setBinEntries(Hltbincounter_reco[Hltplacement[j]] + 1, 1);
0482 hHltEffSorted_reco[Hltplacement[j]]->setBinError(Hltbincounter_reco[Hltplacement[j]] + 1,
0483 hHlt_reco->GetBinError(j + 1));
0484 ++Hltbincounter_reco[Hltplacement[j]];
0485 }
0486 }
0487 if (nHltbins != int(Hltplacement.size())) {
0488 value = nTotalAfterRecoCuts
0489 ? (float)iGetter_.get(subDir_ + recoSelBitsDir + "/" + reco_dirs[i] + "/HltPaths_" + reco_dirs[i])
0490 ->getBinContent(nHltbins) /
0491 nTotalAfterRecoCuts
0492 : 0;
0493 error = nTotalAfterRecoCuts ? sqrt(value * (1 - value) / nTotalAfterRecoCuts) : 0;
0494 hHltEffAfterRecoCuts->setBinContent(nHltbins, value);
0495 hHltEffAfterRecoCuts->setBinEntries(nHltbins, 1);
0496 hHltEffAfterRecoCuts->setBinError(nHltbins, error);
0497 }
0498 LogDebug("HltSusyExoPostProcessor") << "MonitorElements filled";
0499 }
0500
0501 int pt_bins = 100, eta_bins = 100;
0502 double pt_floor = 0., pt_ceiling = 200., eta_floor = -3.5, eta_ceiling = 3.5;
0503 iBooker_.setCurrentFolder(subDir_ + byEventDir);
0504 MonitorElement *hPt_1_ByEvent = iBooker_.book1D(
0505 "Pt_1_ByEvent", "Turn on as a Function of P_{t}, |Eta|<1.2, By Event", pt_bins, pt_floor, pt_ceiling);
0506 MonitorElement *hEta_1_ByEvent = iBooker_.book1D(
0507 "Eta_1_ByEvent", "Efficiency as a Function of Eta, P_{t}>0, By Event", eta_bins, eta_floor, eta_ceiling);
0508 MonitorElement *hPt_2_ByEvent = iBooker_.book1D(
0509 "Pt_2_ByEvent", "Turn on as a Function of P_{t}, 1.2<|Eta|<2.1, By Event", pt_bins, pt_floor, pt_ceiling);
0510 MonitorElement *hEta_2_ByEvent = iBooker_.book1D(
0511 "Eta_2_ByEvent", "Efficiency as a Function of Eta, P_{t}>10, By Event", eta_bins, eta_floor, eta_ceiling);
0512 MonitorElement *hPt_3_ByEvent = iBooker_.book1D(
0513 "Pt_3_ByEvent", "Turn on as a Function of P_{t}, |Eta|>2.1, By Event", pt_bins, pt_floor, pt_ceiling);
0514 MonitorElement *hEta_3_ByEvent = iBooker_.book1D(
0515 "Eta_3_ByEvent", "Efficiency as a Function of Eta, P_{t}>20, By Event", eta_bins, eta_floor, eta_ceiling);
0516 iBooker_.setCurrentFolder(subDir_ + byMuonDir);
0517 MonitorElement *hPt_1_ByMuon = iBooker_.book1D(
0518 "Pt_1_ByMuon", "Turn on as a Function of P_{t}, |Eta|<1.2, By Muon", pt_bins, pt_floor, pt_ceiling);
0519 MonitorElement *hEta_1_ByMuon = iBooker_.book1D(
0520 "Eta_1_ByMuon", "Efficiency as a Function of Eta, P_{t}>0, By Muon", eta_bins, eta_floor, eta_ceiling);
0521 MonitorElement *hPt_2_ByMuon = iBooker_.book1D(
0522 "Pt_2_ByMuon", "Turn on as a Function of P_{t}, 1.2<|Eta|<2.1, By Muon", pt_bins, pt_floor, pt_ceiling);
0523 MonitorElement *hEta_2_ByMuon = iBooker_.book1D(
0524 "Eta_2_ByMuon", "Efficiency as a Function of Eta, P_{t}>10, By Muon", eta_bins, eta_floor, eta_ceiling);
0525 MonitorElement *hPt_3_ByMuon = iBooker_.book1D(
0526 "Pt_3_ByMuon", "Turn on as a Function of P_{t}, |Eta|>2.1, By Muon", pt_bins, pt_floor, pt_ceiling);
0527 MonitorElement *hEta_3_ByMuon = iBooker_.book1D(
0528 "Eta_3_ByMuon", "Efficiency as a Function of Eta, P_{t}>20, By Muon", eta_bins, eta_floor, eta_ceiling);
0529
0530 for (int i = 1; i <= hPt_1_ByEvent->getNbinsX(); ++i) {
0531 double n1 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadAssocRecoMuonPt_1_ByEvent")->getBinContent(i);
0532 double n2 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadRecoMuonPt_1_ByEvent")->getBinContent(i);
0533 double value = (n2 != 0 ? n1 / n2 : 0);
0534 double error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0535 hPt_1_ByEvent->setBinContent(i, value);
0536 hPt_1_ByEvent->setBinError(i, error);
0537
0538 n1 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadAssocRecoMuonPt_2_ByEvent")->getBinContent(i);
0539 n2 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadRecoMuonPt_2_ByEvent")->getBinContent(i);
0540 value = (n2 != 0 ? n1 / n2 : 0);
0541 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0542 hPt_2_ByEvent->setBinContent(i, value);
0543 hPt_2_ByEvent->setBinError(i, error);
0544
0545 n1 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadAssocRecoMuonPt_3_ByEvent")->getBinContent(i);
0546 n2 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadRecoMuonPt_3_ByEvent")->getBinContent(i);
0547 value = (n2 != 0 ? n1 / n2 : 0);
0548 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0549 hPt_3_ByEvent->setBinContent(i, value);
0550 hPt_3_ByEvent->setBinError(i, error);
0551
0552 n1 = (double)iGetter_.get(subDir_ + byMuonDir + "/AssocRecoMuonPt_1_ByMuon")->getBinContent(i);
0553 n2 = (double)iGetter_.get(subDir_ + byMuonDir + "/RecoMuonPt_1_ByMuon")->getBinContent(i);
0554 value = (n2 != 0 ? n1 / n2 : 0);
0555 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0556 hPt_1_ByMuon->setBinContent(i, value);
0557 hPt_1_ByMuon->setBinError(i, error);
0558
0559 n1 = (double)iGetter_.get(subDir_ + byMuonDir + "/AssocRecoMuonPt_2_ByMuon")->getBinContent(i);
0560 n2 = (double)iGetter_.get(subDir_ + byMuonDir + "/RecoMuonPt_2_ByMuon")->getBinContent(i);
0561 value = (n2 != 0 ? n1 / n2 : 0);
0562 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0563 hPt_2_ByMuon->setBinContent(i, value);
0564 hPt_2_ByMuon->setBinError(i, error);
0565
0566 n1 = (double)iGetter_.get(subDir_ + byMuonDir + "/AssocRecoMuonPt_3_ByMuon")->getBinContent(i);
0567 n2 = (double)iGetter_.get(subDir_ + byMuonDir + "/RecoMuonPt_3_ByMuon")->getBinContent(i);
0568 value = (n2 != 0 ? n1 / n2 : 0);
0569 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0570 hPt_3_ByMuon->setBinContent(i, value);
0571 hPt_3_ByMuon->setBinError(i, error);
0572 }
0573
0574 for (int i = 1; i <= hEta_1_ByEvent->getNbinsX(); ++i) {
0575 double n1 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadAssocRecoMuonEta_1_ByEvent")->getBinContent(i);
0576 double n2 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadRecoMuonEta_1_ByEvent")->getBinContent(i);
0577 double value = (n2 != 0 ? n1 / n2 : 0);
0578 double error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0579 hEta_1_ByEvent->setBinContent(i, value);
0580 hEta_1_ByEvent->setBinError(i, error);
0581
0582 n1 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadAssocRecoMuonEta_2_ByEvent")->getBinContent(i);
0583 n2 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadRecoMuonEta_2_ByEvent")->getBinContent(i);
0584 value = (n2 != 0 ? n1 / n2 : 0);
0585 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0586 hEta_2_ByEvent->setBinContent(i, value);
0587 hEta_2_ByEvent->setBinError(i, error);
0588
0589 n1 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadAssocRecoMuonEta_3_ByEvent")->getBinContent(i);
0590 n2 = (double)iGetter_.get(subDir_ + byEventDir + "/LeadRecoMuonEta_3_ByEvent")->getBinContent(i);
0591 value = (n2 != 0 ? n1 / n2 : 0);
0592 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0593 hEta_3_ByEvent->setBinContent(i, value);
0594 hEta_3_ByEvent->setBinError(i, error);
0595
0596 n1 = (double)iGetter_.get(subDir_ + byMuonDir + "/AssocRecoMuonEta_1_ByMuon")->getBinContent(i);
0597 n2 = (double)iGetter_.get(subDir_ + byMuonDir + "/RecoMuonEta_1_ByMuon")->getBinContent(i);
0598 value = (n2 != 0 ? n1 / n2 : 0);
0599 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0600 hEta_1_ByMuon->setBinContent(i, value);
0601 hEta_1_ByMuon->setBinError(i, error);
0602
0603 n1 = (double)iGetter_.get(subDir_ + byMuonDir + "/AssocRecoMuonEta_2_ByMuon")->getBinContent(i);
0604 n2 = (double)iGetter_.get(subDir_ + byMuonDir + "/RecoMuonEta_2_ByMuon")->getBinContent(i);
0605 value = (n2 != 0 ? n1 / n2 : 0);
0606 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0607 hEta_2_ByMuon->setBinContent(i, value);
0608 hEta_2_ByMuon->setBinError(i, error);
0609
0610 n1 = (double)iGetter_.get(subDir_ + byMuonDir + "/AssocRecoMuonEta_3_ByMuon")->getBinContent(i);
0611 n2 = (double)iGetter_.get(subDir_ + byMuonDir + "/RecoMuonEta_3_ByMuon")->getBinContent(i);
0612 value = (n2 != 0 ? n1 / n2 : 0);
0613 error = (n2 != 0 ? sqrt(value * (1 - value) / n2) : 0);
0614 hEta_3_ByMuon->setBinContent(i, value);
0615 hEta_3_ByMuon->setBinError(i, error);
0616 }
0617 }
0618
0619 HltSusyExoPostProcessor::MonitorElement *HltSusyExoPostProcessor::bookEffMEProfileFromTH1(TH1F *histo,
0620 std::string name,
0621 DQMStore::IBooker &iBooker_) {
0622 MonitorElement *myEffME;
0623 if (name == "Eff") {
0624 myEffME = iBooker_.bookProfile((std::string)("Eff_" + ((std::string)histo->GetName())),
0625 ((std::string)histo->GetTitle()),
0626 histo->GetXaxis()->GetNbins(),
0627 histo->GetXaxis()->GetXmin(),
0628 histo->GetXaxis()->GetXmax(),
0629 100,
0630 0,
0631 1,
0632 "");
0633 } else {
0634 myEffME = iBooker_.bookProfile(name,
0635 new TProfile(name.c_str(),
0636 histo->GetTitle(),
0637 histo->GetXaxis()->GetNbins(),
0638 histo->GetXaxis()->GetXmin(),
0639 histo->GetXaxis()->GetXmax()));
0640 }
0641 for (int i = 0; i < histo->GetXaxis()->GetNbins(); i++) {
0642 myEffME->setBinLabel(i + 1, histo->GetXaxis()->GetBinLabel(i + 1), 1);
0643 }
0644 return myEffME;
0645 }
0646
0647 DEFINE_FWK_MODULE(HltSusyExoPostProcessor);