41 #define init_param(type, varname) varname (ps.getParameter< type >( #varname ))
128 mutable std::vector<std::pair<double, unsigned> >
zAssoc;
137 init_param(edm::InputTag, FakePrimaryVertices),
159 produces<reco::PFCandidateCollection>();
169 reco::VertexCollection::const_iterator iv)
const
171 return !iv->isFake() &&
182 std::auto_ptr<reco::PFCandidateCollection>
198 <<
"ERROR in FFTJetPFPileupCleaner:"
199 " could not find fake vertices"
203 const unsigned ncand = pfCandidates->size();
204 for (
unsigned i=0;
i<ncand; ++
i)
211 bool fromFakeSet =
false;
213 *candptr, &fromFakeSet));
220 else if (vertexref.
key() == 0 &&
238 const double eta = candptr->p4().Eta();
239 remove = eta < etaMin || eta >
etaMax;
248 pOutput->push_back(cand);
260 const unsigned shift =
static_cast<unsigned>(ptype);
269 const unsigned shift =
static_cast<unsigned>(ptype);
271 const unsigned mask = (1U <<
shift);
287 typedef reco::VertexCollection::const_iterator IV;
290 *fromFakeSet =
false;
294 unsigned nFoundVertex = 0;
295 const IV vertend(vertices->end());
299 double bestweight = 0.0;
300 for (IV iv=vertices->begin(); iv!=vertend; ++iv, ++
index)
307 for (IT iTrack=vtx.
tracks_begin(); iTrack!=trackend; ++iTrack)
313 if (baseRef == trackBaseRef)
328 if (nFoundVertex > 0)
330 if (nFoundVertex != 1)
332 <<
"a track is shared by at least two vertices. "
333 <<
"Used to be an assert";
339 const double ztrack = pfcand.
vertex().z();
340 double dzmin =
std::abs(ztrack - ((*vertices)[iVertex]).
z());
342 const IV fakeEnd(fakeVertices->end());
344 for (IV iv=fakeVertices->begin(); iv!=fakeEnd; ++iv, ++
index)
347 const double dz =
std::abs(ztrack - iv->z());
357 return reco::VertexRef(*fromFakeSet ? fakeVertices : vertices, iVertex);
363 const double ztrack = pfcand.
vertex().z();
364 bool foundVertex =
false;
371 for (IV iv=vertices->begin(); iv!=vertend; ++iv, ++
index)
373 zAssoc.push_back(std::pair<double,unsigned>(iv->z(),
index));
374 const unsigned numRealVertices =
index;
380 const IV fakeEnd(fakeVertices->end());
381 for (IV iv=fakeVertices->begin(); iv!=fakeEnd; ++iv, ++
index)
383 zAssoc.push_back(std::pair<double,unsigned>(iv->z(),
index));
390 std::pair<double,unsigned> tPair(ztrack, UINT_MAX);
391 const unsigned iAbove = std::upper_bound(
398 unsigned ich[2] = {0U, 0U};
402 ich[0] = iAbove - 1U;
404 if (iAbove <
zAssoc.size())
408 double dzmin = 1.0e100;
409 unsigned bestVertexNum = UINT_MAX;
410 for (
unsigned icheck=0; icheck<nch; ++icheck)
412 const unsigned zAssocIndex = ich[icheck];
413 const unsigned vertexNum =
zAssoc[zAssocIndex].second;
415 if (vertexNum == numRealVertices ||
418 bestVertexNum = vertexNum;
426 bestVertexNum = vertexNum;
430 foundVertex = bestVertexNum < UINT_MAX;
433 iVertex = bestVertexNum;
434 if (iVertex >= numRealVertices)
437 iVertex -= numRealVertices;
446 double dzmin = 1.0e100;
448 for (IV iv=vertices->begin(); iv!=vertend; ++iv, ++
index)
451 const double dz =
std::abs(ztrack - iv->z());
462 const IV fakeEnd(fakeVertices->end());
464 for (IV iv=fakeVertices->begin(); iv!=fakeEnd; ++iv, ++
index)
467 const double dz =
std::abs(ztrack - iv->z());
480 return reco::VertexRef(*fromFakeSet ? fakeVertices : vertices, iVertex);
void setRemovalBit(reco::PFCandidate::ParticleType ptype, bool onOff)
ParticleType
particle types
bool useFakePrimaryVertex
void produce(edm::Event &, const edm::EventSetup &)
trackRef_iterator tracks_end() const
last iterator over tracks
#define DEFINE_FWK_MODULE(type)
void setSourceCandidatePtr(const PFCandidatePtr &ptr)
std::vector< PFCandidatePtr > pfCandidates(const PFJet &jet, int particleId, bool sort=true)
reco::TrackRef trackRef() const
bool isRemovable(reco::PFCandidate::ParticleType ptype) const
bool isNull() const
Checks for null.
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
float trackWeight(const TrackBaseRef &r) const
returns the weight with which a Track has contributed to the vertex-fit.
virtual const Point & vertex() const
vertex position (overwritten by PF...)
bool reverseRemovalDecision
std::vector< LinkConnSpec >::const_iterator IT
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
edm::InputTag PFCandidates
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
std::vector< std::pair< double, unsigned > > zAssoc
key_type key() const
Accessor for product key.
#define init_param(type, varname)
Particle reconstructed by the particle flow algorithm.
FFTJetPFPileupCleaner & operator=(const FFTJetPFPileupCleaner &)
edm::InputTag FakePrimaryVertices
std::vector< VertexType > Vertices
reco::VertexRef findSomeVertexWFakes(const edm::Handle< reco::VertexCollection > &vertices, const edm::Handle< reco::VertexCollection > &fakeVertices, const reco::PFCandidate &pfcand, bool *fromFakeSet) const
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
static unsigned int const shift
trackRef_iterator tracks_begin() const
first iterator over tracks
bool isAcceptableVtx(reco::VertexCollection::const_iterator iv) const