Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport of access to tauID and electron discrimination from miniAOD #17292

28 changes: 28 additions & 0 deletions DataFormats/PatCandidates/interface/PATTauDiscriminator.h
@@ -0,0 +1,28 @@
#ifndef DataFormats_PatCandidates_PATTauDiscriminator_h
#define DataFormats_PatCandidates_PATTauDiscriminator_h
#include "DataFormats/Common/interface/AssociationVector.h"
#include "DataFormats/Common/interface/RefProd.h"
#include "DataFormats/PatCandidates/interface/Tau.h"

#include <vector>

namespace pat {
typedef edm::AssociationVector<pat::TauRefProd,std::vector<float> > PATTauDiscriminatorBase;

class PATTauDiscriminator : public PATTauDiscriminatorBase {
public:
/// empty constructor
PATTauDiscriminator(); // : PATTauDiscriminatorBase() {}
/// constructor from reference to pat::Tau
PATTauDiscriminator(const pat::TauRefProd & ref) : PATTauDiscriminatorBase(ref) {}
/// constructor from base object
PATTauDiscriminator(const PATTauDiscriminatorBase &v) : PATTauDiscriminatorBase(v) {}
};

typedef pat::PATTauDiscriminator::value_type PATTauDiscriminatorVT;
typedef edm::Ref<pat::PATTauDiscriminator> PATTauDiscriminatorRef;
typedef edm::RefProd<pat::PATTauDiscriminator> PATTauDiscriminatorRefProd;
typedef edm::RefVector<pat::PATTauDiscriminator> PATTauDiscriminatorRefVector;
}

#endif
5 changes: 2 additions & 3 deletions DataFormats/PatCandidates/interface/Tau.h
@@ -1,6 +1,3 @@
//
//

#ifndef DataFormats_PatCandidates_Tau_h
#define DataFormats_PatCandidates_Tau_h

Expand Down Expand Up @@ -346,6 +343,8 @@ namespace pat {
float ecalEnergyLeadChargedHadrCand() const { return pfEssential().ecalEnergyLeadChargedHadrCand_; }
/// return hcal energy from LeadChargedHadrCand
float hcalEnergyLeadChargedHadrCand() const { return pfEssential().hcalEnergyLeadChargedHadrCand_; }
/// return phiAtEcalEntrance
float phiAtEcalEntrance() const { return pfEssential().phiAtEcalEntrance_; }
/// return etaAtEcalEntrance
float etaAtEcalEntrance() const { return pfEssential().etaAtEcalEntrance_; }
/// return etaAtEcalEntrance from LeadChargedCand
Expand Down
1 change: 1 addition & 0 deletions DataFormats/PatCandidates/interface/TauPFEssential.h
Expand Up @@ -53,6 +53,7 @@ struct TauPFEssential {
float ecalEnergy_;
float hcalEnergy_;
float leadingTrackNormChi2_;
float phiAtEcalEntrance_;
float etaAtEcalEntrance_;
float ecalEnergyLeadChargedHadrCand_;
float hcalEnergyLeadChargedHadrCand_;
Expand Down
3 changes: 3 additions & 0 deletions DataFormats/PatCandidates/src/PATTauDiscriminator.cc
@@ -0,0 +1,3 @@
#include "DataFormats/PatCandidates/interface/PATTauDiscriminator.h"

pat::PATTauDiscriminator::PATTauDiscriminator() : PATTauDiscriminatorBase() {};
1 change: 1 addition & 0 deletions DataFormats/PatCandidates/src/TauPFEssential.cc
Expand Up @@ -14,6 +14,7 @@ pat::tau::TauPFEssential::TauPFEssential(const reco::PFTau& tau) :
ecalEnergy_(0.),
hcalEnergy_(0.),
leadingTrackNormChi2_(1.e+3),
phiAtEcalEntrance_(0.),
etaAtEcalEntrance_(0.),
ecalEnergyLeadChargedHadrCand_(0.),
hcalEnergyLeadChargedHadrCand_(0.),
Expand Down
17 changes: 16 additions & 1 deletion DataFormats/PatCandidates/src/classes_def_objects.xml
Expand Up @@ -149,7 +149,8 @@
<version ClassVersion="10" checksum="2692173055"/>
</class>
<class name="std::vector<pat::tau::TauCaloSpecific>" />
<class name="pat::tau::TauPFEssential" ClassVersion="13">
<class name="pat::tau::TauPFEssential" ClassVersion="14">
<version ClassVersion="14" checksum="524735083" />
<version ClassVersion="13" checksum="1052833547" />
<version ClassVersion="12" checksum="3865233356" />
<version ClassVersion="11" checksum="1193752112" />
Expand Down Expand Up @@ -514,6 +515,20 @@
<class name="edm::Wrapper< std::vector<edm::Ptr<pat::Jet> > >" />
<class name="edm::Wrapper< std::vector< std::vector<edm::Ptr<pat::Jet> > > >" />

<class name="pat::PATTauDiscriminatorBase">
<field name="transientVector_" transient="true"/>
</class>
<class name="pat::PATTauDiscriminator" ClassVersion="3">
<version ClassVersion="3" checksum="2916098408"/>
</class>
<class name="pat::PATTauDiscriminatorRef"/>
<class name="pat::PATTauDiscriminatorRefProd"/>
<class name="pat::PATTauDiscriminatorRefVector"/>
<class name="edm::Wrapper<pat::PATTauDiscriminator>"/>

<class name="std::pair<pat::TauRef, float>"/>
<class name="std::vector<std::pair<pat::TauRef, float> >" />

</selection>
<exclusion>
</exclusion>
Expand Down
11 changes: 10 additions & 1 deletion DataFormats/PatCandidates/src/classes_objects.h
Expand Up @@ -19,6 +19,7 @@
#include "DataFormats/PatCandidates/interface/Conversion.h"
#include "DataFormats/PatCandidates/interface/PackedCandidate.h"
#include "DataFormats/PatCandidates/interface/PackedGenParticle.h"
#include "DataFormats/PatCandidates/interface/PATTauDiscriminator.h"

namespace DataFormats_PatCandidates {
struct dictionaryobjects {
Expand Down Expand Up @@ -181,7 +182,15 @@ namespace DataFormats_PatCandidates {
edm::Wrapper< std::vector< edm::Ptr<pat::Jet> > > wvptr_jet;
edm::Wrapper< std::vector< std::vector< edm::Ptr<pat::Jet> > > > wvvptr_jet;


pat::PATTauDiscriminatorBase pattdiscr_b;
pat::PATTauDiscriminator pattdiscr_o;
pat::PATTauDiscriminatorRef pattdiscr_r;
pat::PATTauDiscriminatorRefProd pattdiscr_rp;
pat::PATTauDiscriminatorRefVector pattdiscr_rv;
edm::Wrapper<pat::PATTauDiscriminator> pattdiscr_w;

std::pair<pat::TauRef, float> pattdiscr_p;
std::vector<std::pair<pat::TauRef, float> > pattdiscr_v;
};

}
10 changes: 5 additions & 5 deletions PhysicsTools/PatAlgos/plugins/PATTauProducer.cc
@@ -1,6 +1,3 @@
//
//

#include "PhysicsTools/PatAlgos/plugins/PATTauProducer.h"

#include "FWCore/MessageLogger/interface/MessageLogger.h"
Expand Down Expand Up @@ -362,14 +359,14 @@ void PATTauProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSetup
}

// extraction of variables needed to rerun MVA isolation and anti-electron discriminator on MiniAOD
// (only available for PFTaus)
if( aTau.isPFTau() ) {
edm::Handle<reco::PFTauCollection> pfTaus;
iEvent.getByToken(pfTauToken_, pfTaus);
reco::PFTauRef pfTauRef(pfTaus, idx);
pat::tau::TauPFEssential& aTauPFEssential = aTau.pfEssential_[0];
float ecalEnergy = 0;
float hcalEnergy = 0;
float sumPhiTimesEnergy = 0.;
float sumEtaTimesEnergy = 0.;
float sumEnergy = 0.;
float leadChargedCandPt = -99;
Expand All @@ -378,7 +375,8 @@ void PATTauProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSetup
for(std::vector<reco::PFCandidatePtr>::const_iterator it = signalCands.begin(); it != signalCands.end(); ++it) {
const reco::PFCandidatePtr& icand = *it;
ecalEnergy += icand->ecalEnergy();
hcalEnergy += icand->hcalEnergy();
hcalEnergy += icand->hcalEnergy();
sumPhiTimesEnergy += icand->positionAtECALEntrance().phi()*icand->energy();
sumEtaTimesEnergy += icand->positionAtECALEntrance().eta()*icand->energy();
sumEnergy += icand->energy();
const reco::Track* track = 0;
Expand All @@ -399,9 +397,11 @@ void PATTauProducer::produce(edm::Event & iEvent, const edm::EventSetup & iSetup
aTauPFEssential.ptLeadChargedCand_ = leadChargedCandPt;
aTauPFEssential.etaAtEcalEntranceLeadChargedCand_ = leadChargedCandEtaAtEcalEntrance;
if (sumEnergy != 0.) {
aTauPFEssential.phiAtEcalEntrance_ = sumPhiTimesEnergy/sumEnergy;
aTauPFEssential.etaAtEcalEntrance_ = sumEtaTimesEnergy/sumEnergy;
}
else {
aTauPFEssential.phiAtEcalEntrance_ = -99.;
aTauPFEssential.etaAtEcalEntrance_ = -99.;
}
float leadingTrackNormChi2 = 0;
Expand Down
15 changes: 15 additions & 0 deletions RecoTauTag/Configuration/python/dumpTauVariables_cfi.py
@@ -0,0 +1,15 @@
import FWCore.ParameterSet.Config as cms

dumpTauVariables = cms.EDProducer(
"CandViewNtpProducer",
## can be selectedTausCandidates or slimmedTaus from miniAOD
src = cms.InputTag("slimmedTaus"),
## prefix for variables for the dump
prefix = cms.untracked.string(""),
## allow access to function calls from derived classes
lazyParser = cms.untracked.bool(True),
## add run, event number and lumi section
eventInfo = cms.untracked.bool(True),
## define variables to be dumped
variables = cms.VPSet()
)