![]() |
![]() |
00001 #ifndef DataFormats_BTauReco_CombinedTauTagInfo_h 00002 #define DataFormats_BTauReco_CombinedTauTagInfo_h 00003 00004 /* class CombinedTauTagInfo 00005 * Extended object for the Tau Combination algorithm, 00006 * created: Dec 18 2006, 00007 * revised: Jul 02 2007 00008 * author: Ludovic Houchu. 00009 */ 00010 00011 #include <limits> 00012 #include <math.h> 00013 #include "CLHEP/Vector/LorentzVector.h" 00014 #include "DataFormats/BTauReco/interface/RefMacros.h" 00015 #include "DataFormats/JetReco/interface/Jet.h" 00016 #include "DataFormats/TrackReco/interface/Track.h" 00017 #include "DataFormats/TrackReco/interface/TrackFwd.h" 00018 #include "DataFormats/JetReco/interface/JetTracksAssociation.h" 00019 #include "DataFormats/BTauReco/interface/JTATagInfo.h" 00020 #include "DataFormats/BTauReco/interface/IsolatedTauTagInfo.h" 00021 00022 namespace reco { 00023 00024 class CombinedTauTagInfo : public JTATagInfo { 00025 public: 00026 CombinedTauTagInfo(){} 00027 CombinedTauTagInfo(const JetTracksAssociationRef& jtaRef) : JTATagInfo(jtaRef) { 00028 thecandidate_passed_trackerselection=false; 00029 thecandidate_is_GoodTauCandidate=false; 00030 thecandidate_is_infact_GoodElectronCandidate=false; 00031 thecandidate_is_infact_GoodMuonCandidate=false; 00032 thecandidate_needs_LikelihoodRatio_discrimination=false; 00033 filtered_Tks_.clear(); 00034 signal_Tks_.clear(); 00035 isol_Tks_.clear(); 00036 theleadTk_signedipt_significance=NAN; 00037 theleadTk_signedip3D_significance=NAN; 00038 thesignedflightpath_significance=NAN; 00039 theTksEt_o_JetEt=NAN; 00040 theneutralE=NAN; 00041 theisolneutralE=NAN; 00042 theisolneutralEtsum=NAN; 00043 theneutralECALClus_number=std::numeric_limits<int>::quiet_NaN(); 00044 theneutralECALClus_radius=NAN; 00045 theneutralE_o_TksEneutralE=NAN; 00046 theisolneutralE_o_TksEneutralE=NAN; 00047 theneutralE_ratio=NAN; 00048 thealternatrecJet_HepLV.setPx(NAN); 00049 thealternatrecJet_HepLV.setPy(NAN); 00050 thealternatrecJet_HepLV.setPz(NAN); 00051 thealternatrecJet_HepLV.setE(NAN); 00052 theECALEt_o_leadTkPt=NAN; 00053 theHCALEt_o_leadTkPt=NAN; 00054 } 00055 virtual ~CombinedTauTagInfo() {}; 00056 00057 // float discriminator() returns 0. if candidate did not pass tracker selection, 00058 // 1. if candidate passed tracker selection and did not contain neutral ECAL clus., 00059 // 0<= <=1 if candidate passed tracker selection, contained neutral ECAL clus. and went through the likelihood ratio mechanism, 00060 // NaN the values of the likelihood functions PDFs are 0 (test the result of discriminator() with bool isnan(.)); 00061 00062 //the reference to the IsolatedTauTagInfo 00063 const IsolatedTauTagInfoRef & isolatedtautaginfoRef() const { return IsolatedTauTagInfoRef_; } 00064 void setisolatedtautaginfoRef(const IsolatedTauTagInfoRef & x) { IsolatedTauTagInfoRef_ = x; } 00065 00066 //get the tracks from the JetTag 00067 const TrackRefVector& allTks() const { return m_jetTracksAssociation->second; } 00068 00069 //the tracks considered in the isolation strip and signal cone selections 00070 const TrackRefVector& selectedTks() const { return filtered_Tks_; } 00071 void setselectedTks(const TrackRefVector& x) { filtered_Tks_=x; } 00072 00073 //the tracks in the signal cone 00074 const TrackRefVector& signalTks() const { return signal_Tks_; } 00075 void setsignalTks(const TrackRefVector& x) { signal_Tks_=x; } 00076 00077 int signalTks_qsum()const{ // NaN : (int)(signal_Tks_.size())=0; 00078 int signal_Tks_qsum_=std::numeric_limits<int>::quiet_NaN(); 00079 if((int)(signal_Tks_.size())!=0){ 00080 signal_Tks_qsum_=0; 00081 for(TrackRefVector::const_iterator iTk=signal_Tks_.begin();iTk!=signal_Tks_.end();iTk++){ 00082 signal_Tks_qsum_+=(**iTk).charge(); 00083 } 00084 } 00085 return signal_Tks_qsum_; 00086 } 00087 00088 //the tracks in the isolation band 00089 const TrackRefVector& isolTks() const { return isol_Tks_; } 00090 void setisolTks(const TrackRefVector& x) { isol_Tks_=x; } 00091 00092 virtual CombinedTauTagInfo* clone() const{return new CombinedTauTagInfo(*this );} 00093 00094 bool passed_trackerselection()const{return(thecandidate_passed_trackerselection);} 00095 void setpassed_trackerselection(bool x){thecandidate_passed_trackerselection=x;} 00096 00097 bool is_GoodTauCandidate()const{return(thecandidate_is_GoodTauCandidate);} // true : passed tracker sel. and no neutral activity inside jet; 00098 void setis_GoodTauCandidate(bool x){thecandidate_is_GoodTauCandidate=x;} 00099 00100 bool infact_GoodElectronCandidate()const{return(thecandidate_is_infact_GoodElectronCandidate);} // true : passed tracker sel., contains 1 signal tk, e-identified through (ECALEt_o_leadTkPt(),HCALEt_o_leadTkPt()) space; 00101 void setinfact_GoodElectronCandidate(bool x){thecandidate_is_infact_GoodElectronCandidate=x;} 00102 00103 bool infact_GoodMuonCandidate()const{return(thecandidate_is_infact_GoodMuonCandidate);} // true : passed tracker sel., contains 1 signal tk, mu-identified through (ECALEt_o_leadTkPt(),HCALEt_o_leadTkPt()) space; 00104 void setinfact_GoodMuonCandidate(bool x){thecandidate_is_infact_GoodMuonCandidate=x;} 00105 00106 bool needs_LikelihoodRatio_discrimination()const{return(thecandidate_needs_LikelihoodRatio_discrimination);} // true : passed tracker sel. and neutral activity inside jet; 00107 void setneeds_LikelihoodRatio_discrimination(bool x){thecandidate_needs_LikelihoodRatio_discrimination=x;} 00108 00109 double leadTk_signedipt_significance()const{return (theleadTk_signedipt_significance);} // NaN : failure; 00110 void setleadTk_signedipt_significance(double x){theleadTk_signedipt_significance=x;} 00111 00112 double leadTk_signedip3D_significance()const{return(theleadTk_signedip3D_significance);} // NaN : failure; 00113 void setleadTk_signedip3D_significance(double x){theleadTk_signedip3D_significance=x;} 00114 00115 double signedflightpath_significance()const{return (thesignedflightpath_significance);} // NaN : failure, did not build a SV.; 00116 void setsignedflightpath_significance(double x){thesignedflightpath_significance=x;} 00117 00118 // Ettks/Etjet; 00119 double TksEt_o_JetEt()const{return(theTksEt_o_JetEt);} 00120 void setTksEt_o_JetEt(double x){theTksEt_o_JetEt=x;} 00121 00122 // Eneutr.clus.; 00123 double neutralE()const{return(theneutralE);} 00124 void setneutralE(double x){theneutralE=x;} 00125 00126 // Eneutr.clus.,isol.band; 00127 double isolneutralE()const{return(theisolneutralE);} 00128 void setisolneutralE(double x){theisolneutralE=x;} 00129 00130 // sum of Etneutr.clus.,isol.band; 00131 double isolneutralEtsum()const{return(theisolneutralEtsum);} 00132 void setisolneutralEtsum(double x){theisolneutralEtsum=x;} 00133 00134 int neutralECALClus_number()const{return(theneutralECALClus_number);} 00135 void setneutralECALClus_number(int x){theneutralECALClus_number=x;} 00136 00137 //mean DRneutr.clus.-lead.tk 00138 double neutralECALClus_radius()const{return(theneutralECALClus_radius);} // NaN : neutralECALClus_number()=0; 00139 void setneutralECALClus_radius(double x){theneutralECALClus_radius=x;} 00140 00141 // Eneutr.clus. / (Eneutr.clus. + Etks) , Etks built with tks impulsion and charged pi mass hypothesis; 00142 double neutralE_o_TksEneutralE()const{return(theneutralE_o_TksEneutralE);} 00143 void setneutralE_o_TksEneutralE(double x){theneutralE_o_TksEneutralE=x;} 00144 00145 // Eneutr.clus.,isol.band / (Eneutr.clus. + Etks); 00146 double isolneutralE_o_TksEneutralE()const{return(theisolneutralE_o_TksEneutralE);} 00147 void setisolneutralE_o_TksEneutralE(double x){theisolneutralE_o_TksEneutralE=x;} 00148 00149 // Eneutr.clus.,isol.band / Eneutr.clus.; 00150 double neutralE_ratio()const{return(theneutralE_ratio);} // NaN : neutralECALClus_number()=0; 00151 void setneutralE_ratio(double x){theneutralE_ratio=x;} 00152 00153 CLHEP::HepLorentzVector alternatrecJet_HepLV()const{return(thealternatrecJet_HepLV);} // rec. pi+/- candidates + neutral ECAL clus. combined; 00154 void setalternatrecJet_HepLV(CLHEP::HepLorentzVector x){thealternatrecJet_HepLV=x;} 00155 00156 // EtECAL*/Ptlead.tk *using ECAL cell hits inside a DR cone around lead tk ECAL impact point direction; 00157 double ECALEt_o_leadTkPt()const{return(theECALEt_o_leadTkPt);} // NaN : failure when trying to find the lead. tk contact on ECAL surface point; 00158 void setECALEt_o_leadTkPt(double x){theECALEt_o_leadTkPt=x;} 00159 00160 // EtHCAL**/Ptlead.tk; **using HCAL tower hits inside a DR cone around lead tk ECAL impact point direction; 00161 double HCALEt_o_leadTkPt()const{return(theHCALEt_o_leadTkPt);} // NaN : failure when trying to find the lead. tk contact on ECAL surface point; 00162 void setHCALEt_o_leadTkPt(double x){theHCALEt_o_leadTkPt=x;} 00163 private: 00164 IsolatedTauTagInfoRef IsolatedTauTagInfoRef_; 00165 TrackRefVector filtered_Tks_; 00166 TrackRefVector signal_Tks_; 00167 TrackRefVector isol_Tks_; 00168 bool thecandidate_passed_trackerselection; 00169 bool thecandidate_is_GoodTauCandidate; 00170 bool thecandidate_is_infact_GoodElectronCandidate; 00171 bool thecandidate_is_infact_GoodMuonCandidate; 00172 bool thecandidate_needs_LikelihoodRatio_discrimination; 00173 double theleadTk_signedipt_significance; 00174 double theleadTk_signedip3D_significance; 00175 double thesignedflightpath_significance; 00176 double theTksEt_o_JetEt; 00177 double theneutralE; 00178 double theisolneutralE; 00179 double theisolneutralEtsum; 00180 int theneutralECALClus_number; 00181 double theneutralECALClus_radius; 00182 double theneutralE_o_TksEneutralE; 00183 double theisolneutralE_o_TksEneutralE; 00184 double theneutralE_ratio; 00185 CLHEP::HepLorentzVector thealternatrecJet_HepLV; 00186 double theECALEt_o_leadTkPt; 00187 double theHCALEt_o_leadTkPt; 00188 }; 00189 00190 DECLARE_EDM_REFS( CombinedTauTagInfo ) 00191 00192 } 00193 00194 #endif // DataFormsts_BTauReco_CombinedTauTagInfo_h