CMS 3D CMS Logo

PFTauElementsOperators.h

Go to the documentation of this file.
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   //return the leading PFCandidate in a given cone around the jet axis or a given direction
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   // return all PFCandidates in a cone of metric* "cone_metric" and size "conesize" around a direction "myVector" 
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   // return all PFCandidates in a annulus defined by inner(metric* "innercone_metric" and size "innercone_size") and outer(metric* "outercone_metric" and size "outercone_size") cones around a direction "myVector" 
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&),  // determines grow function, and the metric to compare the opening angle to
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); //these last two quantities are the return values
00075 
00076   // return 1 if no/low PFCandidates activity in an isolation annulus around a leading PFCandidate, 0 otherwise; 
00077   // different possible metrics* for the matching, signal and isolation cones; 
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   // template objects for DR and Angle metrics
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 // * different possible metrics for a cone : "DR", "angle", "area"; 
00128 
00129 
00130 
00131 

Generated on Tue Jun 9 17:45:05 2009 for CMSSW by  doxygen 1.5.4