00001 #ifndef Type1MET_MuonMETAlgo_h
00002 #define Type1MET_MuonMETAlgo_h
00003
00011 #include "FWCore/Framework/interface/Event.h"
00012 #include "FWCore/Framework/interface/EventSetup.h"
00013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00014
00015 #include "DataFormats/Math/interface/Point3D.h"
00016 #include "DataFormats/Math/interface/LorentzVector.h"
00017
00018 #include "DataFormats/Common/interface/View.h"
00019 #include "DataFormats/METReco/interface/METCollection.h"
00020 #include "DataFormats/METReco/interface/MET.h"
00021 #include "DataFormats/METReco/interface/CaloMETCollection.h"
00022 #include "DataFormats/METReco/interface/CorrMETData.h"
00023 #include "DataFormats/MuonReco/interface/Muon.h"
00024 #include "DataFormats/MuonReco/interface/MuonFwd.h"
00025 #include "TrackingTools/TrackAssociator/interface/TrackDetectorAssociator.h"
00026 #include "TrackingTools/TrackAssociator/interface/TrackAssociatorParameters.h"
00027
00028 #include "JetMETCorrections/Type1MET/interface/MuonMETInfo.h"
00029
00030 class MuonMETAlgo
00031 {
00032 public:
00033 MuonMETAlgo();
00034 virtual ~MuonMETAlgo();
00035
00036 reco::CaloMET makeMET(const reco::CaloMET& fMet, double fSumEt,
00037 const std::vector<CorrMETData>& fCorrections,
00038 const reco::MET::LorentzVector&);
00039 reco::MET makeMET(const reco::MET&, double fSumEt,
00040 const std::vector<CorrMETData>& fCorrections,
00041 const MET::LorentzVector& fP4);
00042
00043 virtual void run(const edm::Event& iEvent,
00044 const edm::EventSetup& iSetup,
00045 const edm::View<reco::MET>& uncorMET,
00046 const edm::View<reco::Muon>& Muons,
00047 TrackDetectorAssociator& trackAssociator,
00048 TrackAssociatorParameters& trackAssociatorParameters,
00049 reco::METCollection* corMET,
00050 bool useTrackAssociatorPositions,
00051 bool useRecHits,
00052 bool useHO,
00053 double towerEtThreshold);
00054 virtual void run(const edm::Event& iEvent,
00055 const edm::EventSetup& iSetup,
00056 const edm::View<reco::CaloMET>& uncorMET,
00057 const edm::View<reco::Muon>& Muons,
00058 TrackDetectorAssociator& trackAssociator,
00059 TrackAssociatorParameters& trackAssociatorParameters,
00060 reco::CaloMETCollection* corMET,
00061 bool useTrackAssociatorPositions,
00062 bool useRecHits,
00063 bool useHO,
00064 double towerEtThreshold);
00065
00066 template <class T> void MuonMETAlgo_run(const edm::Event& iEvent,
00067 const edm::EventSetup& iSetup,
00068 const edm::View<T>& v_uncorMET,
00069 const edm::View<reco::Muon>& inputMuons,
00070 TrackDetectorAssociator& trackAssociator,
00071 TrackAssociatorParameters& trackAssociatorParameters,
00072 std::vector<T>* v_corMET,
00073 bool useTrackAssociatorPositions,
00074 bool useRecHits,
00075 bool useHO,
00076 double towerEtThreshold);
00077
00078 static void correctMETforMuon(double& metx, double& mety,
00079 double bfield, int muonCharge,
00080 const math::XYZTLorentzVector muonP4,
00081 const math::XYZPoint muonVertex,
00082 MuonMETInfo&);
00083
00084 };
00085
00086 #endif // Type1MET_MuonMETAlgo_h
00087
00088
00089