File indexing completed on 2024-04-06 11:58:44
0001
0002 #include <atomic>
0003 #include <memory>
0004 #include <cmath>
0005
0006
0007 #include "FWCore/Framework/interface/Frameworkfwd.h"
0008 #include "FWCore/Framework/interface/global/EDFilter.h"
0009 #include "FWCore/Framework/interface/Event.h"
0010 #include "FWCore/Framework/interface/EventSetup.h"
0011 #include "FWCore/Framework/interface/Run.h"
0012 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0015
0016 #include "DataFormats/Common/interface/Handle.h"
0017 #include "DataFormats/Common/interface/Ref.h"
0018 #include "DataFormats/HcalCalibObjects/interface/HcalHBHEMuonVariables.h"
0019
0020
0021
0022
0023
0024
0025 namespace alCaHcalHEMuonFilter {
0026 struct Counters {
0027 Counters() : nAll_(0), nGood_(0), nFinal_(0) {}
0028 mutable std::atomic<unsigned int> nAll_, nGood_, nFinal_;
0029 };
0030 }
0031
0032 class AlCaHcalHEMuonFilter : public edm::global::EDFilter<edm::RunCache<alCaHcalHEMuonFilter::Counters> > {
0033 public:
0034 AlCaHcalHEMuonFilter(edm::ParameterSet const&);
0035 ~AlCaHcalHEMuonFilter() override = default;
0036
0037 std::shared_ptr<alCaHcalHEMuonFilter::Counters> globalBeginRun(edm::Run const&,
0038 edm::EventSetup const&) const override;
0039
0040 bool filter(edm::StreamID, edm::Event&, edm::EventSetup const&) const override;
0041 void globalEndRun(edm::Run const& iRun, edm::EventSetup const&) const override;
0042 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0043
0044 private:
0045
0046 const int prescale_;
0047 const double muonptCut_, muonetaCut_;
0048 const edm::InputTag labelHBHEMuonVar_;
0049 const edm::EDGetTokenT<HcalHBHEMuonVariablesCollection> tokHBHEMuonVar_;
0050 };
0051
0052
0053
0054
0055 AlCaHcalHEMuonFilter::AlCaHcalHEMuonFilter(edm::ParameterSet const& iConfig)
0056 : prescale_(iConfig.getParameter<int>("prescale")),
0057 muonptCut_(iConfig.getParameter<double>("muonPtCut")),
0058 muonetaCut_(iConfig.getParameter<double>("muonEtaCut")),
0059 labelHBHEMuonVar_(iConfig.getParameter<edm::InputTag>("hbheMuonLabel")),
0060 tokHBHEMuonVar_(consumes<HcalHBHEMuonVariablesCollection>(labelHBHEMuonVar_)) {
0061 edm::LogVerbatim("HBHEMuon") << "Parameters read from config file \n\t prescale_ " << prescale_ << "\n\t Labels "
0062 << labelHBHEMuonVar_;
0063 }
0064
0065
0066
0067
0068
0069
0070 bool AlCaHcalHEMuonFilter::filter(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const {
0071 bool accept(false);
0072 ++(runCache(iEvent.getRun().index())->nAll_);
0073 #ifdef EDM_ML_DEBUG
0074 edm::LogVerbatim("HBHEMuon") << "AlCaHcalHEMuonFilter::Run " << iEvent.id().run() << " Event " << iEvent.id().event()
0075 << " Luminosity " << iEvent.luminosityBlock() << " Bunch " << iEvent.bunchCrossing();
0076 #endif
0077
0078 auto const& hbheMuonColl = iEvent.getHandle(tokHBHEMuonVar_);
0079 if (hbheMuonColl.isValid()) {
0080 auto hbheMuon = hbheMuonColl.product();
0081 if (!hbheMuon->empty()) {
0082 bool ok(false);
0083 for (auto const& muon : *hbheMuon)
0084 if ((muon.ptGlob_ >= muonptCut_) && (std::abs(muon.etaGlob_) > muonetaCut_))
0085 ok = true;
0086 #ifdef EDM_ML_DEBUG
0087 edm::LogVerbatim("HBHEMuon") << "AlCaHcalHEMuonFilter::Flag for finding a muon with pt > " << muonptCut_
0088 << " and |eta| > " << muonetaCut_ << " is " << ok;
0089 #endif
0090 if (ok) {
0091 ++(runCache(iEvent.getRun().index())->nGood_);
0092 if (prescale_ <= 1)
0093 accept = true;
0094 else if (runCache(iEvent.getRun().index())->nGood_ % prescale_ == 1)
0095 accept = true;
0096 }
0097 }
0098 } else {
0099 edm::LogVerbatim("HBHEMuon") << "AlCaHcalHEMuonFilter::Cannot find the collection for HcalHBHEMuonVariables";
0100 }
0101
0102
0103 if (accept)
0104 ++(runCache(iEvent.getRun().index())->nFinal_);
0105 #ifdef EDM_ML_DEBUG
0106 edm::LogVerbatim("HBHEMuon") << "AlCaHcalHEMuonFilter::Accept flag " << accept << " All "
0107 << runCache(iEvent.getRun().index())->nAll_ << " Good "
0108 << runCache(iEvent.getRun().index())->nGood_ << " Final "
0109 << runCache(iEvent.getRun().index())->nFinal_;
0110 #endif
0111 return accept;
0112
0113 }
0114
0115
0116 std::shared_ptr<alCaHcalHEMuonFilter::Counters> AlCaHcalHEMuonFilter::globalBeginRun(edm::Run const& iRun,
0117 edm::EventSetup const&) const {
0118 edm::LogVerbatim("HBHEMuon") << "Start the Run " << iRun.run();
0119 return std::make_shared<alCaHcalHEMuonFilter::Counters>();
0120 }
0121
0122
0123 void AlCaHcalHEMuonFilter::globalEndRun(edm::Run const& iRun, edm::EventSetup const&) const {
0124 edm::LogVerbatim("HBHEMuon") << "Select " << runCache(iRun.index())->nFinal_ << " out of "
0125 << runCache(iRun.index())->nGood_ << " good and " << runCache(iRun.index())->nAll_
0126 << " total events";
0127 }
0128
0129
0130 void AlCaHcalHEMuonFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0131 edm::ParameterSetDescription desc;
0132 desc.add<int>("prescale", 1);
0133 desc.add<double>("muonPtCut", 20.0);
0134 desc.add<double>("muonEtaCut", 1.305);
0135 desc.add<edm::InputTag>("hbheMuonLabel", edm::InputTag("alcaHcalHBHEMuonProducer", "hbheMuon"));
0136 descriptions.add("alcaHcalHEMuonFilter", desc);
0137 }
0138
0139
0140 #include "FWCore/Framework/interface/MakerMacros.h"
0141
0142 DEFINE_FWK_MODULE(AlCaHcalHEMuonFilter);