File indexing completed on 2023-10-25 10:05:17
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef TauAnalysis_MCEmbeddingTools_CollectionMerger_H
0013 #define TauAnalysis_MCEmbeddingTools_CollectionMerger_H
0014
0015 #include "FWCore/Framework/interface/stream/EDProducer.h"
0016 #include "FWCore/Framework/interface/Event.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018 #include "DataFormats/Common/interface/Handle.h"
0019 #include "DataFormats/PatCandidates/interface/Muon.h"
0020 #include "DataFormats/MuonReco/interface/MuonEnergy.h"
0021 #include "FWCore/Framework/interface/MakerMacros.h"
0022
0023 #include "TrackingTools/TrackAssociator/interface/TrackAssociatorParameters.h"
0024 #include "TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h"
0025 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
0026
0027 #include "DataFormats/Common/interface/SortedCollection.h"
0028 #include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
0029 #include "DataFormats/Common/interface/DetSetVectorNew.h"
0030 #include "DataFormats/TrackerRecHit2D/interface/BaseTrackerRecHit.h"
0031 #include "DataFormats/TrackerRecHit2D/interface/OmniClusterRef.h"
0032
0033
0034 #include <string>
0035 #include <iostream>
0036 #include <map>
0037
0038 template <typename T1, typename T2>
0039 class CollectionMerger : public edm::stream::EDProducer<> {
0040 public:
0041 explicit CollectionMerger(const edm::ParameterSet &);
0042 ~CollectionMerger() override;
0043
0044 private:
0045 void produce(edm::Event &, const edm::EventSetup &) override;
0046
0047 typedef T1 MergeCollection;
0048 typedef T2 BaseHit;
0049 std::map<std::string, std::vector<edm::EDGetTokenT<MergeCollection> > > inputs_;
0050
0051 void fill_output_obj(std::unique_ptr<MergeCollection> &output,
0052 std::vector<edm::Handle<MergeCollection> > &inputCollections);
0053 void fill_output_obj_tracker(std::unique_ptr<MergeCollection> &output,
0054 std::vector<edm::Handle<MergeCollection> > &inputCollections,
0055 bool print_pixel = false);
0056 void fill_output_obj_calo(std::unique_ptr<MergeCollection> &output,
0057 std::vector<edm::Handle<MergeCollection> > &inputCollections);
0058 void fill_output_obj_muonchamber(std::unique_ptr<MergeCollection> &output,
0059 std::vector<edm::Handle<MergeCollection> > &inputCollections);
0060 };
0061
0062 template <typename T1, typename T2>
0063 CollectionMerger<T1, T2>::CollectionMerger(const edm::ParameterSet &iConfig) {
0064 std::vector<edm::InputTag> inCollections = iConfig.getParameter<std::vector<edm::InputTag> >("mergCollections");
0065 for (auto const &inCollection : inCollections) {
0066 inputs_[inCollection.instance()].push_back(consumes<MergeCollection>(inCollection));
0067 }
0068 for (const auto &toproduce : inputs_) {
0069
0070 produces<MergeCollection>(toproduce.first);
0071 }
0072 }
0073
0074 template <typename T1, typename T2>
0075 CollectionMerger<T1, T2>::~CollectionMerger() {
0076
0077 }
0078
0079 template <typename T1, typename T2>
0080 void CollectionMerger<T1, T2>::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) {
0081 for (auto input_ : inputs_) {
0082 std::unique_ptr<MergeCollection> output(new MergeCollection());
0083 std::vector<edm::Handle<MergeCollection> > inputCollections;
0084 inputCollections.resize(input_.second.size());
0085 for (unsigned id = 0; id < input_.second.size(); id++) {
0086 iEvent.getByToken(input_.second[id], inputCollections[id]);
0087 }
0088 fill_output_obj(output, inputCollections);
0089 iEvent.put(std::move(output), input_.first);
0090 }
0091 }
0092 #endif