35 moduleLabel_(
pset.getParameter<
std::
string>(
"@module_label")),
40 weightGammas_ =
pset.getParameter<
double>(
"WeightECALIsolation");
43 minPtForNoIso_ =
pset.getParameter<
double>(
"minTauPtForNoIso");
47 deltaBetaNeeded_ =
false;
48 weightsNeeded_ =
false;
49 tracksNeeded_ =
false;
50 gammasNeeded_ =
false;
51 storeRawValue_.clear();
52 auto const& rawDefs =
pset.getParameter<std::vector<edm::ParameterSet>>(
"IDdefinitions");
53 std::vector<std::string> idnames;
54 for (
auto const& rawDefsEntry : rawDefs) {
55 idnames.push_back(rawDefsEntry.getParameter<
std::string>(
"IDname"));
57 int numStoreOptions = 0;
58 if (rawDefsEntry.getParameter<
bool>(
"storeRawSumPt")) {
59 storeRawValue_.push_back(SumPt);
62 if (rawDefsEntry.getParameter<
bool>(
"storeRawOccupancy")) {
66 if (rawDefsEntry.getParameter<
bool>(
"storeRawPUsumPt")) {
67 storeRawValue_.push_back(PUsumPt);
70 if (rawDefsEntry.getParameter<
bool>(
"storeRawFootprintCorrection")) {
71 storeRawValue_.push_back(FootPrintCorrection);
75 if (rawDefsEntry.getParameter<
bool>(
"storeRawPhotonSumPt_outsideSignalCone")) {
76 storeRawValue_.push_back(PhotonSumPt);
79 if (numStoreOptions != 1) {
81 <<
"Multiple or none of 'store sum pt' and/or 'store occupancy' options are set." 82 <<
" These options are mutually exclusive.";
85 includeGammas_.push_back(rawDefsEntry.getParameter<
bool>(
"ApplyDiscriminationByECALIsolation"));
86 if (includeGammas_.back())
88 calculateWeights_.push_back(rawDefsEntry.getParameter<
bool>(
"ApplyDiscriminationByWeightedECALIsolation"));
89 if (calculateWeights_.back())
90 weightsNeeded_ =
true;
91 includeTracks_.push_back(rawDefsEntry.getParameter<
bool>(
"ApplyDiscriminationByTrackerIsolation"));
92 if (includeTracks_.back())
94 applyDeltaBetaCorrection_.push_back(rawDefsEntry.getParameter<
bool>(
"applyDeltaBetaCorrection"));
95 if (applyDeltaBetaCorrection_.back())
96 deltaBetaNeeded_ =
true;
97 useAllPFCandsForWeights_.push_back(rawDefsEntry.getParameter<
bool>(
"UseAllPFCandsForWeights"));
100 if (includeGammas_.back() && calculateWeights_.back()) {
102 <<
"Both 'ApplyDiscriminationByECALIsolation' and 'ApplyDiscriminationByWeightedECALIsolation' " 103 <<
"have been set to true. These options are mutually exclusive.";
108 std::vector<edm::ParameterSet> wpDefs =
pset.getParameter<std::vector<edm::ParameterSet>>(
"IDWPdefinitions");
109 for (std::vector<edm::ParameterSet>::iterator wpDefsEntry = wpDefs.begin(); wpDefsEntry != wpDefs.end();
111 maxAbsValue_.push_back(wpDefsEntry->getParameter<std::vector<double>>(
"maximumAbsoluteValues"));
112 maxRelValue_.push_back(wpDefsEntry->getParameter<std::vector<double>>(
"maximumRelativeValues"));
113 offsetRelValue_.push_back(wpDefsEntry->getParameter<std::vector<double>>(
"relativeValueOffsets"));
114 auto refRawIDNames = wpDefsEntry->getParameter<std::vector<std::string>>(
"referenceRawIDNames");
115 if (!maxAbsValue_.back().empty() && maxAbsValue_.back().size() != refRawIDNames.size())
117 <<
"WP configuration: Length of 'maximumAbsoluteValues' does not match length of 'referenceRawIDNames'!";
118 if (!maxRelValue_.back().empty() && maxRelValue_.back().size() != refRawIDNames.size())
120 <<
"WP configuration: Length of 'maximumRelativeValues' does not match length of 'referenceRawIDNames'!";
121 if (!offsetRelValue_.back().empty() && offsetRelValue_.back().size() != refRawIDNames.size())
123 <<
"WP configuration: Length of 'relativeValueOffsets' does not match length of 'referenceRawIDNames'!";
124 else if (offsetRelValue_.back().empty())
125 offsetRelValue_.back().assign(refRawIDNames.size(), 0.0);
126 rawValue_reference_.push_back(std::vector<int>(refRawIDNames.size()));
127 for (
size_t i = 0;
i < refRawIDNames.size();
i++) {
129 for (
size_t j = 0;
j < idnames.size();
j++) {
130 if (refRawIDNames[
i] == idnames[
j]) {
131 rawValue_reference_.back()[
i] =
j;
138 <<
"WP configuration: Requested raw ID '" << refRawIDNames[
i] <<
"' not defined!";
142 customIsoCone_ =
pset.getParameter<
double>(
"customOuterCone");
144 applyFootprintCorrection_ =
pset.getParameter<
bool>(
"applyFootprintCorrection");
147 for (edm::VParameterSet::const_iterator cfgFootprintCorrection = cfgFootprintCorrections.begin();
148 cfgFootprintCorrection != cfgFootprintCorrections.end();
149 ++cfgFootprintCorrection) {
152 auto footprintCorrection = std::make_unique<FootprintCorrection>(
selection,
offset);
153 footprintCorrections_.push_back(
std::move(footprintCorrection));
160 qcuts_ = std::make_unique<tau::RecoTauQualityCuts>(isolationQCuts);
162 vertexAssociator_ = std::make_unique<tau::RecoTauVertexAssociator>(qualityCutsPSet_, consumesCollector());
164 if (deltaBetaNeeded_ || weightsNeeded_) {
167 std::pair<edm::ParameterSet, edm::ParameterSet> puFactorizedIsoQCuts =
179 puFactorizedIsoQCuts.second.addParameter<
double>(
"minTrackPt",
183 pileupQcutsPUTrackSelection_ = std::make_unique<tau::RecoTauQualityCuts>(puFactorizedIsoQCuts.first);
185 pileupQcutsGeneralQCuts_ = std::make_unique<tau::RecoTauQualityCuts>(puFactorizedIsoQCuts.second);
188 pfCand_token = consumes<edm::View<reco::Candidate>>(pfCandSrc_);
190 vertex_token = consumes<reco::VertexCollection>(vertexSrc_);
191 deltaBetaCollectionCone_ =
pset.getParameter<
double>(
"isoConeSizeForDeltaBeta");
192 std::string deltaBetaFactorFormula =
pset.getParameter<
string>(
"deltaBetaFactor");
193 deltaBetaFormula_ = std::make_unique<TFormula>(
"DB_corr", deltaBetaFactorFormula.c_str());
196 applyRhoCorrection_ =
pset.getParameter<
bool>(
"applyRhoCorrection");
197 if (applyRhoCorrection_) {
199 rho_token = consumes<double>(rhoProducer_);
200 rhoConeSize_ =
pset.getParameter<
double>(
"rhoConeSize");
201 rhoUEOffsetCorrection_ =
pset.getParameter<
double>(
"rhoUEOffsetCorrection");
204 verbosity_ =
pset.getParameter<
int>(
"verbosity");
212 inline double weightedSum(
const std::vector<CandidatePtr>& inColl_,
double eta,
double phi)
const {
214 for (
auto const& inObj_ : inColl_) {
215 double sum = (inObj_->pt() * inObj_->pt()) / (
deltaR2(
eta,
phi, inObj_->eta(), inObj_->phi()));
228 std::unique_ptr<tau::RecoTauQualityCuts>
qcuts_;
304 vertexAssociator_->setEvent(
event);
308 if (deltaBetaNeeded_ || weightsNeeded_) {
312 chargedPFCandidatesInEvent_.clear();
313 chargedPFCandidatesInEvent_.reserve(
pfCandidates->size());
315 for (
size_t i = 0;
i < numPFCandidates; ++
i) {
317 if (pfCandidate->
charge() != 0) {
318 chargedPFCandidatesInEvent_.push_back(pfCandidate);
324 event.getByToken(vertex_token,
vertices);
325 size_t nVtxThisEvent =
vertices->size();
326 deltaBetaFactorThisEvent_ = deltaBetaFormula_->Eval(nVtxThisEvent);
329 if (applyRhoCorrection_) {
331 event.getByToken(rho_token, rhoHandle_);
332 rhoThisEvent_ = (*rhoHandle_ - rhoUEOffsetCorrection_) * (3.14159) * rhoConeSize_ * rhoConeSize_;
338 LogDebug(
"discriminate") <<
" tau: Pt = " << pfTau->pt() <<
", eta = " << pfTau->eta() <<
", phi = " << pfTau->phi();
342 std::vector<CandidatePtr> isoCharged_;
343 std::vector<CandidatePtr> isoNeutral_;
344 std::vector<CandidatePtr> isoPU_;
345 std::vector<CandidatePtr> isoPUall_;
348 std::vector<CandidatePtr> chPV_;
349 std::vector<CandidatePtr> chPVall_;
350 isoCharged_.
reserve(pfTau->isolationChargedHadrCands().size());
351 isoNeutral_.reserve(pfTau->isolationGammaCands().size());
352 isoPU_.reserve(
std::min(100UL, chargedPFCandidatesInEvent_.size()));
353 isoPUall_.reserve(
std::min(100UL, chargedPFCandidatesInEvent_.size()));
354 isoNeutralWeight_.
reserve(pfTau->isolationGammaCands().size());
355 isoNeutralWeight_UseAllPFCands_.
reserve(pfTau->isolationGammaCands().size());
357 chPV_.reserve(
std::min(50UL, chargedPFCandidatesInEvent_.size()));
358 chPVall_.reserve(
std::min(50UL, chargedPFCandidatesInEvent_.size()));
365 if (
pv.isNonnull()) {
366 LogTrace(
"discriminate") <<
"pv: x = " <<
pv->position().x() <<
", y = " <<
pv->position().y()
367 <<
", z = " <<
pv->position().z();
369 LogTrace(
"discriminate") <<
"pv: N/A";
371 if (pfTau->leadChargedHadrCand().
isNonnull()) {
372 LogTrace(
"discriminate") <<
"leadPFChargedHadron:" 373 <<
" Pt = " << pfTau->leadChargedHadrCand()->pt() <<
"," 374 <<
" eta = " << pfTau->leadChargedHadrCand()->eta() <<
"," 375 <<
" phi = " << pfTau->leadChargedHadrCand()->phi();
377 LogTrace(
"discriminate") <<
"leadPFChargedHadron: N/A";
382 if (!(
pv.isNonnull() && pfTau->leadChargedHadrCand().
isNonnull()))
386 qcuts_->setLeadTrack(*pfTau->leadChargedHadrCand());
388 if (deltaBetaNeeded_ || weightsNeeded_) {
389 pileupQcutsGeneralQCuts_->setPV(
pv);
390 pileupQcutsGeneralQCuts_->setLeadTrack(*pfTau->leadChargedHadrCand());
391 pileupQcutsPUTrackSelection_->setPV(
pv);
392 pileupQcutsPUTrackSelection_->setLeadTrack(*pfTau->leadChargedHadrCand());
397 for (
auto const&
cand : pfTau->isolationChargedHadrCands()) {
398 if (qcuts_->filterCandRef(
cand)) {
399 LogTrace(
"discriminate") <<
"adding charged iso cand with pt " <<
cand->pt();
400 isoCharged_.push_back(
cand);
404 if (gammasNeeded_ || weightsNeeded_) {
405 for (
auto const&
cand : pfTau->isolationGammaCands()) {
406 if (qcuts_->filterCandRef(
cand)) {
407 LogTrace(
"discriminate") <<
"adding neutral iso cand with pt " <<
cand->pt();
408 isoNeutral_.push_back(
cand);
417 if (deltaBetaNeeded_ || weightsNeeded_) {
420 std::cout <<
"Initial PFCands: " << chargedPFCandidatesInEvent_.size() << std::endl;
423 std::vector<CandidatePtr> allPU = pileupQcutsPUTrackSelection_->filterCandRefs(chargedPFCandidatesInEvent_,
true);
425 std::vector<CandidatePtr> allNPU = pileupQcutsPUTrackSelection_->filterCandRefs(chargedPFCandidatesInEvent_);
426 LogTrace(
"discriminate") <<
"After track cuts: " << allPU.size();
429 std::vector<CandidatePtr> cleanPU = pileupQcutsGeneralQCuts_->filterCandRefs(allPU);
431 std::vector<CandidatePtr> cleanNPU = pileupQcutsGeneralQCuts_->filterCandRefs(allNPU);
433 LogTrace(
"discriminate") <<
"After cleaning cuts: " << cleanPU.size();
436 DRFilter deltaBetaFilter(pfTau->p4(), 0, deltaBetaCollectionCone_);
437 for (
auto const&
cand : cleanPU) {
438 if (deltaBetaFilter(
cand))
439 isoPU_.push_back(
cand);
442 for (
auto const&
cand : cleanNPU) {
443 if (deltaBetaFilter(
cand))
444 chPV_.push_back(
cand);
446 LogTrace(
"discriminate") <<
"After cone cuts: " << isoPU_.size() <<
" " << chPV_.size();
451 if (weightsNeeded_) {
452 for (
auto const& isoObject : isoNeutral_) {
453 if (isoObject->charge() != 0) {
456 isoNeutralWeight_UseAllPFCands_.
push_back(*isoObject);
460 double eta = isoObject->eta();
461 double phi = isoObject->phi();
463 double sumNPU = 0.5 *
log(weightedSum(chPV_,
eta,
phi));
465 double sumPU = 0.5 *
log(weightedSum(isoPU_,
eta,
phi));
467 if ((sumNPU + sumPU) > 0)
468 neutral.
setP4(((sumNPU) / (sumNPU + sumPU)) * neutral.
p4());
473 double sumNPU = 0.5 *
log(weightedSum(chPVall_,
eta,
phi));
475 double sumPU = 0.5 *
log(weightedSum(isoPUall_,
eta,
phi));
477 if ((sumNPU + sumPU) > 0)
478 neutral.
setP4(((sumNPU) / (sumNPU + sumPU)) * neutral.
p4());
480 isoNeutralWeight_UseAllPFCands_.
push_back(neutral);
486 if (customIsoCone_ >= 0.) {
487 DRFilter
filter(pfTau->p4(), 0, customIsoCone_);
488 DRFilter2 filter2(pfTau->p4(), 0, customIsoCone_);
489 std::vector<CandidatePtr> isoCharged_filter;
490 std::vector<CandidatePtr> isoNeutral_filter;
492 for (
auto const& isoObject : isoCharged_) {
494 isoCharged_filter.push_back(isoObject);
496 isoCharged_ = isoCharged_filter;
497 for (
auto const& isoObject : isoNeutral_) {
499 isoNeutral_filter.push_back(isoObject);
501 isoNeutral_ = isoNeutral_filter;
504 for (
auto const& isoObject : isoNeutralWeight_) {
505 if (filter2(isoObject))
506 isoNeutralWeight_filter.
push_back(isoObject);
508 isoNeutralWeight_ = isoNeutralWeight_filter;
512 for (
auto const& isoObject : isoNeutralWeight_UseAllPFCands_) {
513 if (filter2(isoObject))
514 isoNeutralWeight_filter.
push_back(isoObject);
516 isoNeutralWeight_UseAllPFCands_ = isoNeutralWeight_filter;
522 for (
size_t i = 0;
i < includeGammas_.size();
i++) {
524 int neutrals = isoNeutral_.size();
526 if (applyDeltaBetaCorrection_.at(
i)) {
527 neutrals -= TMath::Nint(deltaBetaFactorThisEvent_ * isoPU_.size());
533 int nOccupants = isoCharged_.size() + neutrals;
535 double footprintCorrection_value = 0.;
536 if (applyFootprintCorrection_ || storeRawValue_.at(
i) == FootPrintCorrection) {
537 for (
std::vector<std::unique_ptr<FootprintCorrection>>::const_iterator footprintCorrection =
538 footprintCorrections_.begin();
539 footprintCorrection != footprintCorrections_.end();
540 ++footprintCorrection) {
541 if ((*footprintCorrection)->selection_(*pfTau)) {
542 footprintCorrection_value = (*footprintCorrection)->offset_(*pfTau);
550 if (storeRawValue_.at(
i) == SumPt || storeRawValue_.at(
i) == PUsumPt) {
551 double chargedPt = 0.;
552 double neutralPt = 0.;
553 double weightedNeutralPt = 0.;
554 if (includeTracks_.at(
i)) {
555 for (
auto const& isoObject : isoCharged_) {
556 chargedPt += isoObject->pt();
560 if (calculateWeights_.at(
i)) {
561 if (useAllPFCandsForWeights_.at(
i)) {
562 for (
auto const& isoObject : isoNeutralWeight_UseAllPFCands_) {
563 weightedNeutralPt += isoObject.pt();
566 for (
auto const& isoObject : isoNeutralWeight_) {
567 weightedNeutralPt += isoObject.pt();
570 }
else if (includeGammas_.at(
i)) {
571 for (
auto const& isoObject : isoNeutral_) {
572 neutralPt += isoObject->pt();
575 for (
auto const& isoObject : isoPU_) {
576 puPt += isoObject->pt();
578 LogTrace(
"discriminate") <<
"chargedPt = " << chargedPt;
579 LogTrace(
"discriminate") <<
"neutralPt = " << neutralPt;
580 LogTrace(
"discriminate") <<
"weighted neutral Pt = " << weightedNeutralPt;
581 LogTrace(
"discriminate") <<
"puPt = " << puPt <<
" (delta-beta corr. = " << (deltaBetaFactorThisEvent_ * puPt)
584 if (calculateWeights_.at(
i)) {
585 neutralPt = weightedNeutralPt;
588 if (applyDeltaBetaCorrection_.at(
i)) {
589 neutralPt -= (deltaBetaFactorThisEvent_ * puPt);
592 if (applyFootprintCorrection_) {
593 neutralPt -= footprintCorrection_value;
596 if (applyRhoCorrection_) {
597 neutralPt -= rhoThisEvent_;
600 if (neutralPt < 0.) {
604 totalPt = chargedPt + weightGammas_ * neutralPt;
607 double photonSumPt_outsideSignalCone = 0.;
608 if (storeRawValue_.at(
i) == PhotonSumPt) {
609 const std::vector<reco::CandidatePtr>& signalGammas = pfTau->signalGammaCands();
610 for (std::vector<reco::CandidatePtr>::const_iterator signalGamma = signalGammas.begin();
611 signalGamma != signalGammas.end();
613 double dR =
deltaR(pfTau->eta(), pfTau->phi(), (*signalGamma)->eta(), (*signalGamma)->phi());
614 if (
dR > pfTau->signalConeSize())
615 photonSumPt_outsideSignalCone += (*signalGamma)->pt();
620 if (storeRawValue_.at(
i) == SumPt) {
621 result.rawValues.push_back(totalPt);
622 }
else if (storeRawValue_.at(
i) == PUsumPt) {
623 if (applyDeltaBetaCorrection_.at(
i))
624 result.rawValues.push_back(puPt);
625 else if (applyRhoCorrection_)
626 result.rawValues.push_back(rhoThisEvent_);
628 result.rawValues.push_back(0.);
629 }
else if (storeRawValue_.at(
i) ==
Occupancy) {
630 result.rawValues.push_back(nOccupants);
631 }
else if (storeRawValue_.at(
i) == FootPrintCorrection) {
632 result.rawValues.push_back(footprintCorrection_value);
633 }
else if (storeRawValue_.at(
i) == PhotonSumPt) {
634 result.rawValues.push_back(photonSumPt_outsideSignalCone);
637 for (
size_t i = 0;
i < rawValue_reference_.size();
i++) {
639 if (minPtForNoIso_ > 0. && pfTau->pt() > minPtForNoIso_)
640 LogDebug(
"discriminate") <<
"tau pt = " << pfTau->pt() <<
"\t min cutoff pt = " << minPtForNoIso_;
642 for (
size_t j = 0;
j < rawValue_reference_[
i].size();
j++) {
643 double rawValue =
result.rawValues[rawValue_reference_[
i][
j]];
644 LogTrace(
"discriminate") <<
"Iso sum = " << rawValue <<
" (max_abs = " << maxAbsValue_[
i][
j]
645 <<
", max_rel = " << maxRelValue_[
i][
j] <<
", offset_rel = " << offsetRelValue_[
i][
j]
647 if (!maxAbsValue_[
i].
empty() && maxAbsValue_[
i][
j] >= 0.0)
648 pass = rawValue <= maxAbsValue_[
i][
j];
649 if (!maxRelValue_[
i].
empty() && maxRelValue_[
i][
j] >= 0.0)
650 pass = rawValue <= maxRelValue_[
i][
j] * (pfTau->pt() - offsetRelValue_[
i][
j]);
655 result.workingPoints.push_back(pass);
669 desc.add<
double>(
"minTauPtForNoIso", -99.0);
671 desc.add<
double>(
"rhoConeSize", 0.5);
678 desc.addVPSet(
"footprintCorrections", vpsd1, {});
682 desc.add<
bool>(
"applyFootprintCorrection",
false);
688 psd1.
add<
double>(
"cut", 0.5);
694 psd1.
add<
double>(
"cut", 0.5);
700 psd1.
add<
double>(
"cut", 0.5);
707 desc.add<
int>(
"verbosity", 0);
709 desc.add<
bool>(
"deltaBetaPUTrackPtCutOverride",
false);
710 desc.add<
bool>(
"applyRhoCorrection",
false);
712 desc.add<
double>(
"WeightECALIsolation", 1.0);
713 desc.add<
double>(
"rhoUEOffsetCorrection", 1.0);
714 desc.add<
double>(
"deltaBetaPUTrackPtCutOverride_val", -1.5);
715 desc.add<
double>(
"isoConeSizeForDeltaBeta", 0.5);
716 desc.add<
double>(
"customOuterCone", -1.0);
721 desc_idlist.
add<
string>(
"IDname");
722 desc_idlist.add<
bool>(
"storeRawSumPt",
false);
723 desc_idlist.add<
bool>(
"storeRawPUsumPt",
false);
724 desc_idlist.add<
bool>(
"storeRawOccupancy",
false);
725 desc_idlist.add<
bool>(
"storeRawFootprintCorrection",
false);
726 desc_idlist.add<
bool>(
"storeRawPhotonSumPt_outsideSignalCone",
false);
727 desc_idlist.add<
bool>(
"ApplyDiscriminationByECALIsolation",
false);
728 desc_idlist.add<
bool>(
"ApplyDiscriminationByWeightedECALIsolation",
false);
729 desc_idlist.add<
bool>(
"ApplyDiscriminationByTrackerIsolation",
false);
730 desc_idlist.add<
bool>(
"applyDeltaBetaCorrection",
false);
731 desc_idlist.add<
bool>(
"UseAllPFCandsForWeights",
false);
732 desc.addVPSet(
"IDdefinitions", desc_idlist, {});
735 desc_idwplist.
add<
string>(
"IDname");
736 desc_idwplist.
add<std::vector<string>>(
"referenceRawIDNames")
738 "List of raw IDs defined in 'IDdefinitions' to pass all respective conditions defined in " 739 "'maximumAbsoluteValues', 'maximumRelativeValues' , and 'relativeValueOffsets'");
740 desc_idwplist.
add<std::vector<double>>(
"maximumAbsoluteValues", {});
741 desc_idwplist.
add<std::vector<double>>(
"maximumRelativeValues", {});
742 desc_idwplist.
add<std::vector<double>>(
"relativeValueOffsets", {});
743 desc.addVPSet(
"IDWPdefinitions", desc_idwplist, {});
745 descriptions.
add(
"pfRecoTauDiscriminationByIsolationContainer",
desc);
double weightedSum(const std::vector< CandidatePtr > &inColl_, double eta, double phi) const
T getParameter(std::string const &) const
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
std::unique_ptr< tau::RecoTauQualityCuts > pileupQcutsGeneralQCuts_
static void fillDescriptions(edm::ParameterSetDescription &descriptions)
Declare all parameters read from python config file.
std::vector< std::vector< double > > maxRelValue_
~PFRecoTauDiscriminationByIsolationContainer() override
std::vector< ParameterSet > VParameterSet
std::vector< bool > applyDeltaBetaCorrection_
std::vector< std::vector< double > > maxAbsValue_
ParameterSet const & getParameterSet(std::string const &) const
std::unique_ptr< tau::RecoTauQualityCuts > pileupQcutsPUTrackSelection_
double rhoCorrectionThisEvent_
std::unique_ptr< tau::RecoTauVertexAssociator > vertexAssociator_
bool isNonnull() const
Checks for non-null.
const LorentzVector & p4() const final
four-momentum Lorentz vector
std::vector< StoredRawType > storeRawValue_
storeRawFootprintCorrection
std::vector< std::unique_ptr< FootprintCorrection > > footprintCorrections_
edm::EDGetTokenT< reco::VertexCollection > vertex_token
std::vector< bool > calculateWeights_
std::vector< bool > includeGammas_
double deltaBetaFactorThisEvent_
reco::SingleTauDiscriminatorContainer discriminate(const PFTauRef &pfTau) const override
double deltaBetaCollectionCone_
ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE constexpr float phi(ConstView const &tracks, int32_t i)
std::vector< bool > useAllPFCandsForWeights_
#define DEFINE_FWK_MODULE(type)
virtual int charge() const =0
electric charge
std::vector< std::vector< double > > offsetRelValue_
edm::InputTag rhoProducer_
std::pair< edm::ParameterSet, edm::ParameterSet > factorizePUQCuts(const edm::ParameterSet &inputSet)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::EDGetTokenT< double > rho_token
deltaBetaPUTrackPtCutOverride
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
std::vector< std::vector< int > > rawValue_reference_
bool applyFootprintCorrection_
deltaBetaPUTrackPtCutOverride_val
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< reco::CandidatePtr > chargedPFCandidatesInEvent_
void beginEvent(const edm::Event &evt, const edm::EventSetup &evtSetup) override
edm::EDGetTokenT< edm::View< reco::Candidate > > pfCand_token
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::unique_ptr< tau::RecoTauQualityCuts > qcuts_
PFRecoTauDiscriminationByIsolationContainer(const edm::ParameterSet &pset)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::unique_ptr< TFormula > deltaBetaFormula_
void setP4(const LorentzVector &p4) final
set 4-momentum
std::vector< bool > includeTracks_
edm::ParameterSet qualityCutsPSet_
double rhoUEOffsetCorrection_