File indexing completed on 2024-04-06 12:01:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #include <iostream>
0019
0020
0021 #include <memory>
0022 #include <map>
0023
0024
0025 #include "FWCore/Framework/interface/Frameworkfwd.h"
0026 #include "FWCore/Framework/interface/stream/EDProducer.h"
0027
0028 #include "FWCore/Framework/interface/Event.h"
0029 #include "FWCore/Framework/interface/MakerMacros.h"
0030 #include "FWCore/Utilities/interface/Exception.h"
0031
0032 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0033
0034 #include "DataFormats/METReco/interface/HcalNoiseSummary.h"
0035 #include "DataFormats/JetReco/interface/PFJetCollection.h"
0036
0037
0038
0039
0040
0041 class HBHENoiseFilterResultProducer : public edm::stream::EDProducer<> {
0042 public:
0043 explicit HBHENoiseFilterResultProducer(const edm::ParameterSet&);
0044 ~HBHENoiseFilterResultProducer() override;
0045
0046 private:
0047 void produce(edm::Event&, const edm::EventSetup&) override;
0048
0049
0050
0051
0052 edm::EDGetTokenT<HcalNoiseSummary> noisetoken_;
0053 int minHPDHits_;
0054 int minHPDNoOtherHits_;
0055 int minZeros_;
0056
0057 bool IgnoreTS4TS5ifJetInLowBVRegion_;
0058 std::string defaultDecision_;
0059
0060 int minNumIsolatedNoiseChannels_;
0061 double minIsolatedNoiseSumE_;
0062 double minIsolatedNoiseSumEt_;
0063
0064 edm::EDGetTokenT<unsigned int> bunchSpacing_;
0065 bool useBunchSpacingProducer_;
0066
0067
0068 std::map<std::string, bool> decisionMap_;
0069 };
0070
0071
0072
0073
0074
0075 HBHENoiseFilterResultProducer::HBHENoiseFilterResultProducer(const edm::ParameterSet& iConfig) {
0076
0077 noisetoken_ = consumes<HcalNoiseSummary>(iConfig.getParameter<edm::InputTag>("noiselabel"));
0078 minHPDHits_ = iConfig.getParameter<int>("minHPDHits");
0079 minHPDNoOtherHits_ = iConfig.getParameter<int>("minHPDNoOtherHits");
0080 minZeros_ = iConfig.getParameter<int>("minZeros");
0081 IgnoreTS4TS5ifJetInLowBVRegion_ = iConfig.getParameter<bool>("IgnoreTS4TS5ifJetInLowBVRegion");
0082 defaultDecision_ = iConfig.getParameter<std::string>("defaultDecision");
0083
0084
0085 minNumIsolatedNoiseChannels_ = iConfig.getParameter<int>("minNumIsolatedNoiseChannels");
0086 minIsolatedNoiseSumE_ = iConfig.getParameter<double>("minIsolatedNoiseSumE");
0087 minIsolatedNoiseSumEt_ = iConfig.getParameter<double>("minIsolatedNoiseSumEt");
0088
0089
0090 bunchSpacing_ = consumes<unsigned int>(edm::InputTag("bunchSpacingProducer"));
0091 useBunchSpacingProducer_ = iConfig.getParameter<bool>("useBunchSpacingProducer");
0092
0093 produces<bool>("HBHENoiseFilterResult");
0094 produces<bool>("HBHENoiseFilterResultRun1");
0095 produces<bool>("HBHENoiseFilterResultRun2Loose");
0096 produces<bool>("HBHENoiseFilterResultRun2Tight");
0097 produces<bool>("HBHEIsoNoiseFilterResult");
0098 }
0099
0100 HBHENoiseFilterResultProducer::~HBHENoiseFilterResultProducer() {}
0101
0102
0103
0104
0105
0106
0107 void HBHENoiseFilterResultProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0108 using namespace edm;
0109
0110
0111 edm::Handle<HcalNoiseSummary> summary_h;
0112 iEvent.getByToken(noisetoken_, summary_h);
0113 if (!summary_h.isValid()) {
0114 throw edm::Exception(edm::errors::ProductNotFound) << " could not find HcalNoiseSummary.\n";
0115 return;
0116 }
0117 const HcalNoiseSummary& summary(*summary_h);
0118
0119 bool goodJetFoundInLowBVRegion = false;
0120 if (IgnoreTS4TS5ifJetInLowBVRegion_)
0121 goodJetFoundInLowBVRegion = summary.goodJetFoundInLowBVRegion();
0122
0123 const bool failCommon = summary.maxHPDHits() >= minHPDHits_ || summary.maxHPDNoOtherHits() >= minHPDNoOtherHits_ ||
0124 summary.maxZeros() >= minZeros_;
0125
0126 const bool failRun1 = failCommon || (summary.HasBadRBXTS4TS5() && !goodJetFoundInLowBVRegion);
0127 decisionMap_["HBHENoiseFilterResultRun1"] = failRun1;
0128
0129 const bool failRun2Loose = failCommon || (summary.HasBadRBXRechitR45Loose() && !goodJetFoundInLowBVRegion);
0130 decisionMap_["HBHENoiseFilterResultRun2Loose"] = failRun2Loose;
0131
0132 const bool failRun2Tight = failCommon || (summary.HasBadRBXRechitR45Tight() && !goodJetFoundInLowBVRegion);
0133 decisionMap_["HBHENoiseFilterResultRun2Tight"] = failRun2Tight;
0134
0135
0136 std::unique_ptr<bool> pOut;
0137 for (std::map<std::string, bool>::const_iterator it = decisionMap_.begin(); it != decisionMap_.end(); ++it) {
0138 pOut = std::make_unique<bool>(!it->second);
0139 iEvent.put(std::move(pOut), it->first);
0140 }
0141
0142
0143 if (useBunchSpacingProducer_) {
0144 edm::Handle<unsigned int> bunchSpacingH;
0145 iEvent.getByToken(bunchSpacing_, bunchSpacingH);
0146 unsigned int bunchspacing = 0;
0147 if (bunchSpacingH.isValid()) {
0148 bunchspacing = *bunchSpacingH;
0149 if (bunchspacing == 50) {
0150 defaultDecision_ = "HBHENoiseFilterResultRun1";
0151 } else {
0152 defaultDecision_ = "HBHENoiseFilterResultRun2Loose";
0153 }
0154 }
0155 }
0156
0157
0158 std::map<std::string, bool>::const_iterator it = decisionMap_.find(defaultDecision_);
0159 if (it == decisionMap_.end())
0160 throw cms::Exception("Invalid HBHENoiseFilterResultProducer parameter \"defaultDecision\"");
0161 pOut = std::make_unique<bool>(!it->second);
0162 iEvent.put(std::move(pOut), "HBHENoiseFilterResult");
0163
0164
0165 const bool failIsolation = summary.numIsolatedNoiseChannels() >= minNumIsolatedNoiseChannels_ ||
0166 summary.isolatedNoiseSumE() >= minIsolatedNoiseSumE_ ||
0167 summary.isolatedNoiseSumEt() >= minIsolatedNoiseSumEt_;
0168 pOut = std::make_unique<bool>(!failIsolation);
0169 iEvent.put(std::move(pOut), "HBHEIsoNoiseFilterResult");
0170
0171 return;
0172 }
0173
0174
0175 DEFINE_FWK_MODULE(HBHENoiseFilterResultProducer);