00001 #ifndef DataFormats_BTauReco_PFIsolatedTauTagInfo_h
00002 #define DataFormats_BTauReco_PFIsolatedTauTagInfo_h
00003
00004
00005
00006
00007
00008
00009
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
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
00067 math::XYZTLorentzVector alternatLorentzVect()const{return(alternatLorentzVect_);}
00068 void setalternatLorentzVect(math::XYZTLorentzVector x){alternatLorentzVect_=x;}
00069
00070
00071 const PFJetRef& pfjetRef()const{return PFJetRef_;}
00072 void setpfjetRef(const PFJetRef x){PFJetRef_=x;}
00073
00074
00075
00076
00077 bool passedtrackerisolation()const{return passedtrackerisolation_;}
00078 void setpassedtrackerisolation(bool x){passedtrackerisolation_=x;}
00079
00080
00081 bool passedECALisolation()const{return passedECALisolation_;}
00082 void setpassedECALisolation(bool x){passedECALisolation_=x;}
00083
00084
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
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
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
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