31 mva_ = std::make_unique<AntiElectronIDMVA6>(
cfg);
34 electronToken = consumes<pat::ElectronCollection>(
srcElectrons);
35 vetoEcalCracks_ = cfg.
getParameter<
bool>(
"vetoEcalCracks");
39 produces<PATTauDiscriminator>(
"category");
44 double discriminate(
const TauRef&)
const override;
53 bool isInEcalCrack(
double)
const;
56 std::unique_ptr<AntiElectronIDMVA6>
mva_;
71 mva_->beginEvent(evt, es);
82 bool isGsfElectronMatched =
false;
83 float deltaRDummy = 9.9;
84 const float ECALBarrelEndcapEtaBorder = 1.479;
85 float tauEtaAtEcalEntrance = theTauRef->etaAtEcalEntrance();
86 float leadChargedPFCandEtaAtEcalEntrance = theTauRef->etaAtEcalEntranceLeadChargedCand();
88 if ((*theTauRef).leadChargedHadrCand().isNonnull()) {
89 int numSignalPFGammaCandsInSigCone = 0;
91 for (
const auto&
gamma : signalGammaCands) {
92 double dR =
deltaR(
gamma->p4(), theTauRef->leadChargedHadrCand()->p4());
96 numSignalPFGammaCandsInSigCone += 1;
100 for (
const auto& theElectron : *
Electrons) {
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 =
false;
109 if (
abs(packedLeadTauCand->
pdgId()) == 11)
112 hasGsfTrack = theElectron.gsfTrack().isNonnull();
115 if (vetoEcalCracks_ &&
116 (isInEcalCrack(tauEtaAtEcalEntrance) || isInEcalCrack(leadChargedPFCandEtaAtEcalEntrance))) {
118 category_output_->setValue(tauIndex_, category);
123 if (
std::abs(tauEtaAtEcalEntrance) < ECALBarrelEndcapEtaBorder) {
124 if (numSignalPFGammaCandsInSigCone == 0 && hasGsfTrack) {
126 }
else if (numSignalPFGammaCandsInSigCone >= 1 && hasGsfTrack) {
130 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 =
false;
147 if (
abs(packedLeadTauCand->
pdgId()) == 11)
151 if (vetoEcalCracks_ &&
152 (isInEcalCrack(tauEtaAtEcalEntrance) || isInEcalCrack(leadChargedPFCandEtaAtEcalEntrance))) {
154 category_output_->setValue(tauIndex_, category);
159 if (
std::abs(tauEtaAtEcalEntrance) < ECALBarrelEndcapEtaBorder) {
160 if (numSignalPFGammaCandsInSigCone == 0 && !hasGsfTrack) {
162 }
else if (numSignalPFGammaCandsInSigCone >= 1 && !hasGsfTrack) {
166 if (numSignalPFGammaCandsInSigCone == 0 && !hasGsfTrack) {
168 }
else if (numSignalPFGammaCandsInSigCone >= 1 && !hasGsfTrack) {
175 edm::LogPrint(
"PATTauAgainstEleMVA6") <<
"<PATTauDiscriminationAgainstElectronMVA6::discriminate>:";
177 <<
" tau: Pt = " << theTauRef->pt() <<
", eta = " << theTauRef->eta() <<
", phi = " << theTauRef->phi();
179 <<
" deltaREleTau = " << deltaRDummy <<
", isGsfElectronMatched = " << isGsfElectronMatched;
180 edm::LogPrint(
"PATTauAgainstEleMVA6") <<
" #Prongs = " << theTauRef->signalChargedHadrCands().size();
184 category_output_->setValue(tauIndex_, category);
195 double absEta = fabs(eta);
196 return (absEta > 1.460 && absEta < 1.558);
202 desc.
add<
double>(
"minMVANoEleMatchWOgWOgsfBL", 0.0);
203 desc.
add<
double>(
"minMVANoEleMatchWgWOgsfBL", 0.0);
204 desc.
add<
bool>(
"vetoEcalCracks",
true);
205 desc.
add<
bool>(
"usePhiAtEcalEntranceExtrapolation",
false);
207 desc.
add<
double>(
"minMVAWgWgsfBL", 0.0);
209 desc.
add<
double>(
"minMVAWOgWgsfEC", 0.0);
212 desc.
add<
bool>(
"returnMVA",
true);
213 desc.
add<
bool>(
"loadMVAfromDB",
true);
219 psd1.
add<
double>(
"cut");
225 desc.
add<
std::string>(
"mvaName_NoEleMatch_woGwoGSF_BL",
"gbr_NoEleMatch_woGwoGSF_BL");
227 desc.
add<
double>(
"minMVANoEleMatchWOgWOgsfEC", 0.0);
228 desc.
add<
std::string>(
"mvaName_NoEleMatch_wGwoGSF_BL",
"gbr_NoEleMatch_wGwoGSF_BL");
230 desc.
add<
double>(
"minMVAWOgWgsfBL", 0.0);
231 desc.
add<
double>(
"minMVAWgWgsfEC", 0.0);
232 desc.
add<
int>(
"verbosity", 0);
233 desc.
add<
std::string>(
"mvaName_NoEleMatch_wGwoGSF_EC",
"gbr_NoEleMatch_wGwoGSF_EC");
235 desc.
add<
std::string>(
"mvaName_NoEleMatch_woGwoGSF_EC",
"gbr_NoEleMatch_woGwoGSF_EC");
236 desc.
add<
double>(
"minMVANoEleMatchWgWOgsfEC", 0.0);
237 descriptions.
add(
"patTauDiscriminationAgainstElectronMVA6", desc);
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
edm::RefProd< TauCollection > TauRefProd
int pdgId() const override
PDG identifier.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void endEvent(edm::Event &) override
~PATTauDiscriminationAgainstElectronMVA6() override
std::unique_ptr< PATTauDiscriminator > category_output_
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< pat::ElectronCollection > electronToken
double discriminate(const TauRef &) const override
Abs< T >::type abs(const T &t)
bool isInEcalCrack(double) const
T const * get() const
Returns C++ pointer to the item.
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
PATTauDiscriminationAgainstElectronMVA6(const edm::ParameterSet &cfg)
std::unique_ptr< AntiElectronIDMVA6 > mva_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void beginEvent(const edm::Event &, const edm::EventSetup &) override
edm::InputTag srcElectrons
edm::Handle< TauCollection > taus_
edm::Handle< pat::ElectronCollection > Electrons