41 struct PiZeroPtSorter {
43 return (A->
pt() < B->
pt());
58 std::vector<const RecoTauPiZero*> signalPiZeros;
60 signalPiZeros.push_back(&piZero);
62 std::sort(signalPiZeros.begin(), signalPiZeros.end(), PiZeroPtSorter());
63 std::vector<const RecoTauPiZero*>::const_iterator wimp =
64 signalPiZeros.begin();
68 while(wimp != signalPiZeros.end() &&
filter(*wimp, totalP4)) {
69 totalP4 -= (*wimp)->p4();
73 if (wimp != signalPiZeros.begin()) {
75 double ptDifference = (totalP4 - tau.
p4()).
pt();
82 std::vector<RecoTauPiZero> toMove;
83 std::vector<RecoTauPiZero> newSignal;
84 std::vector<RecoTauPiZero> newIsolation;
87 for (std::vector<const RecoTauPiZero*>::const_iterator iter =
88 signalPiZeros.begin(); iter != wimp; ++iter) {
89 toMove.push_back(**iter);
91 for (std::vector<const RecoTauPiZero*>::const_iterator iter =
92 wimp; iter != signalPiZeros.end(); ++iter) {
93 newSignal.push_back(**iter);
96 std::copy(toMove.begin(), toMove.end(), std::back_inserter(newIsolation));
99 std::back_inserter(newIsolation));
109 std::set<size_t> keysToMove;
110 for(
auto const& ptr : pfcandsToMove) {
111 keysToMove.insert(ptr.key());
114 std::vector<CandidatePtr> newSignalGammas;
115 std::vector<CandidatePtr> newSignalCands;
117 std::vector<CandidatePtr> newIsolationCands = tau.
isolationCands();
121 if (keysToMove.count(ptr.key()))
122 newIsolationCands.push_back(ptr);
124 newSignalCands.push_back(ptr);
128 if (keysToMove.count(ptr.key()))
129 newIsolationGammas.push_back(ptr);
131 newSignalGammas.push_back(ptr);
144 "RecoTauPhotonFilter");
T getParameter(std::string const &) const
void setisolationPiZeroCandidates(std::vector< RecoTauPiZero >)
float isolationPFGammaCandsEtSum() const
~RecoTauPhotonFilter() override
double pt() const final
transverse momentum
const std::vector< reco::CandidatePtr > & signalGammaCands() const
Gamma candidates in signal region.
void setsignalPiZeroCandidates(std::vector< RecoTauPiZero >)
void setisolationPFGammaCandsEtSum(const float &)
const std::vector< reco::CandidatePtr > & isolationGammaCands() const
Gamma candidates in isolation region.
size_t numberOfDaughters() const override
number of daughters
std::vector< CandidatePtr > flattenPiZeros(const std::vector< RecoTauPiZero >::const_iterator &, const std::vector< RecoTauPiZero >::const_iterator &)
Flatten a list of pi zeros into a list of there constituent PFCandidates.
void operator()(PFTau &) const override
void setisolationCands(const std::vector< reco::CandidatePtr > &)
const std::vector< RecoTauPiZero > & signalPiZeroCandidates() const
Retrieve the association of signal region gamma candidates into candidate PiZeros.
const LorentzVector & p4() const final
four-momentum Lorentz vector
static const std::string B
double minPtFractionPiZeroes_
void setsignalCands(const std::vector< reco::CandidatePtr > &)
const std::vector< RecoTauPiZero > & isolationPiZeroCandidates() const
Retrieve the association of isolation region gamma candidates into candidate PiZeros.
RecoTauPhotonFilter(const edm::ParameterSet &pset, edm::ConsumesCollector &&iC)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
void setisolationGammaCands(const std::vector< reco::CandidatePtr > &)
bool filter(const RecoTauPiZero *piZero, const reco::Candidate::LorentzVector &tau) const
const std::vector< reco::CandidatePtr > & isolationCands() const
Candidates in isolation region.
#define DEFINE_EDM_PLUGIN(factory, type, name)
const std::vector< reco::CandidatePtr > & signalCands() const
Candidates in signal region.
void setP4(const LorentzVector &p4) final
set 4-momentum
double minPtFractionSinglePhotons_