00001 #ifndef RecoMuon_MuonIdentification_MuonProducer_H 00002 #define RecoMuon_MuonIdentification_MuonProducer_H 00003 00016 #include "FWCore/Framework/interface/EDProducer.h" 00017 #include "FWCore/Utilities/interface/InputTag.h" 00018 00019 #include "DataFormats/MuonReco/interface/MuonFwd.h" 00020 #include "DataFormats/MuonReco/interface/MuonTimeExtra.h" 00021 00022 namespace reco {class Track;} 00023 #include "FWCore/Framework/interface/ESHandle.h" 00024 #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h" 00025 00026 class MuPFIsoHelper; 00027 00028 00029 class MuonProducer : public edm::EDProducer { 00030 public: 00031 00033 MuonProducer(const edm::ParameterSet&); 00034 00036 virtual ~MuonProducer(); 00037 00039 virtual void produce(edm::Event&, const edm::EventSetup&); 00040 00041 00042 typedef std::vector<edm::InputTag> InputTags; 00043 00044 protected: 00045 00046 private: 00047 template<typename TYPE> 00048 void fillMuonMap(edm::Event& event, 00049 const edm::OrphanHandle<reco::MuonCollection>& muonHandle, 00050 const std::vector<TYPE>& muonExtra, 00051 const std::string& label); 00052 00053 std::string theAlias; 00054 00055 void setAlias( std::string alias ){ 00056 alias.erase( alias.size() - 1, alias.size() ); 00057 theAlias=alias; 00058 } 00059 00060 std::string labelOrInstance(const edm::InputTag &) const; 00061 00062 private: 00063 bool debug_; 00064 bool fastLabelling_; 00065 00066 edm::InputTag theMuonsCollectionLabel; 00067 edm::InputTag thePFCandLabel; 00068 00069 bool fillIsolation_; 00070 bool writeIsoDeposits_; 00071 bool fillSelectors_; 00072 bool fillCosmicsIdMap_; 00073 bool fillPFMomentum_; 00074 bool fillPFIsolation_; 00075 bool fillDetectorBasedIsolation_; 00076 bool fillShoweringInfo_; 00077 bool fillTimingInfo_; 00078 00079 edm::InputTag theTrackDepositName; 00080 edm::InputTag theEcalDepositName; 00081 edm::InputTag theHcalDepositName; 00082 edm::InputTag theHoDepositName; 00083 edm::InputTag theJetDepositName; 00084 00085 InputTags theSelectorMapNames; 00086 00087 edm::InputTag theShowerMapName; 00088 edm::InputTag theCosmicCompMapName; 00089 00090 std::string theMuToMuMapName; 00091 00092 MuPFIsoHelper *thePFIsoHelper; 00093 00094 std::map<std::string,edm::InputTag> theIsoPF03MapNames; 00095 std::map<std::string,edm::InputTag> theIsoPF04MapNames; 00096 00097 }; 00098 #endif 00099 00100 00101