File indexing completed on 2024-04-06 12:18:33
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #include "HLTrigger/JetMET/interface/HLTHcalMETNoiseFilter.h"
0019
0020 #include "DataFormats/Common/interface/Handle.h"
0021 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0022 #include "FWCore/Framework/interface/ESHandle.h"
0023 #include "FWCore/Framework/interface/Event.h"
0024 #include "FWCore/Framework/interface/EventSetup.h"
0025
0026 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0027
0028 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0029 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0030 #include "FWCore/Utilities/interface/InputTag.h"
0031
0032 #include <iostream>
0033
0034 HLTHcalMETNoiseFilter::HLTHcalMETNoiseFilter(const edm::ParameterSet& iConfig)
0035 : HcalNoiseRBXCollectionTag_(iConfig.getParameter<edm::InputTag>("HcalNoiseRBXCollection")),
0036 m_theHcalNoiseToken(consumes<reco::HcalNoiseRBXCollection>(HcalNoiseRBXCollectionTag_)),
0037 severity_(iConfig.getParameter<int>("severity")),
0038 maxNumRBXs_(iConfig.getParameter<int>("maxNumRBXs")),
0039 numRBXsToConsider_(iConfig.getParameter<int>("numRBXsToConsider")),
0040 needEMFCoincidence_(iConfig.getParameter<bool>("needEMFCoincidence")),
0041 minRBXEnergy_(iConfig.getParameter<double>("minRBXEnergy")),
0042 minRatio_(iConfig.getParameter<double>("minRatio")),
0043 maxRatio_(iConfig.getParameter<double>("maxRatio")),
0044 minHPDHits_(iConfig.getParameter<int>("minHPDHits")),
0045 minRBXHits_(iConfig.getParameter<int>("minRBXHits")),
0046 minHPDNoOtherHits_(iConfig.getParameter<int>("minHPDNoOtherHits")),
0047 minZeros_(iConfig.getParameter<int>("minZeros")),
0048 minHighEHitTime_(iConfig.getParameter<double>("minHighEHitTime")),
0049 maxHighEHitTime_(iConfig.getParameter<double>("maxHighEHitTime")),
0050 maxRBXEMF_(iConfig.getParameter<double>("maxRBXEMF")),
0051 minRecHitE_(iConfig.getParameter<double>("minRecHitE")),
0052 minLowHitE_(iConfig.getParameter<double>("minLowHitE")),
0053 minHighHitE_(iConfig.getParameter<double>("minHighHitE")),
0054 minR45HitE_(iConfig.getParameter<double>("minR45HitE")),
0055 TS4TS5EnergyThreshold_(iConfig.getParameter<double>("TS4TS5EnergyThreshold")) {
0056 std::vector<double> TS4TS5UpperThresholdTemp = iConfig.getParameter<std::vector<double> >("TS4TS5UpperThreshold");
0057 std::vector<double> TS4TS5UpperCutTemp = iConfig.getParameter<std::vector<double> >("TS4TS5UpperCut");
0058 std::vector<double> TS4TS5LowerThresholdTemp = iConfig.getParameter<std::vector<double> >("TS4TS5LowerThreshold");
0059 std::vector<double> TS4TS5LowerCutTemp = iConfig.getParameter<std::vector<double> >("TS4TS5LowerCut");
0060
0061 for (int i = 0; i < (int)TS4TS5UpperThresholdTemp.size() && i < (int)TS4TS5UpperCutTemp.size(); i++)
0062 TS4TS5UpperCut_.push_back(std::pair<double, double>(TS4TS5UpperThresholdTemp[i], TS4TS5UpperCutTemp[i]));
0063 sort(TS4TS5UpperCut_.begin(), TS4TS5UpperCut_.end());
0064
0065 for (int i = 0; i < (int)TS4TS5LowerThresholdTemp.size() && i < (int)TS4TS5LowerCutTemp.size(); i++)
0066 TS4TS5LowerCut_.push_back(std::pair<double, double>(TS4TS5LowerThresholdTemp[i], TS4TS5LowerCutTemp[i]));
0067 sort(TS4TS5LowerCut_.begin(), TS4TS5LowerCut_.end());
0068 }
0069
0070 void HLTHcalMETNoiseFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0071 edm::ParameterSetDescription desc;
0072 desc.add<edm::InputTag>("HcalNoiseRBXCollection", edm::InputTag("hltHcalNoiseInfoProducer"));
0073 desc.add<int>("severity", 1);
0074 desc.add<int>("maxNumRBXs", 2);
0075 desc.add<int>("numRBXsToConsider", 2);
0076 desc.add<bool>("needEMFCoincidence", true);
0077 desc.add<double>("minRBXEnergy", 50.0);
0078 desc.add<double>("minRatio", -999.);
0079 desc.add<double>("maxRatio", 999.);
0080 desc.add<int>("minHPDHits", 17);
0081 desc.add<int>("minRBXHits", 999);
0082 desc.add<int>("minHPDNoOtherHits", 10);
0083 desc.add<int>("minZeros", 10);
0084 desc.add<double>("minHighEHitTime", -9999.0);
0085 desc.add<double>("maxHighEHitTime", 9999.0);
0086 desc.add<double>("maxRBXEMF", 0.02);
0087 desc.add<double>("minRecHitE", 1.5);
0088 desc.add<double>("minLowHitE", 10.0);
0089 desc.add<double>("minHighHitE", 25.0);
0090 desc.add<double>("minR45HitE", 5.0);
0091 desc.add<double>("TS4TS5EnergyThreshold", 50.0);
0092
0093 double TS4TS5UpperThresholdArray[5] = {70, 90, 100, 400, 4000};
0094 double TS4TS5UpperCutArray[5] = {1, 0.8, 0.75, 0.72, 0.72};
0095 double TS4TS5LowerThresholdArray[7] = {100, 120, 150, 200, 300, 400, 500};
0096 double TS4TS5LowerCutArray[7] = {-1, -0.7, -0.4, -0.2, -0.08, 0, 0.1};
0097 std::vector<double> TS4TS5UpperThreshold(TS4TS5UpperThresholdArray, TS4TS5UpperThresholdArray + 5);
0098 std::vector<double> TS4TS5UpperCut(TS4TS5UpperCutArray, TS4TS5UpperCutArray + 5);
0099 std::vector<double> TS4TS5LowerThreshold(TS4TS5LowerThresholdArray, TS4TS5LowerThresholdArray + 7);
0100 std::vector<double> TS4TS5LowerCut(TS4TS5LowerCutArray, TS4TS5LowerCutArray + 7);
0101
0102 desc.add<std::vector<double> >("TS4TS5UpperThreshold", TS4TS5UpperThreshold);
0103 desc.add<std::vector<double> >("TS4TS5UpperCut", TS4TS5UpperCut);
0104 desc.add<std::vector<double> >("TS4TS5LowerThreshold", TS4TS5LowerThreshold);
0105 desc.add<std::vector<double> >("TS4TS5LowerCut", TS4TS5LowerCut);
0106 descriptions.add("hltHcalMETNoiseFilter", desc);
0107 }
0108
0109
0110
0111
0112
0113 bool HLTHcalMETNoiseFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0114 using namespace reco;
0115
0116
0117 if (severity_ == 0)
0118 return true;
0119
0120
0121 edm::Handle<HcalNoiseRBXCollection> rbxs_h;
0122 iEvent.getByToken(m_theHcalNoiseToken, rbxs_h);
0123 if (!rbxs_h.isValid()) {
0124 edm::LogError("DataNotFound") << "HLTHcalMETNoiseFilter: Could not find HcalNoiseRBXCollection product named "
0125 << HcalNoiseRBXCollectionTag_ << "." << std::endl;
0126 return true;
0127 }
0128
0129
0130 if (static_cast<int>(rbxs_h->size()) > maxNumRBXs_)
0131 return true;
0132
0133
0134 noisedataset_t data;
0135 for (auto const& rbx : *rbxs_h) {
0136 CommonHcalNoiseRBXData d(rbx,
0137 minRecHitE_,
0138 minLowHitE_,
0139 minHighHitE_,
0140 TS4TS5EnergyThreshold_,
0141 TS4TS5UpperCut_,
0142 TS4TS5LowerCut_,
0143 minR45HitE_);
0144 data.insert(d);
0145 }
0146
0147
0148
0149 int cntr = 0;
0150 for (auto it = data.begin(); it != data.end() && cntr < numRBXsToConsider_; ++it, ++cntr) {
0151 bool passFilter = true;
0152 bool passEMF = true;
0153 if (it->energy() > minRBXEnergy_) {
0154 if (it->validRatio() && it->ratio() < minRatio_)
0155 passFilter = false;
0156 else if (it->validRatio() && it->ratio() > maxRatio_)
0157 passFilter = false;
0158 else if (it->numHPDHits() >= minHPDHits_)
0159 passFilter = false;
0160 else if (it->numRBXHits() >= minRBXHits_)
0161 passFilter = false;
0162 else if (it->numHPDNoOtherHits() >= minHPDNoOtherHits_)
0163 passFilter = false;
0164 else if (it->numZeros() >= minZeros_)
0165 passFilter = false;
0166 else if (it->minHighEHitTime() < minHighEHitTime_)
0167 passFilter = false;
0168 else if (it->maxHighEHitTime() > maxHighEHitTime_)
0169 passFilter = false;
0170 else if (!it->PassTS4TS5())
0171 passFilter = false;
0172
0173 if (it->RBXEMF() < maxRBXEMF_)
0174 passEMF = false;
0175 }
0176
0177 if ((needEMFCoincidence_ && !passEMF && !passFilter) || (!needEMFCoincidence_ && !passFilter)) {
0178 LogDebug("") << "HLTHcalMETNoiseFilter debug: Found a noisy RBX: "
0179 << "energy=" << it->energy() << "; "
0180 << "ratio=" << it->ratio() << "; "
0181 << "# RBX hits=" << it->numRBXHits() << "; "
0182 << "# HPD hits=" << it->numHPDHits() << "; "
0183 << "# Zeros=" << it->numZeros() << "; "
0184 << "min time=" << it->minHighEHitTime() << "; "
0185 << "max time=" << it->maxHighEHitTime() << "; "
0186 << "passTS4TS5=" << it->PassTS4TS5() << "; "
0187 << "RBX EMF=" << it->RBXEMF() << std::endl;
0188 return false;
0189 }
0190 }
0191
0192
0193 return true;
0194 }