CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
FlavorHistoryProducer Class Reference

#include <FlavorHistoryProducer.h>

Inheritance diagram for FlavorHistoryProducer:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 FlavorHistoryProducer (const edm::ParameterSet &)
 constructor More...
 
 ~FlavorHistoryProducer () override
 destructor More...
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducer () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void getAncestors (const reco::Candidate &c, std::vector< reco::Candidate const * > &moms)
 
reco::CandidateView::const_iterator getClosestJet (edm::Handle< reco::CandidateView > const &pJets, reco::Candidate const &parton) const
 
reco::Candidate const * getSister (const reco::Candidate &c)
 
void produce (edm::Event &e, const edm::EventSetup &) override
 process one event More...
 

Private Attributes

double etaMaxParticle_
 
double etaMaxShower_
 
std::string flavorHistoryName_
 
double matchDR_
 
edm::EDGetTokenT< reco::CandidateViewmatchedSrcToken_
 
int pdgIdToSelect_
 
double ptMinParticle_
 
double ptMinShower_
 
edm::EDGetTokenT< reco::CandidateViewsrcToken_
 
bool verbose_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

class

Author
Stephen Mrenna, FNAL
Version
$Id: FlavorHistoryProducer.cc,v 1.0

Definition at line 55 of file FlavorHistoryProducer.h.

Constructor & Destructor Documentation

FlavorHistoryProducer::FlavorHistoryProducer ( const edm::ParameterSet p)

constructor

Definition at line 37 of file FlavorHistoryProducer.cc.

References flavorHistoryName_.

38  : srcToken_(consumes<CandidateView>(p.getParameter<InputTag>("src"))),
39  matchedSrcToken_(consumes<CandidateView>(p.getParameter<InputTag>("matchedSrc"))),
40  matchDR_(p.getParameter<double>("matchDR")),
41  pdgIdToSelect_(p.getParameter<int>("pdgIdToSelect")),
42  ptMinParticle_(p.getParameter<double>("ptMinParticle")),
43  ptMinShower_(p.getParameter<double>("ptMinShower")),
44  etaMaxParticle_(p.getParameter<double>("etaMaxParticle")),
45  etaMaxShower_(p.getParameter<double>("etaMaxShower")),
46  flavorHistoryName_(p.getParameter<string>("flavorHistoryName")),
47  verbose_(p.getUntrackedParameter<bool>("verbose")) {
48  produces<FlavorHistoryEvent>(flavorHistoryName_);
49 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< reco::CandidateView > srcToken_
edm::EDGetTokenT< reco::CandidateView > matchedSrcToken_
FlavorHistoryProducer::~FlavorHistoryProducer ( )
override

destructor

Definition at line 51 of file FlavorHistoryProducer.cc.

51 {}

Member Function Documentation

void FlavorHistoryProducer::getAncestors ( const reco::Candidate c,
std::vector< reco::Candidate const * > &  moms 
)
private

Definition at line 341 of file FlavorHistoryProducer.cc.

References HltBtagPostValidation_cff::c, reco::Candidate::mother(), and reco::Candidate::numberOfMothers().

Referenced by produce().

341  {
342  if (c.numberOfMothers() == 1) {
343  const Candidate *dau = &c;
344  const Candidate *mom = c.mother();
345  while (dau->numberOfMothers() != 0) {
346  moms.push_back(dau);
347  dau = mom;
348  mom = dau->mother();
349  }
350  }
351 }
virtual const Candidate * mother(size_type i=0) const =0
return pointer to mother
virtual size_type numberOfMothers() const =0
number of mothers (zero or one in most of but not all the cases)
CandidateView::const_iterator FlavorHistoryProducer::getClosestJet ( edm::Handle< reco::CandidateView > const &  pJets,
reco::Candidate const &  parton 
) const
private

Definition at line 353 of file FlavorHistoryProducer.cc.

References edm::View< T >::begin(), DEFINE_FWK_MODULE, PbPb_ZMuSkimMuonDPG_cff::deltaR, flavorHistoryFilter_cfi::dr, edm::View< T >::end(), dqmiolumiharvest::j, matchDR_, and reco::Candidate::p4().

Referenced by produce().

354  {
355  double dr = matchDR_;
356  CandidateView::const_iterator j = pJets->begin(), jend = pJets->end();
357  CandidateView::const_iterator bestJet = pJets->end();
358  for (; j != jend; ++j) {
359  double dri = deltaR(parton.p4(), j->p4());
360  if (dri < dr) {
361  dr = dri;
362  bestJet = j;
363  }
364  }
365  return bestJet;
366 }
const_iterator begin() const
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
const_iterator end() const
reco::Candidate const* FlavorHistoryProducer::getSister ( const reco::Candidate c)
private
void FlavorHistoryProducer::produce ( edm::Event e,
const edm::EventSetup  
)
overrideprivate

process one event

Definition at line 53 of file FlavorHistoryProducer.cc.

References funct::abs(), edm::View< T >::begin(), gather_cfg::cout, edm::View< T >::end(), PVValHelper::eta, etaMaxShower_, spr::find(), flavorHistoryName_, newFWLiteAna::found, getAncestors(), edm::Event::getByToken(), getClosestJet(), mps_fire::i, cuy::ii, dqmiolumiharvest::j, findQualityFiles::jj, muonTagProbeFilters_cff::matched, matchedSrcToken_, eostools::move(), reco::Candidate::numberOfMothers(), AlCaHLTBitMon_ParallelJobs::p, ecalTrigSettings_cff::particles, EgammaValidation_cff::pdgId, reco::Candidate::pdgId(), pdgIdToSelect_, ptMinShower_, edm::Event::put(), srcToken_, mps_update::status, reco::Candidate::status(), and verbose_.

53  {
54  if (verbose_)
55  cout << "---------- Hello from FlavorHistoryProducer! -----" << endl;
56 
57  // Get a handle to the particle collection (OwnVector)
58  Handle<CandidateView> particlesViewH;
59  evt.getByToken(srcToken_, particlesViewH);
60 
61  Handle<CandidateView> matchedView;
62  evt.getByToken(matchedSrcToken_, matchedView);
63 
64  // Copy the View to an vector for easier iterator manipulation convenience
65  vector<const Candidate *> particles;
66  for (CandidateView::const_iterator p = particlesViewH->begin(); p != particlesViewH->end(); ++p) {
67  particles.push_back(&*p);
68  }
69 
70  // List of indices for the partons to add
71  vector<int> partonIndices;
72  // List of progenitors for those partons
73  vector<int> progenitorIndices;
74  // List of sisters for those partons
75  vector<int> sisterIndices;
76  // Flavor sources
77  vector<FlavorHistory::FLAVOR_T> flavorSources;
78 
79  // Make a new flavor history vector
80  auto flavorHistoryEvent = std::make_unique<FlavorHistoryEvent>();
81 
82  // ------------------------------------------------------------
83  // Loop over partons
84  // ------------------------------------------------------------
86  vector<const Candidate *>::size_type j_max = particles.size();
87  for (j = 0; j < j_max; ++j) {
88  // Get the candidate
89  const Candidate *p = particles[j];
90  // Set up indices that we'll need for the flavor history
92  vector<Candidate const *>::size_type progenitorIndex = j_max;
93  bool foundProgenitor = false;
94  FlavorHistory::FLAVOR_T flavorSource = FlavorHistory::FLAVOR_NULL;
95 
96  int idabs = std::abs((p)->pdgId());
97  int nDa = (p)->numberOfDaughters();
98 
99  // Check if we have a status 2 or 3 particle, which is a parton before the string.
100  // Only consider quarks.
101  if (idabs <= FlavorHistory::tQuarkId && p->status() == 2 && idabs == pdgIdToSelect_) {
102  // Ensure the parton in question has daughters
103  if (nDa > 0) {
104  // Ensure the parton passes some minimum kinematic cuts
105  if ((p)->pt() > ptMinShower_ && fabs((p)->eta()) < etaMaxShower_) {
106  if (verbose_)
107  cout << "--------------------------" << endl;
108  if (verbose_)
109  cout << "Processing particle " << j << ", status = " << p->status() << ", pdg id = " << p->pdgId() << endl;
110 
111  //Main (but simple) workhorse to get all ancestors
112  vector<Candidate const *> allParents;
113  getAncestors(*p, allParents);
114 
115  if (verbose_) {
116  cout << "Parents : " << endl;
117  vector<Candidate const *>::const_iterator iprint = allParents.begin(), iprintend = allParents.end();
118  for (; iprint != iprintend; ++iprint)
119  cout << " status = " << (*iprint)->status() << ", pdg id = " << (*iprint)->pdgId()
120  << ", pt = " << (*iprint)->pt() << endl;
121  }
122 
123  // -------------------------------------------------------------
124  // Identify the ancestry of the Quark
125  //
126  //
127  // Matrix Element:
128  // Status 3 parent with precisely 2 "grandparents" that
129  // is outside of the "initial" section (0-5) that has the
130  // same ID as the status 2 parton in question.
131  //
132  // Flavor excitation:
133  // If we find only one outgoing parton.
134  //
135  // Gluon splitting:
136  // Parent is a quark of a different flavor than the parton
137  // in question, or a gluon.
138  // Can come from either ISR or FSR.
139  //
140  // True decay:
141  // Decays from a resonance like top, Higgs, etc.
142  // -------------------------------------------------------------
143  vector<Candidate const *>::size_type a_size = allParents.size();
144 
145  //
146  // Loop over all the ancestors of this parton and find the progenitor.
147  //
148  for (vector<Candidate const *>::size_type i = 0; i < a_size && !foundProgenitor; ++i) {
149  const Candidate *aParent = allParents[i];
150  vector<Candidate const *>::const_iterator found = find(particles.begin(), particles.end(), aParent);
151 
152  // Get the index of the progenitor candidate
153  progenitorIndex = found - particles.begin();
154 
155  int aParentId = std::abs(aParent->pdgId());
156 
157  // -----------------------------------------------------------------------
158  // Here we examine particles that were produced after the collision
159  // -----------------------------------------------------------------------
160  if (progenitorIndex > 5) {
161  // Here is where we have a matrix element process.
162  // The signature is to have a status 3 parent with precisely 2 parents
163  // that is outside of the "initial" section (0-5) that has the
164  // same ID as the status 2 parton in question.
165  // NOTE: If this parton has no sister, then this will be classified as
166  // a flavor excitation. Often the only difference is that the matrix element
167  // cases have a sister, while the flavor excitation cases do not.
168  // If we do not find a sister below, this will be classified as a flavor
169  // excitation.
170  if (aParent->numberOfMothers() == 2 && aParent->pdgId() == p->pdgId() && aParent->status() == 3) {
171  if (verbose_)
172  cout << "Matrix Element progenitor" << endl;
173  if (flavorSource == FlavorHistory::FLAVOR_NULL)
174  flavorSource = FlavorHistory::FLAVOR_ME;
175  foundProgenitor = true;
176  }
177  // Here we have a true decay. Parent is not a quark or a gluon.
178  else if ((aParentId > pdgIdToSelect_ && aParentId < FlavorHistory::gluonId) ||
179  aParentId > FlavorHistory::gluonId) {
180  if (verbose_)
181  cout << "Flavor decay progenitor" << endl;
182  if (flavorSource == FlavorHistory::FLAVOR_NULL)
183  flavorSource = FlavorHistory::FLAVOR_DECAY;
184  foundProgenitor = true;
185  }
186  } // end if progenitorIndex > 5
187  } // end loop over parents
188 
189  // Otherwise, classify it as gluon splitting. Take the first status 3 parton with 1 parent
190  // that you see as the progenitor
191  if (!foundProgenitor) {
192  if (flavorSource == FlavorHistory::FLAVOR_NULL)
193  flavorSource = FlavorHistory::FLAVOR_GS;
194  // Now get the parton with only one parent (the proton) and that is the progenitor
195  for (vector<Candidate const *>::size_type i = 0; i < a_size && !foundProgenitor; ++i) {
196  const Candidate *aParent = allParents[i];
197  vector<Candidate const *>::const_iterator found = find(particles.begin(), particles.end(), aParent);
198  // Get the index of the progenitor candidate
199  progenitorIndex = found - particles.begin();
200 
201  if (aParent->numberOfMothers() == 1 && aParent->status() == 3) {
202  foundProgenitor = true;
203  }
204  } // end loop over parents
205  } // end if we haven't found a progenitor, and if we haven't found a status 3 parton of the same flavor
206  // (i.e. end if examining gluon splitting)
207  } // End if this parton passes some minimal kinematic cuts
208  } // End if this particle is status 2 (has strings as daughters)
209 
210  // Make sure we've actually found a progenitor
211  if (!foundProgenitor)
212  progenitorIndex = j_max;
213 
214  // We've found the particle, add to the list
215 
216  partonIndices.push_back(partonIndex);
217  progenitorIndices.push_back(progenitorIndex);
218  flavorSources.push_back(flavorSource);
219  sisterIndices.push_back(-1); // set below
220 
221  } // End if this particle was a status==2 parton
222  } // end loop over particles
223 
224  // Now add sisters.
225  // Also if the event is preliminarily classified as "matrix element", check to
226  // make sure that they have a sister. If not, it is flavor excitation.
227 
228  if (verbose_)
229  cout << "Making sisters" << endl;
230  // First make sure nothing went terribly wrong:
231  if (partonIndices.size() == progenitorIndices.size() && !partonIndices.empty()) {
232  // Now loop over the candidates
233  for (unsigned int ii = 0; ii < partonIndices.size(); ++ii) {
234  // Get the iith particle
235  const Candidate *candi = particles[partonIndices[ii]];
236  if (verbose_)
237  cout << " Sister candidate particle 1: " << ii << ", pdgid = " << candi->pdgId()
238  << ", status = " << candi->status() << endl;
239  // Get the iith progenitor
240  // Now loop over the other flavor history candidates and
241  // attempt to find a sister to this one
242  for (unsigned int jj = 0; jj < partonIndices.size(); ++jj) {
243  if (ii != jj) {
244  const Candidate *candj = particles[partonIndices[jj]];
245  if (verbose_)
246  cout << " Sister candidate particle 2: " << jj << ", pdgid = " << candj->pdgId()
247  << ", status = " << candj->status() << endl;
248  // They should be opposite in pdgid and have the same status, and
249  // the same progenitory.
250  if (candi->pdgId() == -1 * candj->pdgId() && candi->status() == candj->status()) {
251  sisterIndices[ii] = partonIndices[jj];
252  if (verbose_)
253  cout << "Parton " << partonIndices[ii] << " has sister " << sisterIndices[ii] << endl;
254  }
255  }
256  }
257 
258  // Here, ensure that there is a sister. Otherwise this is "flavor excitation"
259  if (sisterIndices[ii] < 0) {
260  if (verbose_)
261  cout << "No sister. Classified as flavor excitation" << endl;
262  flavorSources[ii] = FlavorHistory::FLAVOR_EXC;
263  }
264 
265  if (verbose_)
266  cout << "Getting matched jet" << endl;
267  // Get the closest match in the matched object collection
268  CandidateView::const_iterator matched = getClosestJet(matchedView, *candi);
269  CandidateView::const_iterator matchedBegin = matchedView->begin();
270  CandidateView::const_iterator matchedEnd = matchedView->end();
271 
272  if (verbose_)
273  cout << "Getting sister jet" << endl;
274  // Get the closest sister in the matched object collection, if sister is found
276  (sisterIndices[ii] >= 0 && static_cast<unsigned int>(sisterIndices[ii]) < particles.size())
277  ? getClosestJet(matchedView, *particles[sisterIndices[ii]])
278  : matchedEnd;
279 
280  if (verbose_)
281  cout << "Making matched shallow clones : ";
282  ShallowClonePtrCandidate matchedCand;
283  if (matched != matchedEnd) {
284  if (verbose_)
285  cout << " found" << endl;
286  matchedCand = ShallowClonePtrCandidate(CandidatePtr(matchedView, matched - matchedBegin));
287  } else {
288  if (verbose_)
289  cout << " NOT found" << endl;
290  }
291 
292  if (verbose_)
293  cout << "Making sister shallow clones : ";
294  ShallowClonePtrCandidate sisterCand;
295  if (sister != matchedEnd) {
296  if (verbose_)
297  cout << " found" << endl;
298  sisterCand = ShallowClonePtrCandidate(CandidatePtr(matchedView, sister - matchedBegin));
299  } else {
300  if (verbose_)
301  cout << " NOT found" << endl;
302  }
303 
304  if (verbose_)
305  cout << "Making history object" << endl;
306  // Now create the flavor history object
307  FlavorHistory history(flavorSources[ii],
308  particlesViewH,
309  partonIndices[ii],
310  progenitorIndices[ii],
311  sisterIndices[ii],
312  matchedCand,
313  sisterCand);
314  if (verbose_)
315  cout << "Adding flavor history : " << history << endl;
316  flavorHistoryEvent->push_back(history);
317  }
318  }
319 
320  // If we got any partons, cache them and then write them out
321  if (flavorHistoryEvent->size() > 0) {
322  // Calculate some nice variables for FlavorHistoryEvent
323  if (verbose_)
324  cout << "Caching flavor history event" << endl;
325  flavorHistoryEvent->cache();
326 
327  if (verbose_) {
328  cout << "Outputting pdg id = " << pdgIdToSelect_ << " with nelements = " << flavorHistoryEvent->size() << endl;
329  vector<FlavorHistory>::const_iterator i = flavorHistoryEvent->begin(), iend = flavorHistoryEvent->end();
330  for (; i != iend; ++i) {
331  cout << *i << endl;
332  }
333  }
334  }
335 
336  // Now add the flavor history to the event record
337  evt.put(std::move(flavorHistoryEvent), flavorHistoryName_);
338 }
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
uint16_t size_type
reco::CandidateView::const_iterator getClosestJet(edm::Handle< reco::CandidateView > const &pJets, reco::Candidate const &parton) const
edm::EDGetTokenT< reco::CandidateView > srcToken_
virtual int status() const =0
status word
const_iterator begin() const
virtual int pdgId() const =0
PDG identifier.
virtual size_type numberOfMothers() const =0
number of mothers (zero or one in most of but not all the cases)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ii
Definition: cuy.py:590
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
void getAncestors(const reco::Candidate &c, std::vector< reco::Candidate const * > &moms)
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
const_iterator end() const
def move(src, dest)
Definition: eostools.py:511
edm::EDGetTokenT< reco::CandidateView > matchedSrcToken_

Member Data Documentation

double FlavorHistoryProducer::etaMaxParticle_
private

Definition at line 79 of file FlavorHistoryProducer.h.

double FlavorHistoryProducer::etaMaxShower_
private

Definition at line 80 of file FlavorHistoryProducer.h.

Referenced by produce().

std::string FlavorHistoryProducer::flavorHistoryName_
private

Definition at line 81 of file FlavorHistoryProducer.h.

Referenced by FlavorHistoryProducer(), and produce().

double FlavorHistoryProducer::matchDR_
private

Definition at line 75 of file FlavorHistoryProducer.h.

Referenced by getClosestJet().

edm::EDGetTokenT<reco::CandidateView> FlavorHistoryProducer::matchedSrcToken_
private

Definition at line 74 of file FlavorHistoryProducer.h.

Referenced by produce().

int FlavorHistoryProducer::pdgIdToSelect_
private

Definition at line 76 of file FlavorHistoryProducer.h.

Referenced by produce().

double FlavorHistoryProducer::ptMinParticle_
private

Definition at line 77 of file FlavorHistoryProducer.h.

double FlavorHistoryProducer::ptMinShower_
private

Definition at line 78 of file FlavorHistoryProducer.h.

Referenced by produce().

edm::EDGetTokenT<reco::CandidateView> FlavorHistoryProducer::srcToken_
private

Definition at line 73 of file FlavorHistoryProducer.h.

Referenced by produce().

bool FlavorHistoryProducer::verbose_
private

Definition at line 82 of file FlavorHistoryProducer.h.

Referenced by produce().