Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:26:00

0001 /** \class TrackMergeremb
0002  *
0003  * 
0004  * \author Stefan Wayand;
0005  *         Christian Veelken, LLR
0006  *
0007  * 
0008  *
0009  * 
0010  *
0011  */
0012 #ifndef TauAnalysis_MCEmbeddingTools_TrackMergeremb_H
0013 #define TauAnalysis_MCEmbeddingTools_TrackMergeremb_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 "FWCore/Framework/interface/MakerMacros.h"
0020 
0021 #include "DataFormats/MuonReco/interface/MuonQuality.h"
0022 #include "DataFormats/Common/interface/ValueMap.h"
0023 
0024 #include "DataFormats/MuonReco/interface/MuonToMuonMap.h"
0025 #include "DataFormats/TrackReco/interface/Track.h"
0026 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0027 #include "DataFormats/TrackReco/interface/TrackToTrackMap.h"
0028 
0029 #include <string>
0030 #include <iostream>
0031 #include <map>
0032 
0033 template <typename T1>
0034 class TrackMergeremb : public edm::stream::EDProducer<> {
0035 public:
0036   explicit TrackMergeremb(const edm::ParameterSet&);
0037   ~TrackMergeremb() override;
0038 
0039 private:
0040   void produce(edm::Event&, const edm::EventSetup&) override;
0041 
0042   typedef T1 TrackCollectionemb;
0043 
0044   void willproduce(std::string instance, std::string alias);
0045   void willconsume(const edm::ParameterSet& iConfig);
0046   void merg_and_put(edm::Event&, std::string, std::vector<edm::EDGetTokenT<TrackCollectionemb> >&);
0047 
0048   std::map<std::string, std::vector<edm::EDGetTokenT<TrackCollectionemb> > > inputs_;
0049   std::map<std::string, std::vector<edm::EDGetTokenT<edm::ValueMap<reco::MuonQuality> > > > inputs_qual_;
0050 
0051   //typedef edm::ValueMap<reco::TrackRef> TrackToTrackMapnew;
0052   typedef edm::ValueMap<reco::TrackRefVector> TrackToTrackMapnew;
0053 
0054   edm::EDGetTokenT<TrackToTrackMapnew> inputs_fixtrackrefs_;
0055   edm::EDGetTokenT<reco::TrackCollection> inputs_fixtrackcol_;
0056 
0057   edm::EDGetTokenT<reco::MuonToMuonMap> inputs_fixmurefs_;
0058   edm::EDGetTokenT<reco::MuonCollection> inputs_fixmucol_;
0059 };
0060 
0061 template <typename T1>
0062 TrackMergeremb<T1>::TrackMergeremb(const edm::ParameterSet& iConfig) {
0063   std::string alias(iConfig.getParameter<std::string>("@module_label"));
0064   std::vector<edm::InputTag> inCollections = iConfig.getParameter<std::vector<edm::InputTag> >("mergCollections");
0065   for (const auto& inCollection : inCollections) {
0066     inputs_[inCollection.instance()].push_back(consumes<TrackCollectionemb>(inCollection));
0067   }
0068   willconsume(iConfig);
0069   for (const auto& toproduce : inputs_) {
0070     willproduce(toproduce.first, alias);
0071   }
0072 }
0073 
0074 template <typename T1>
0075 TrackMergeremb<T1>::~TrackMergeremb() {
0076   // nothing to be done yet...
0077 }
0078 
0079 template <typename T1>
0080 void TrackMergeremb<T1>::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0081   for (auto input_ : inputs_) {
0082     merg_and_put(iEvent, input_.first, input_.second);
0083 
0084   }  // end instance
0085 }
0086 #endif