File indexing completed on 2024-04-06 12:23:40
0001 #ifndef PhysicsTools_UtilAlgos_interface_EDFilterValueMapWrapper_h
0002 #define PhysicsTools_UtilAlgos_interface_EDFilterValueMapWrapper_h
0003
0004
0005
0006
0007
0008 #include "DataFormats/Common/interface/ValueMap.h"
0009 #include "FWCore/Framework/interface/stream/EDProducer.h"
0010 #include "FWCore/Common/interface/EventBase.h"
0011 #include "FWCore/Framework/interface/Event.h"
0012 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0013 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0014 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0015
0016 namespace edm {
0017
0018 template <class T, class C>
0019 class FilterValueMapWrapper : public edm::stream::EDProducer<> {
0020 public:
0021
0022 typename C::iterator iterator;
0023 typename C::const_iterator const_iterator;
0024
0025
0026 FilterValueMapWrapper(const edm::ParameterSet& cfg) : src_(consumes<C>(cfg.getParameter<edm::InputTag>("src"))) {
0027 filter_ = std::shared_ptr<T>(new T(cfg.getParameter<edm::ParameterSet>("filterParams")));
0028 produces<edm::ValueMap<int>>();
0029 }
0030
0031 ~FilterValueMapWrapper() override {}
0032
0033 void produce(edm::Event& event, const edm::EventSetup& eventSetup) override {
0034
0035 auto objsToPut = std::make_unique<C>();
0036
0037 edm::Handle<C> h_c;
0038 event.getByToken(src_, h_c);
0039 std::vector<int> bitOut;
0040 bitOut.reserve(h_c->size());
0041
0042 for (typename C::const_iterator ibegin = h_c->begin(), iend = h_c->end(), i = ibegin; i != iend; ++i) {
0043 bitOut.push_back((*filter_)(*i));
0044 }
0045 std::unique_ptr<edm::ValueMap<int>> o(new edm::ValueMap<int>());
0046 edm::ValueMap<int>::Filler filler(*o);
0047 filler.insert(h_c, bitOut.begin(), bitOut.end());
0048 filler.fill();
0049 event.put(std::move(o));
0050 }
0051
0052 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0053 edm::ParameterSetDescription desc;
0054
0055 desc.add<edm::InputTag>("src")->setComment("input collection");
0056 desc.add<edm::ParameterSetDescription>("filterParams", T::getDescription());
0057
0058 descriptions.addWithDefaultLabel(desc);
0059 }
0060
0061 protected:
0062
0063 edm::EDGetTokenT<C> src_;
0064
0065 std::shared_ptr<T> filter_;
0066 };
0067
0068 }
0069
0070 #endif