File indexing completed on 2023-03-17 11:28:46
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include "Validation/RecoTau/interface/TauTagValidation.h"
0023 #include "FWCore/Version/interface/GetReleaseVersion.h"
0024 #include <DataFormats/VertexReco/interface/Vertex.h>
0025 #include <DataFormats/VertexReco/interface/VertexFwd.h>
0026 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0027
0028 #include "PhysicsTools/JetMCUtils/interface/JetMCTag.h"
0029 #include "DataFormats/JetReco/interface/GenJet.h"
0030 #include "DataFormats/TauReco/interface/PFTauFwd.h"
0031 #include "DataFormats/TauReco/interface/PFTau.h"
0032
0033 #include "CommonTools/Utils/interface/StringCutObjectSelector.h"
0034 #include "RecoTauTag/RecoTau/interface/PFTauDecayModeTools.h"
0035
0036 using namespace edm;
0037 using namespace std;
0038 using namespace reco;
0039
0040 TauTagValidation::TauTagValidation(const edm::ParameterSet& iConfig)
0041 : moduleLabel_(iConfig.getParameter<std::string>("@module_label")),
0042
0043 dataType_(iConfig.getParameter<string>("DataType")),
0044
0045 matchDeltaR_Leptons_(iConfig.getParameter<double>("MatchDeltaR_Leptons")),
0046 matchDeltaR_Jets_(iConfig.getParameter<double>("MatchDeltaR_Jets")),
0047 TauPtCut_(iConfig.getParameter<double>("TauPtCut")),
0048
0049 recoCuts_(iConfig.getParameter<std::string>("recoCuts")),
0050 genCuts_(iConfig.getParameter<std::string>("genCuts")),
0051
0052 saveoutputhistograms_(iConfig.getParameter<bool>("SaveOutputHistograms")),
0053
0054 refCollectionInputTag_(iConfig.getParameter<InputTag>("RefCollection")),
0055
0056 extensionName_(iConfig.getParameter<string>("ExtensionName")),
0057
0058 TauProducerInputTag_(iConfig.getParameter<InputTag>("TauProducer")),
0059
0060 discriminators_(iConfig.getParameter<std::vector<edm::ParameterSet>>("discriminators")) {
0061 turnOnTrigger_ = iConfig.exists("turnOnTrigger") && iConfig.getParameter<bool>("turnOnTrigger");
0062 genericTriggerEventFlag_ =
0063 (iConfig.exists("GenericTriggerSelection") && turnOnTrigger_)
0064 ? new GenericTriggerEventFlag(iConfig.getParameter<edm::ParameterSet>("GenericTriggerSelection"),
0065 consumesCollector(),
0066 *this,
0067 l1t::UseEventSetupIn::Run)
0068 : nullptr;
0069 if (genericTriggerEventFlag_ != nullptr)
0070 LogDebug(moduleLabel_) << "--> GenericTriggerSelection parameters found in " << moduleLabel_ << "."
0071 << std::endl;
0072 else
0073 LogDebug(moduleLabel_) << "--> GenericTriggerSelection not found in " << moduleLabel_ << "."
0074 << std::endl;
0075
0076
0077 refCollection_ = refCollectionInputTag_.label();
0078 TauProducer_ = TauProducerInputTag_.label();
0079
0080 histoSettings_ = (iConfig.exists("histoSettings")) ? iConfig.getParameter<edm::ParameterSet>("histoSettings")
0081 : edm::ParameterSet();
0082 edm::InputTag PrimaryVertexCollection_ = (iConfig.exists("PrimaryVertexCollection"))
0083 ? iConfig.getParameter<InputTag>("PrimaryVertexCollection")
0084 : edm::InputTag("offlinePrimaryVertices");
0085
0086 refCollectionInputTagToken_ = consumes<edm::View<reco::Candidate>>(iConfig.getParameter<InputTag>("RefCollection"));
0087 primaryVertexCollectionToken_ = consumes<VertexCollection>(PrimaryVertexCollection_);
0088 tauProducerInputTagToken_ = consumes<reco::PFTauCollection>(iConfig.getParameter<InputTag>("TauProducer"));
0089 std::vector<edm::ParameterSet> temp_plainDiscriminators;
0090 std::vector<edm::ParameterSet> temp_discriminatorContainers;
0091 for (std::vector<edm::ParameterSet>::iterator it = discriminators_.begin(); it != discriminators_.end(); ++it) {
0092 if (it->getParameter<string>("container").empty()) {
0093 temp_plainDiscriminators.push_back(*it);
0094 currentDiscriminatorToken_.push_back(
0095 consumes<reco::PFTauDiscriminator>(edm::InputTag(it->getParameter<string>("discriminator"))));
0096 } else {
0097 temp_discriminatorContainers.push_back(*it);
0098 currentDiscriminatorContainerToken_.push_back(std::pair<edm::EDGetTokenT<reco::TauDiscriminatorContainer>, int>(
0099 consumes<reco::TauDiscriminatorContainer>(edm::InputTag(it->getParameter<string>("container"))), -99));
0100 auto const prov_cfg_label = it->getParameter<std::string>("provenanceConfigLabel");
0101 if (prov_cfg_label != "rawValues" && prov_cfg_label != "workingPoints" && prov_cfg_label != "IDdefinitions" &&
0102 prov_cfg_label != "IDWPdefinitions" && prov_cfg_label != "direct_rawValues" &&
0103 prov_cfg_label != "direct_workingPoints")
0104 throw cms::Exception("Configuration")
0105 << "TauTagValidation: Parameter 'provenanceConfigLabel' does only accept 'rawValues', 'workingPoints', "
0106 "'IDdefinitions', 'IDWPdefinitions', 'direct_rawValues', 'direct_workingPoints'\n";
0107 currentDiscriminatorContainerIdName_.push_back({prov_cfg_label, it->getParameter<std::string>("idLabel")});
0108 }
0109 }
0110
0111 discriminators_ = temp_plainDiscriminators;
0112 discriminators_.insert(
0113 discriminators_.end(), temp_discriminatorContainers.begin(), temp_discriminatorContainers.end());
0114
0115 tversion = edm::getReleaseVersion();
0116
0117 if (!saveoutputhistograms_) {
0118 LogInfo("OutputInfo") << " TauVisible histograms will NOT be saved";
0119 } else {
0120 outPutFile_ = TauProducer_;
0121 outPutFile_.append("_");
0122 tversion.erase(0, 1);
0123 tversion.erase(tversion.size() - 1, 1);
0124 outPutFile_.append(tversion);
0125 outPutFile_.append("_" + refCollection_);
0126 if (!extensionName_.empty()) {
0127 outPutFile_.append("_" + extensionName_);
0128 }
0129 outPutFile_.append(".root");
0130
0131 LogInfo("OutputInfo") << " TauVisiblehistograms will be saved to file:" << outPutFile_;
0132 }
0133
0134
0135 numEvents_ = 0;
0136
0137
0138
0139 chainCuts_ = iConfig.exists("chainCuts") ? iConfig.getParameter<bool>("chainCuts") : true;
0140 }
0141
0142 TauTagValidation::~TauTagValidation() {
0143 if (genericTriggerEventFlag_)
0144 delete genericTriggerEventFlag_;
0145 }
0146
0147 void TauTagValidation::bookHistograms(DQMStore::IBooker& ibooker,
0148 edm::Run const& iRun,
0149 edm::EventSetup const& ) {
0150 MonitorElement *ptTemp, *etaTemp, *phiTemp, *pileupTemp, *tmpME, *summaryTemp;
0151
0152 ibooker.setCurrentFolder("RecoTauV/" + TauProducer_ + extensionName_ + "_Summary");
0153 auto n_disc = !discriminators_.empty() ? discriminators_.size() : 21;
0154 hinfo summaryHinfo = (histoSettings_.exists("summary"))
0155 ? hinfo(histoSettings_.getParameter<edm::ParameterSet>("summary"))
0156 : hinfo(n_disc, -0.5, n_disc - 0.5);
0157 summaryTemp =
0158 ibooker.book1D("summaryPlotNum", "summaryPlotNum", summaryHinfo.nbins, summaryHinfo.min, summaryHinfo.max);
0159 summaryMap.insert(std::make_pair(refCollection_ + "Num", summaryTemp));
0160 summaryTemp =
0161 ibooker.book1D("summaryPlotDen", "summaryPlotDen", summaryHinfo.nbins, summaryHinfo.min, summaryHinfo.max);
0162 summaryMap.insert(std::make_pair(refCollection_ + "Den", summaryTemp));
0163 summaryTemp = ibooker.book1D("summaryPlot", "summaryPlot", summaryHinfo.nbins, summaryHinfo.min, summaryHinfo.max);
0164 summaryMap.insert(std::make_pair(refCollection_, summaryTemp));
0165
0166 ibooker.setCurrentFolder("RecoTauV/" + TauProducer_ + extensionName_ + "_ReferenceCollection");
0167
0168
0169 hinfo ptHinfo = (histoSettings_.exists("pt")) ? hinfo(histoSettings_.getParameter<edm::ParameterSet>("pt"))
0170 : hinfo(500, 0., 1000.);
0171 hinfo etaHinfo = (histoSettings_.exists("eta")) ? hinfo(histoSettings_.getParameter<edm::ParameterSet>("eta"))
0172 : hinfo(60, -3.0, 3.0);
0173 hinfo phiHinfo = (histoSettings_.exists("phi")) ? hinfo(histoSettings_.getParameter<edm::ParameterSet>("phi"))
0174 : hinfo(40, -200., 200.);
0175 hinfo pileupHinfo = (histoSettings_.exists("pileup"))
0176 ? hinfo(histoSettings_.getParameter<edm::ParameterSet>("pileup"))
0177 : hinfo(100, 0., 100.);
0178
0179
0180
0181
0182 ptTemp =
0183 ibooker.book1D("nRef_Taus_vs_ptTauVisible", "nRef_Taus_vs_ptTauVisible", ptHinfo.nbins, ptHinfo.min, ptHinfo.max);
0184 etaTemp = ibooker.book1D(
0185 "nRef_Taus_vs_etaTauVisible", "nRef_Taus_vs_etaTauVisible", etaHinfo.nbins, etaHinfo.min, etaHinfo.max);
0186 phiTemp = ibooker.book1D(
0187 "nRef_Taus_vs_phiTauVisible", "nRef_Taus_vs_phiTauVisible", phiHinfo.nbins, phiHinfo.min, phiHinfo.max);
0188 pileupTemp = ibooker.book1D("nRef_Taus_vs_pileupTauVisible",
0189 "nRef_Taus_vs_pileupTauVisible",
0190 pileupHinfo.nbins,
0191 pileupHinfo.min,
0192 pileupHinfo.max);
0193
0194 ptTauVisibleMap.insert(std::make_pair(refCollection_, ptTemp));
0195 etaTauVisibleMap.insert(std::make_pair(refCollection_, etaTemp));
0196 phiTauVisibleMap.insert(std::make_pair(refCollection_, phiTemp));
0197 pileupTauVisibleMap.insert(std::make_pair(refCollection_, pileupTemp));
0198
0199
0200
0201 ibooker.setCurrentFolder("RecoTauV/" + TauProducer_ + extensionName_ + "_Matched");
0202
0203 ptTemp = ibooker.book1D(TauProducer_ + "Matched_vs_ptTauVisible",
0204 TauProducer_ + "Matched_vs_ptTauVisible",
0205 ptHinfo.nbins,
0206 ptHinfo.min,
0207 ptHinfo.max);
0208 etaTemp = ibooker.book1D(TauProducer_ + "Matched_vs_etaTauVisible",
0209 TauProducer_ + "Matched_vs_etaTauVisible",
0210 etaHinfo.nbins,
0211 etaHinfo.min,
0212 etaHinfo.max);
0213 phiTemp = ibooker.book1D(TauProducer_ + "Matched_vs_phiTauVisible",
0214 TauProducer_ + "Matched_vs_phiTauVisible",
0215 phiHinfo.nbins,
0216 phiHinfo.min,
0217 phiHinfo.max);
0218 pileupTemp = ibooker.book1D(TauProducer_ + "Matched_vs_pileupTauVisible",
0219 TauProducer_ + "Matched_vs_pileupTauVisible",
0220 pileupHinfo.nbins,
0221 pileupHinfo.min,
0222 pileupHinfo.max);
0223
0224 ptTauVisibleMap.insert(std::make_pair(TauProducer_ + "Matched", ptTemp));
0225 etaTauVisibleMap.insert(std::make_pair(TauProducer_ + "Matched", etaTemp));
0226 phiTauVisibleMap.insert(std::make_pair(TauProducer_ + "Matched", phiTemp));
0227 pileupTauVisibleMap.insert(std::make_pair(TauProducer_ + "Matched", pileupTemp));
0228
0229 int j = 0;
0230 for (const auto& it : discriminators_) {
0231 string DiscriminatorLabel = it.getParameter<string>("discriminator");
0232 std::string histogramName;
0233 stripDiscriminatorLabel(DiscriminatorLabel, histogramName);
0234
0235
0236 string DiscriminatorLabelReduced = it.getParameter<string>("discriminator");
0237 DiscriminatorLabelReduced.erase(0, 24);
0238 summaryMap.find(refCollection_ + "Den")->second->setBinLabel(j + 1, DiscriminatorLabelReduced);
0239 summaryMap.find(refCollection_ + "Num")->second->setBinLabel(j + 1, DiscriminatorLabelReduced);
0240 summaryMap.find(refCollection_)->second->setBinLabel(j + 1, DiscriminatorLabelReduced);
0241
0242 ibooker.setCurrentFolder("RecoTauV/" + TauProducer_ + extensionName_ + "_" + DiscriminatorLabel);
0243
0244 ptTemp = ibooker.book1D(DiscriminatorLabel + "_vs_ptTauVisible",
0245 histogramName + "_vs_ptTauVisible",
0246 ptHinfo.nbins,
0247 ptHinfo.min,
0248 ptHinfo.max);
0249 etaTemp = ibooker.book1D(DiscriminatorLabel + "_vs_etaTauVisible",
0250 histogramName + "_vs_etaTauVisible",
0251 etaHinfo.nbins,
0252 etaHinfo.min,
0253 etaHinfo.max);
0254 phiTemp = ibooker.book1D(DiscriminatorLabel + "_vs_phiTauVisible",
0255 histogramName + "_vs_phiTauVisible",
0256 phiHinfo.nbins,
0257 phiHinfo.min,
0258 phiHinfo.max);
0259 pileupTemp = ibooker.book1D(DiscriminatorLabel + "_vs_pileupTauVisible",
0260 histogramName + "_vs_pileupTauVisible",
0261 pileupHinfo.nbins,
0262 pileupHinfo.min,
0263 pileupHinfo.max);
0264
0265 ptTauVisibleMap.insert(std::make_pair(DiscriminatorLabel, ptTemp));
0266 etaTauVisibleMap.insert(std::make_pair(DiscriminatorLabel, etaTemp));
0267 phiTauVisibleMap.insert(std::make_pair(DiscriminatorLabel, phiTemp));
0268 pileupTauVisibleMap.insert(std::make_pair(DiscriminatorLabel, pileupTemp));
0269
0270 tmpME = ibooker.book1D(
0271 DiscriminatorLabel + "_TauCandMass", histogramName + "_TauCandMass" + ";Cand Mass" + ";Frequency", 30, 0., 2.0);
0272 plotMap_.insert(std::make_pair(DiscriminatorLabel + "_TauCandMass", tmpME));
0273
0274
0275
0276 std::string plotType = "_pTRatio_";
0277 std::string xaxisLabel = ";p_{T}^{reco}/p_{T}^{gen}";
0278 std::string yaxislabel = ";Frequency";
0279 std::string plotName = plotType + "allHadronic";
0280 int bins = 40;
0281 tmpME =
0282 ibooker.book1D(DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 2.);
0283 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0284 plotName = plotType + "oneProng0Pi0";
0285 tmpME =
0286 ibooker.book1D(DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 2.);
0287 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0288 plotName = plotType + "oneProng1Pi0";
0289 tmpME =
0290 ibooker.book1D(DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 2.);
0291 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0292 plotName = plotType + "oneProng2Pi0";
0293 tmpME =
0294 ibooker.book1D(DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 2.);
0295 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0296
0297 plotName = plotType + "twoProng0Pi0";
0298 tmpME =
0299 ibooker.book1D(DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 2.);
0300 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0301 plotName = plotType + "twoProng1Pi0";
0302 tmpME =
0303 ibooker.book1D(DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 2.);
0304 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0305 plotName = plotType + "twoProng2Pi0";
0306 tmpME =
0307 ibooker.book1D(DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 2.);
0308 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0309
0310 plotName = plotType + "threeProng0Pi0";
0311 tmpME =
0312 ibooker.book1D(DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 2.);
0313 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0314 plotName = plotType + "threeProng1Pi0";
0315 tmpME =
0316 ibooker.book1D(DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 2.);
0317 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0318
0319
0320
0321 plotType = "_nTaus_";
0322 xaxisLabel = ";Tau Multiplicity";
0323 yaxislabel = ";Frequency";
0324 plotName = plotType + "allHadronic";
0325 bins = 50;
0326 tmpME = ibooker.book1D(
0327 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0328 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0329 plotName = plotType + "oneProng0Pi0";
0330 tmpME = ibooker.book1D(
0331 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0332 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0333 plotName = plotType + "oneProng1Pi0";
0334 tmpME = ibooker.book1D(
0335 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0336 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0337 plotName = plotType + "oneProng2Pi0";
0338 tmpME = ibooker.book1D(
0339 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0340 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0341 plotName = plotType + "twoProng0Pi0";
0342 tmpME = ibooker.book1D(
0343 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0344 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0345 plotName = plotType + "twoProng1Pi0";
0346 tmpME = ibooker.book1D(
0347 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0348 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0349 plotName = plotType + "twoProng2Pi0";
0350 tmpME = ibooker.book1D(
0351 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0352 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0353 plotName = plotType + "threeProng0Pi0";
0354 tmpME = ibooker.book1D(
0355 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0356 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0357 plotName = plotType + "threeProng1Pi0";
0358 tmpME = ibooker.book1D(
0359 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0360 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0361
0362
0363
0364 plotType = "_Size_";
0365 xaxisLabel = ";size";
0366 yaxislabel = ";Frequency";
0367 bins = 20;
0368 plotName = plotType + "signalCands";
0369 tmpME = ibooker.book1D(
0370 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, -0.5, bins - 0.5);
0371 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0372 plotName = plotType + "signalChargedHadrCands";
0373 tmpME = ibooker.book1D(
0374 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, -0.5, bins - 0.5);
0375 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0376 plotName = plotType + "signalNeutrHadrCands";
0377 tmpME = ibooker.book1D(
0378 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, -0.5, bins - 0.5);
0379 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0380
0381 plotName = plotType + "isolationCands";
0382 tmpME = ibooker.book1D(
0383 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, -0.5, bins - 0.5);
0384 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0385 plotName = plotType + "isolationChargedHadrCands";
0386 bins = 10;
0387 tmpME = ibooker.book1D(
0388 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, -0.5, bins - 0.5);
0389 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0390 plotName = plotType + "isolationNeutrHadrCands";
0391 tmpME = ibooker.book1D(
0392 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, -0.5, bins - 0.5);
0393 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0394 plotName = plotType + "isolationGammaCands";
0395 tmpME = ibooker.book1D(
0396 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, -0.5, bins - 0.5);
0397 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0398
0399 plotType = "_SumPt_";
0400 xaxisLabel = ";p_{T}^{sum}/ GeV";
0401 yaxislabel = ";Frequency";
0402 bins = 20;
0403 plotName = plotType + "signalCands";
0404 tmpME = ibooker.book1D(
0405 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0406 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0407 plotName = plotType + "signalChargedHadrCands";
0408 tmpME = ibooker.book1D(
0409 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0410 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0411 plotName = plotType + "signalNeutrHadrCands";
0412 tmpME = ibooker.book1D(
0413 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0414 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0415 plotName = plotType + "isolationCands";
0416 tmpME = ibooker.book1D(
0417 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 50.);
0418 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0419 plotName = plotType + "isolationChargedHadrCands";
0420 tmpME = ibooker.book1D(
0421 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 10.);
0422 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0423 plotName = plotType + "isolationNeutrHadrCands";
0424 tmpME = ibooker.book1D(
0425 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 30.);
0426 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0427 plotName = plotType + "isolationGammaCands";
0428 tmpME = ibooker.book1D(
0429 DiscriminatorLabel + plotName, histogramName + plotName + xaxisLabel + yaxislabel, bins, 0., 20.);
0430 plotMap_.insert(std::make_pair(DiscriminatorLabel + plotName, tmpME));
0431
0432
0433
0434 if (DiscriminatorLabel.find("LeadingTrackPtCut") != string::npos) {
0435 if (TauProducer_.find("PFTau") != string::npos) {
0436 nPFJet_LeadingChargedHadron_ChargedHadronsSignal_ = ibooker.book1D(
0437 DiscriminatorLabel + "_ChargedHadronsSignal", DiscriminatorLabel + "_ChargedHadronsSignal", 21, -0.5, 20.5);
0438 nPFJet_LeadingChargedHadron_ChargedHadronsIsolAnnulus_ =
0439 ibooker.book1D(DiscriminatorLabel + "_ChargedHadronsIsolAnnulus",
0440 DiscriminatorLabel + "_ChargedHadronsIsolAnnulus",
0441 21,
0442 -0.5,
0443 20.5);
0444 nPFJet_LeadingChargedHadron_GammasSignal_ =
0445 ibooker.book1D(DiscriminatorLabel + "_GammasSignal", DiscriminatorLabel + "_GammasSignal", 21, -0.5, 20.5);
0446 nPFJet_LeadingChargedHadron_GammasIsolAnnulus_ = ibooker.book1D(
0447 DiscriminatorLabel + "_GammasIsolAnnulus", DiscriminatorLabel + "_GammasIsolAnnulus", 21, -0.5, 20.5);
0448 nPFJet_LeadingChargedHadron_NeutralHadronsSignal_ = ibooker.book1D(
0449 DiscriminatorLabel + "_NeutralHadronsSignal", DiscriminatorLabel + "_NeutralHadronsSignal", 21, -0.5, 20.5);
0450 nPFJet_LeadingChargedHadron_NeutralHadronsIsolAnnulus_ =
0451 ibooker.book1D(DiscriminatorLabel + "_NeutralHadronsIsolAnnulus",
0452 DiscriminatorLabel + "_NeutralHadronsIsolAnnulus",
0453 21,
0454 -0.5,
0455 20.5);
0456 }
0457 }
0458
0459 if (DiscriminatorLabel.find("ByIsolationLater") != string::npos) {
0460 if (TauProducer_.find("PFTau") != string::npos) {
0461 nIsolated_NoChargedHadrons_ChargedHadronsSignal_ = ibooker.book1D(
0462 DiscriminatorLabel + "_ChargedHadronsSignal", DiscriminatorLabel + "_ChargedHadronsSignal", 21, -0.5, 20.5);
0463 nIsolated_NoChargedHadrons_GammasSignal_ =
0464 ibooker.book1D(DiscriminatorLabel + "_GammasSignal", DiscriminatorLabel + "_GammasSignal", 21, -0.5, 20.5);
0465 nIsolated_NoChargedHadrons_GammasIsolAnnulus_ = ibooker.book1D(
0466 DiscriminatorLabel + "_GammasIsolAnnulus", DiscriminatorLabel + "_GammasIsolAnnulus", 21, -0.5, 20.5);
0467 nIsolated_NoChargedHadrons_NeutralHadronsSignal_ = ibooker.book1D(
0468 DiscriminatorLabel + "_NeutralHadronsSignal", DiscriminatorLabel + "_NeutralHadronsSignal", 21, -0.5, 20.5);
0469 nIsolated_NoChargedHadrons_NeutralHadronsIsolAnnulus_ =
0470 ibooker.book1D(DiscriminatorLabel + "_NeutralHadronsIsolAnnulus",
0471 DiscriminatorLabel + "_NeutralHadronsIsolAnnulus",
0472 21,
0473 -0.5,
0474 20.5);
0475 }
0476 }
0477
0478 if (DiscriminatorLabel.find("ByIsolation") != string::npos) {
0479 if (TauProducer_.find("PFTau") != string::npos) {
0480 nIsolated_NoChargedNoGammas_ChargedHadronsSignal_ = ibooker.book1D(
0481 DiscriminatorLabel + "_ChargedHadronsSignal", DiscriminatorLabel + "_ChargedHadronsSignal", 21, -0.5, 20.5);
0482 nIsolated_NoChargedNoGammas_GammasSignal_ =
0483 ibooker.book1D(DiscriminatorLabel + "_GammasSignal", DiscriminatorLabel + "_GammasSignal", 21, -0.5, 20.5);
0484 nIsolated_NoChargedNoGammas_NeutralHadronsSignal_ = ibooker.book1D(
0485 DiscriminatorLabel + "_NeutralHadronsSignal", DiscriminatorLabel + "_NeutralHadronsSignal", 21, -0.5, 20.5);
0486 nIsolated_NoChargedNoGammas_NeutralHadronsIsolAnnulus_ =
0487 ibooker.book1D(DiscriminatorLabel + "_NeutralHadronsIsolAnnulus",
0488 DiscriminatorLabel + "_NeutralHadronsIsolAnnulus",
0489 21,
0490 -0.5,
0491 20.5);
0492 }
0493 }
0494 j++;
0495 }
0496 }
0497
0498 void TauTagValidation::dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
0499 if (genericTriggerEventFlag_) {
0500 if (genericTriggerEventFlag_->on()) {
0501 genericTriggerEventFlag_->initRun(iRun, iSetup);
0502 }
0503 }
0504 }
0505
0506 void TauTagValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0507 if (genericTriggerEventFlag_) {
0508 if (!genericTriggerEventFlag_->on())
0509 std::cout << "TauTagValidation::analyze: No working genericTriggerEventFlag. Did you specify a valid globaltag?"
0510 << std::endl;
0511 }
0512
0513 numEvents_++;
0514 double matching_criteria = -1.0;
0515
0516
0517 for (const auto& it : discriminators_) {
0518 string DiscriminatorLabel = it.getParameter<string>("discriminator");
0519 tauDecayCountMap_["allHadronic" + DiscriminatorLabel] = 0;
0520 tauDecayCountMap_["oneProng0Pi0" + DiscriminatorLabel] = 0;
0521 tauDecayCountMap_["oneProng1Pi0" + DiscriminatorLabel] = 0;
0522 tauDecayCountMap_["oneProng2Pi0" + DiscriminatorLabel] = 0;
0523 tauDecayCountMap_["twoProng0Pi0" + DiscriminatorLabel] = 0;
0524 tauDecayCountMap_["twoProng1Pi0" + DiscriminatorLabel] = 0;
0525 tauDecayCountMap_["twoProng2Pi0" + DiscriminatorLabel] = 0;
0526 tauDecayCountMap_["threeProng0Pi0" + DiscriminatorLabel] = 0;
0527 tauDecayCountMap_["threeProng1Pi0" + DiscriminatorLabel] = 0;
0528 }
0529
0530 typedef edm::View<reco::Candidate> genCandidateCollection;
0531
0532
0533
0534 Handle<genCandidateCollection> ReferenceCollection;
0535 bool isGen = iEvent.getByToken(refCollectionInputTagToken_, ReferenceCollection);
0536
0537 Handle<VertexCollection> pvHandle;
0538 iEvent.getByToken(primaryVertexCollectionToken_, pvHandle);
0539
0540 if (!isGen) {
0541 std::cerr << " Reference collection: " << refCollection_ << " not found while running TauTagValidation.cc "
0542 << std::endl;
0543 return;
0544 }
0545
0546 if (dataType_ == "Leptons") {
0547 matching_criteria = matchDeltaR_Leptons_;
0548 } else {
0549 matching_criteria = matchDeltaR_Jets_;
0550 }
0551
0552
0553
0554 if (TauProducer_.find("PFTau") != string::npos || TauProducer_.find("hpsTancTaus") != string::npos) {
0555
0556 if (phID_ != iEvent.processHistoryID()) {
0557 phID_ = iEvent.processHistoryID();
0558 for (size_t idx = 0; idx < currentDiscriminatorContainerToken_.size(); ++idx) {
0559 const edm::Provenance* prov = iEvent.getHandle(currentDiscriminatorContainerToken_[idx].first).provenance();
0560 string prov_cfg_label = currentDiscriminatorContainerIdName_[idx].first;
0561 string prov_ID_label = currentDiscriminatorContainerIdName_[idx].second;
0562 bool found = false;
0563 if (prov_cfg_label == "rawValues" || prov_cfg_label == "workingPoints") {
0564 const std::vector<string> psetsFromProvenance = edm::parameterSet(prov->stable(), iEvent.processHistory())
0565 .getParameter<std::vector<string>>(prov_cfg_label);
0566 for (size_t i = 0; i < psetsFromProvenance.size(); ++i) {
0567 if (psetsFromProvenance[i] == prov_ID_label) {
0568
0569 if (prov_cfg_label == "rawValues")
0570 currentDiscriminatorContainerToken_[idx].second = -1 - i;
0571 else
0572 currentDiscriminatorContainerToken_[idx].second = i;
0573 found = true;
0574 }
0575 }
0576 } else if (prov_cfg_label == "IDdefinitions" || prov_cfg_label == "IDWPdefinitions") {
0577 const std::vector<edm::ParameterSet> psetsFromProvenance =
0578 edm::parameterSet(prov->stable(), iEvent.processHistory())
0579 .getParameter<std::vector<edm::ParameterSet>>(prov_cfg_label);
0580 for (size_t i = 0; i < psetsFromProvenance.size(); ++i) {
0581 if (psetsFromProvenance[i].getParameter<string>("IDname") == prov_ID_label) {
0582
0583 if (prov_cfg_label == "IDdefinitions")
0584 currentDiscriminatorContainerToken_[idx].second = -1 - i;
0585 else
0586 currentDiscriminatorContainerToken_[idx].second = i;
0587 found = true;
0588 }
0589 }
0590 } else {
0591
0592 try {
0593 int i = std::stoi(prov_ID_label);
0594 if (prov_cfg_label == "direct_rawValues")
0595 currentDiscriminatorContainerToken_[idx].second = -1 - i;
0596 else
0597 currentDiscriminatorContainerToken_[idx].second = i;
0598 found = true;
0599 } catch (std::invalid_argument const& e) {
0600 throw cms::Exception("Configuration") << "TauTagValidation: Direct access to ID container requested, so "
0601 "argument of 'idLabel' must be convertable to int!\n";
0602 }
0603 }
0604 if (!found) {
0605 throw cms::Exception("Configuration")
0606 << "TauTagValidation: Requested working point '" << prov_ID_label << "' for ID '"
0607 << discriminators_.at(idx - currentDiscriminatorToken_.size()).getParameter<string>("discriminator")
0608 << "' not found!\n";
0609 }
0610 }
0611 }
0612
0613 Handle<PFTauCollection> thePFTauHandle;
0614 iEvent.getByToken(tauProducerInputTagToken_, thePFTauHandle);
0615
0616 const PFTauCollection* pfTauProduct;
0617 pfTauProduct = thePFTauHandle.product();
0618
0619 PFTauCollection::size_type thePFTauClosest;
0620
0621 std::map<std::string, MonitorElement*>::const_iterator element = plotMap_.end();
0622
0623
0624 for (genCandidateCollection::const_iterator RefJet = ReferenceCollection->begin();
0625 RefJet != ReferenceCollection->end();
0626 RefJet++) {
0627 ptTauVisibleMap.find(refCollection_)->second->Fill(RefJet->pt());
0628 etaTauVisibleMap.find(refCollection_)->second->Fill(RefJet->eta());
0629 phiTauVisibleMap.find(refCollection_)->second->Fill(RefJet->phi() * 180.0 / TMath::Pi());
0630 pileupTauVisibleMap.find(refCollection_)->second->Fill(pvHandle->size());
0631
0632 const reco::Candidate* gen_particle = &(*RefJet);
0633
0634 double delta = TMath::Pi();
0635
0636 thePFTauClosest = pfTauProduct->size();
0637
0638 for (PFTauCollection::size_type iPFTau = 0; iPFTau < pfTauProduct->size(); iPFTau++) {
0639 if (algo_->deltaR(gen_particle, &pfTauProduct->at(iPFTau)) < delta) {
0640 delta = algo_->deltaR(gen_particle, &pfTauProduct->at(iPFTau));
0641 thePFTauClosest = iPFTau;
0642 }
0643 }
0644
0645
0646 if (thePFTauClosest == pfTauProduct->size())
0647 continue;
0648
0649 double deltaR = algo_->deltaR(gen_particle, &pfTauProduct->at(thePFTauClosest));
0650
0651
0652 if (deltaR > matching_criteria && matching_criteria != -1.0)
0653 continue;
0654
0655 ptTauVisibleMap.find(TauProducer_ + "Matched")->second->Fill(RefJet->pt());
0656 etaTauVisibleMap.find(TauProducer_ + "Matched")->second->Fill(RefJet->eta());
0657 phiTauVisibleMap.find(TauProducer_ + "Matched")->second->Fill(RefJet->phi() * 180.0 / TMath::Pi());
0658 pileupTauVisibleMap.find(TauProducer_ + "Matched")->second->Fill(pvHandle->size());
0659
0660 PFTauRef thePFTau(thePFTauHandle, thePFTauClosest);
0661
0662 Handle<PFTauDiscriminator> currentDiscriminator;
0663 Handle<TauDiscriminatorContainer> currentDiscriminatorContainer;
0664
0665
0666 if (thePFTau->pt() < TauPtCut_)
0667 continue;
0668
0669 StringCutObjectSelector<PFTauRef> selectReco(recoCuts_);
0670 bool pass = selectReco(thePFTau);
0671 if (!pass)
0672 continue;
0673
0674 StringCutObjectSelector<reco::Candidate> selectGen(genCuts_);
0675 pass = selectGen(*gen_particle);
0676 if (!pass)
0677 continue;
0678
0679 for (unsigned j = 0; j < discriminators_.size(); j++) {
0680 string currentDiscriminatorLabel = discriminators_.at(j).getParameter<string>("discriminator");
0681 summaryMap.find(refCollection_ + "Den")->second->Fill(j);
0682
0683 bool passesID;
0684 if (j < currentDiscriminatorToken_.size()) {
0685 iEvent.getByToken(currentDiscriminatorToken_[j], currentDiscriminator);
0686 passesID = ((*currentDiscriminator)[thePFTau] >= discriminators_.at(j).getParameter<double>("selectionCut"));
0687 } else {
0688 iEvent.getByToken(currentDiscriminatorContainerToken_[j - currentDiscriminatorToken_.size()].first,
0689 currentDiscriminatorContainer);
0690 if (currentDiscriminatorContainerToken_[j - currentDiscriminatorToken_.size()].second < 0) {
0691 if ((*currentDiscriminatorContainer)[thePFTau].rawValues.size() == 1)
0692 passesID = false;
0693 else
0694 passesID = ((*currentDiscriminatorContainer)[thePFTau].rawValues.at(
0695 -1 - currentDiscriminatorContainerToken_[j - currentDiscriminatorToken_.size()].second) >=
0696 discriminators_.at(j).getParameter<double>("selectionCut"));
0697 } else {
0698 if ((*currentDiscriminatorContainer)[thePFTau].workingPoints.empty())
0699 passesID = false;
0700 else
0701 passesID = (*currentDiscriminatorContainer)[thePFTau].workingPoints.at(
0702 currentDiscriminatorContainerToken_[j - currentDiscriminatorToken_.size()].second);
0703 }
0704 }
0705 if (passesID) {
0706 ptTauVisibleMap.find(currentDiscriminatorLabel)->second->Fill(RefJet->pt());
0707 etaTauVisibleMap.find(currentDiscriminatorLabel)->second->Fill(RefJet->eta());
0708 phiTauVisibleMap.find(currentDiscriminatorLabel)->second->Fill(RefJet->phi() * 180.0 / TMath::Pi());
0709 pileupTauVisibleMap.find(currentDiscriminatorLabel)->second->Fill(pvHandle->size());
0710 summaryMap.find(refCollection_ + "Num")->second->Fill(j);
0711
0712
0713 double tauPtRes = thePFTau->pt() / gen_particle->pt();
0714 plotMap_.find(currentDiscriminatorLabel + "_pTRatio_allHadronic")->second->Fill(tauPtRes);
0715
0716
0717 TLorentzVector TAU;
0718 TAU.SetPtEtaPhiE(thePFTau->pt(), thePFTau->eta(), thePFTau->phi(), thePFTau->energy());
0719 plotMap_.find(currentDiscriminatorLabel + "_TauCandMass")->second->Fill(TAU.M());
0720
0721
0722 tauDecayCountMap_.find("allHadronic" + currentDiscriminatorLabel)->second++;
0723
0724
0725
0726
0727
0728
0729
0730
0731
0732
0733
0734
0735
0736 if (thePFTau->decayMode() == reco::PFTau::kOneProng0PiZero) {
0737 tauDecayCountMap_.find("oneProng0Pi0" + currentDiscriminatorLabel)->second++;
0738 plotMap_.find(currentDiscriminatorLabel + "_pTRatio_" + "oneProng0Pi0")->second->Fill(tauPtRes);
0739 } else if (thePFTau->decayMode() == reco::PFTau::kOneProng1PiZero) {
0740 tauDecayCountMap_.find("oneProng1Pi0" + currentDiscriminatorLabel)->second++;
0741 plotMap_.find(currentDiscriminatorLabel + "_pTRatio_" + "oneProng1Pi0")->second->Fill(tauPtRes);
0742 } else if (thePFTau->decayMode() == reco::PFTau::kOneProng2PiZero) {
0743 tauDecayCountMap_.find("oneProng2Pi0" + currentDiscriminatorLabel)->second++;
0744 plotMap_.find(currentDiscriminatorLabel + "_pTRatio_" + "oneProng2Pi0")->second->Fill(tauPtRes);
0745 } else if (thePFTau->decayMode() == reco::PFTau::kTwoProng0PiZero) {
0746 tauDecayCountMap_.find("twoProng0Pi0" + currentDiscriminatorLabel)->second++;
0747 plotMap_.find(currentDiscriminatorLabel + "_pTRatio_" + "twoProng0Pi0")->second->Fill(tauPtRes);
0748 } else if (thePFTau->decayMode() == reco::PFTau::kTwoProng1PiZero) {
0749 tauDecayCountMap_.find("twoProng1Pi0" + currentDiscriminatorLabel)->second++;
0750 plotMap_.find(currentDiscriminatorLabel + "_pTRatio_" + "twoProng1Pi0")->second->Fill(tauPtRes);
0751 } else if (thePFTau->decayMode() == reco::PFTau::kTwoProng2PiZero) {
0752 tauDecayCountMap_.find("twoProng2Pi0" + currentDiscriminatorLabel)->second++;
0753 plotMap_.find(currentDiscriminatorLabel + "_pTRatio_" + "twoProng2Pi0")->second->Fill(tauPtRes);
0754 } else if (thePFTau->decayMode() == reco::PFTau::kThreeProng0PiZero) {
0755 tauDecayCountMap_.find("threeProng0Pi0" + currentDiscriminatorLabel)->second++;
0756 plotMap_.find(currentDiscriminatorLabel + "_pTRatio_" + "threeProng0Pi0")->second->Fill(tauPtRes);
0757 } else if (thePFTau->decayMode() == reco::PFTau::kThreeProng1PiZero) {
0758 tauDecayCountMap_.find("threeProng1Pi0" + currentDiscriminatorLabel)->second++;
0759 plotMap_.find(currentDiscriminatorLabel + "_pTRatio_" + "threeProng1Pi0")->second->Fill(tauPtRes);
0760 }
0761
0762 std::string plotType = "_Size_";
0763 element = plotMap_.find(currentDiscriminatorLabel + plotType + "signalCands");
0764 if (element != plotMap_.end())
0765 element->second->Fill(thePFTau->signalCands().size());
0766 element = plotMap_.find(currentDiscriminatorLabel + plotType + "signalChargedHadrCands");
0767 if (element != plotMap_.end())
0768 element->second->Fill(thePFTau->signalChargedHadrCands().size());
0769 element = plotMap_.find(currentDiscriminatorLabel + plotType + "signalNeutrHadrCands");
0770 if (element != plotMap_.end())
0771 element->second->Fill(thePFTau->signalNeutrHadrCands().size());
0772 element = plotMap_.find(currentDiscriminatorLabel + plotType + "isolationCands");
0773 if (element != plotMap_.end())
0774 element->second->Fill(thePFTau->isolationCands().size());
0775 element = plotMap_.find(currentDiscriminatorLabel + plotType + "isolationChargedHadrCands");
0776 if (element != plotMap_.end())
0777 element->second->Fill(thePFTau->isolationChargedHadrCands().size());
0778 element = plotMap_.find(currentDiscriminatorLabel + plotType + "isolationNeutrHadrCands");
0779 if (element != plotMap_.end())
0780 element->second->Fill(thePFTau->isolationNeutrHadrCands().size());
0781 element = plotMap_.find(currentDiscriminatorLabel + plotType + "isolationGammaCands");
0782 if (element != plotMap_.end())
0783 element->second->Fill(thePFTau->isolationGammaCands().size());
0784
0785 plotType = "_SumPt_";
0786 element = plotMap_.find(currentDiscriminatorLabel + plotType + "signalCands");
0787 if (element != plotMap_.end())
0788 element->second->Fill(getSumPt(thePFTau->signalCands()));
0789 element = plotMap_.find(currentDiscriminatorLabel + plotType + "signalChargedHadrCands");
0790 if (element != plotMap_.end())
0791 element->second->Fill(getSumPt(thePFTau->signalChargedHadrCands()));
0792 element = plotMap_.find(currentDiscriminatorLabel + plotType + "signalNeutrHadrCands");
0793 if (element != plotMap_.end())
0794 element->second->Fill(getSumPt(thePFTau->signalNeutrHadrCands()));
0795 element = plotMap_.find(currentDiscriminatorLabel + plotType + "isolationCands");
0796 if (element != plotMap_.end())
0797 element->second->Fill(getSumPt(thePFTau->isolationCands()));
0798 element = plotMap_.find(currentDiscriminatorLabel + plotType + "isolationChargedHadrCands");
0799 if (element != plotMap_.end())
0800 element->second->Fill(getSumPt(thePFTau->isolationChargedHadrCands()));
0801 element = plotMap_.find(currentDiscriminatorLabel + plotType + "isolationNeutrHadrCands");
0802 if (element != plotMap_.end())
0803 element->second->Fill(getSumPt(thePFTau->isolationNeutrHadrCands()));
0804 element = plotMap_.find(currentDiscriminatorLabel + plotType + "isolationGammaCands");
0805 if (element != plotMap_.end())
0806 element->second->Fill(getSumPt(thePFTau->isolationGammaCands()));
0807
0808
0809
0810 if (TauProducer_.find("PFTau") != string::npos) {
0811 if (currentDiscriminatorLabel.find("LeadingTrackPtCut") != string::npos) {
0812 nPFJet_LeadingChargedHadron_ChargedHadronsSignal_->Fill((*thePFTau).signalChargedHadrCands().size());
0813 nPFJet_LeadingChargedHadron_ChargedHadronsIsolAnnulus_->Fill(
0814 (*thePFTau).isolationChargedHadrCands().size());
0815 nPFJet_LeadingChargedHadron_GammasSignal_->Fill((*thePFTau).signalGammaCands().size());
0816 nPFJet_LeadingChargedHadron_GammasIsolAnnulus_->Fill((*thePFTau).isolationGammaCands().size());
0817 nPFJet_LeadingChargedHadron_NeutralHadronsSignal_->Fill((*thePFTau).signalNeutrHadrCands().size());
0818 nPFJet_LeadingChargedHadron_NeutralHadronsIsolAnnulus_->Fill(
0819 (*thePFTau).isolationNeutrHadrCands().size());
0820 } else if (currentDiscriminatorLabel.find("ByIsolation") != string::npos) {
0821 nIsolated_NoChargedNoGammas_ChargedHadronsSignal_->Fill((*thePFTau).signalChargedHadrCands().size());
0822 nIsolated_NoChargedNoGammas_GammasSignal_->Fill((*thePFTau).signalGammaCands().size());
0823 nIsolated_NoChargedNoGammas_NeutralHadronsSignal_->Fill((*thePFTau).signalNeutrHadrCands().size());
0824 nIsolated_NoChargedNoGammas_NeutralHadronsIsolAnnulus_->Fill(
0825 (*thePFTau).isolationNeutrHadrCands().size());
0826 }
0827 }
0828 } else {
0829 if (chainCuts_)
0830 break;
0831 }
0832 }
0833 }
0834
0835
0836 for (const auto& it : discriminators_) {
0837 string currentDiscriminatorLabel = it.getParameter<string>("discriminator");
0838 plotMap_.find(currentDiscriminatorLabel + "_nTaus_allHadronic")
0839 ->second->Fill(tauDecayCountMap_.find("allHadronic" + currentDiscriminatorLabel)->second);
0840 plotMap_.find(currentDiscriminatorLabel + "_nTaus_oneProng0Pi0")
0841 ->second->Fill(tauDecayCountMap_.find("oneProng0Pi0" + currentDiscriminatorLabel)->second);
0842 plotMap_.find(currentDiscriminatorLabel + "_nTaus_oneProng1Pi0")
0843 ->second->Fill(tauDecayCountMap_.find("oneProng1Pi0" + currentDiscriminatorLabel)->second);
0844 plotMap_.find(currentDiscriminatorLabel + "_nTaus_oneProng2Pi0")
0845 ->second->Fill(tauDecayCountMap_.find("oneProng2Pi0" + currentDiscriminatorLabel)->second);
0846 plotMap_.find(currentDiscriminatorLabel + "_nTaus_twoProng0Pi0")
0847 ->second->Fill(tauDecayCountMap_.find("twoProng0Pi0" + currentDiscriminatorLabel)->second);
0848 plotMap_.find(currentDiscriminatorLabel + "_nTaus_twoProng1Pi0")
0849 ->second->Fill(tauDecayCountMap_.find("twoProng1Pi0" + currentDiscriminatorLabel)->second);
0850 plotMap_.find(currentDiscriminatorLabel + "_nTaus_twoProng2Pi0")
0851 ->second->Fill(tauDecayCountMap_.find("twoProng2Pi0" + currentDiscriminatorLabel)->second);
0852 plotMap_.find(currentDiscriminatorLabel + "_nTaus_threeProng0Pi0")
0853 ->second->Fill(tauDecayCountMap_.find("threeProng0Pi0" + currentDiscriminatorLabel)->second);
0854 plotMap_.find(currentDiscriminatorLabel + "_nTaus_threeProng1Pi0")
0855 ->second->Fill(tauDecayCountMap_.find("threeProng1Pi0" + currentDiscriminatorLabel)->second);
0856 }
0857
0858 }
0859 }
0860
0861 double TauTagValidation::getSumPt(const std::vector<edm::Ptr<reco::Candidate>>& candidates) {
0862 double sumPt = 0.;
0863 for (std::vector<edm::Ptr<reco::Candidate>>::const_iterator candidate = candidates.begin();
0864 candidate != candidates.end();
0865 ++candidate) {
0866 sumPt += (*candidate)->pt();
0867 }
0868 return sumPt;
0869 }
0870
0871 bool TauTagValidation::stripDiscriminatorLabel(const std::string& discriminatorLabel, std::string& newLabel) {
0872 std::string separatorString = "DiscriminationBy";
0873 std::string::size_type separator = discriminatorLabel.find(separatorString);
0874 if (separator == std::string::npos) {
0875 separatorString = "Discrimination";
0876 separator = discriminatorLabel.find(separatorString);
0877 if (separator == std::string::npos) {
0878 return false;
0879 }
0880 }
0881 std::string prefix = discriminatorLabel.substr(0, separator);
0882 std::string postfix = discriminatorLabel.substr(separator + separatorString.size());
0883 newLabel = prefix + postfix;
0884 return true;
0885 }