00001 #ifndef RecoTauTag_RecoTau_PFTauElementsOperators_H_
00002 #define RecoTauTag_RecoTau_PFTauElementsOperators_H_
00003
00004 #include "FWCore/Framework/interface/Frameworkfwd.h"
00005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00006
00007 #include "DataFormats/ParticleFlowReco/interface/PFBlock.h"
00008 #include "DataFormats/ParticleFlowReco/interface/PFBlockElement.h"
00009 #include "DataFormats/ParticleFlowReco/interface/PFRecTrack.h"
00010 #include "DataFormats/ParticleFlowReco/interface/PFRecTrackFwd.h"
00011 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
00012 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
00013 #include "DataFormats/TauReco/interface/PFTau.h"
00014 #include "DataFormats/JetReco/interface/PFJet.h"
00015
00016 #include "RecoTauTag/TauTagTools/interface/TauTagTools.h"
00017 #include "RecoTauTag/TauTagTools/interface/TauElementsOperators.h"
00018 #include "RecoTauTag/TauTagTools/interface/ElementsInCone.h"
00019 #include "RecoTauTag/TauTagTools/interface/ElementsInAnnulus.h"
00020 #include "PhysicsTools/IsolationUtils/interface/FixedAreaIsolationCone.h"
00021 #include "PhysicsTools/Utilities/interface/deltaR.h"
00022 #include "PhysicsTools/Utilities/interface/Angle.h"
00023
00024 #include "Math/GenVector/VectorUtil.h"
00025 #include "Math/GenVector/PxPyPzE4D.h"
00026
00027 #include <algorithm>
00028
00029 using namespace edm;
00030 using namespace std;
00031 using namespace reco;
00032
00033 class PFTauElementsOperators : public TauElementsOperators {
00034 public:
00035 PFTauElementsOperators(PFTau& thePFTau);
00036 ~PFTauElementsOperators(){}
00037 void setAreaMetricrecoElementsmaxabsEta( double x);
00038
00039 PFCandidateRef leadPFCand(const string matchingcone_metric,const double matchingcone_size,const double minPt)const;
00040 PFCandidateRef leadPFCand(const math::XYZVector myVector,const string matchingcone_metric,const double matchingcone_size,const double minPt)const;
00041 PFCandidateRef leadPFChargedHadrCand(const string matchingcone_metric,const double matchingcone_size,const double minPt)const;
00042 PFCandidateRef leadPFChargedHadrCand(const math::XYZVector myVector,const string matchingcone_metric,const double matchingcone_size,const double minPt)const;
00043 PFCandidateRef leadPFNeutrHadrCand(const string matchingcone_metric,const double matchingcone_size,const double minPt)const;
00044 PFCandidateRef leadPFNeutrHadrCand(const math::XYZVector myVector,const string matchingcone_metric,const double matchingcone_size,const double minPt)const;
00045 PFCandidateRef leadPFGammaCand(const string matchingcone_metric,const double matchingcone_size,const double minPt)const;
00046 PFCandidateRef leadPFGammaCand(const math::XYZVector myVector,const string matchingcone_metric,const double matchingcone_size,const double minPt)const;
00047
00048
00049 PFCandidateRefVector PFCandsInCone(const PFCandidateRefVector PFCands,const math::XYZVector myVector,const string conemetric,const double conesize,const double minPt)const;
00050 PFCandidateRefVector PFCandsInCone(const math::XYZVector myVector,const string conemetric,const double conesize,const double minPt)const;
00051 PFCandidateRefVector PFChargedHadrCandsInCone(const math::XYZVector myVector,const string conemetric,const double conesize,const double minPt)const;
00052 PFCandidateRefVector PFChargedHadrCandsInCone(const math::XYZVector myVector,const string conemetric,const double conesize,const double minPt,const double PFChargedHadrCand_tracktorefpoint_maxDZ,const double refpoint_Z)const;
00053 PFCandidateRefVector PFNeutrHadrCandsInCone(const math::XYZVector myVector,const string conemetric,const double conesize,const double minPt)const;
00054 PFCandidateRefVector PFGammaCandsInCone(const math::XYZVector myVector,const string conemetric,const double conesize,const double minPt)const;
00055
00056
00057 PFCandidateRefVector PFCandsInAnnulus(const PFCandidateRefVector PFCands,const math::XYZVector myVector,const string innercone_metric,const double innercone_size,const string outercone_metric,const double outercone_size,const double minPt)const;
00058 PFCandidateRefVector PFCandsInAnnulus(const math::XYZVector myVector,const string innercone_metric,const double innercone_size,const string outercone_metric,const double outercone_size,const double minPt)const;
00059 PFCandidateRefVector PFChargedHadrCandsInAnnulus(const math::XYZVector myVector,const string innercone_metric,const double innercone_size,const string outercone_metric,const double outercone_size,const double minPt)const;
00060 PFCandidateRefVector PFChargedHadrCandsInAnnulus(const math::XYZVector myVector,const string innercone_metric,const double innercone_size,const string outercone_metric,const double outercone_size,const double minPt,const double PFChargedHadrCand_tracktorefpoint_maxDZ,const double refpoint_Z)const;
00061 PFCandidateRefVector PFNeutrHadrCandsInAnnulus(const math::XYZVector myVector,const string innercone_metric,const double innercone_size,const string outercone_metric,const double outercone_size,const double minPt)const;
00062 PFCandidateRefVector PFGammaCandsInAnnulus(const math::XYZVector myVector,const string innercone_metric,const double innercone_size,const string outercone_metric,const double outercone_size,const double minPt)const;
00063
00065 void copyCandRefsFilteredByPt(const PFCandidateRefVector& theInputCands, PFCandidateRefVector& theOutputCands, const double minPt);
00066
00068 void computeInsideOutContents(const PFCandidateRefVector& theChargedCands, const PFCandidateRefVector& theGammaCands, const math::XYZVector leadTrackVector,
00069 const TFormula& coneSizeFormula, double (*ptrToMetricFunction)(const math::XYZVector&, const math::XYZVector&),
00070 const double minChargedSize, const double maxChargedSize, const double minNeutralSize, const double maxNeutralSize,
00071 const double minChargedPt, const double minNeutralPt,
00072 const string& outlierCollectorConeMetric, const double outlierCollectorConeSize,
00073 PFCandidateRefVector& signalChargedObjects, PFCandidateRefVector& outlierChargedObjects,
00074 PFCandidateRefVector& signalGammaObjects, PFCandidateRefVector& outlierGammaObjects, bool useScanningAxis);
00075
00076
00077
00078 double discriminatorByIsolPFCandsN(int IsolPFCands_maxN=0);
00079 double discriminatorByIsolPFCandsN(string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,int IsolPFCands_maxN=0);
00080 double discriminatorByIsolPFCandsN(math::XYZVector myVector,string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,int IsolPFCands_maxN=0);
00081 double discriminatorByIsolPFChargedHadrCandsN(int IsolPFCands_maxN=0);
00082 double discriminatorByIsolPFChargedHadrCandsN(string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,int IsolPFCands_maxN=0);
00083 double discriminatorByIsolPFChargedHadrCandsN(math::XYZVector myVector,string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,int IsolPFCands_maxN=0);
00084 double discriminatorByIsolPFNeutrHadrCandsN(int IsolPFCands_maxN=0);
00085 double discriminatorByIsolPFNeutrHadrCandsN(string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,int IsolPFCands_maxN=0);
00086 double discriminatorByIsolPFNeutrHadrCandsN(math::XYZVector myVector,string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,int IsolPFCands_maxN=0);
00087 double discriminatorByIsolPFGammaCandsN(int IsolPFCands_maxN=0);
00088 double discriminatorByIsolPFGammaCandsN(string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,int IsolPFCands_maxN=0);
00089 double discriminatorByIsolPFGammaCandsN(math::XYZVector myVector,string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,int IsolPFCands_maxN=0);
00090 double discriminatorByIsolPFCandsEtSum(double IsolPFCands_maxEtSum=0);
00091 double discriminatorByIsolPFCandsEtSum(string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,double IsolPFCands_maxEtSum=0);
00092 double discriminatorByIsolPFCandsEtSum(math::XYZVector myVector,string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,double IsolPFCands_maxEtSum=0);
00093 double discriminatorByIsolPFChargedHadrCandsEtSum(string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,double IsolPFCands_maxEtSum=0);
00094 double discriminatorByIsolPFChargedHadrCandsEtSum(double IsolPFCands_maxEtSum=0);
00095 double discriminatorByIsolPFChargedHadrCandsEtSum(math::XYZVector myVector,string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,double IsolPFCands_maxEtSum=0);
00096 double discriminatorByIsolPFNeutrHadrCandsEtSum(double IsolPFCands_maxEtSum=0);
00097 double discriminatorByIsolPFNeutrHadrCandsEtSum(string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,double IsolPFCands_maxEtSum=0);
00098 double discriminatorByIsolPFNeutrHadrCandsEtSum(math::XYZVector myVector,string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,double IsolPFCands_maxEtSum=0);
00099 double discriminatorByIsolPFGammaCandsEtSum(double IsolPFCands_maxEtSum=0);
00100 double discriminatorByIsolPFGammaCandsEtSum(string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,double IsolPFCands_maxEtSum=0);
00101 double discriminatorByIsolPFGammaCandsEtSum(math::XYZVector myVector,string matchingcone_metric,double matchingcone_size,string signalcone_metric,double signalcone_size,string isolcone_metric,double isolcone_size,bool useOnlyChargedHadrforleadPFCand,double minPt_leadPFCand,double minPt_PFCand,double IsolPFCands_maxEtSum=0);
00102 private:
00103 PFJetRef PFJetRef_;
00104 double AreaMetric_recoElements_maxabsEta_;
00105 PFCandidateRefVector PFCands_;
00106 PFCandidateRefVector IsolPFCands_;
00107 PFCandidateRefVector PFChargedHadrCands_;
00108 PFCandidateRefVector IsolPFChargedHadrCands_;
00109 PFCandidateRefVector PFNeutrHadrCands_;
00110 PFCandidateRefVector IsolPFNeutrHadrCands_;
00111 PFCandidateRefVector PFGammaCands_;
00112 PFCandidateRefVector IsolPFGammaCands_;
00113
00114 DeltaR<math::XYZVector> metricDR_;
00115 Angle<math::XYZVector> metricAngle_;
00116 double computeDeltaR(const math::XYZVector& vec1, const math::XYZVector& vec2);
00117 double computeAngle(const math::XYZVector& vec1, const math::XYZVector& vec2);
00118 ElementsInCone<math::XYZVector,DeltaR<math::XYZVector>,reco::PFCandidateCollection> PFCandsinCone_DRmetric_;
00119 ElementsInCone<math::XYZVector,Angle<math::XYZVector>,reco::PFCandidateCollection> PFCandsinCone_Anglemetric_;
00120 ElementsInAnnulus<math::XYZVector,DeltaR<math::XYZVector>,DeltaR<math::XYZVector>,reco::PFCandidateCollection> PFCandsinAnnulus_innerDRouterDRmetrics_;
00121 ElementsInAnnulus<math::XYZVector,DeltaR<math::XYZVector>,Angle<math::XYZVector>,reco::PFCandidateCollection> PFCandsinAnnulus_innerDRouterAnglemetrics_;
00122 ElementsInAnnulus<math::XYZVector,Angle<math::XYZVector>,Angle<math::XYZVector>,reco::PFCandidateCollection> PFCandsinAnnulus_innerAngleouterAnglemetrics_;
00123 ElementsInAnnulus<math::XYZVector,Angle<math::XYZVector>,DeltaR<math::XYZVector>,reco::PFCandidateCollection> PFCandsinAnnulus_innerAngleouterDRmetrics_;
00124 };
00125 #endif
00126
00127
00128
00129
00130
00131