CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DataFormats/BTauReco/interface/PFIsolatedTauTagInfo.h

Go to the documentation of this file.
00001 #ifndef DataFormats_BTauReco_PFIsolatedTauTagInfo_h
00002 #define DataFormats_BTauReco_PFIsolatedTauTagInfo_h
00003 
00004 /* class PFIsolatedTauTagInfo
00005  * Extended object for the Particle Flow Tau Isolation algorithm,
00006  * contains the result and the methods used in the PFConeIsolation Algorithm
00007  * created: Apr 21 2007,
00008  * revised: Jun 23 2007,
00009  * authors: Simone Gennai, Ludovic Houchu
00010  */
00011 
00012 #include <math.h>
00013 
00014 #include "DataFormats/BTauReco/interface/RefMacros.h"
00015 
00016 #include "Math/GenVector/PxPyPzE4D.h"
00017 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
00018 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
00019 #include "DataFormats/JetReco/interface/PFJetCollection.h"
00020 #include "DataFormats/BTauReco/interface/BaseTagInfo.h"
00021 
00022 
00023 
00024 
00025 
00026 
00027 const int PFChargedHadrCand_codenumber=1;
00028 const int PFNeutrHadrCand_codenumber=5;
00029 const int PFGammaCand_codenumber=4;
00030  
00031 const int PFRecTrack_codenumber=1;
00032 const int PFRecECALClus_codenumber=4;
00033 const int PFRecHCALClus_codenumber=5;
00034 
00035 namespace reco{ 
00036   class PFIsolatedTauTagInfo : public BaseTagInfo{
00037   public:
00038     PFIsolatedTauTagInfo() {}
00039     PFIsolatedTauTagInfo(PFCandidateRefVector PFCands){
00040       initialPFCands_=PFCands;
00041       PFCands_=PFCands;
00042       for(PFCandidateRefVector::const_iterator iPFCand=PFCands_.begin();iPFCand!=PFCands_.end();iPFCand++){
00043         if ((**iPFCand).particleId()==PFChargedHadrCand_codenumber) initialPFChargedHadrCands_.push_back(*iPFCand);
00044         if ((**iPFCand).particleId()==PFNeutrHadrCand_codenumber) initialPFNeutrHadrCands_.push_back(*iPFCand);
00045         if ((**iPFCand).particleId()==PFGammaCand_codenumber) initialPFGammaCands_.push_back(*iPFCand);
00046       }
00047       PFChargedHadrCands_=initialPFChargedHadrCands_;
00048       PFNeutrHadrCands_=initialPFNeutrHadrCands_;
00049       PFGammaCands_=initialPFGammaCands_;
00050       alternatLorentzVect_.SetPx(NAN);
00051       alternatLorentzVect_.SetPy(NAN);
00052       alternatLorentzVect_.SetPz(NAN);
00053       alternatLorentzVect_.SetE(NAN);
00054       passedtrackerisolation_=false;
00055       passedECALisolation_=false;
00056     }
00057     virtual ~PFIsolatedTauTagInfo(){};
00058     virtual PFIsolatedTauTagInfo* clone()const{return new PFIsolatedTauTagInfo(*this);}
00059     
00060     //get the PFCandidates's which compose the PF jet and may be have been filtered by filterPFChargedHadrCands(.,.,.,.,.,.), filterPFNeutrHadrCands(.), filterPFGammaCands(.) member functions
00061     const PFCandidateRefVector& PFCands() const {return PFCands_;}
00062     const PFCandidateRefVector& PFChargedHadrCands() const {return PFChargedHadrCands_;}
00063     const PFCandidateRefVector& PFNeutrHadrCands() const {return PFNeutrHadrCands_;}
00064     const PFCandidateRefVector& PFGammaCands() const {return PFGammaCands_;}
00065     
00066     // rec. jet Lorentz-vector combining charged hadr. PFCandidate's and gamma PFCandidate's  
00067     math::XYZTLorentzVector alternatLorentzVect()const{return(alternatLorentzVect_);} 
00068     void setalternatLorentzVect(math::XYZTLorentzVector x){alternatLorentzVect_=x;}
00069 
00070     //the reference to the PFJet
00071     const PFJetRef& pfjetRef()const{return PFJetRef_;}
00072     void setpfjetRef(const PFJetRef x){PFJetRef_=x;}
00073 
00074     //JetTag::discriminator() computed with the parameters taken from the RecoTauTag/PFConeIsolation/data/pfConeIsolation.cfi file
00075     
00076     // true if a lead. PFCandidate exists and no charged hadron PFCandidate was found in an DR isolation ring around it (DR isolation ring limits defined in the RecoTauTag/PFConeIsolation/data/pfConeIsolation.cfi file
00077     bool passedtrackerisolation()const{return passedtrackerisolation_;}
00078     void setpassedtrackerisolation(bool x){passedtrackerisolation_=x;}
00079 
00080     // true if a lead. PFCandidate exists and no gamma PFCandidate was found in an DR isolation ring around it (DR isolation ring limits defined in the RecoTauTag/PFConeIsolation/data/pfConeIsolation.cfi file
00081     bool passedECALisolation()const{return passedECALisolation_;}
00082     void setpassedECALisolation(bool x){passedECALisolation_=x;}
00083 
00084     //methods to be used to recompute the isolation with a new set of parameters
00085     double discriminatorByIsolPFCandsN(float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,int IsolPFCands_maxN=0)const;
00086     double discriminatorByIsolPFCandsN(math::XYZVector myVector,float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,int IsolPFCands_maxN=0)const;
00087     double discriminatorByIsolPFChargedHadrCandsN(float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,int IsolPFCands_maxN=0)const;
00088     double discriminatorByIsolPFChargedHadrCandsN(math::XYZVector myVector,float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,int IsolPFCands_maxN=0)const;
00089     double discriminatorByIsolPFNeutrHadrCandsN(float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,int IsolPFCands_maxN=0)const;
00090     double discriminatorByIsolPFNeutrHadrCandsN(math::XYZVector myVector,float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,int IsolPFCands_maxN=0)const;
00091     double discriminatorByIsolPFGammaCandsN(float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,int IsolPFCands_maxN=0)const;
00092     double discriminatorByIsolPFGammaCandsN(math::XYZVector myVector,float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,int IsolPFCands_maxN=0)const;
00093     double discriminatorByIsolPFCandsEtSum(float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,float IsolPFCands_maxEtSum=0)const;
00094     double discriminatorByIsolPFCandsEtSum(math::XYZVector myVector,float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,float IsolPFCands_maxEtSum=0)const;
00095     double discriminatorByIsolPFChargedHadrCandsEtSum(float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,float IsolPFCands_maxEtSum=0)const;
00096     double discriminatorByIsolPFChargedHadrCandsEtSum(math::XYZVector myVector,float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,float IsolPFCands_maxEtSum=0)const;
00097     double discriminatorByIsolPFNeutrHadrCandsEtSum(float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,float IsolPFCands_maxEtSum=0)const;
00098     double discriminatorByIsolPFNeutrHadrCandsEtSum(math::XYZVector myVector,float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,float IsolPFCands_maxEtSum=0)const;
00099     double discriminatorByIsolPFGammaCandsEtSum(float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,float IsolPFCands_maxEtSum=0)const;
00100     double discriminatorByIsolPFGammaCandsEtSum(math::XYZVector myVector,float matchingcone_size,float signalcone_size,float isolcone_size,bool useOnlyChargedHadrforleadPFCand,float minPt_leadPFCand,float minPt_PFCand,float IsolPFCands_maxEtSum=0)const;
00101     
00102     // return all PFCandidate's in a cone of size "conesize" around a direction "myVector" 
00103     const PFCandidateRefVector PFCandsInCone(const math::XYZVector myVector,const float conesize,const float minPt)const;
00104     const PFCandidateRefVector PFChargedHadrCandsInCone(const math::XYZVector myVector,const float conesize,const float minPt)const;
00105     const PFCandidateRefVector PFNeutrHadrCandsInCone(const math::XYZVector myVector,const float conesize,const float minPt)const;
00106     const PFCandidateRefVector PFGammaCandsInCone(const math::XYZVector myVector,const float conesize,const float minPt)const;
00107     
00108     // return all PFCandidate's in a band defined by inner(size "innercone_size") and outer(size "outercone_size") cones around a direction "myVector" 
00109     const PFCandidateRefVector PFCandsInBand(const math::XYZVector myVector,const float innercone_size,const float outercone_size,const float minPt)const;
00110     const PFCandidateRefVector PFChargedHadrCandsInBand(const math::XYZVector myVector,const float innercone_size,const float outercone_size,const float minPt)const;
00111     const PFCandidateRefVector PFNeutrHadrCandsInBand(const math::XYZVector myVector,const float innercone_size,const float outercone_size,const float minPt)const;
00112     const PFCandidateRefVector PFGammaCandsInBand(const math::XYZVector myVector,const float innercone_size,const float outercone_size,const float minPt)const;
00113     
00114     //return the leading PFCandidate in a given cone around the jet axis or a given direction
00115     const PFCandidateRef leadPFCand(const float matchingcone_size, const float minPt)const;
00116     const PFCandidateRef leadPFCand(const math::XYZVector myVector,const float matchingcone_size, const float minPt)const;  
00117     const PFCandidateRef leadPFChargedHadrCand(const float matchingcone_size, const float minPt)const;
00118     const PFCandidateRef leadPFChargedHadrCand(const math::XYZVector myVector,const float matchingcone_size, const float minPt)const;  
00119     const PFCandidateRef leadPFNeutrHadrCand(const float matchingcone_size, const float minPt)const;
00120     const PFCandidateRef leadPFNeutrHadrCand(const math::XYZVector myVector,const float matchingcone_size, const float minPt)const;  
00121     const PFCandidateRef leadPFGammaCand(const float matchingcone_size, const float minPt)const;
00122     const PFCandidateRef leadPFGammaCand(const math::XYZVector myVector,const float matchingcone_size, const float minPt)const;  
00123  
00124     void filterPFChargedHadrCands(double ChargedHadrCand_tkminPt,int ChargedHadrCand_tkminPixelHitsn,int ChargedHadrCand_tkminTrackerHitsn,double ChargedHadrCand_tkmaxipt,double ChargedHadrCand_tkmaxChi2,double ChargedHadrCand_tktorefpointDZ,bool UsePVconstraint,double PVtx_Z,bool UseOnlyChargedHadr_for_LeadCand,double LeadChargedHadrCandtoJet_MatchingConeSize,double LeadChargedHadrCand_minPt);
00125     void filterPFNeutrHadrCands(double NeutrHadrCand_HcalclusminEt);
00126     void filterPFGammaCands(double GammaCand_EcalclusminEt);
00127     void removefilters();
00128   private:
00129     PFJetRef PFJetRef_;
00130     PFCandidateRefVector initialPFCands_;
00131     PFCandidateRefVector PFCands_;
00132     PFCandidateRefVector initialPFChargedHadrCands_;
00133     PFCandidateRefVector PFChargedHadrCands_;
00134     PFCandidateRefVector initialPFNeutrHadrCands_;
00135     PFCandidateRefVector PFNeutrHadrCands_;
00136     PFCandidateRefVector initialPFGammaCands_;
00137     PFCandidateRefVector PFGammaCands_;
00138     math::XYZTLorentzVector alternatLorentzVect_;
00139     bool passedtrackerisolation_;
00140     bool passedECALisolation_;
00141   };
00142 
00143   DECLARE_EDM_REFS( PFIsolatedTauTagInfo )
00144 
00145 }
00146 
00147 #endif // DataFormats_BTauReco_PFIsolatedTauTagInfo_h