00001 #ifndef TAU3MURECO_H 00002 #define TAU3MURECO_H 00003 00004 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00005 #include "FWCore/Framework/interface/Event.h" 00006 #include "FWCore/ParameterSet/interface/InputTag.h" 00007 00008 #include <DataFormats/TrackReco/interface/Track.h> 00009 #include <DataFormats/MuonReco/interface/Muon.h> 00010 #include <DataFormats/MuonReco/interface/MuonFwd.h> 00011 00012 class Tau3MuReco 00013 { 00014 public: 00015 Tau3MuReco(const edm::ParameterSet& iConfig); 00016 ~Tau3MuReco(); 00017 00018 bool doTau3MuReco(const edm::Event& iEvent, const edm::EventSetup& iSetup, reco::MuonCollection* muonCollection, reco::TrackCollection* trackCollection); 00019 00020 private: 00021 00022 bool check4MuonTrack(const reco::Track& track); //compares track with reconstructed muons and return true if they are equal 00023 bool find3rdTrack(const edm::Event& iEvent, const edm::EventSetup& iSetup, const reco::TrackCollection& Tracks); //try to find a 3rd muon in tracks, if this was not detected as a muon 00024 bool findCorrectPairing(); //find the correct 3 muons, if more than 3 muons has been reconstructed 00025 double getInvariantMass(const reco::TrackCollection* tracks, const double MuonMass=0.106); 00026 double getDeltaR(const reco::Track& track1, const reco::Track& track2); 00027 bool removeIncorrectMuon(); //try to remove one muon, which seems to come not from a tau->3Mu decay 00028 00029 const double m_kMatchingDeltaR; 00030 const double m_kMatchingPt; 00031 const double m_kTauMassCut; 00032 const double m_kTauMass; 00033 const double m_kMuonMass; 00034 00035 const edm::InputTag m_kMuonSource; 00036 const edm::InputTag m_kTrackSource; 00037 00038 reco::MuonCollection* m_MuonCollection; 00039 reco::TrackCollection* m_TrackCollection; 00040 }; 00041 00042 #endif