Go to the documentation of this file.00001 #ifndef RECOMET_METALGORITHMS_SIGNALGORESOLUTIONS_H
00002 #define RECOMET_METALGORITHMS_SIGNALGORESOLUTIONS_H
00003
00004
00005
00006
00007
00008
00016
00017
00018
00019
00020
00021
00022
00023 #include "DataFormats/Math/interface/LorentzVector.h"
00024 #include "FWCore/Framework/interface/Event.h"
00025 #include "DataFormats/Common/interface/Handle.h"
00026 #include "FWCore/Framework/interface/EventSetup.h"
00027 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00028 #include "RecoMET/METAlgorithms/interface/SigInputObj.h"
00029 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
00030 #include "DataFormats/Candidate/interface/Candidate.h"
00031 #include "DataFormats/JetReco/interface/PFJet.h"
00032 #include "CondFormats/JetMETObjects/interface/JetResolution.h"
00033 #include "RecoParticleFlow/PFClusterTools/interface/PFEnergyResolution.h"
00034
00035 #include <map>
00036 #include <iostream>
00037 #include <vector>
00038
00039 namespace metsig {
00040
00041 enum resolutionType { caloEE, caloEB, caloHE, caloHO, caloHF, caloHB, jet, electron, tau, muon,PFtype1,PFtype2, PFtype3, PFtype4, PFtype5, PFtype6, PFtype7 };
00042 enum resolutionFunc { ET, PHI,TRACKP,CONSTPHI };
00043
00044 class SignAlgoResolutions{
00045
00046 public:
00047 SignAlgoResolutions():functionmap_(){;}
00048 SignAlgoResolutions(const edm::ParameterSet &iConfig);
00049
00050 void addResolutions(const edm::ParameterSet &iConfig);
00051 double eval(const resolutionType & type, const resolutionFunc & func, const double & et, const double & phi, const double & eta, const double &p) const;
00052 double eval(const resolutionType & type, const resolutionFunc & func, const double & et, const double & phi, const double & eta) const;
00053 metsig::SigInputObj evalPF(const reco::PFCandidate* candidate) const;
00054 metsig::SigInputObj evalPFJet(const reco::PFJet *jet) const;
00055 bool isFilled() const {return functionmap_.size()>0;}
00056
00057 private:
00058 double getfunc(const resolutionType & type,const resolutionFunc & func, std::vector<double> & x) const;
00059 void addfunction(const resolutionType type, const resolutionFunc func, std::vector<double> parameters);
00060 void initializeJetResolutions( const edm::ParameterSet &iConfig );
00061
00062 typedef std::pair<metsig::resolutionType, metsig::resolutionFunc> functionCombo;
00063 typedef std::vector<double> functionPars;
00064 std::map<functionCombo,functionPars> functionmap_;
00065
00066 double EtFunction( const functionPars &x, const functionPars & par) const;
00067 double PhiFunction( const functionPars &x, const functionPars & par) const;
00068 double PFunction( const functionPars &x, const functionPars &par) const;
00069 double PhiConstFunction(const functionPars &x, const functionPars &par) const;
00070 double ElectronPtResolution(const reco::PFCandidate *c) const;
00071
00072 double ptResolThreshold_;
00073
00074
00075
00076 std::vector<double> jdpt[10];
00077 std::vector<double> jdphi[10];
00078
00079 JetResolution *ptResol_;
00080 JetResolution *phiResol_;
00081 PFEnergyResolution *pfresol_;
00082 };
00083 }
00084 #endif