File indexing completed on 2024-04-06 12:18:41
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021
0022
0023 #include "FWCore/Framework/interface/Frameworkfwd.h"
0024 #include "HLTrigger/HLTcore/interface/HLTFilter.h"
0025
0026 #include "FWCore/Framework/interface/Event.h"
0027 #include "FWCore/Framework/interface/MakerMacros.h"
0028
0029 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0030 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0031 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0032
0033 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
0034 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
0035
0036
0037
0038
0039
0040 class HLTHcalSimpleRecHitFilter : public HLTFilter {
0041 public:
0042 explicit HLTHcalSimpleRecHitFilter(const edm::ParameterSet&);
0043 ~HLTHcalSimpleRecHitFilter() override;
0044 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0045
0046 private:
0047 bool hltFilter(edm::Event&,
0048 const edm::EventSetup&,
0049 trigger::TriggerFilterObjectWithRefs& filterproduct) const override;
0050
0051
0052 edm::EDGetTokenT<HFRecHitCollection> HcalRecHitsToken_;
0053 edm::InputTag HcalRecHitCollection_;
0054 double threshold_;
0055 int minNHitsNeg_;
0056 int minNHitsPos_;
0057 bool doCoincidence_;
0058 std::vector<unsigned int> maskedList_;
0059 };
0060
0061
0062
0063
0064 HLTHcalSimpleRecHitFilter::HLTHcalSimpleRecHitFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig) {
0065
0066 threshold_ = iConfig.getParameter<double>("threshold");
0067 minNHitsNeg_ = iConfig.getParameter<int>("minNHitsNeg");
0068 minNHitsPos_ = iConfig.getParameter<int>("minNHitsPos");
0069 doCoincidence_ = iConfig.getParameter<bool>("doCoincidence");
0070 if (iConfig.existsAs<std::vector<unsigned int> >("maskedChannels"))
0071 maskedList_ =
0072 iConfig.getParameter<std::vector<unsigned int> >("maskedChannels");
0073 else
0074
0075 if (iConfig.existsAs<std::vector<int> >("maskedChannels")) {
0076 std::vector<int> tVec = iConfig.getParameter<std::vector<int> >("maskedChannels");
0077 if (!tVec.empty()) {
0078 edm::LogError("cfg error") << "masked list of channels missing from HLT menu. Migration from vector of ints to "
0079 "vector of uints needed for this release";
0080 cms::Exception("Invalid/obsolete masked list of channels");
0081 }
0082 }
0083 HcalRecHitCollection_ = iConfig.getParameter<edm::InputTag>("HFRecHitCollection");
0084 HcalRecHitsToken_ = consumes<HFRecHitCollection>(HcalRecHitCollection_);
0085 }
0086
0087 HLTHcalSimpleRecHitFilter::~HLTHcalSimpleRecHitFilter() {
0088
0089
0090 }
0091
0092 void HLTHcalSimpleRecHitFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0093 edm::ParameterSetDescription desc;
0094 makeHLTFilterDescription(desc);
0095 desc.add<edm::InputTag>("HFRecHitCollection", edm::InputTag("hltHfreco"));
0096 desc.add<double>("threshold", 3.0);
0097 desc.add<int>("minNHitsNeg", 1);
0098 desc.add<int>("minNHitsPos", 1);
0099 desc.add<bool>("doCoincidence", true);
0100 std::vector<unsigned int> temp;
0101 desc.add<std::vector<unsigned int> >("maskedChannels", temp)->setComment(" # now by raw detid, not hashed id");
0102 descriptions.add("hltHcalSimpleRecHitFilter", desc);
0103 }
0104
0105
0106
0107
0108
0109
0110 bool HLTHcalSimpleRecHitFilter::hltFilter(edm::Event& iEvent,
0111 const edm::EventSetup& iSetup,
0112 trigger::TriggerFilterObjectWithRefs& filterproduct) const {
0113
0114
0115
0116 edm::Handle<HFRecHitCollection> crudeHits;
0117 try {
0118 iEvent.getByToken(HcalRecHitsToken_, crudeHits);
0119 } catch (std::exception& ex) {
0120 edm::LogWarning("HLTHcalSimpleRecHitFilter") << HcalRecHitCollection_ << " not available";
0121 }
0122
0123 bool accept = false;
0124
0125 int nHitsNeg = 0, nHitsPos = 0;
0126 for (auto hit : *crudeHits) {
0127
0128 if (std::find(maskedList_.begin(), maskedList_.end(), hit.id().rawId()) != maskedList_.end())
0129 continue;
0130
0131
0132 if (hit.energy() < threshold_)
0133 continue;
0134
0135
0136 if (hit.id().zside() < 0)
0137 ++nHitsNeg;
0138 else
0139 ++nHitsPos;
0140 }
0141
0142
0143 if (!doCoincidence_)
0144 accept = (nHitsNeg >= minNHitsNeg_) || (nHitsPos >= minNHitsPos_);
0145 else
0146 accept = (nHitsNeg >= minNHitsNeg_) && (nHitsPos >= minNHitsPos_);
0147
0148
0149
0150
0151
0152
0153 return accept;
0154 }
0155
0156
0157 DEFINE_FWK_MODULE(HLTHcalSimpleRecHitFilter);