![]() |
![]() |
00001 #ifndef DataFormats_BTauReco_PFCombinedTauTagInfo_h 00002 #define DataFormats_BTauReco_PFCombinedTauTagInfo_h 00003 00004 /* class PFCombinedTauTagInfo 00005 * Extended object for the Particle Flow Tau Combination algorithm, 00006 * created: Apr 21 2007, 00007 * revised: Jun 23 2007, 00008 * author: Ludovic Houchu. 00009 */ 00010 00011 #include <limits> 00012 #include <math.h> 00013 00014 #include "DataFormats/BTauReco/interface/RefMacros.h" 00015 #include "DataFormats/JetReco/interface/PFJetCollection.h" 00016 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h" 00017 #include "DataFormats/BTauReco/interface/BaseTagInfo.h" 00018 #include "DataFormats/BTauReco/interface/PFIsolatedTauTagInfo.h" 00019 00020 00021 00022 00023 namespace reco { 00024 class PFCombinedTauTagInfo : public BaseTagInfo{ 00025 public: 00026 PFCombinedTauTagInfo() { 00027 candidate_selectedByPFChargedHadrCands_=false; 00028 electronTagged_=false; 00029 muonTagged_=false; 00030 PFChargedHadrCands_.clear(); 00031 selectedPFChargedHadrCands_.clear(); 00032 signalPFChargedHadrCands_.clear(); 00033 isolPFChargedHadrCands_.clear(); 00034 leadPFChargedHadrCandsignedSipt_=NAN; 00035 leadPFChargedHadrCandsignedSip3D_=NAN; 00036 signedSflightpath_=NAN; 00037 PFChargedHadrCandsEtJetEtRatio_=NAN; 00038 PFNeutrHadrCandsE_=NAN; 00039 PFNeutrHadrCandsN_=numeric_limits<int>::quiet_NaN(); 00040 PFNeutrHadrCandsRadius_=NAN; 00041 PFGammaCandsE_=NAN; 00042 isolPFGammaCandsE_=NAN; 00043 PFGammaCandsN_=numeric_limits<int>::quiet_NaN(); 00044 PFGammaCandsRadius_=NAN; 00045 PFGammaCandsEJetalternatERatio_=NAN; 00046 isolPFGammaCandsEJetalternatERatio_=NAN; 00047 PFGammaCandsERatio_=NAN; 00048 alternatLorentzVect_.SetPx(NAN); 00049 alternatLorentzVect_.SetPy(NAN); 00050 alternatLorentzVect_.SetPz(NAN); 00051 alternatLorentzVect_.SetE(NAN); 00052 ECALEtleadPFChargedHadrCandPtRatio_=NAN; 00053 HCALEtleadPFChargedHadrCandPtRatio_=NAN; 00054 } 00055 virtual ~PFCombinedTauTagInfo() {}; 00056 00057 //the reference to the PFJet; 00058 const PFJetRef& pfjetRef()const{return PFJetRef_;} 00059 void setpfjetRef(const PFJetRef x){PFJetRef_=x;} 00060 00061 //the reference to the PFIsolatedTauTagInfo; 00062 const PFIsolatedTauTagInfoRef& isolatedtautaginfoRef()const{return PFIsolatedTauTagInfoRef_;} 00063 void setisolatedtautaginfoRef(const PFIsolatedTauTagInfoRef x) {PFIsolatedTauTagInfoRef_=x;} 00064 00065 //the PF charged hadron candidates contained in the PF Jet; 00066 const PFCandidateRefVector& PFChargedHadrCands()const{return PFChargedHadrCands_;} 00067 void setPFChargedHadrCands(const PFCandidateRefVector& x) {PFChargedHadrCands_=x;} 00068 00069 //the PF charged hadron candidates considered in the isolation strip and signal cone selections; 00070 const PFCandidateRefVector& selectedPFChargedHadrCands()const{return selectedPFChargedHadrCands_;} 00071 void setselectedPFChargedHadrCands(const PFCandidateRefVector& x) {selectedPFChargedHadrCands_=x;} 00072 00073 //the PF charged hadron candidates inside signal cone; 00074 const PFCandidateRefVector& signalPFChargedHadrCands()const{return signalPFChargedHadrCands_;} 00075 void setsignalPFChargedHadrCands(const PFCandidateRefVector& x) {signalPFChargedHadrCands_=x;} 00076 00077 //the PF charged hadron candidates inside isolation band; 00078 const PFCandidateRefVector& isolPFChargedHadrCands()const{return isolPFChargedHadrCands_;} 00079 void setisolPFChargedHadrCands(const PFCandidateRefVector& x) {isolPFChargedHadrCands_=x;} 00080 00081 virtual PFCombinedTauTagInfo* clone() const{return new PFCombinedTauTagInfo(*this );} 00082 00083 // float JetTag::discriminator() returns 0. if candidate did not pass PF charged hadron candidates selection, 00084 // 1. if candidate passed PF charged hadron candidates selection and did not contain PF gamma candidate(s), 00085 // 0<= <=1 if candidate passed PF charged hadron candidates selection, contained PF gamma candidate(s) and went through the likelihood ratio mechanism, 00086 // NaN the values of the likelihood functions PDFs are 0 (test the result of discriminator() with bool isnan(.)); 00087 //computed with the parameters taken from the RecoTauTag/PFCombinedTauTag/data/ .cfi files 00088 00089 bool selectedByPFChargedHadrCands()const{return(candidate_selectedByPFChargedHadrCands_);} 00090 void setselectedByPFChargedHadrCands(bool x){candidate_selectedByPFChargedHadrCands_=x;} 00091 00092 bool electronTagged()const{return(electronTagged_);} // true : passed PF charged hadron candidates sel., contains 1 signal charged hadron candidate, e-identified through (ECALEtleadPFChargedHadrCandPtRatio(),HCALEtleadPFChargedHadrCandPtRatio()) space; 00093 void setelectronTagged(bool x){electronTagged_=x;} 00094 00095 bool muonTagged()const{return(muonTagged_);} // true : passed PF charged hadron candidates sel., contains 1 signal charged hadron candidate, mu-identified through (ECALEtleadPFChargedHadrCandPtRatio(),HCALEtleadPFChargedHadrCandPtRatio()) space; 00096 void setmuonTagged(bool x){muonTagged_=x;} 00097 00098 double leadPFChargedHadrCandsignedSipt()const{return (leadPFChargedHadrCandsignedSipt_);} // NaN : failure; 00099 void setleadPFChargedHadrCandsignedSipt(double x){leadPFChargedHadrCandsignedSipt_=x;} 00100 00101 double leadPFChargedHadrCandsignedSip3D()const{return(leadPFChargedHadrCandsignedSip3D_);} // NaN : failure; 00102 void setleadPFChargedHadrCandsignedSip3D(double x){leadPFChargedHadrCandsignedSip3D_=x;} 00103 00104 double signedSflightpath()const{return (signedSflightpath_);} // NaN : failure, did not build a SV.; 00105 void setsignedSflightpath(double x){signedSflightpath_=x;} 00106 00107 // Et_PFchargedhadrcands/Etjet; 00108 double PFChargedHadrCandsEtJetEtRatio()const{return(PFChargedHadrCandsEtJetEtRatio_);} 00109 void setPFChargedHadrCandsEtJetEtRatio(double x){PFChargedHadrCandsEtJetEtRatio_=x;} 00110 00111 // PF neutral hadron candidates E sum; 00112 double PFNeutrHadrCandsE()const{return(PFNeutrHadrCandsE_);} 00113 void setPFNeutrHadrCandsE(double x){PFNeutrHadrCandsE_=x;} 00114 00115 int PFNeutrHadrCandsN()const{return(PFNeutrHadrCandsN_);} 00116 void setPFNeutrHadrCandsN(int x){PFNeutrHadrCandsN_=x;} 00117 00118 //mean DR_PFNeutrHadrcands-lead.PFcand.; 00119 double PFNeutrHadrCandsRadius()const{return(PFNeutrHadrCandsRadius_);} // NaN : PFNeutrHadrCandsN()=0; 00120 void setPFNeutrHadrCandsRadius(double x){PFNeutrHadrCandsRadius_=x;} 00121 00122 // PF gamma candidates E sum; 00123 double PFGammaCandsE()const{return(PFGammaCandsE_);} 00124 void setPFGammaCandsE(double x){PFGammaCandsE_=x;} 00125 00126 // isol. band PF gamma candidates E sum; 00127 double isolPFGammaCandsE()const{return(isolPFGammaCandsE_);} 00128 void setisolPFGammaCandsE(double x){isolPFGammaCandsE_=x;} 00129 00130 int PFGammaCandsN()const{return(PFGammaCandsN_);} 00131 void setPFGammaCandsN(int x){PFGammaCandsN_=x;} 00132 00133 //mean DR_PFgammacands-lead.PFcand.; 00134 double PFGammaCandsRadius()const{return(PFGammaCandsRadius_);} // NaN : PFGammaCandsN()=0; 00135 void setPFGammaCandsRadius(double x){PFGammaCandsRadius_=x;} 00136 00137 // E_PFgammacands / (E_PFgammacands + E_PFchargedhadrcands); 00138 double PFGammaCandsEJetalternatERatio()const{return(PFGammaCandsEJetalternatERatio_);} 00139 void setPFGammaCandsEJetalternatERatio(double x){PFGammaCandsEJetalternatERatio_=x;} 00140 00141 // E_PFgammacands,isol.band / (E_PFgammacands + E_PFchargedhadrcands); 00142 double isolPFGammaCandsEJetalternatERatio()const{return(isolPFGammaCandsEJetalternatERatio_);} 00143 void setisolPFGammaCandsEJetalternatERatio(double x){isolPFGammaCandsEJetalternatERatio_=x;} 00144 00145 // E_PFgammacands,isol.band / E_PFgammacands; 00146 double PFGammaCandsERatio()const{return(PFGammaCandsERatio_);} // NaN : PFGammaCandsN()=0; 00147 void setPFGammaCandsERatio(double x){PFGammaCandsERatio_=x;} 00148 00149 math::XYZTLorentzVector alternatLorentzVect()const{return(alternatLorentzVect_);} // rec. charged hadr. candidates + rec. gamma candidates combined; 00150 void setalternatLorentzVect(math::XYZTLorentzVector x){alternatLorentzVect_=x;} 00151 00152 // EtECAL*/Pt_lead.PFcand. *using ECAL cell hits inside a DR cone around lead. charged hadr. candidate ECAL impact point direction; 00153 double ECALEtleadPFChargedHadrCandPtRatio()const{return(ECALEtleadPFChargedHadrCandPtRatio_);} // NaN : failure when trying to find the lead. charged hadr. candidate contact on ECAL surface point; 00154 void setECALEtleadPFChargedHadrCandPtRatio(double x){ECALEtleadPFChargedHadrCandPtRatio_=x;} 00155 00156 // EtHCAL**/Pt_lead.PFcand.; **using HCAL tower hits inside a DR cone around lead. charged hadr. candidate ECAL impact point direction; 00157 double HCALEtleadPFChargedHadrCandPtRatio()const{return(HCALEtleadPFChargedHadrCandPtRatio_);} // NaN : failure when trying to find the lead. charged hadr. candidate contact on ECAL surface point; 00158 void setHCALEtleadPFChargedHadrCandPtRatio(double x){HCALEtleadPFChargedHadrCandPtRatio_=x;} 00159 private: 00160 PFJetRef PFJetRef_; 00161 PFIsolatedTauTagInfoRef PFIsolatedTauTagInfoRef_; 00162 PFCandidateRefVector PFChargedHadrCands_; 00163 PFCandidateRefVector selectedPFChargedHadrCands_; 00164 PFCandidateRefVector signalPFChargedHadrCands_; 00165 PFCandidateRefVector isolPFChargedHadrCands_; 00166 bool candidate_selectedByPFChargedHadrCands_; 00167 bool electronTagged_; 00168 bool muonTagged_; 00169 double leadPFChargedHadrCandsignedSipt_; 00170 double leadPFChargedHadrCandsignedSip3D_; 00171 double signedSflightpath_; 00172 double PFChargedHadrCandsEtJetEtRatio_; 00173 double PFNeutrHadrCandsE_; 00174 int PFNeutrHadrCandsN_; 00175 double PFNeutrHadrCandsRadius_; 00176 double PFGammaCandsE_; 00177 double isolPFGammaCandsE_; 00178 int PFGammaCandsN_; 00179 double PFGammaCandsRadius_; 00180 double PFGammaCandsEJetalternatERatio_; 00181 double isolPFGammaCandsEJetalternatERatio_; 00182 double PFGammaCandsERatio_; 00183 math::XYZTLorentzVector alternatLorentzVect_; 00184 double ECALEtleadPFChargedHadrCandPtRatio_; 00185 double HCALEtleadPFChargedHadrCandPtRatio_; 00186 }; 00187 00188 DECLARE_EDM_REFS( PFCombinedTauTagInfo ) 00189 00190 } 00191 00192 #endif // DataFormats_BTauReco_PFCombinedTauTagInfo_h