32 mva_ = std::make_unique<AntiElectronIDMVA6>(
cfg);
35 electronToken = consumes<pat::ElectronCollection>(
srcElectrons);
36 verbosity_ = ( cfg.
exists(
"verbosity") ) ?
40 produces<PATTauDiscriminator>(
"category");
45 double discriminate(
const TauRef&)
const;
52 bool isInEcalCrack(
double)
const;
55 std::unique_ptr<AntiElectronIDMVA6>
mva_;
69 mva_->beginEvent(evt, es);
81 bool isGsfElectronMatched =
false;
82 float deltaRDummy = 9.9;
83 const float ECALBarrelEndcapEtaBorder = 1.479;
84 float tauEtaAtEcalEntrance = theTauRef->etaAtEcalEntrance();
85 float leadChargedPFCandEtaAtEcalEntrance = theTauRef->etaAtEcalEntranceLeadChargedCand();
87 if( (*theTauRef).leadChargedHadrCand().isNonnull()) {
88 int numSignalPFGammaCandsInSigCone = 0;
91 double dR =
deltaR((*gamma)->p4(), theTauRef->leadChargedHadrCand()->p4());
95 numSignalPFGammaCandsInSigCone += 1;
99 for(
unsigned int ie = 0; ie <
Electrons->size(); ++ie ){
101 if ( theElectron.
pt() > 10. ) {
102 double deltaREleTau =
deltaR(theElectron.
p4(), theTauRef->p4());
103 deltaRDummy = deltaREleTau;
104 if( deltaREleTau < 0.3 ){
105 double mva_match = mva_->MVAValue(*theTauRef, theElectron);
106 bool hasGsfTrack = 0;
108 if(
abs(packedLeadTauCand->
pdgId()) == 11 )
114 if ( isInEcalCrack(tauEtaAtEcalEntrance) || isInEcalCrack(leadChargedPFCandEtaAtEcalEntrance) ) {
116 category_output_->setValue(tauIndex_, category);
121 if(
std::abs(tauEtaAtEcalEntrance) < ECALBarrelEndcapEtaBorder ){
122 if( numSignalPFGammaCandsInSigCone == 0 && hasGsfTrack ){
125 else if ( numSignalPFGammaCandsInSigCone >= 1 && hasGsfTrack ) {
129 if ( numSignalPFGammaCandsInSigCone == 0 && hasGsfTrack ) {
132 else if ( numSignalPFGammaCandsInSigCone >= 1 && hasGsfTrack ) {
136 mvaValue =
std::min(mvaValue, mva_match);
137 isGsfElectronMatched =
true;
142 if ( !isGsfElectronMatched ) {
143 mvaValue = mva_->MVAValue(*theTauRef);
144 bool hasGsfTrack = 0;
146 if(
abs(packedLeadTauCand->
pdgId()) == 11 ) hasGsfTrack = 1;
149 if ( isInEcalCrack(tauEtaAtEcalEntrance) || isInEcalCrack(leadChargedPFCandEtaAtEcalEntrance) ) {
151 category_output_->setValue(tauIndex_, category);
156 if(
std::abs(tauEtaAtEcalEntrance) < ECALBarrelEndcapEtaBorder ){
157 if( numSignalPFGammaCandsInSigCone == 0 && !hasGsfTrack ){
160 else if ( numSignalPFGammaCandsInSigCone >= 1 && !hasGsfTrack ) {
164 if ( numSignalPFGammaCandsInSigCone == 0 && !hasGsfTrack ) {
167 else if ( numSignalPFGammaCandsInSigCone >= 1 && !hasGsfTrack ) {
174 edm::LogPrint(
"PATTauAgainstEleMVA6") <<
"<PATTauDiscriminationAgainstElectronMVA6::discriminate>:" ;
175 edm::LogPrint(
"PATTauAgainstEleMVA6") <<
" tau: Pt = " << theTauRef->pt() <<
", eta = " << theTauRef->eta() <<
", phi = " << theTauRef->phi();
176 edm::LogPrint(
"PATTauAgainstEleMVA6") <<
" deltaREleTau = " << deltaRDummy <<
", isGsfElectronMatched = " << isGsfElectronMatched;
177 edm::LogPrint(
"PATTauAgainstEleMVA6") <<
" #Prongs = " << theTauRef->signalChargedHadrCands().size();
181 category_output_->setValue(tauIndex_, category);
195 double absEta = fabs(eta);
196 return (absEta > 1.460 && absEta < 1.558);
void beginEvent(const edm::Event &, const edm::EventSetup &)
T getParameter(std::string const &) const
virtual double pt() const final
transverse momentum
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
edm::RefProd< TauCollection > TauRefProd
bool isNonnull() const
Checks for non-null.
const LorentzVector & p4(P4Kind kind) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
bool exists(std::string const ¶meterName) const
checks if a parameter exists
~PATTauDiscriminationAgainstElectronMVA6()
std::unique_ptr< PATTauDiscriminator > category_output_
const_iterator begin() const
reco::GsfTrackRef gsfTrack() const
override the reco::GsfElectron::gsfTrack method, to access the internal storage of the supercluster ...
edm::EDGetTokenT< pat::ElectronCollection > electronToken
Abs< T >::type abs(const T &t)
const_iterator end() const
bool isInEcalCrack(double) const
T const * get() const
Returns C++ pointer to the item.
double deltaR(double eta1, double eta2, double phi1, double phi2)
PATTauDiscriminationAgainstElectronMVA6(const edm::ParameterSet &cfg)
std::unique_ptr< AntiElectronIDMVA6 > mva_
Analysis-level electron class.
edm::InputTag srcElectrons
edm::Handle< TauCollection > taus_
edm::Handle< pat::ElectronCollection > Electrons
virtual int pdgId() const
PDG identifier.
void endEvent(edm::Event &)
double discriminate(const TauRef &) const