CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
FFTJetPFPileupCleaner Class Reference

#include <RecoJets/FFTJetProducers/plugins/FFTJetPFPileupCleaner.cc>

Inheritance diagram for FFTJetPFPileupCleaner:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

 FFTJetPFPileupCleaner (const edm::ParameterSet &)
 
 ~FFTJetPFPileupCleaner ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Protected Member Functions

void beginJob ()
 
void endJob ()
 
void produce (edm::Event &, const edm::EventSetup &)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Private Member Functions

void buildRemovalMask ()
 
 FFTJetPFPileupCleaner ()
 
 FFTJetPFPileupCleaner (const FFTJetPFPileupCleaner &)
 
reco::VertexRef findSomeVertex (const edm::Handle< reco::VertexCollection > &vertices, const reco::PFCandidate &pfcand) const
 
bool isRemovable (reco::PFCandidate::ParticleType ptype) const
 
FFTJetPFPileupCleaneroperator= (const FFTJetPFPileupCleaner &)
 
void setRemovalBit (reco::PFCandidate::ParticleType ptype, bool onOff)
 

Private Attributes

bool checkClosestZVertex
 
double etaMax
 
double etaMin
 
edm::InputTag PFCandidates
 
unsigned removalMask
 
bool remove_e
 
bool remove_egamma_HF
 
bool remove_gamma
 
bool remove_h
 
bool remove_h0
 
bool remove_h_HF
 
bool remove_mu
 
bool remove_X
 
bool removeMainVertex
 
bool removeUnassociated
 
bool reverseRemovalDecision
 
double vertexNdofCut
 
edm::InputTag Vertices
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Detailed Description

Description: cleans up a collection of partice flow objects

Implementation: [Notes on implementation]

Definition at line 42 of file FFTJetPFPileupCleaner.cc.

Constructor & Destructor Documentation

FFTJetPFPileupCleaner::FFTJetPFPileupCleaner ( const edm::ParameterSet ps)
explicit

Definition at line 110 of file FFTJetPFPileupCleaner.cc.

References buildRemovalMask().

117  init_param(bool, remove_X ),
118  init_param(bool, remove_h ),
119  init_param(bool, remove_e ),
120  init_param(bool, remove_mu ),
121  init_param(bool, remove_gamma ),
122  init_param(bool, remove_h0 ),
123  init_param(bool, remove_h_HF ),
125  removalMask(0),
126  init_param(double, etaMin),
127  init_param(double, etaMax),
128  init_param(double, vertexNdofCut)
129 {
131  produces<reco::PFCandidateCollection>();
132 }
#define init_param(type, varname)
FFTJetPFPileupCleaner::~FFTJetPFPileupCleaner ( )

Definition at line 135 of file FFTJetPFPileupCleaner.cc.

136 {
137 }
FFTJetPFPileupCleaner::FFTJetPFPileupCleaner ( )
private
FFTJetPFPileupCleaner::FFTJetPFPileupCleaner ( const FFTJetPFPileupCleaner )
private

Member Function Documentation

void FFTJetPFPileupCleaner::beginJob ( void  )
protectedvirtual

Reimplemented from edm::EDProducer.

Definition at line 316 of file FFTJetPFPileupCleaner.cc.

317 {
318 }
void FFTJetPFPileupCleaner::buildRemovalMask ( )
private

Definition at line 302 of file FFTJetPFPileupCleaner.cc.

References reco::PFCandidate::e, reco::PFCandidate::egamma_HF, reco::PFCandidate::gamma, reco::PFCandidate::h, reco::PFCandidate::h0, reco::PFCandidate::h_HF, reco::PFCandidate::mu, remove_e, remove_egamma_HF, remove_gamma, remove_h, remove_h0, remove_h_HF, remove_mu, remove_X, setRemovalBit(), and reco::PFCandidate::X.

Referenced by FFTJetPFPileupCleaner().

303 {
312 }
void setRemovalBit(reco::PFCandidate::ParticleType ptype, bool onOff)
void FFTJetPFPileupCleaner::endJob ( void  )
protectedvirtual

Reimplemented from edm::EDProducer.

Definition at line 322 of file FFTJetPFPileupCleaner.cc.

323 {
324 }
reco::VertexRef FFTJetPFPileupCleaner::findSomeVertex ( const edm::Handle< reco::VertexCollection > &  vertices,
const reco::PFCandidate pfcand 
) const
private

Definition at line 218 of file FFTJetPFPileupCleaner.cc.

References checkClosestZVertex, getHLTprescales::index, reco::PFCandidate::trackRef(), reco::Vertex::tracks_begin(), reco::Vertex::tracks_end(), reco::Vertex::trackWeight(), reco::PFCandidate::vertex(), vertexNdofCut, and w().

Referenced by produce().

221 {
222  typedef reco::VertexCollection::const_iterator IV;
224 
225  reco::TrackBaseRef trackBaseRef(pfcand.trackRef());
226 
227  size_t iVertex = 0;
228  unsigned index = 0;
229  unsigned nFoundVertex = 0;
230  double bestweight = 0;
231 
232  const IV vertend(vertices->end());
233  for (IV iv=vertices->begin(); iv!=vertend; ++iv, ++index)
234  {
235  const double ndof = iv->ndof();
236  if (!iv->isFake() && ndof > vertexNdofCut)
237  {
238  const reco::Vertex& vtx = *iv;
239 
240  // loop on tracks in vertices
241  IT trackend(vtx.tracks_end());
242  for (IT iTrack=vtx.tracks_begin(); iTrack!=trackend; ++iTrack)
243  {
244  const reco::TrackBaseRef& baseRef = *iTrack;
245 
246  // one of the tracks in the vertex is the same as
247  // the track considered in the function
248  if (baseRef == trackBaseRef)
249  {
250  // select the vertex for which the track has the highest weight
251  const double w = vtx.trackWeight(baseRef);
252  if (w > bestweight)
253  {
254  bestweight=w;
255  iVertex=index;
256  nFoundVertex++;
257  }
258  }
259  }
260  }
261  }
262 
263  if (nFoundVertex > 0)
264  {
265  if (nFoundVertex != 1)
266  edm::LogWarning("TrackOnTwoVertex")
267  << "a track is shared by at least two vertices. "
268  << "Used to be an assert";
269  return reco::VertexRef(vertices, iVertex);
270  }
271 
272  // optional: as a secondary solution, associate the closest vertex in z
273  if (checkClosestZVertex)
274  {
275  double dzmin = 10000;
276  double ztrack = pfcand.vertex().z();
277  bool foundVertex = false;
278  index = 0;
279  for (IV iv=vertices->begin(); iv!=vertend; ++iv, ++index)
280  {
281  const double ndof = iv->ndof();
282  if (!iv->isFake() && ndof > vertexNdofCut)
283  {
284  const double dz = fabs(ztrack - iv->z());
285  if (dz < dzmin)
286  {
287  dzmin = dz;
288  iVertex = index;
289  foundVertex = true;
290  }
291  }
292  }
293 
294  if (foundVertex)
295  return reco::VertexRef(vertices, iVertex);
296  }
297 
298  return reco::VertexRef();
299 }
trackRef_iterator tracks_end() const
last iterator over tracks
Definition: Vertex.cc:45
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:339
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
Definition: PFCandidate.cc:546
std::vector< LinkConnSpec >::const_iterator IT
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
Definition: VertexFwd.h:13
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector&lt;TrackRef&gt;
Definition: Vertex.h:38
trackRef_iterator tracks_begin() const
first iterator over tracks
Definition: Vertex.cc:40
T w() const
bool FFTJetPFPileupCleaner::isRemovable ( reco::PFCandidate::ParticleType  ptype) const
private

Definition at line 194 of file FFTJetPFPileupCleaner.cc.

References removalMask, and edm::shift.

Referenced by produce().

196 {
197  const unsigned shift = static_cast<unsigned>(ptype);
198  assert(shift < 32U);
199  return removalMask & (1U << shift);
200 }
static unsigned int const shift
FFTJetPFPileupCleaner& FFTJetPFPileupCleaner::operator= ( const FFTJetPFPileupCleaner )
private
void FFTJetPFPileupCleaner::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
protectedvirtual

Implements edm::EDProducer.

Definition at line 141 of file FFTJetPFPileupCleaner.cc.

References eta(), etaMax, findSomeVertex(), edm::Event::getByLabel(), i, edm::Ref< C, T, F >::isNull(), isRemovable(), edm::Ref< C, T, F >::key(), reco::tau::pfCandidates(), PFCandidates, edm::Event::put(), removeMainVertex, removeUnassociated, reverseRemovalDecision, reco::PFCandidate::setSourceCandidatePtr(), and Vertices.

143 {
144  // get PFCandidates
145  std::auto_ptr<reco::PFCandidateCollection>
146  pOutput(new reco::PFCandidateCollection);
147 
149  iEvent.getByLabel(PFCandidates, pfCandidates);
150 
151  // get vertices
153  iEvent.getByLabel(Vertices, vertices);
154 
155  const unsigned ncand = pfCandidates->size();
156  for (unsigned i=0; i<ncand; ++i)
157  {
158  reco::PFCandidatePtr candptr(pfCandidates, i);
159  bool remove = false;
160 
161  if (isRemovable(candptr->particleId()))
162  {
163  reco::VertexRef vertexref(findSomeVertex(vertices, *candptr));
164  if (vertexref.isNull())
165  remove = removeUnassociated;
166  else if (vertexref.key() == 0)
167  remove = removeMainVertex;
168  else
169  remove = true;
170  }
171 
172  // Check the eta range
173  if (!remove)
174  {
175  const double eta = candptr->p4().Eta();
176  remove = eta < etaMin || eta > etaMax;
177  }
178 
179  // Should we remember this candidate?
181  remove = !remove;
182  if (!remove)
183  {
184  const reco::PFCandidate& cand = (*pfCandidates)[i];
185  pOutput->push_back(cand);
186  pOutput->back().setSourceCandidatePtr(candptr);
187  }
188  }
189 
190  iEvent.put(pOutput);
191 }
int i
Definition: DBlmapReader.cc:9
void setSourceCandidatePtr(const PFCandidatePtr &ptr)
Definition: PFCandidate.h:111
T eta() const
std::vector< PFCandidatePtr > pfCandidates(const PFJet &jet, int particleId, bool sort=true)
bool isRemovable(reco::PFCandidate::ParticleType ptype) const
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:85
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:33
reco::VertexRef findSomeVertex(const edm::Handle< reco::VertexCollection > &vertices, const reco::PFCandidate &pfcand) const
void FFTJetPFPileupCleaner::setRemovalBit ( reco::PFCandidate::ParticleType  ptype,
bool  onOff 
)
private

Definition at line 203 of file FFTJetPFPileupCleaner.cc.

References removalMask, and edm::shift.

Referenced by buildRemovalMask().

205 {
206  const unsigned shift = static_cast<unsigned>(ptype);
207  assert(shift < 32U);
208  const unsigned mask = (1U << shift);
209  if (value)
210  removalMask |= mask;
211  else
212  removalMask &= ~mask;
213 }
static unsigned int const shift

Member Data Documentation

bool FFTJetPFPileupCleaner::checkClosestZVertex
private

Definition at line 72 of file FFTJetPFPileupCleaner.cc.

Referenced by findSomeVertex().

double FFTJetPFPileupCleaner::etaMax
private

Definition at line 101 of file FFTJetPFPileupCleaner.cc.

Referenced by produce().

double FFTJetPFPileupCleaner::etaMin
private

Definition at line 100 of file FFTJetPFPileupCleaner.cc.

edm::InputTag FFTJetPFPileupCleaner::PFCandidates
private

Definition at line 67 of file FFTJetPFPileupCleaner.cc.

Referenced by produce().

unsigned FFTJetPFPileupCleaner::removalMask
private

Definition at line 97 of file FFTJetPFPileupCleaner.cc.

Referenced by isRemovable(), and setRemovalBit().

bool FFTJetPFPileupCleaner::remove_e
private

Definition at line 89 of file FFTJetPFPileupCleaner.cc.

Referenced by buildRemovalMask().

bool FFTJetPFPileupCleaner::remove_egamma_HF
private

Definition at line 94 of file FFTJetPFPileupCleaner.cc.

Referenced by buildRemovalMask().

bool FFTJetPFPileupCleaner::remove_gamma
private

Definition at line 91 of file FFTJetPFPileupCleaner.cc.

Referenced by buildRemovalMask().

bool FFTJetPFPileupCleaner::remove_h
private

Definition at line 88 of file FFTJetPFPileupCleaner.cc.

Referenced by buildRemovalMask().

bool FFTJetPFPileupCleaner::remove_h0
private

Definition at line 92 of file FFTJetPFPileupCleaner.cc.

Referenced by buildRemovalMask().

bool FFTJetPFPileupCleaner::remove_h_HF
private

Definition at line 93 of file FFTJetPFPileupCleaner.cc.

Referenced by buildRemovalMask().

bool FFTJetPFPileupCleaner::remove_mu
private

Definition at line 90 of file FFTJetPFPileupCleaner.cc.

Referenced by buildRemovalMask().

bool FFTJetPFPileupCleaner::remove_X
private

Definition at line 87 of file FFTJetPFPileupCleaner.cc.

Referenced by buildRemovalMask().

bool FFTJetPFPileupCleaner::removeMainVertex
private

Definition at line 76 of file FFTJetPFPileupCleaner.cc.

Referenced by produce().

bool FFTJetPFPileupCleaner::removeUnassociated
private

Definition at line 80 of file FFTJetPFPileupCleaner.cc.

Referenced by produce().

bool FFTJetPFPileupCleaner::reverseRemovalDecision
private

Definition at line 83 of file FFTJetPFPileupCleaner.cc.

Referenced by produce().

double FFTJetPFPileupCleaner::vertexNdofCut
private

Definition at line 104 of file FFTJetPFPileupCleaner.cc.

Referenced by findSomeVertex().

edm::InputTag FFTJetPFPileupCleaner::Vertices
private

Definition at line 68 of file FFTJetPFPileupCleaner.cc.

Referenced by produce().