CMS 3D CMS Logo

FFTJetProducer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FFTJetProducers
4 // Class: FFTJetProducer
5 //
13 //
14 // Original Author: Igor Volobouev
15 // Created: Sun Jun 20 14:32:36 CDT 2010
16 //
17 //
18 
19 #include <algorithm>
20 #include <fstream>
21 #include <functional>
22 #include <iostream>
23 #include <memory>
24 
25 #include "fftjet/peakEtLifetime.hh"
26 
27 // Header for this class
29 
30 // Framework include files
33 
34 // Data formats
39 
41 
42 // Loader for the lookup tables
44 
45 #define make_param(type, varname) const type& varname(ps.getParameter<type>(#varname))
46 
47 #define init_param(type, varname) varname(ps.getParameter<type>(#varname))
48 
49 // A generic switch statement based on jet type.
50 // Defining it in a single place avoids potential errors
51 // in case another jet type is introduced in the future.
52 //
53 // JPTJet is omitted for now: there is no reco::writeSpecific method
54 // for it (see header JetSpecific.h in the JetProducers package)
55 //
56 #define jet_type_switch(method, arg1, arg2) \
57  do { \
58  switch (jetType) { \
59  case CALOJET: \
60  method<reco::CaloJet>(arg1, arg2); \
61  break; \
62  case PFJET: \
63  method<reco::PFJet>(arg1, arg2); \
64  break; \
65  case GENJET: \
66  method<reco::GenJet>(arg1, arg2); \
67  break; \
68  case TRACKJET: \
69  method<reco::TrackJet>(arg1, arg2); \
70  break; \
71  case BASICJET: \
72  method<reco::BasicJet>(arg1, arg2); \
73  break; \
74  default: \
75  assert(!"ERROR in FFTJetProducer : invalid jet type."\
76  " This is a bug. Please report."); \
77  } \
78  } while (0);
79 
80 namespace {
81  struct LocalSortByPt {
82  template <class Jet>
83  inline bool operator()(const Jet& l, const Jet& r) const {
84  return l.pt() > r.pt();
85  }
86  };
87 } // namespace
88 
89 using namespace fftjetcms;
90 
92  if (!name.compare("fixed"))
93  return FIXED;
94  else if (!name.compare("maximallyStable"))
95  return MAXIMALLY_STABLE;
96  else if (!name.compare("globallyAdaptive"))
97  return GLOBALLY_ADAPTIVE;
98  else if (!name.compare("locallyAdaptive"))
99  return LOCALLY_ADAPTIVE;
100  else if (!name.compare("fromGenJets"))
101  return FROM_GENJETS;
102  else
103  throw cms::Exception("FFTJetBadConfig") << "Invalid resolution specification \"" << name << "\"" << std::endl;
104 }
105 
106 template <typename T>
108  produces<std::vector<reco::FFTAnyJet<T> > >(tag).setBranchAlias(alias);
109 }
110 
111 //
112 // constructors and destructor
113 //
115  : FFTJetInterface(ps),
116  myConfiguration(ps),
120  init_param(unsigned, maxIterations),
129  init_param(double, fixedScale),
130  init_param(double, minStableScale),
131  init_param(double, maxStableScale),
132  init_param(double, stabilityAlpha),
133  init_param(double, noiseLevel),
134  init_param(unsigned, nClustersRequested),
135  init_param(double, gridScanMaxEta),
138  init_param(double, unlikelyBgWeight),
142  resolution(parse_resolution(ps.getParameter<std::string>("resolution"))),
147 
148  minLevel(0),
149  maxLevel(0),
150  usedLevel(0),
151  unused(0.0),
152  iterationsPerformed(1U),
153  constituents(200) {
154  // Check that the settings make sense
156  throw cms::Exception("FFTJetBadConfig") << "Can't resum constituents if they are not assigned" << std::endl;
157 
158  produces<reco::FFTJetProducerSummary>(outputLabel);
161 
162  // Build the set of pattern recognition scales.
163  // This is needed in order to read the clustering tree
164  // from the event record.
166  checkConfig(iniScales, "invalid set of scales");
167  std::sort(iniScales->begin(), iniScales->end(), std::greater<double>());
168 
170  consumes<reco::PattRecoTree<fftjetcms::Real, reco::PattRecoPeak<fftjetcms::Real> > >(treeLabel);
171  input_genjet_token_ = consumes<std::vector<reco::FFTAnyJet<reco::GenJet> > >(genJetsLabel);
172  input_energyflow_token_ = consumes<reco::DiscretizedEnergyFlow>(treeLabel);
173  input_pusummary_token_ = consumes<reco::FFTJetPileupSummary>(pileupLabel);
174 
175  // Most of the configuration has to be performed inside
176  // the "beginJob" method. This is because chaining of the
177  // parsers between this base class and the derived classes
178  // can not work from the constructor of the base class.
179 }
180 
182 
183 //
184 // member functions
185 //
186 template <class Real>
189 
190  // Get the input
192  iEvent.getByToken(input_recotree_token_, input);
193 
194  if (!input->isSparse())
195  throw cms::Exception("FFTJetBadConfig") << "The stored clustering tree is not sparse" << std::endl;
196 
198  sparseTree.sortNodes();
199  fftjet::updateSplitMergeTimes(sparseTree, sparseTree.minScale(), sparseTree.maxScale());
200 }
201 
204  const edm::EventSetup& /* iSetup */,
205  const fftjet::Functor1<bool, fftjet::Peak>& peakSelect,
206  std::vector<fftjet::Peak>* preclusters) {
207  typedef reco::FFTAnyJet<reco::GenJet> InputJet;
208  typedef std::vector<InputJet> InputCollection;
209 
211  iEvent.getByToken(input_genjet_token_, input);
212 
213  const unsigned sz = input->size();
214  preclusters->reserve(sz);
215  for (unsigned i = 0; i < sz; ++i) {
216  const RecoFFTJet& jet(jetFromStorable((*input)[i].getFFTSpecific()));
217  fftjet::Peak p(jet.precluster());
218  const double scale(p.scale());
219  p.setEtaPhi(jet.vec().Eta(), jet.vec().Phi());
220  p.setMagnitude(jet.vec().Pt() / scale / scale);
221  p.setStatus(resolution);
222  if (peakSelect(p))
223  preclusters->push_back(p);
224  }
225 }
226 
228  const fftjet::Functor1<bool, fftjet::Peak>& peakSelect,
229  std::vector<fftjet::Peak>* preclusters) {
230  nodes.clear();
231  selectTreeNodes(tree, peakSelect, &nodes);
232 
233  // Fill out the vector of preclusters using the tree node ids
234  const unsigned nNodes = nodes.size();
235  const SparseTree::NodeId* pnodes = nNodes ? &nodes[0] : nullptr;
236  preclusters->reserve(nNodes);
237  for (unsigned i = 0; i < nNodes; ++i)
238  preclusters->push_back(sparseTree.uncheckedNode(pnodes[i]).getCluster());
239 
240  // Remember the node id in the precluster and set
241  // the status word to indicate the resolution scheme used
242  fftjet::Peak* clusters = nNodes ? &(*preclusters)[0] : nullptr;
243  for (unsigned i = 0; i < nNodes; ++i) {
244  clusters[i].setCode(pnodes[i]);
245  clusters[i].setStatus(resolution);
246  }
247 }
248 
250  const fftjet::Functor1<bool, fftjet::Peak>& peakSelect,
251  std::vector<SparseTree::NodeId>* mynodes) {
252  minLevel = maxLevel = usedLevel = 0;
253 
254  // Get the tree nodes which pass the cuts
255  // (according to the selected resolution strategy)
256  switch (resolution) {
257  case FIXED: {
258  usedLevel = tree.getLevel(fixedScale);
259  tree.getPassingNodes(usedLevel, peakSelect, mynodes);
260  } break;
261 
262  case MAXIMALLY_STABLE: {
263  const unsigned minStartingLevel = maxStableScale > 0.0 ? tree.getLevel(maxStableScale) : 0;
264  const unsigned maxStartingLevel = minStableScale > 0.0 ? tree.getLevel(minStableScale) : UINT_MAX;
265 
266  if (tree.stableClusterCount(
267  peakSelect, &minLevel, &maxLevel, stabilityAlpha, minStartingLevel, maxStartingLevel)) {
268  usedLevel = (minLevel + maxLevel) / 2;
269  tree.getPassingNodes(usedLevel, peakSelect, mynodes);
270  }
271  } break;
272 
273  case GLOBALLY_ADAPTIVE: {
274  const bool stable = tree.clusterCountLevels(nClustersRequested, peakSelect, &minLevel, &maxLevel);
275  if (minLevel || maxLevel) {
276  usedLevel = (minLevel + maxLevel) / 2;
277  if (!stable) {
278  const int maxlev = tree.maxStoredLevel();
279  bool levelFound = false;
280  for (int delta = 0; delta <= maxlev && !levelFound; ++delta)
281  for (int ifac = 1; ifac > -2 && !levelFound; ifac -= 2) {
282  const int level = usedLevel + ifac * delta;
283  if (level > 0 && level <= maxlev)
285  usedLevel = level;
286  levelFound = true;
287  }
288  }
289  assert(levelFound);
290  }
291  } else {
292  // Can't find that exact number of preclusters.
293  // Try to get the next best thing.
294  usedLevel = 1;
295  const unsigned occ1 = occupancy[1];
296  if (nClustersRequested >= occ1) {
297  const unsigned maxlev = tree.maxStoredLevel();
298  if (nClustersRequested > occupancy[maxlev])
299  usedLevel = maxlev;
300  else {
301  // It would be nice to use "lower_bound" here,
302  // but the occupancy is not necessarily monotonous.
303  unsigned bestDelta = nClustersRequested > occ1 ? nClustersRequested - occ1 : occ1 - nClustersRequested;
304  for (unsigned level = 2; level <= maxlev; ++level) {
305  const unsigned n = occupancy[level];
306  const unsigned d = nClustersRequested > n ? nClustersRequested - n : n - nClustersRequested;
307  if (d < bestDelta) {
308  bestDelta = d;
309  usedLevel = level;
310  }
311  }
312  }
313  }
314  }
315  tree.getPassingNodes(usedLevel, peakSelect, mynodes);
316  } break;
317 
318  case LOCALLY_ADAPTIVE: {
319  usedLevel = tree.getLevel(fixedScale);
320  tree.getMagS2OptimalNodes(peakSelect, nClustersRequested, usedLevel, mynodes, &thresholds);
321  } break;
322 
323  default:
324  assert(!"ERROR in FFTJetProducer::selectTreeNodes : "
325  "should never get here! This is a bug. Please report.");
326  }
327 }
328 
330  const unsigned nClus = preclusters.size();
331  if (nClus) {
332  fftjet::Peak* clus = &preclusters[0];
333  fftjet::Functor1<double, fftjet::Peak>& scaleCalc(*recoScaleCalcPeak);
334  fftjet::Functor1<double, fftjet::Peak>& ratioCalc(*recoScaleRatioCalcPeak);
335  fftjet::Functor1<double, fftjet::Peak>& factorCalc(*memberFactorCalcPeak);
336 
337  for (unsigned i = 0; i < nClus; ++i) {
338  clus[i].setRecoScale(scaleCalc(clus[i]));
339  clus[i].setRecoScaleRatio(ratioCalc(clus[i]));
340  clus[i].setMembershipFactor(factorCalc(clus[i]));
341  }
342  }
343 }
344 
346  int minBin = energyFlow->getEtaBin(-gridScanMaxEta);
347  if (minBin < 0)
348  minBin = 0;
349  int maxBin = energyFlow->getEtaBin(gridScanMaxEta) + 1;
350  if (maxBin < 0)
351  maxBin = 0;
352 
353  fftjet::DefaultRecombinationAlgFactory<Real, VectorLike, BgData, VBuilder> factory;
354  if (factory[recombinationAlgorithm] == nullptr)
355  throw cms::Exception("FFTJetBadConfig")
356  << "Invalid grid recombination algorithm \"" << recombinationAlgorithm << "\"" << std::endl;
357  gridAlg = std::unique_ptr<GridAlg>(factory[recombinationAlgorithm]->create(jetMembershipFunction.get(),
358  bgMembershipFunction.get(),
361  isCrisp,
362  false,
364  minBin,
365  maxBin));
366 }
367 
368 bool FFTJetProducer::loadEnergyFlow(const edm::Event& iEvent, std::unique_ptr<fftjet::Grid2d<fftjetcms::Real> >& flow) {
370  iEvent.getByToken(input_energyflow_token_, input);
371 
372  // Make sure that the grid is compatible with the stored one
373  bool rebuildGrid = flow.get() == nullptr;
374  if (!rebuildGrid)
375  rebuildGrid =
376  !(flow->nEta() == input->nEtaBins() && flow->nPhi() == input->nPhiBins() && flow->etaMin() == input->etaMin() &&
377  flow->etaMax() == input->etaMax() && flow->phiBin0Edge() == input->phiBin0Edge());
378  if (rebuildGrid) {
379  // We should not get here very often...
380  flow = std::make_unique<fftjet::Grid2d<Real> >(
381  input->nEtaBins(), input->etaMin(), input->etaMax(), input->nPhiBins(), input->phiBin0Edge(), input->title());
382  }
383  flow->blockSet(input->data(), input->nEtaBins(), input->nPhiBins());
384  return rebuildGrid;
385 }
386 
387 bool FFTJetProducer::checkConvergence(const std::vector<RecoFFTJet>& previous, std::vector<RecoFFTJet>& nextSet) {
388  fftjet::Functor2<double, RecoFFTJet, RecoFFTJet>& distanceCalc(*jetDistanceCalc);
389 
390  const unsigned nJets = previous.size();
391  if (nJets != nextSet.size())
392  return false;
393 
394  const RecoFFTJet* prev = &previous[0];
395  RecoFFTJet* next = &nextSet[0];
396 
397  // Calculate convergence distances for all jets
398  bool converged = true;
399  for (unsigned i = 0; i < nJets; ++i) {
400  const double d = distanceCalc(prev[i], next[i]);
401  next[i].setConvergenceDistance(d);
402  if (i < nJetsRequiredToConverge && d > convergenceDistance)
403  converged = false;
404  }
405 
406  return converged;
407 }
408 
410  fftjet::Functor1<double, RecoFFTJet>& scaleCalc(*recoScaleCalcJet);
411  fftjet::Functor1<double, RecoFFTJet>& ratioCalc(*recoScaleRatioCalcJet);
412  fftjet::Functor1<double, RecoFFTJet>& factorCalc(*memberFactorCalcJet);
413 
414  unsigned nJets = recoJets.size();
415  unsigned iterNum = 1U;
416  bool converged = false;
417  for (; iterNum < maxIterations && !converged; ++iterNum) {
418  // Recreate the vector of preclusters using the jets
419  const RecoFFTJet* jets = &recoJets[0];
420  iterPreclusters.clear();
421  iterPreclusters.reserve(nJets);
422  for (unsigned i = 0; i < nJets; ++i) {
423  const RecoFFTJet& jet(jets[i]);
424  fftjet::Peak p(jet.precluster());
425  p.setEtaPhi(jet.vec().Eta(), jet.vec().Phi());
426  p.setRecoScale(scaleCalc(jet));
427  p.setRecoScaleRatio(ratioCalc(jet));
428  p.setMembershipFactor(factorCalc(jet));
429  iterPreclusters.push_back(p);
430  }
431 
432  // Run the algorithm
433  int status = 0;
436  else
438  if (status)
439  throw cms::Exception("FFTJetInterface") << "FFTJet algorithm failed" << std::endl;
440 
441  // As it turns out, it is possible, in very rare cases,
442  // to have iterJets.size() != nJets at this point
443 
444  // Figure out if the iterations have converged
445  converged = checkConvergence(recoJets, iterJets);
446 
447  // Prepare for the next cycle
448  iterJets.swap(recoJets);
449  nJets = recoJets.size();
450  }
451 
452  // Check that we have the correct number of preclusters
453  if (preclusters.size() != nJets) {
454  assert(nJets < preclusters.size());
456  assert(preclusters.size() == nJets);
457  }
458 
459  // Plug in the original precluster coordinates into the result
460  RecoFFTJet* jets = &recoJets[0];
461  for (unsigned i = 0; i < nJets; ++i) {
462  const fftjet::Peak& oldp(preclusters[i]);
463  jets[i].setPeakEtaPhi(oldp.eta(), oldp.phi());
464  }
465 
466  // If we have converged on the last cycle, the result
467  // would be indistinguishable from no convergence.
468  // Because of this, raise the counter by one to indicate
469  // the case when the convergence is not achieved.
470  if (!converged)
471  ++iterNum;
472 
473  return iterNum;
474 }
475 
477  const unsigned nJets = recoJets.size();
478  const unsigned* clusterMask = gridAlg->getClusterMask();
479  const int nEta = gridAlg->getLastNEta();
480  const int nPhi = gridAlg->getLastNPhi();
481  const fftjet::Grid2d<Real>& g(*energyFlow);
482 
483  const unsigned nInputs = eventData.size();
484  const VectorLike* inp = nInputs ? &eventData[0] : nullptr;
485  const unsigned* candIdx = nInputs ? &candidateIndex[0] : nullptr;
486  for (unsigned i = 0; i < nInputs; ++i) {
487  const VectorLike& item(inp[i]);
488  const int iPhi = g.getPhiBin(item.Phi());
489  const int iEta = g.getEtaBin(item.Eta());
490  const unsigned mask = iEta >= 0 && iEta < nEta ? clusterMask[iEta * nPhi + iPhi] : 0;
491  assert(mask <= nJets);
492  constituents[mask].push_back(inputCollection->ptrAt(candIdx[i]));
493  }
494 }
495 
497  const unsigned nJets = recoJets.size();
498  const unsigned* clusterMask = recoAlg->getClusterMask();
499  const unsigned maskLength = recoAlg->getLastNData();
500  assert(maskLength == eventData.size());
501 
502  const unsigned* candIdx = maskLength ? &candidateIndex[0] : nullptr;
503  for (unsigned i = 0; i < maskLength; ++i) {
504  // In FFTJet, the mask value of 0 corresponds to unclustered
505  // energy. We will do the same here. Jet numbers are therefore
506  // shifted by 1 wrt constituents vector, and constituents[1]
507  // corresponds to jet number 0.
508  const unsigned mask = clusterMask[i];
509  assert(mask <= nJets);
510  constituents[mask].push_back(inputCollection->ptrAt(candIdx[i]));
511  }
512 }
513 
514 // The following code more or less coincides with the similar method
515 // implemented in VirtualJetProducer
516 template <typename T>
518  using namespace reco;
519 
520  typedef FFTAnyJet<T> OutputJet;
521  typedef std::vector<OutputJet> OutputCollection;
522 
523  // Area of a single eta-phi cell for jet area calculations.
524  // Set it to 0 in case the module configuration does not allow
525  // us to calculate jet areas reliably.
526  double cellArea = useGriddedAlgorithm && recombinationDataCutoff < 0.0
527  ? energyFlow->etaBinWidth() * energyFlow->phiBinWidth()
528  : 0.0;
529 
530  if (calculatePileup)
531  cellArea = pileupEnergyFlow->etaBinWidth() * pileupEnergyFlow->phiBinWidth();
532 
533  // allocate output jet collection
534  auto jets = std::make_unique<OutputCollection>();
535  const unsigned nJets = recoJets.size();
536  jets->reserve(nJets);
537 
538  bool sorted = true;
539  double previousPt = DBL_MAX;
540  for (unsigned ijet = 0; ijet < nJets; ++ijet) {
541  RecoFFTJet& myjet(recoJets[ijet]);
542 
543  // Check if we should resum jet constituents
544  VectorLike jet4vec(myjet.vec());
545  if (resumConstituents) {
546  VectorLike sum(0.0, 0.0, 0.0, 0.0);
547  const unsigned nCon = constituents[ijet + 1].size();
548  const reco::CandidatePtr* cn = nCon ? &constituents[ijet + 1][0] : nullptr;
549  for (unsigned i = 0; i < nCon; ++i)
550  sum += cn[i]->p4();
551  jet4vec = sum;
552  setJetStatusBit(&myjet, CONSTITUENTS_RESUMMED, true);
553  }
554 
555  // Subtract the pile-up
557  jet4vec = adjustForPileup(jet4vec, pileup[ijet], subtractPileupAs4Vec);
560  else
561  setJetStatusBit(&myjet, PILEUP_SUBTRACTED_PT, true);
562  }
563 
564  // Write the specifics to the jet (simultaneously sets 4-vector,
565  // vertex, constituents). These are overridden functions that will
566  // call the appropriate specific code.
567  T jet;
568  writeSpecific(jet, jet4vec, vertexUsed(), constituents[ijet + 1], iSetup);
569 
570  // calcuate the jet area
571  double ncells = myjet.ncells();
572  if (calculatePileup) {
573  ncells = cellCountsVec[ijet];
574  setJetStatusBit(&myjet, PILEUP_CALCULATED, true);
575  }
576  jet.setJetArea(cellArea * ncells);
577 
578  // add jet to the list
579  FFTJet<float> fj(jetToStorable<float>(myjet));
580  fj.setFourVec(jet4vec);
581  if (calculatePileup) {
582  fj.setPileup(pileup[ijet]);
583  fj.setNCells(ncells);
584  }
585  jets->push_back(OutputJet(jet, fj));
586 
587  // Check whether the sequence remains sorted by pt
588  const double pt = jet.pt();
589  if (pt > previousPt)
590  sorted = false;
591  previousPt = pt;
592  }
593 
594  // Sort the collection
595  if (!sorted)
596  std::sort(jets->begin(), jets->end(), LocalSortByPt());
597 
598  // put the collection into the event
600 }
601 
602 void FFTJetProducer::saveResults(edm::Event& ev, const edm::EventSetup& iSetup, const unsigned nPreclustersFound) {
603  // Write recombined jets
604  jet_type_switch(writeJets, ev, iSetup);
605 
606  // Check if we should resum unclustered energy constituents
607  VectorLike unclusE(unclustered);
608  if (resumConstituents) {
609  VectorLike sum(0.0, 0.0, 0.0, 0.0);
610  const unsigned nCon = constituents[0].size();
611  const reco::CandidatePtr* cn = nCon ? &constituents[0][0] : nullptr;
612  for (unsigned i = 0; i < nCon; ++i)
613  sum += cn[i]->p4();
614  unclusE = sum;
615  }
616 
617  // Write the jet reconstruction summary
618  const double minScale = minLevel ? sparseTree.getScale(minLevel) : 0.0;
619  const double maxScale = maxLevel ? sparseTree.getScale(maxLevel) : 0.0;
620  const double scaleUsed = usedLevel ? sparseTree.getScale(usedLevel) : 0.0;
621 
622  ev.put(
623  std::make_unique<reco::FFTJetProducerSummary>(thresholds,
624  occupancy,
625  unclusE,
626  constituents[0],
627  unused,
628  minScale,
629  maxScale,
630  scaleUsed,
631  nPreclustersFound,
634  outputLabel);
635 }
636 
637 // ------------ method called to for each event ------------
639  // Load the clustering tree made by FFTJetPatRecoProducer
641  loadSparseTreeData<float>(iEvent);
642  else
643  loadSparseTreeData<double>(iEvent);
644 
645  // Do we need to load the candidate collection?
648 
649  // Do we need to have discretized energy flow?
650  if (useGriddedAlgorithm) {
651  if (reuseExistingGrid) {
653  buildGridAlg();
654  } else
656  }
657 
658  // Calculate cluster occupancy as a function of level number
659  sparseTree.occupancyInScaleSpace(*peakSelector, &occupancy);
660 
661  // Select the preclusters using the requested resolution scheme
662  preclusters.clear();
663  if (resolution == FROM_GENJETS)
665  else
667  if (preclusters.size() > maxInitialPreclusters) {
668  std::sort(preclusters.begin(), preclusters.end(), std::greater<fftjet::Peak>());
670  }
671 
672  // Prepare to run the jet recombination procedure
674 
675  // Assign membership functions to preclusters. If this function
676  // is not overriden in a derived class, default algorithm membership
677  // function will be used for every cluster.
679 
680  // Count the preclusters going in
681  unsigned nPreclustersFound = 0U;
682  const unsigned npre = preclusters.size();
683  for (unsigned i = 0; i < npre; ++i)
684  if (preclusters[i].membershipFactor() > 0.0)
685  ++nPreclustersFound;
686 
687  // Run the recombination algorithm once
688  int status = 0;
691  else
693  if (status)
694  throw cms::Exception("FFTJetInterface") << "FFTJet algorithm failed (first iteration)" << std::endl;
695 
696  // If requested, iterate the jet recombination procedure
697  if (maxIterations > 1U && !recoJets.empty()) {
698  // It is possible to have a smaller number of jets than we had
699  // preclusters. Fake preclusters are possible, but for a good
700  // choice of pattern recognition kernel their presence should
701  // be infrequent. However, any fake preclusters will throw the
702  // iterative reconstruction off balance. Deal with the problem now.
703  const unsigned nJets = recoJets.size();
704  if (preclusters.size() != nJets) {
705  assert(nJets < preclusters.size());
707  }
709  } else
711 
712  // Determine jet constituents. FFTJet returns a map
713  // of constituents which is inverse to what we need here.
714  const unsigned nJets = recoJets.size();
715  if (constituents.size() <= nJets)
716  constituents.resize(nJets + 1U);
717  if (assignConstituents) {
718  for (unsigned i = 0; i <= nJets; ++i)
719  constituents[i].clear();
722  else
724  }
725 
726  // Figure out the pile-up
727  if (calculatePileup) {
728  if (loadPileupFromDB)
730  else
732  determinePileup();
733  assert(pileup.size() == recoJets.size());
734  }
735 
736  // Write out the results
737  saveResults(iEvent, iSetup, nPreclustersFound);
738 }
739 
740 std::unique_ptr<fftjet::Functor1<bool, fftjet::Peak> > FFTJetProducer::parse_peakSelector(const edm::ParameterSet& ps) {
741  return fftjet_PeakSelector_parser(ps.getParameter<edm::ParameterSet>("PeakSelectorConfiguration"));
742 }
743 
744 // Parser for the jet membership function
745 std::unique_ptr<fftjet::ScaleSpaceKernel> FFTJetProducer::parse_jetMembershipFunction(const edm::ParameterSet& ps) {
746  return fftjet_MembershipFunction_parser(ps.getParameter<edm::ParameterSet>("jetMembershipFunction"));
747 }
748 
749 // Parser for the background membership function
750 std::unique_ptr<AbsBgFunctor> FFTJetProducer::parse_bgMembershipFunction(const edm::ParameterSet& ps) {
751  return fftjet_BgFunctor_parser(ps.getParameter<edm::ParameterSet>("bgMembershipFunction"));
752 }
753 
754 // Calculator for the recombination scale
755 std::unique_ptr<fftjet::Functor1<double, fftjet::Peak> > FFTJetProducer::parse_recoScaleCalcPeak(
756  const edm::ParameterSet& ps) {
757  return fftjet_PeakFunctor_parser(ps.getParameter<edm::ParameterSet>("recoScaleCalcPeak"));
758 }
759 
760 // Pile-up density calculator
761 std::unique_ptr<fftjetcms::AbsPileupCalculator> FFTJetProducer::parse_pileupDensityCalc(const edm::ParameterSet& ps) {
762  return fftjet_PileupCalculator_parser(ps.getParameter<edm::ParameterSet>("pileupDensityCalc"));
763 }
764 
765 // Calculator for the recombination scale ratio
766 std::unique_ptr<fftjet::Functor1<double, fftjet::Peak> > FFTJetProducer::parse_recoScaleRatioCalcPeak(
767  const edm::ParameterSet& ps) {
768  return fftjet_PeakFunctor_parser(ps.getParameter<edm::ParameterSet>("recoScaleRatioCalcPeak"));
769 }
770 
771 // Calculator for the membership function factor
772 std::unique_ptr<fftjet::Functor1<double, fftjet::Peak> > FFTJetProducer::parse_memberFactorCalcPeak(
773  const edm::ParameterSet& ps) {
774  return fftjet_PeakFunctor_parser(ps.getParameter<edm::ParameterSet>("memberFactorCalcPeak"));
775 }
776 
777 std::unique_ptr<fftjet::Functor1<double, FFTJetProducer::RecoFFTJet> > FFTJetProducer::parse_recoScaleCalcJet(
778  const edm::ParameterSet& ps) {
779  return fftjet_JetFunctor_parser(ps.getParameter<edm::ParameterSet>("recoScaleCalcJet"));
780 }
781 
782 std::unique_ptr<fftjet::Functor1<double, FFTJetProducer::RecoFFTJet> > FFTJetProducer::parse_recoScaleRatioCalcJet(
783  const edm::ParameterSet& ps) {
784  return fftjet_JetFunctor_parser(ps.getParameter<edm::ParameterSet>("recoScaleRatioCalcJet"));
785 }
786 
787 std::unique_ptr<fftjet::Functor1<double, FFTJetProducer::RecoFFTJet> > FFTJetProducer::parse_memberFactorCalcJet(
788  const edm::ParameterSet& ps) {
789  return fftjet_JetFunctor_parser(ps.getParameter<edm::ParameterSet>("memberFactorCalcJet"));
790 }
791 
792 std::unique_ptr<fftjet::Functor2<double, FFTJetProducer::RecoFFTJet, FFTJetProducer::RecoFFTJet> >
794  return fftjet_JetDistance_parser(ps.getParameter<edm::ParameterSet>("jetDistanceCalc"));
795 }
796 
797 void FFTJetProducer::assignMembershipFunctions(std::vector<fftjet::Peak>*) {}
798 
799 // ------------ method called once each job just before starting event loop
802 
803  // Parse the peak selector definition
805  checkConfig(peakSelector, "invalid peak selector");
806 
808  checkConfig(jetMembershipFunction, "invalid jet membership function");
809 
811  checkConfig(bgMembershipFunction, "invalid noise membership function");
812 
813  // Build the energy recombination algorithm
814  if (!useGriddedAlgorithm) {
815  fftjet::DefaultVectorRecombinationAlgFactory<VectorLike, BgData, VBuilder> factory;
816  if (factory[recombinationAlgorithm] == nullptr)
817  throw cms::Exception("FFTJetBadConfig")
818  << "Invalid vector recombination algorithm \"" << recombinationAlgorithm << "\"" << std::endl;
819  recoAlg = std::unique_ptr<RecoAlg>(factory[recombinationAlgorithm]->create(jetMembershipFunction.get(),
820  &VectorLike::Et,
821  &VectorLike::Eta,
823  bgMembershipFunction.get(),
825  isCrisp,
826  false,
828  } else if (!reuseExistingGrid) {
830  checkConfig(energyFlow, "invalid discretization grid");
831  buildGridAlg();
832  }
833 
834  // Create the grid subsequently used for pile-up subtraction
835  if (calculatePileup) {
836  pileupEnergyFlow = fftjet_Grid2d_parser(ps.getParameter<edm::ParameterSet>("PileupGridConfiguration"));
837  checkConfig(pileupEnergyFlow, "invalid pileup density grid");
838 
839  if (!loadPileupFromDB) {
841  checkConfig(pileupDensityCalc, "invalid pile-up density calculator");
842  }
843  }
844 
845  // Parse the calculator of the recombination scale
848  "invalid spec for the "
849  "reconstruction scale calculator from peaks");
850 
851  // Parse the calculator of the recombination scale ratio
854  "invalid spec for the "
855  "reconstruction scale ratio calculator from peaks");
856 
857  // Calculator for the membership function factor
860  "invalid spec for the "
861  "membership function factor calculator from peaks");
862 
863  if (maxIterations > 1) {
864  // We are going to run iteratively. Make required objects.
867  "invalid spec for the "
868  "reconstruction scale calculator from jets");
869 
872  "invalid spec for the "
873  "reconstruction scale ratio calculator from jets");
874 
877  "invalid spec for the "
878  "membership function factor calculator from jets");
879 
882  "invalid spec for the "
883  "jet distance calculator");
884  }
885 }
886 
888  // There are two possible reasons for fake preclusters:
889  // 1. Membership factor was set to 0
890  // 2. Genuine problem with pattern recognition
891  //
892  // Anyway, we need to match jets to preclusters and keep
893  // only those preclusters that have been matched
894  //
895  std::vector<int> matchTable;
896  const unsigned nmatched = matchOneToOne(recoJets, preclusters, JetToPeakDistance(), &matchTable);
897 
898  // Ensure that all jets have been matched.
899  // If not, we must have a bug somewhere.
900  assert(nmatched == recoJets.size());
901 
902  // Collect all matched preclusters
903  iterPreclusters.clear();
904  iterPreclusters.reserve(nmatched);
905  for (unsigned i = 0; i < nmatched; ++i)
906  iterPreclusters.push_back(preclusters[matchTable[i]]);
908 }
909 
910 void FFTJetProducer::setJetStatusBit(RecoFFTJet* jet, const int mask, const bool value) {
911  int status = jet->status();
912  if (value)
913  status |= mask;
914  else
915  status &= ~mask;
916  jet->setStatus(status);
917 }
918 
920  std::unique_ptr<fftjet::Grid2d<fftjetcms::Real> >& density) {
923 
926  const bool phiDependent = calc.isPhiDependent();
927 
928  fftjet::Grid2d<Real>& g(*density);
929  const unsigned nEta = g.nEta();
930  const unsigned nPhi = g.nPhi();
931 
932  for (unsigned ieta = 0; ieta < nEta; ++ieta) {
933  const double eta(g.etaBinCenter(ieta));
934 
935  if (phiDependent) {
936  for (unsigned iphi = 0; iphi < nPhi; ++iphi) {
937  const double phi(g.phiBinCenter(iphi));
938  g.uncheckedSetBin(ieta, iphi, calc(eta, phi, s));
939  }
940  } else {
941  const double pil = calc(eta, 0.0, s);
942  for (unsigned iphi = 0; iphi < nPhi; ++iphi)
943  g.uncheckedSetBin(ieta, iphi, pil);
944  }
945  }
946 }
947 
949  const edm::EventSetup& iSetup,
950  std::unique_ptr<fftjet::Grid2d<fftjetcms::Real> >& density) {
953  std::shared_ptr<npstat::StorableMultivariateFunctor> f = (*h)[pileupTableCategory][pileupTableName];
954 
957 
958  const float rho = summary->pileupRho();
959  const bool phiDependent = f->minDim() == 3U;
960 
961  fftjet::Grid2d<Real>& g(*density);
962  const unsigned nEta = g.nEta();
963  const unsigned nPhi = g.nPhi();
964 
965  double functorArg[3] = {0.0, 0.0, 0.0};
966  if (phiDependent)
967  functorArg[2] = rho;
968  else
969  functorArg[1] = rho;
970 
971  for (unsigned ieta = 0; ieta < nEta; ++ieta) {
972  const double eta(g.etaBinCenter(ieta));
973  functorArg[0] = eta;
974 
975  if (phiDependent) {
976  for (unsigned iphi = 0; iphi < nPhi; ++iphi) {
977  functorArg[1] = g.phiBinCenter(iphi);
978  g.uncheckedSetBin(ieta, iphi, (*f)(functorArg, 3U));
979  }
980  } else {
981  const double pil = (*f)(functorArg, 2U);
982  for (unsigned iphi = 0; iphi < nPhi; ++iphi)
983  g.uncheckedSetBin(ieta, iphi, pil);
984  }
985  }
986 }
987 
989  // This function works with crisp clustering only
990  if (!isCrisp)
991  assert(!"Pile-up subtraction for fuzzy clustering "
992  "is not implemented yet");
993 
994  // Clear the pileup vector
995  const unsigned nJets = recoJets.size();
996  pileup.resize(nJets);
997  if (nJets == 0)
998  return;
999  const VectorLike zero;
1000  for (unsigned i = 0; i < nJets; ++i)
1001  pileup[i] = zero;
1002 
1003  // Pileup energy flow grid
1004  const fftjet::Grid2d<Real>& g(*pileupEnergyFlow);
1005  const unsigned nEta = g.nEta();
1006  const unsigned nPhi = g.nPhi();
1007  const double cellArea = g.etaBinWidth() * g.phiBinWidth();
1008 
1009  // Various calculators
1010  fftjet::Functor1<double, RecoFFTJet>& scaleCalc(*recoScaleCalcJet);
1011  fftjet::Functor1<double, RecoFFTJet>& ratioCalc(*recoScaleRatioCalcJet);
1012  fftjet::Functor1<double, RecoFFTJet>& factorCalc(*memberFactorCalcJet);
1013 
1014  // Make sure we have enough memory
1015  memFcns2dVec.resize(nJets);
1016  fftjet::AbsKernel2d** memFcns2d = &memFcns2dVec[0];
1017 
1018  doubleBuf.resize(nJets * 4U + nJets * nPhi);
1019  double* recoScales = &doubleBuf[0];
1020  double* recoScaleRatios = recoScales + nJets;
1021  double* memFactors = recoScaleRatios + nJets;
1022  double* dEta = memFactors + nJets;
1023  double* dPhiBuf = dEta + nJets;
1024 
1025  cellCountsVec.resize(nJets);
1026  unsigned* cellCounts = &cellCountsVec[0];
1027 
1028  // Go over jets and collect the necessary info
1029  for (unsigned ijet = 0; ijet < nJets; ++ijet) {
1030  const RecoFFTJet& jet(recoJets[ijet]);
1031  const fftjet::Peak& peak(jet.precluster());
1032 
1033  // Make sure we are using 2-d membership functions.
1034  // Pile-up subtraction scheme for 3-d functions should be different.
1035  fftjet::AbsMembershipFunction* m3d = dynamic_cast<fftjet::AbsMembershipFunction*>(peak.membershipFunction());
1036  if (m3d == nullptr)
1037  m3d = dynamic_cast<fftjet::AbsMembershipFunction*>(jetMembershipFunction.get());
1038  if (m3d) {
1039  assert(!"Pile-up subtraction for 3-d membership functions "
1040  "is not implemented yet");
1041  } else {
1042  fftjet::AbsKernel2d* m2d = dynamic_cast<fftjet::AbsKernel2d*>(peak.membershipFunction());
1043  if (m2d == nullptr)
1044  m2d = dynamic_cast<fftjet::AbsKernel2d*>(jetMembershipFunction.get());
1045  assert(m2d);
1046  memFcns2d[ijet] = m2d;
1047  }
1048  recoScales[ijet] = scaleCalc(jet);
1049  recoScaleRatios[ijet] = ratioCalc(jet);
1050  memFactors[ijet] = factorCalc(jet);
1051  cellCounts[ijet] = 0U;
1052 
1053  const double jetPhi = jet.vec().Phi();
1054  for (unsigned iphi = 0; iphi < nPhi; ++iphi) {
1055  double dphi = g.phiBinCenter(iphi) - jetPhi;
1056  while (dphi > M_PI)
1057  dphi -= (2.0 * M_PI);
1058  while (dphi < -M_PI)
1059  dphi += (2.0 * M_PI);
1060  dPhiBuf[iphi * nJets + ijet] = dphi;
1061  }
1062  }
1063 
1064  // Go over all grid points and integrate
1065  // the pile-up energy density
1066  VBuilder vMaker;
1067  for (unsigned ieta = 0; ieta < nEta; ++ieta) {
1068  const double eta(g.etaBinCenter(ieta));
1069  const Real* databuf = g.data() + ieta * nPhi;
1070 
1071  // Figure out dEta for each jet
1072  for (unsigned ijet = 0; ijet < nJets; ++ijet)
1073  dEta[ijet] = eta - recoJets[ijet].vec().Eta();
1074 
1075  for (unsigned iphi = 0; iphi < nPhi; ++iphi) {
1076  double maxW(0.0);
1077  unsigned maxWJet(nJets);
1078  const double* dPhi = dPhiBuf + iphi * nJets;
1079 
1080  for (unsigned ijet = 0; ijet < nJets; ++ijet) {
1081  if (recoScaleRatios[ijet] > 0.0)
1082  memFcns2d[ijet]->setScaleRatio(recoScaleRatios[ijet]);
1083  const double f = memFactors[ijet] * (*memFcns2d[ijet])(dEta[ijet], dPhi[ijet], recoScales[ijet]);
1084  if (f > maxW) {
1085  maxW = f;
1086  maxWJet = ijet;
1087  }
1088  }
1089 
1090  if (maxWJet < nJets) {
1091  pileup[maxWJet] += vMaker(cellArea * databuf[iphi], eta, g.phiBinCenter(iphi));
1092  cellCounts[maxWJet]++;
1093  }
1094  }
1095  }
1096 }
1097 
1098 // ------------ method called once each job just after ending the event loop
1100 
1101 //define this as a plug-in
personalPlayback.level
level
Definition: personalPlayback.py:22
FFTJetProducer::maxLevel
unsigned maxLevel
Definition: FFTJetProducer.h:365
fftjetcms::fftjet_PeakFunctor_parser
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > fftjet_PeakFunctor_parser(const edm::ParameterSet &ps)
Definition: FFTJetParameterParser.cc:473
FFTJetProducer::selectPreclusters
virtual void selectPreclusters(const SparseTree &tree, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
Definition: FFTJetProducer.cc:227
cms::cuda::allocator::minBin
constexpr unsigned int minBin
Definition: getCachingDeviceAllocator.h:18
reco::FFTJet::setFourVec
void setFourVec(const math::XYZTLorentzVector &p)
Definition: FFTJet.h:93
FFTJetProducer::isCrisp
const bool isCrisp
Definition: FFTJetProducer.h:292
fftjetcms::fftjet_MembershipFunction_parser
std::unique_ptr< fftjet::ScaleSpaceKernel > fftjet_MembershipFunction_parser(const edm::ParameterSet &ps)
Definition: FFTJetParameterParser.cc:227
FFTJetProducer::useGriddedAlgorithm
const bool useGriddedAlgorithm
Definition: FFTJetProducer.h:239
fftjetproducer_cfi.reuseExistingGrid
reuseExistingGrid
Definition: fftjetproducer_cfi.py:54
FFTJetProducer::doubleBuf
std::vector< double > doubleBuf
Definition: FFTJetProducer.h:393
Handle.h
FFTJetProducer::pileupEnergyFlow
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > pileupEnergyFlow
Definition: FFTJetProducer.h:386
reco::writeSpecific
void writeSpecific(reco::CaloJet &jet, reco::Particle::LorentzVector const &p4, reco::Particle::Point const &point, std::vector< reco::CandidatePtr > const &constituents, edm::EventSetup const &c)
Definition: JetSpecific.cc:34
electrons_cff.bool
bool
Definition: electrons_cff.py:393
FFTJetProducer::loadPileupFromDB
bool loadPileupFromDB
Definition: FFTJetProducer.h:314
fftjetproducer_cfi.pileupTableName
pileupTableName
Definition: fftjetproducer_cfi.py:237
mps_fire.i
i
Definition: mps_fire.py:428
fftjetproducer_cfi.gridScanMaxEta
gridScanMaxEta
Definition: fftjetproducer_cfi.py:98
FFTJetProducer::FIXED
Definition: FFTJetProducer.h:93
input
static const std::string input
Definition: EdmProvDump.cc:48
FFTJetProducer.h
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
FFTJetProducer::assignConstituents
const bool assignConstituents
Definition: FFTJetProducer.h:253
fftjetcms
Definition: AbsPileupCalculator.h:15
fftjetproducer_cfi.genJetsLabel
genJetsLabel
Definition: fftjetproducer_cfi.py:229
fftjetcms::PtEtaP4Builder
Definition: VBuilders.h:20
L1EGammaCrystalsEmulatorProducer_cfi.scale
scale
Definition: L1EGammaCrystalsEmulatorProducer_cfi.py:10
fftjetcms::FFTJetInterface::checkConfig
void checkConfig(const Ptr &ptr, const char *message)
Definition: FFTJetInterface.h:60
FFTJetProducer::parse_peakSelector
virtual std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > parse_peakSelector(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:740
FFTJetProducer::recoAlg
std::unique_ptr< RecoAlg > recoAlg
Definition: FFTJetProducer.h:326
fftjetcms::FFTJetInterface::loadInputCollection
void loadInputCollection(const edm::Event &)
Definition: FFTJetInterface.cc:40
FFTJetProducer::parse_recoScaleRatioCalcJet
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleRatioCalcJet(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:782
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
fftjetcms::FFTJetInterface::outputLabel
const std::string outputLabel
Definition: FFTJetInterface.h:76
HLT_FULL_cff.nEta
nEta
Definition: HLT_FULL_cff.py:6586
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
fftjetproducer_cfi.assignConstituents
assignConstituents
Definition: fftjetproducer_cfi.py:79
mps_update.status
status
Definition: mps_update.py:69
init_param
#define init_param(type, varname)
Definition: FFTJetProducer.cc:47
FFTJetProducer::recombinationDataCutoff
const double recombinationDataCutoff
Definition: FFTJetProducer.h:294
FFTJetProducer::endJob
void endJob() override
Definition: FFTJetProducer.cc:1099
fftjetcommon_cfi.maxScale
maxScale
Definition: fftjetcommon_cfi.py:110
edm
HLT enums.
Definition: AlignableModifier.h:19
fftjetcms::fftjet_ScaleSet_parser
std::unique_ptr< std::vector< double > > fftjet_ScaleSet_parser(const edm::ParameterSet &ps)
Definition: FFTJetParameterParser.cc:350
FFTJetProducer::myConfiguration
const edm::ParameterSet myConfiguration
Definition: FFTJetProducer.h:232
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
FFTJetProducer::recoJets
std::vector< RecoFFTJet > recoJets
Definition: FFTJetProducer.h:356
tree
Definition: tree.py:1
h
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
Definition: L1TUtmAlgorithmRcd.h:4
FFTJetProducer::parse_recoScaleRatioCalcPeak
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleRatioCalcPeak(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:766
fftjetcms::FFTJetInterface::inputCollection
edm::Handle< reco::CandidateView > inputCollection
Definition: FFTJetInterface.h:103
fftjetcms::matchOneToOne
unsigned matchOneToOne(const std::vector< T1 > &v1, const std::vector< T2 > &v2, const DistanceCalculator &calc, std::vector< int > *matchFrom1To2, const double maxMatchingDistance=1.0e300)
Definition: matchOneToOne.h:38
FFTJetProducer::pileupTableCategory
std::string pileupTableCategory
Definition: FFTJetProducer.h:313
FFTJetProducer::recoScaleRatioCalcPeak
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleRatioCalcPeak
Definition: FFTJetProducer.h:335
fftjetdijetfilter_cfi.fixedScale
fixedScale
Definition: fftjetdijetfilter_cfi.py:29
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
fftjetproducer_cfi.calculatePileup
calculatePileup
Definition: fftjetproducer_cfi.py:215
reco::FFTJet< float >
FFTJetProducer::usedLevel
unsigned usedLevel
Definition: FFTJetProducer.h:365
FFTJetProducer::RecoFFTJet
fftjet::RecombinedJet< fftjetcms::VectorLike > RecoFFTJet
Definition: FFTJetProducer.h:79
cms::cuda::assert
assert(be >=bs)
fftjetcms::VectorLike
math::XYZTLorentzVector VectorLike
Definition: fftjetTypedefs.h:26
FFTJetLookupTableSequenceLoader.h
fftjetcms::fftjet_JetDistance_parser
std::unique_ptr< fftjet::Functor2< double, fftjet::RecombinedJet< VectorLike >, fftjet::RecombinedJet< VectorLike > > > fftjet_JetDistance_parser(const edm::ParameterSet &ps)
Definition: FFTJetParameterParser.cc:689
fftjetcms::AbsPileupCalculator::isPhiDependent
virtual bool isPhiDependent() const =0
fftjetcms::FFTJetInterface::getEventScale
double getEventScale() const
Definition: FFTJetInterface.cc:38
FFTJetProducer::GLOBALLY_ADAPTIVE
Definition: FFTJetProducer.h:93
FFTJetProducer::loadSparseTreeData
void loadSparseTreeData(const edm::Event &)
Definition: FFTJetProducer.cc:187
FFTJetProducer::parse_recoScaleCalcPeak
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_recoScaleCalcPeak(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:755
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
FFTJetProducer::recoScaleRatioCalcJet
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleRatioCalcJet
Definition: FFTJetProducer.h:342
singleTopDQM_cfi.jets
jets
Definition: singleTopDQM_cfi.py:42
FFTJetProducer::LOCALLY_ADAPTIVE
Definition: FFTJetProducer.h:93
SiPixelPI::zero
Definition: SiPixelPayloadInspectorHelper.h:39
FFTJetProducer::Resolution
Resolution
Definition: FFTJetProducer.h:93
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
beamerCreator.create
def create(alignables, pedeDump, additionalData, outputFile, config)
Definition: beamerCreator.py:44
jet_type_switch
#define jet_type_switch(method, arg1, arg2)
Definition: FFTJetProducer.cc:56
FFTJetProducer::convergenceDistance
const double convergenceDistance
Definition: FFTJetProducer.h:250
HLT_FULL_cff.dPhi
dPhi
Definition: HLT_FULL_cff.py:13702
FFTJetProducer::PILEUP_SUBTRACTED_PT
Definition: FFTJetProducer.h:90
FFTJetProducer::treeLabel
const edm::InputTag treeLabel
Definition: FFTJetProducer.h:235
edm::Handle
Definition: AssociativeIterator.h:50
fftjetcms::fftjet_BgFunctor_parser
std::unique_ptr< AbsBgFunctor > fftjet_BgFunctor_parser(const edm::ParameterSet &ps)
Definition: FFTJetParameterParser.cc:338
FFTJetProducer::selectTreeNodes
void selectTreeNodes(const SparseTree &tree, const fftjet::Functor1< bool, fftjet::Peak > &peakSelect, std::vector< SparseTree::NodeId > *nodes)
Definition: FFTJetProducer.cc:249
FFTJetProducer::recombinationAlgorithm
const std::string recombinationAlgorithm
Definition: FFTJetProducer.h:291
fftjetcms::FFTJetInterface::vertexUsed
const reco::Particle::Point & vertexUsed() const
Definition: FFTJetInterface.h:70
fftjetproducer_cfi.subtractPileupAs4Vec
subtractPileupAs4Vec
Definition: fftjetproducer_cfi.py:223
fftjetproducer_cfi.resumConstituents
resumConstituents
Definition: fftjetproducer_cfi.py:86
LEDCalibrationChannels.iphi
iphi
Definition: LEDCalibrationChannels.py:64
fftjetproducer_cfi.isCrisp
isCrisp
Definition: fftjetproducer_cfi.py:117
MakerMacros.h
alignCSCRings.s
s
Definition: alignCSCRings.py:92
fftjetcms::FFTJetInterface::candidateIndex
std::vector< unsigned > candidateIndex
Definition: FFTJetInterface.h:97
FFTJetProducer::parse_bgMembershipFunction
virtual std::unique_ptr< fftjetcms::AbsBgFunctor > parse_bgMembershipFunction(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:750
h
FFTJetProducer::~FFTJetProducer
~FFTJetProducer() override
Definition: FFTJetProducer.cc:181
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Jet
Definition: Jet.py:1
fftjetproducer_cfi.pileupTableRecord
pileupTableRecord
Definition: fftjetproducer_cfi.py:236
GlobalPosition_Frontier_DevDB_cff.tag
tag
Definition: GlobalPosition_Frontier_DevDB_cff.py:11
FFTJetProducer::minLevel
unsigned minLevel
Definition: FFTJetProducer.h:365
PVValHelper::eta
Definition: PVValidationHelpers.h:69
fftjetproducer_cfi.maxInitialPreclusters
maxInitialPreclusters
Definition: fftjetproducer_cfi.py:233
fftjetcms::FFTJetInterface
Definition: FFTJetInterface.h:52
FFTJetProducer::prepareRecombinationScales
void prepareRecombinationScales()
Definition: FFTJetProducer.cc:329
FFTJetProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: FFTJetProducer.cc:638
FFTJetProducer::peakSelector
std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > peakSelector
Definition: FFTJetProducer.h:323
FFTJetProducer
Definition: FFTJetProducer.h:77
edm::ESHandle
Definition: DTSurvey.h:22
FFTJetProducer::PILEUP_CALCULATED
Definition: FFTJetProducer.h:88
FFTJetProducer::genJetPreclusters
virtual void genJetPreclusters(const SparseTree &tree, edm::Event &, const edm::EventSetup &, const fftjet::Functor1< bool, fftjet::Peak > &peakSelector, std::vector< fftjet::Peak > *preclusters)
Definition: FFTJetProducer.cc:202
L1TObjectsTimingClient_cff.resolution
resolution
Definition: L1TObjectsTimingClient_cff.py:52
reco::FFTJetPileupSummary
Summary info for pile-up determined by Gaussian filtering.
Definition: FFTJetPileupSummary.h:13
FFTJetProducer::beginJob
void beginJob() override
Definition: FFTJetProducer.cc:800
FFTJetProducer::input_pusummary_token_
edm::EDGetTokenT< reco::FFTJetPileupSummary > input_pusummary_token_
Definition: FFTJetProducer.h:400
fftjetcms::sparsePeakTreeFromStorable
void sparsePeakTreeFromStorable(const reco::PattRecoTree< Real, reco::PattRecoPeak< Real > > &in, const std::vector< double > *scaleSetIfNotAdaptive, double completeEventScale, fftjet::SparseClusteringTree< fftjet::Peak, long > *out)
Definition: clusteringTreeConverters.h:133
FFTJetProducer::recoScaleCalcPeak
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > recoScaleCalcPeak
Definition: FFTJetProducer.h:332
FFTJetProducer::iniScales
std::unique_ptr< std::vector< double > > iniScales
Definition: FFTJetProducer.h:317
FFTJetProducer::maxStableScale
const double maxStableScale
Definition: FFTJetProducer.h:275
VtxSmearedParameters_cfi.Phi
Phi
Definition: VtxSmearedParameters_cfi.py:112
reco::FFTJet::setNCells
void setNCells(const double nc)
Definition: FFTJet.h:96
mitigatedMETSequence_cff.U
U
Definition: mitigatedMETSequence_cff.py:36
FFTJetProducer::jetMembershipFunction
std::unique_ptr< fftjet::ScaleSpaceKernel > jetMembershipFunction
Definition: FFTJetProducer.h:328
DDAxes::rho
fftjetcms::Real
double Real
Definition: fftjetTypedefs.h:21
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
Vertex.h
FFTJetProducer::unclustered
fftjetcms::VectorLike unclustered
Definition: FFTJetProducer.h:368
bsc_activity_cfg.clusters
clusters
Definition: bsc_activity_cfg.py:36
fftjetproducer_cfi.convergenceDistance
convergenceDistance
Definition: fftjetproducer_cfi.py:75
FFTJetProducer::buildGridAlg
void buildGridAlg()
Definition: FFTJetProducer.cc:345
FFTJetProducer::MAXIMALLY_STABLE
Definition: FFTJetProducer.h:93
reco::btau::jetPhi
Definition: TaggingVariable.h:36
FFTJetProducer::thresholds
std::vector< double > thresholds
Definition: FFTJetProducer.h:362
LEDCalibrationChannels.ieta
ieta
Definition: LEDCalibrationChannels.py:63
reco::PattRecoTree
Class for storing FFTJet sparse clustering trees.
Definition: PattRecoTree.h:20
edm::ParameterSet
Definition: ParameterSet.h:47
FFTJetProducer::pileup
std::vector< fftjetcms::VectorLike > pileup
Definition: FFTJetProducer.h:381
FFTJetProducer::parse_jetDistanceCalc
virtual std::unique_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > parse_jetDistanceCalc(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:793
HLT_FULL_cff.maxIterations
maxIterations
Definition: HLT_FULL_cff.py:13241
fftjetproducer_cfi.subtractPileup
subtractPileup
Definition: fftjetproducer_cfi.py:218
FFTJetProducer::subtractPileupAs4Vec
const bool subtractPileupAs4Vec
Definition: FFTJetProducer.h:264
clear
void clear(HadCaloObj &c)
Definition: data.h:124
FFTJetProducer::FROM_GENJETS
Definition: FFTJetProducer.h:93
FFTJetProducer::memberFactorCalcPeak
std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > memberFactorCalcPeak
Definition: FFTJetProducer.h:338
FFTJetProducer::determinePileupDensityFromDB
virtual void determinePileupDensityFromDB(const edm::Event &iEvent, const edm::EventSetup &iSetup, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
Definition: FFTJetProducer.cc:948
FFTJetProducer::iterateJetReconstruction
unsigned iterateJetReconstruction()
Definition: FFTJetProducer.cc:409
dumpMFGeometry_cfg.delta
delta
Definition: dumpMFGeometry_cfg.py:25
cms::cuda::allocator::maxBin
constexpr unsigned int maxBin
Definition: getCachingDeviceAllocator.h:20
StaticFFTJetRcdMapper::instance
static const Mapper & instance()
Definition: FFTJetRcdMapper.h:86
HLT_FULL_cff.nPhi
nPhi
Definition: HLT_FULL_cff.py:6587
FFTJetProducer::iterationsPerformed
unsigned iterationsPerformed
Definition: FFTJetProducer.h:374
FFTJetProducer::parse_resolution
static Resolution parse_resolution(const std::string &name)
Definition: FFTJetProducer.cc:91
FFTJetProducer::resumConstituents
const bool resumConstituents
Definition: FFTJetProducer.h:258
fftjetcms::adjustForPileup
math::XYZTLorentzVector adjustForPileup(const math::XYZTLorentzVector &jet, const math::XYZTLorentzVector &pileup, bool subtractPileupAs4Vec)
Definition: adjustForPileup.cc:4
iEvent
int iEvent
Definition: GenABIO.cc:224
reco::FFTAnyJet
Implements inheritance relationships for FFTJet jets.
Definition: FFTAnyJet.h:16
FFTJetProducer::pileupLabel
const edm::InputTag pileupLabel
Definition: FFTJetProducer.h:268
edmLumisInFiles.summary
summary
Definition: edmLumisInFiles.py:39
fftjetcms::FFTJetInterface::energyFlow
std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > energyFlow
Definition: FFTJetInterface.h:100
fftjetcommon_cfi.minScale
minScale
Definition: fftjetcommon_cfi.py:109
FFTJetProducer::stabilityAlpha
const double stabilityAlpha
Definition: FFTJetProducer.h:278
p4
double p4[4]
Definition: TauolaWrapper.h:92
value
Definition: value.py:1
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:49
fftjetcms::FFTJetInterface::storeInSinglePrecision
bool storeInSinglePrecision() const
Definition: FFTJetInterface.cc:15
FFTJetProducer::writeJets
void writeJets(edm::Event &iEvent, const edm::EventSetup &)
Definition: FFTJetProducer.cc:517
FFTJetProducer::occupancy
std::vector< unsigned > occupancy
Definition: FFTJetProducer.h:359
FFTJetProducer::genJetsLabel
const edm::InputTag genJetsLabel
Definition: FFTJetProducer.h:297
fftjetproducer_cfi.recombinationDataCutoff
recombinationDataCutoff
Definition: fftjetproducer_cfi.py:131
fftjetproducer_cfi.stabilityAlpha
stabilityAlpha
Definition: fftjetproducer_cfi.py:157
FFTJetProducer::jetDistanceCalc
std::unique_ptr< fftjet::Functor2< double, RecoFFTJet, RecoFFTJet > > jetDistanceCalc
Definition: FFTJetProducer.h:347
fftjetproducer_cfi.nJetsRequiredToConverge
nJetsRequiredToConverge
Definition: fftjetproducer_cfi.py:68
FFTJetProducer::gridScanMaxEta
const double gridScanMaxEta
Definition: FFTJetProducer.h:288
fftjetcms::fftjet_Grid2d_parser
std::unique_ptr< fftjet::Grid2d< Real > > fftjet_Grid2d_parser(const edm::ParameterSet &ps)
Definition: FFTJetParameterParser.cc:125
B2GTnPMonitor_cfi.item
item
Definition: B2GTnPMonitor_cfi.py:147
edm::EventSetup
Definition: EventSetup.h:57
FFTJetProducer::CONSTITUENTS_RESUMMED
Definition: FFTJetProducer.h:87
reco::FFTJet::setPileup
void setPileup(const math::XYZTLorentzVector &p)
Definition: FFTJet.h:92
FFTJetProducer::reuseExistingGrid
const bool reuseExistingGrid
Definition: FFTJetProducer.h:243
FFTJetProducer::SparseTree
fftjet::SparseClusteringTree< fftjet::Peak, long > SparseTree
Definition: FFTJetProducer.h:80
FFTJetProducer::makeProduces
void makeProduces(const std::string &alias, const std::string &tag)
Definition: FFTJetProducer.cc:107
fftjetcms::AbsPileupCalculator
Definition: AbsPileupCalculator.h:16
FFTJetProducer::input_genjet_token_
edm::EDGetTokenT< std::vector< reco::FFTAnyJet< reco::GenJet > > > input_genjet_token_
Definition: FFTJetProducer.h:398
FFTJetProducer::unused
double unused
Definition: FFTJetProducer.h:369
FFTJetProducer::determinePileupDensityFromConfig
virtual void determinePileupDensityFromConfig(const edm::Event &iEvent, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &density)
Definition: FFTJetProducer.cc:919
fftjetcms::JetToPeakDistance
Definition: JetToPeakDistance.h:9
FFTJetProducer::unlikelyBgWeight
const double unlikelyBgWeight
Definition: FFTJetProducer.h:293
cmsLHEtoEOSManager.l
l
Definition: cmsLHEtoEOSManager.py:204
fftjetdijetfilter_cfi.treeLabel
treeLabel
Definition: fftjetdijetfilter_cfi.py:11
FFTJetProducer::setJetStatusBit
static void setJetStatusBit(RecoFFTJet *jet, int mask, bool value)
Definition: FFTJetProducer.cc:910
edm::Ptr< Candidate >
FFTJetProducer::subtractPileup
const bool subtractPileup
Definition: FFTJetProducer.h:263
alignCSCRings.r
r
Definition: alignCSCRings.py:93
FFTJetProducer::PILEUP_SUBTRACTED_4VEC
Definition: FFTJetProducer.h:89
FFTJetProducer::recoScaleCalcJet
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > recoScaleCalcJet
Definition: FFTJetProducer.h:341
FFTJetProducer::constituents
std::vector< std::vector< reco::CandidatePtr > > constituents
Definition: FFTJetProducer.h:377
cms::cuda::device::unique_ptr
std::unique_ptr< T, impl::DeviceDeleter > unique_ptr
Definition: device_unique_ptr.h:33
DDAxes::phi
fftjetproducer_cfi.recombinationAlgorithm
recombinationAlgorithm
Definition: fftjetproducer_cfi.py:114
fftjetcommon_cfi.flow
flow
Definition: fftjetcommon_cfi.py:191
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
FFTJetProducer::memberFactorCalcJet
std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > memberFactorCalcJet
Definition: FFTJetProducer.h:343
fftjetcms::FFTJetInterface::eventData
std::vector< fftjetcms::VectorLike > eventData
Definition: FFTJetInterface.h:94
FFTJetProducer::removeFakePreclusters
void removeFakePreclusters()
Definition: FFTJetProducer.cc:887
FFTJetProducer::checkConvergence
bool checkConvergence(const std::vector< RecoFFTJet > &previousIterResult, std::vector< RecoFFTJet > &thisIterResult)
Definition: FFTJetProducer.cc:387
FFTJetProducer::input_energyflow_token_
edm::EDGetTokenT< reco::DiscretizedEnergyFlow > input_energyflow_token_
Definition: FFTJetProducer.h:399
HLT_FULL_cff.dEta
dEta
Definition: HLT_FULL_cff.py:13701
T
long double T
Definition: Basic3DVectorLD.h:48
metsig::jet
Definition: SignAlgoResolutions.h:47
FFTJetProducer::iterJets
std::vector< RecoFFTJet > iterJets
Definition: FFTJetProducer.h:373
FFTJetProducer::parse_memberFactorCalcPeak
virtual std::unique_ptr< fftjet::Functor1< double, fftjet::Peak > > parse_memberFactorCalcPeak(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:772
SiStripOfflineCRack_cfg.alias
alias
Definition: SiStripOfflineCRack_cfg.py:128
FFTJetProducer::bgMembershipFunction
std::unique_ptr< fftjetcms::AbsBgFunctor > bgMembershipFunction
Definition: FFTJetProducer.h:329
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
FFTJetProducer::cellCountsVec
std::vector< unsigned > cellCountsVec
Definition: FFTJetProducer.h:394
Exception
Definition: hltDiff.cc:246
fftjetcms::jetFromStorable
fftjet::RecombinedJet< VectorLike > jetFromStorable(const reco::FFTJet< Real > &jet)
Definition: jetConverters.h:65
FFTJetProducer::parse_memberFactorCalcJet
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_memberFactorCalcJet(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:787
fftjetcms::fftjet_PileupCalculator_parser
std::unique_ptr< AbsPileupCalculator > fftjet_PileupCalculator_parser(const edm::ParameterSet &ps)
Definition: FFTJetParameterParser.cc:746
fftjetproducer_cfi.noiseLevel
noiseLevel
Definition: fftjetproducer_cfi.py:90
JetSpecific.h
FFTJetProducer::gridAlg
std::unique_ptr< GridAlg > gridAlg
Definition: FFTJetProducer.h:327
FFTJetProducer::loadEnergyFlow
bool loadEnergyFlow(const edm::Event &iEvent, std::unique_ptr< fftjet::Grid2d< fftjetcms::Real > > &flow)
Definition: FFTJetProducer.cc:368
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
fftjetproducer_cfi.useGriddedAlgorithm
useGriddedAlgorithm
Definition: fftjetproducer_cfi.py:103
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
SimL1EmulatorRepack_GT2_cff.InputCollection
InputCollection
Definition: SimL1EmulatorRepack_GT2_cff.py:16
FFTJetProducer::maxInitialPreclusters
const unsigned maxInitialPreclusters
Definition: FFTJetProducer.h:302
FFTJetProducer::sparseTree
SparseTree sparseTree
Definition: FFTJetProducer.h:320
TopDecayID::stable
static const int stable
Definition: TopGenEvent.h:10
FFTJetProducer::pileupTableName
std::string pileupTableName
Definition: FFTJetProducer.h:312
fftjetcms::FFTJetInterface::discretizeEnergyFlow
void discretizeEnergyFlow()
Definition: FFTJetInterface.cc:79
FFTJetProducer::nClustersRequested
const unsigned nClustersRequested
Definition: FFTJetProducer.h:285
FFTJetProducer::fixedScale
const double fixedScale
Definition: FFTJetProducer.h:271
FFTJetProducer::calculatePileup
const bool calculatePileup
Definition: FFTJetProducer.h:262
FFTJetProducer::resolution
Resolution resolution
Definition: FFTJetProducer.h:307
L1TowerCalibrationProducer_cfi.iEta
iEta
Definition: L1TowerCalibrationProducer_cfi.py:60
FFTJetProducer::parse_jetMembershipFunction
virtual std::unique_ptr< fftjet::ScaleSpaceKernel > parse_jetMembershipFunction(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:745
ztail.d
d
Definition: ztail.py:151
fftjetcms::fftjet_JetFunctor_parser
std::unique_ptr< fftjet::Functor1< double, fftjet::RecombinedJet< VectorLike > > > fftjet_JetFunctor_parser(const edm::ParameterSet &ps)
Definition: FFTJetParameterParser.cc:589
fftjetproducer_cfi.maxStableScale
maxStableScale
Definition: fftjetproducer_cfi.py:154
cms::Exception
Definition: Exception.h:70
Candidate.h
FFTJetProducer::input_recotree_token_
edm::EDGetTokenT< reco::PattRecoTree< fftjetcms::Real, reco::PattRecoPeak< fftjetcms::Real > > > input_recotree_token_
Definition: FFTJetProducer.h:397
FFTJetProducer::parse_pileupDensityCalc
virtual std::unique_ptr< fftjetcms::AbsPileupCalculator > parse_pileupDensityCalc(const edm::ParameterSet &ps)
Definition: FFTJetProducer.cc:761
View.h
ParameterSet.h
FFTJetProducer::memFcns2dVec
std::vector< fftjet::AbsKernel2d * > memFcns2dVec
Definition: FFTJetProducer.h:392
fftjetproducer_cfi.unlikelyBgWeight
unlikelyBgWeight
Definition: fftjetproducer_cfi.py:124
FFTJetProducer::iterPreclusters
std::vector< fftjet::Peak > iterPreclusters
Definition: FFTJetProducer.h:372
FFTJetProducer::determineVectorConstituents
void determineVectorConstituents()
Definition: FFTJetProducer.cc:496
FFTJetProducer::minStableScale
const double minStableScale
Definition: FFTJetProducer.h:274
FFTJetProducer::pileupTableRecord
std::string pileupTableRecord
Definition: FFTJetProducer.h:311
fftjetproducer_cfi.pileupLabel
pileupLabel
Definition: fftjetproducer_cfi.py:226
edm::Event
Definition: Event.h:73
HLTTauReferences_cfi.OutputCollection
OutputCollection
Definition: HLTTauReferences_cfi.py:92
FFTJetProducer::saveResults
void saveResults(edm::Event &iEvent, const edm::EventSetup &, unsigned nPreclustersFound)
Definition: FFTJetProducer.cc:602
fftjetproducer_cfi.minStableScale
minStableScale
Definition: fftjetproducer_cfi.py:153
FFTJetProducer::maxIterations
const unsigned maxIterations
Definition: FFTJetProducer.h:246
FFTJetProducer::preclusters
std::vector< fftjet::Peak > preclusters
Definition: FFTJetProducer.h:353
FFTJetProducer::determinePileup
void determinePileup()
Definition: FFTJetProducer.cc:988
FFTJetProducer::noiseLevel
const double noiseLevel
Definition: FFTJetProducer.h:282
FFTJetProducer::pileupDensityCalc
std::unique_ptr< fftjetcms::AbsPileupCalculator > pileupDensityCalc
Definition: FFTJetProducer.h:389
FFTJetProducer::assignMembershipFunctions
virtual void assignMembershipFunctions(std::vector< fftjet::Peak > *preclusters)
Definition: FFTJetProducer.cc:797
FFTJetProducer::parse_recoScaleCalcJet
virtual std::unique_ptr< fftjet::Functor1< double, RecoFFTJet > > parse_recoScaleCalcJet(const edm::ParameterSet &)
Definition: FFTJetProducer.cc:777
fftjetproducer_cfi.nClustersRequested
nClustersRequested
Definition: fftjetproducer_cfi.py:94
FFTJetProducer::nodes
std::vector< SparseTree::NodeId > nodes
Definition: FFTJetProducer.h:350
fftjetcms::fftjet_PeakSelector_parser
std::unique_ptr< fftjet::Functor1< bool, fftjet::Peak > > fftjet_PeakSelector_parser(const edm::ParameterSet &ps)
Definition: FFTJetParameterParser.cc:166
g
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
FFTJetProducer::determineGriddedConstituents
void determineGriddedConstituents()
Definition: FFTJetProducer.cc:476
fastSimProducer_cff.density
density
Definition: fastSimProducer_cff.py:61
GetRecoTauVFromDQM_MC_cff.next
next
Definition: GetRecoTauVFromDQM_MC_cff.py:31
fftjetproducer_cfi.pileupTableCategory
pileupTableCategory
Definition: fftjetproducer_cfi.py:238
fftjetproducer_cfi.loadPileupFromDB
loadPileupFromDB
Definition: fftjetproducer_cfi.py:239
FFTJetProducer::FFTJetProducer
FFTJetProducer()=delete