File indexing completed on 2024-04-06 12:18:40
0001 #include "HLTEcalPixelIsolTrackFilter.h"
0002 #include "DataFormats/Common/interface/Handle.h"
0003 #include "DataFormats/Common/interface/RefToBase.h"
0004 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
0005 #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h"
0006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0007 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0009
0010 HLTEcalPixelIsolTrackFilter::HLTEcalPixelIsolTrackFilter(const edm::ParameterSet& iConfig)
0011 : HLTFilter(iConfig),
0012 candTag_(iConfig.getParameter<edm::InputTag>("candTag")),
0013 maxEnergyInEB_(iConfig.getParameter<double>("MaxEnergyInEB")),
0014 maxEnergyInEE_(iConfig.getParameter<double>("MaxEnergyInEE")),
0015 maxEnergyOutEB_(iConfig.getParameter<double>("MaxEnergyOutEB")),
0016 maxEnergyOutEE_(iConfig.getParameter<double>("MaxEnergyOutEE")),
0017 nMaxTrackCandidates_(iConfig.getParameter<int>("NMaxTrackCandidates")),
0018 dropMultiL2Event_(iConfig.getParameter<bool>("DropMultiL2Event")) {
0019 candTok = consumes<reco::IsolatedPixelTrackCandidateCollection>(candTag_);
0020 }
0021
0022 HLTEcalPixelIsolTrackFilter::~HLTEcalPixelIsolTrackFilter() = default;
0023
0024 void HLTEcalPixelIsolTrackFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0025 edm::ParameterSetDescription desc;
0026 makeHLTFilterDescription(desc);
0027 desc.add<edm::InputTag>("candTag", edm::InputTag("hltIsolEcalPixelTrackProd"));
0028 desc.add<double>("MaxEnergyInEB", 2.0);
0029 desc.add<double>("MaxEnergyInEE", 4.0);
0030 desc.add<double>("MaxEnergyOutEB", 1.2);
0031 desc.add<double>("MaxEnergyOutEE", 2.0);
0032 desc.add<int>("NMaxTrackCandidates", 10);
0033 desc.add<bool>("DropMultiL2Event", false);
0034 descriptions.add("isolEcalPixelTrackFilter", desc);
0035 }
0036
0037 bool HLTEcalPixelIsolTrackFilter::hltFilter(edm::Event& iEvent,
0038 const edm::EventSetup& iSetup,
0039 trigger::TriggerFilterObjectWithRefs& filterproduct) const {
0040 if (saveTags())
0041 filterproduct.addCollectionTag(candTag_);
0042
0043 edm::Handle<reco::IsolatedPixelTrackCandidateCollection> recotrackcands;
0044 iEvent.getByToken(candTok, recotrackcands);
0045 if (!recotrackcands.isValid())
0046 return false;
0047
0048 int n = 0;
0049 for (unsigned int i = 0; i < recotrackcands->size(); i++) {
0050 edm::Ref<reco::IsolatedPixelTrackCandidateCollection> candref =
0051 edm::Ref<reco::IsolatedPixelTrackCandidateCollection>(recotrackcands, i);
0052 LogDebug("IsoTrk") << "candref.isNull() " << candref.isNull() << "\n";
0053 if (candref.isNull())
0054 continue;
0055 LogDebug("IsoTrk") << "candref.track().isNull() " << candref->track().isNull() << "\n";
0056 if (candref->track().isNull())
0057 continue;
0058
0059 double etaAbs = std::abs(candref->track()->eta());
0060 double maxEnergyIn = (etaAbs < 1.479) ? maxEnergyInEB_ : maxEnergyInEE_;
0061 double maxEnergyOut = (etaAbs < 1.479) ? maxEnergyOutEB_ : maxEnergyOutEE_;
0062 LogDebug("IsoTrk") << "energyin/out: " << candref->energyIn() << "/" << candref->energyOut() << "\n";
0063 if (candref->energyIn() < maxEnergyIn && candref->energyOut() < maxEnergyOut) {
0064 filterproduct.addObject(trigger::TriggerTrack, candref);
0065 n++;
0066 LogDebug("IsoTrk") << "EcalIsol:Candidate[" << n << "] pt|eta|phi " << candref->pt() << "|" << candref->eta()
0067 << "|" << candref->phi() << "\n";
0068 }
0069 if (!dropMultiL2Event_ && n >= nMaxTrackCandidates_)
0070 break;
0071 }
0072 bool accept(n > 0);
0073 if (dropMultiL2Event_ && n > nMaxTrackCandidates_)
0074 accept = false;
0075 return accept;
0076 }
0077
0078
0079 #include "FWCore/Framework/interface/MakerMacros.h"
0080 DEFINE_FWK_MODULE(HLTEcalPixelIsolTrackFilter);