Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:03:46

0001 #ifndef DataFormats_BTauReco_CombinedTauTagInfo_h
0002 #define DataFormats_BTauReco_CombinedTauTagInfo_h
0003 
0004 /* class CombinedTauTagInfo
0005  *  Extended object for the Tau Combination algorithm, 
0006  *  created: Dec 18 2006,
0007  *  revised: Jul 02 2007
0008  *  author: Ludovic Houchu.
0009  */
0010 
0011 #include <limits>
0012 #include <cmath>
0013 #include "CLHEP/Vector/LorentzVector.h"
0014 #include "DataFormats/BTauReco/interface/RefMacros.h"
0015 #include "DataFormats/JetReco/interface/Jet.h"
0016 #include "DataFormats/TrackReco/interface/Track.h"
0017 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0018 #include "DataFormats/JetReco/interface/JetTracksAssociation.h"
0019 #include "DataFormats/BTauReco/interface/JTATagInfo.h"
0020 #include "DataFormats/BTauReco/interface/IsolatedTauTagInfo.h"
0021 
0022 namespace reco {
0023 
0024   class CombinedTauTagInfo : public JTATagInfo {
0025   public:
0026     CombinedTauTagInfo() {}
0027     CombinedTauTagInfo(const JetTracksAssociationRef& jtaRef) : JTATagInfo(jtaRef) {
0028       thecandidate_passed_trackerselection = false;
0029       thecandidate_is_GoodTauCandidate = false;
0030       thecandidate_is_infact_GoodElectronCandidate = false;
0031       thecandidate_is_infact_GoodMuonCandidate = false;
0032       thecandidate_needs_LikelihoodRatio_discrimination = false;
0033       filtered_Tks_.clear();
0034       signal_Tks_.clear();
0035       isol_Tks_.clear();
0036       theleadTk_signedipt_significance = NAN;
0037       theleadTk_signedip3D_significance = NAN;
0038       thesignedflightpath_significance = NAN;
0039       theTksEt_o_JetEt = NAN;
0040       theneutralE = NAN;
0041       theisolneutralE = NAN;
0042       theisolneutralEtsum = NAN;
0043       theneutralECALClus_number = std::numeric_limits<int>::quiet_NaN();
0044       theneutralECALClus_radius = NAN;
0045       theneutralE_o_TksEneutralE = NAN;
0046       theisolneutralE_o_TksEneutralE = NAN;
0047       theneutralE_ratio = NAN;
0048       thealternatrecJet_HepLV.setPx(NAN);
0049       thealternatrecJet_HepLV.setPy(NAN);
0050       thealternatrecJet_HepLV.setPz(NAN);
0051       thealternatrecJet_HepLV.setE(NAN);
0052       theECALEt_o_leadTkPt = NAN;
0053       theHCALEt_o_leadTkPt = NAN;
0054     }
0055     ~CombinedTauTagInfo() override{};
0056 
0057     // float discriminator() returns 0.        if candidate did not pass tracker selection,
0058     //                               1.        if candidate passed tracker selection and did not contain neutral ECAL clus.,
0059     //                               0<=  <=1  if candidate passed tracker selection, contained neutral ECAL clus. and went through the likelihood ratio mechanism,
0060     //                               NaN       the values of the likelihood functions PDFs are 0 (test the result of discriminator() with bool isnan(.));
0061 
0062     //the reference to the IsolatedTauTagInfo
0063     const IsolatedTauTagInfoRef& isolatedtautaginfoRef() const { return IsolatedTauTagInfoRef_; }
0064     void setisolatedtautaginfoRef(const IsolatedTauTagInfoRef& x) { IsolatedTauTagInfoRef_ = x; }
0065 
0066     //get the tracks from the JetTag
0067     const TrackRefVector& allTks() const { return m_jetTracksAssociation->second; }
0068 
0069     //the tracks considered in the isolation strip and signal cone selections
0070     const TrackRefVector& selectedTks() const { return filtered_Tks_; }
0071     void setselectedTks(const TrackRefVector& x) { filtered_Tks_ = x; }
0072 
0073     //the tracks in the signal cone
0074     const TrackRefVector& signalTks() const { return signal_Tks_; }
0075     void setsignalTks(const TrackRefVector& x) { signal_Tks_ = x; }
0076 
0077     int signalTks_qsum() const {  // NaN : (int)(signal_Tks_.size())=0;
0078       int signal_Tks_qsum_ = std::numeric_limits<int>::quiet_NaN();
0079       if ((int)(signal_Tks_.size()) != 0) {
0080         signal_Tks_qsum_ = 0;
0081         for (TrackRefVector::const_iterator iTk = signal_Tks_.begin(); iTk != signal_Tks_.end(); iTk++) {
0082           signal_Tks_qsum_ += (**iTk).charge();
0083         }
0084       }
0085       return signal_Tks_qsum_;
0086     }
0087 
0088     //the tracks in the isolation band
0089     const TrackRefVector& isolTks() const { return isol_Tks_; }
0090     void setisolTks(const TrackRefVector& x) { isol_Tks_ = x; }
0091 
0092     CombinedTauTagInfo* clone() const override { return new CombinedTauTagInfo(*this); }
0093 
0094     bool passed_trackerselection() const { return (thecandidate_passed_trackerselection); }
0095     void setpassed_trackerselection(bool x) { thecandidate_passed_trackerselection = x; }
0096 
0097     bool is_GoodTauCandidate() const {
0098       return (thecandidate_is_GoodTauCandidate);
0099     }  // true : passed tracker sel. and no neutral activity inside jet;
0100     void setis_GoodTauCandidate(bool x) { thecandidate_is_GoodTauCandidate = x; }
0101 
0102     bool infact_GoodElectronCandidate() const {
0103       return (thecandidate_is_infact_GoodElectronCandidate);
0104     }  // true : passed tracker sel., contains 1 signal tk, e-identified through (ECALEt_o_leadTkPt(),HCALEt_o_leadTkPt()) space;
0105     void setinfact_GoodElectronCandidate(bool x) { thecandidate_is_infact_GoodElectronCandidate = x; }
0106 
0107     bool infact_GoodMuonCandidate() const {
0108       return (thecandidate_is_infact_GoodMuonCandidate);
0109     }  // true : passed tracker sel., contains 1 signal tk, mu-identified through (ECALEt_o_leadTkPt(),HCALEt_o_leadTkPt()) space;
0110     void setinfact_GoodMuonCandidate(bool x) { thecandidate_is_infact_GoodMuonCandidate = x; }
0111 
0112     bool needs_LikelihoodRatio_discrimination() const {
0113       return (thecandidate_needs_LikelihoodRatio_discrimination);
0114     }  // true : passed tracker sel. and neutral activity inside jet;
0115     void setneeds_LikelihoodRatio_discrimination(bool x) { thecandidate_needs_LikelihoodRatio_discrimination = x; }
0116 
0117     double leadTk_signedipt_significance() const { return (theleadTk_signedipt_significance); }  // NaN : failure;
0118     void setleadTk_signedipt_significance(double x) { theleadTk_signedipt_significance = x; }
0119 
0120     double leadTk_signedip3D_significance() const { return (theleadTk_signedip3D_significance); }  // NaN : failure;
0121     void setleadTk_signedip3D_significance(double x) { theleadTk_signedip3D_significance = x; }
0122 
0123     double signedflightpath_significance() const {
0124       return (thesignedflightpath_significance);
0125     }  // NaN : failure, did not build a SV.;
0126     void setsignedflightpath_significance(double x) { thesignedflightpath_significance = x; }
0127 
0128     // Ettks/Etjet;
0129     double TksEt_o_JetEt() const { return (theTksEt_o_JetEt); }
0130     void setTksEt_o_JetEt(double x) { theTksEt_o_JetEt = x; }
0131 
0132     // Eneutr.clus.;
0133     double neutralE() const { return (theneutralE); }
0134     void setneutralE(double x) { theneutralE = x; }
0135 
0136     // Eneutr.clus.,isol.band;
0137     double isolneutralE() const { return (theisolneutralE); }
0138     void setisolneutralE(double x) { theisolneutralE = x; }
0139 
0140     // sum of Etneutr.clus.,isol.band;
0141     double isolneutralEtsum() const { return (theisolneutralEtsum); }
0142     void setisolneutralEtsum(double x) { theisolneutralEtsum = x; }
0143 
0144     int neutralECALClus_number() const { return (theneutralECALClus_number); }
0145     void setneutralECALClus_number(int x) { theneutralECALClus_number = x; }
0146 
0147     //mean DRneutr.clus.-lead.tk
0148     double neutralECALClus_radius() const { return (theneutralECALClus_radius); }  // NaN : neutralECALClus_number()=0;
0149     void setneutralECALClus_radius(double x) { theneutralECALClus_radius = x; }
0150 
0151     // Eneutr.clus. / (Eneutr.clus. + Etks) , Etks built with tks impulsion and charged pi mass hypothesis;
0152     double neutralE_o_TksEneutralE() const { return (theneutralE_o_TksEneutralE); }
0153     void setneutralE_o_TksEneutralE(double x) { theneutralE_o_TksEneutralE = x; }
0154 
0155     // Eneutr.clus.,isol.band / (Eneutr.clus. + Etks);
0156     double isolneutralE_o_TksEneutralE() const { return (theisolneutralE_o_TksEneutralE); }
0157     void setisolneutralE_o_TksEneutralE(double x) { theisolneutralE_o_TksEneutralE = x; }
0158 
0159     // Eneutr.clus.,isol.band / Eneutr.clus.;
0160     double neutralE_ratio() const { return (theneutralE_ratio); }  // NaN : neutralECALClus_number()=0;
0161     void setneutralE_ratio(double x) { theneutralE_ratio = x; }
0162 
0163     CLHEP::HepLorentzVector alternatrecJet_HepLV() const {
0164       return (thealternatrecJet_HepLV);
0165     }  // rec. pi+/- candidates + neutral ECAL clus. combined;
0166     void setalternatrecJet_HepLV(CLHEP::HepLorentzVector x) { thealternatrecJet_HepLV = x; }
0167 
0168     // EtECAL*/Ptlead.tk        *using ECAL cell hits inside a DR cone around lead tk ECAL impact point direction;
0169     double ECALEt_o_leadTkPt() const {
0170       return (theECALEt_o_leadTkPt);
0171     }  // NaN : failure when trying to find the lead. tk contact on ECAL surface point;
0172     void setECALEt_o_leadTkPt(double x) { theECALEt_o_leadTkPt = x; }
0173 
0174     // EtHCAL**/Ptlead.tk;      **using HCAL tower hits inside a DR cone around lead tk ECAL impact point direction;
0175     double HCALEt_o_leadTkPt() const {
0176       return (theHCALEt_o_leadTkPt);
0177     }  // NaN : failure when trying to find the lead. tk contact on ECAL surface point;
0178     void setHCALEt_o_leadTkPt(double x) { theHCALEt_o_leadTkPt = x; }
0179 
0180   private:
0181     IsolatedTauTagInfoRef IsolatedTauTagInfoRef_;
0182     TrackRefVector filtered_Tks_;
0183     TrackRefVector signal_Tks_;
0184     TrackRefVector isol_Tks_;
0185     bool thecandidate_passed_trackerselection;
0186     bool thecandidate_is_GoodTauCandidate;
0187     bool thecandidate_is_infact_GoodElectronCandidate;
0188     bool thecandidate_is_infact_GoodMuonCandidate;
0189     bool thecandidate_needs_LikelihoodRatio_discrimination;
0190     double theleadTk_signedipt_significance;
0191     double theleadTk_signedip3D_significance;
0192     double thesignedflightpath_significance;
0193     double theTksEt_o_JetEt;
0194     double theneutralE;
0195     double theisolneutralE;
0196     double theisolneutralEtsum;
0197     int theneutralECALClus_number;
0198     double theneutralECALClus_radius;
0199     double theneutralE_o_TksEneutralE;
0200     double theisolneutralE_o_TksEneutralE;
0201     double theneutralE_ratio;
0202     CLHEP::HepLorentzVector thealternatrecJet_HepLV;
0203     double theECALEt_o_leadTkPt;
0204     double theHCALEt_o_leadTkPt;
0205   };
0206 
0207   DECLARE_EDM_REFS(CombinedTauTagInfo)
0208 
0209 }  // namespace reco
0210 
0211 #endif  // DataFormsts_BTauReco_CombinedTauTagInfo_h