![]() |
![]() |
00001 #ifndef DataFormats_BTauReco_EMIsolatedTauTagInfo_h 00002 #define DataFormats_BTauReco_EMIsolatedTauTagInfo_h 00003 // 00004 // \class EMIsolatedTauTagInfo 00005 // 00006 00007 #include "DataFormats/BTauReco/interface/RefMacros.h" 00008 #include "Math/GenVector/VectorUtil.h" 00009 #include "Math/GenVector/PxPyPzE4D.h" 00010 #include "DataFormats/Math/interface/LorentzVector.h" 00011 #include "DataFormats/Math/interface/LorentzVectorFwd.h" 00012 #include "DataFormats/BTauReco/interface/BaseTagInfo.h" 00013 #include "DataFormats/BTauReco/interface/JetCrystalsAssociation.h" 00014 00015 namespace reco { 00016 00017 class EMIsolatedTauTagInfo : public BaseTagInfo { 00018 00019 public: 00020 //default constructor 00021 EMIsolatedTauTagInfo() : m_discriminator(0), m_jetCrystalsAssociation() { } 00022 00023 EMIsolatedTauTagInfo(double discriminator, const JetCrystalsAssociationRef & jetCrystals) : 00024 m_discriminator( discriminator ), 00025 m_jetCrystalsAssociation( jetCrystals ) { } 00026 00027 // destructor 00028 virtual ~EMIsolatedTauTagInfo() { }; 00029 virtual EMIsolatedTauTagInfo* clone() const { return new EMIsolatedTauTagInfo( * this ); } 00030 00031 // get the jet from the jetTag 00032 virtual edm::RefToBase<Jet> jet() const { return m_jetCrystalsAssociation->first; } 00033 virtual EMLorentzVectorRefVector lorentzVectorRecHits() const { return m_jetCrystalsAssociation->second; } 00034 const JetCrystalsAssociationRef & jcaRef() const { return m_jetCrystalsAssociation; } 00035 00036 // default discriminator: returns the value of the discriminator computed with the parameters taken from the cfg file in the EDProducer 00037 float discriminator() const { 00038 return m_discriminator; 00039 } 00040 00041 void setDiscriminator(double discriminator) { m_discriminator = discriminator; } 00042 00043 //Method to recompute the discriminator 00044 double pIsol(float rMax, float rMin) const 00045 { 00046 const EMLorentzVectorRefVector & myRecHits = m_jetCrystalsAssociation->second; 00047 const Jet & myJet = * m_jetCrystalsAssociation->first; 00048 double energyRMax= 0.; 00049 double energyRMin = 0.; 00050 00051 for (EMLorentzVectorRefVector::const_iterator mRH = myRecHits.begin(); mRH != myRecHits.end(); ++mRH) 00052 { 00053 double delta = ROOT::Math::VectorUtil::DeltaR((myJet).p4().Vect(), (**mRH)); 00054 if (delta < rMax) { 00055 energyRMax += (**mRH).pt(); 00056 } 00057 if (delta < rMin) { 00058 energyRMin += (**mRH).pt(); 00059 } 00060 } 00061 double pIsol = energyRMax - energyRMin; 00062 return pIsol; 00063 } 00064 00065 float discriminator(float rMax, float rMin, float pIsolCut) const 00066 { 00067 double newDiscriminator_ = 0; 00068 double pIsol_ = pIsol(rMax, rMin); 00069 if (pIsol_ < pIsolCut) newDiscriminator_ = 1.; 00070 00071 return newDiscriminator_; 00072 } 00073 00074 private: 00075 00076 float m_discriminator; //Default discriminator assigned in the EDProducer 00077 JetCrystalsAssociationRef m_jetCrystalsAssociation; 00078 }; 00079 00080 DECLARE_EDM_REFS( EMIsolatedTauTagInfo ) 00081 00082 } 00083 00084 #endif // DataFormats_BTauReco_EMIsolatedTauTagInfo_h