/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
CommonTools/UtilAlgos/interface/ObjectSelectorProducer.h
84 строки
3 KB
Marco Musich
add pixel-less and with-pixels track validation monitoring for Phase-2 HLT
28 ноя 2025, 14:17
28 ноя 2025, 14:17
0d798b1
Код
Авторство
О чём код?
#ifndef CommonTools_UtilAlgos_ObjectSelectorProducer_h #define CommonTools_UtilAlgos_ObjectSelectorProducer_h #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/Utilities/interface/InputTag.h" #include "CommonTools/UtilAlgos/interface/StoreManagerTrait.h" #include "CommonTools/UtilAlgos/interface/SelectedOutputCollectionTrait.h" #include "CommonTools/UtilAlgos/interface/NullPostProcessor.h" #include "CommonTools/UtilAlgos/interface/EventSetupInitTrait.h" #include <utility> #include <vector> #include <memory> #include <algorithm> /** * This class template is like ObjectSelector, but it is an EDProducer * instead of EDFilter. Use case is that when the filter decisions are * ignored (cms.ignore in configuration or EDFilter returns always * true), EDProducers are better for the unscheduled mode than * EDFilters. */ template <typename Selector, typename OutputCollection, typename PostProcessor, typename StoreManager, typename Base, typename Init> class ObjectSelectorProducer : public Base { public: /// constructor explicit ObjectSelectorProducer(const edm::ParameterSet& cfg) : Base(cfg), throwOnMissing_(cfg.template getParameter<bool>("throwOnMissing")), srcToken_( this->template consumes<typename Selector::collection>(cfg.template getParameter<edm::InputTag>("src"))), selectorInit_(this->consumesCollector()), selector_(cfg, this->consumesCollector()), postProcessor_(cfg, this->consumesCollector()) { postProcessor_.init(*this); } /// destructor ~ObjectSelectorProducer() override {} static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add<bool>("throwOnMissing", true); desc.add<edm::InputTag>("src", edm::InputTag("")); Selector::fillPSetDescription(desc); descriptions.addWithDefaultLabel(desc); } private: /// process one event void produce(edm::Event& evt, const edm::EventSetup& es) override { selectorInit_.init(selector_, evt, es); edm::Handle<typename Selector::collection> source; evt.getByToken(srcToken_, source); // If the input source is not valid AND throwOnMissing is false skip the event // This is necessary when filtering e.g. HLT collection that are not available for all events if (!source.isValid() && !throwOnMissing_) { return; } StoreManager manager(source); selector_.select(source, evt, es); manager.cloneAndStore(selector_.begin(), selector_.end(), evt); edm::OrphanHandle<OutputCollection> filtered = manager.put(evt); postProcessor_.process(filtered, evt); } /// source collection label const bool throwOnMissing_; edm::EDGetTokenT<typename Selector::collection> srcToken_; /// Object collection selector Init selectorInit_; Selector selector_; /// post processor PostProcessor postProcessor_; }; #endif