CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes
TrackListMerger Class Reference
Inheritance diagram for TrackListMerger:
edm::stream::EDProducer<>

Classes

struct  TkEDGetTokenss
 

Public Member Functions

void produce (edm::Event &e, const edm::EventSetup &c) override
 
 TrackListMerger (const edm::ParameterSet &conf)
 
 ~TrackListMerger () override=default
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Types

using MVACollection = std::vector< float >
 
using QualityMaskCollection = std::vector< unsigned char >
 

Private Member Functions

TkEDGetTokenss edTokens (const edm::InputTag &tag, const edm::InputTag &seltag, const edm::InputTag &mvatag)
 
TkEDGetTokenss edTokens (const edm::InputTag &tag, const edm::InputTag &mvatag)
 
void returnEmptyCollections (edm::Event &e)
 

Private Attributes

bool allowFirstHitShare_
 
bool copyExtras_
 
bool copyMVA_
 
float epsilon_
 
float foundHitBonus_
 
std::vector< int > hasSelector_
 
std::vector< double > indivShareFrac_
 
std::vector< std::vector< int > > listsToMerge_
 
float lostHitPenalty_
 
bool makeReKeyedSeeds_
 
double maxNormalizedChisq_
 
unsigned int minFound_
 
double minPT_
 
std::unique_ptr< TrajectorySeedCollectionoutputSeeds
 
std::unique_ptr< std::vector< Trajectory > > outputTrajs
 
std::unique_ptr< reco::TrackExtraCollectionoutputTrkExtras
 
std::unique_ptr< TrackingRecHitCollectionoutputTrkHits
 
std::unique_ptr< reco::TrackCollectionoutputTrks
 
std::unique_ptr< TrajTrackAssociationCollectionoutputTTAss
 
std::string priorityName_
 
edm::ESGetToken< TrackAlgoPriorityOrder, CkfComponentsRecordpriorityToken
 
std::vector< bool > promoteQuality_
 
reco::TrackBase::TrackQuality qualityToSet_
 
edm::RefProd< std::vector< Trajectory > > refTrajs
 
edm::RefProd< TrajectorySeedCollectionrefTrajSeeds
 
reco::TrackExtraRefProd refTrkExtras
 
TrackingRecHitRefProd refTrkHits
 
reco::TrackRefProd refTrks
 
float shareFrac_
 
std::vector< TkEDGetTokensstrackProducers_
 
bool trkQualMod_
 
bool use_sharesInput_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 32 of file TrackListMerger.cc.

Member Typedef Documentation

◆ MVACollection

using TrackListMerger::MVACollection = std::vector<float>
private

Definition at line 43 of file TrackListMerger.cc.

◆ QualityMaskCollection

using TrackListMerger::QualityMaskCollection = std::vector<unsigned char>
private

Definition at line 44 of file TrackListMerger.cc.

Constructor & Destructor Documentation

◆ TrackListMerger()

TrackListMerger::TrackListMerger ( const edm::ParameterSet conf)
explicit

Definition at line 208 of file TrackListMerger.cc.

References allowFirstHitShare_, copyExtras_, copyMVA_, edTokens(), epsilon_, Exception, edm::ParameterSet::exists(), foundHitBonus_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), hasSelector_, mps_fire::i, indivShareFrac_, createfilelist::int, label, listsToMerge_, lostHitPenalty_, makeReKeyedSeeds_, maxNormalizedChisq_, minFound_, minPT_, convertSQLiteXML::ok, priorityName_, priorityToken, promoteQuality_, reco::TrackBase::qualityByName(), qualityToSet_, TrackValidation_cff::selectors, sistrip_dqm_sourceclient-live_cfg::setsToMerge, shareFrac_, AlCaHLTBitMon_QueryRunRegistry::string, trackProducers_, trkQualMod_, reco::TrackBase::undefQuality, and use_sharesInput_.

208  {
209  copyExtras_ = conf.getUntrackedParameter<bool>("copyExtras", true);
210  priorityName_ = conf.getParameter<std::string>("trackAlgoPriorityOrder");
211 
212  std::vector<edm::InputTag> trackProducerTags(conf.getParameter<std::vector<edm::InputTag>>("TrackProducers"));
213  //which of these do I need to turn into vectors?
214  maxNormalizedChisq_ = conf.getParameter<double>("MaxNormalizedChisq");
215  minPT_ = conf.getParameter<double>("MinPT");
216  minFound_ = (unsigned int)conf.getParameter<int>("MinFound");
217  epsilon_ = conf.getParameter<double>("Epsilon");
218  shareFrac_ = conf.getParameter<double>("ShareFrac");
219  allowFirstHitShare_ = conf.getParameter<bool>("allowFirstHitShare");
220  foundHitBonus_ = conf.getParameter<double>("FoundHitBonus");
221  lostHitPenalty_ = conf.getParameter<double>("LostHitPenalty");
222  indivShareFrac_ = conf.getParameter<std::vector<double>>("indivShareFrac");
223  std::string qualityStr = conf.getParameter<std::string>("newQuality");
224  priorityToken = esConsumes<TrackAlgoPriorityOrder, CkfComponentsRecord>(edm::ESInputTag("", priorityName_));
225 
226  if (!qualityStr.empty()) {
228  } else
230 
231  use_sharesInput_ = true;
232  if (epsilon_ > 0.0)
233  use_sharesInput_ = false;
234 
236 
237  for (unsigned int i = 0; i < setsToMerge.size(); i++) {
238  listsToMerge_.push_back(setsToMerge[i].getParameter<std::vector<int>>("tLists"));
239  promoteQuality_.push_back(setsToMerge[i].getParameter<bool>("pQual"));
240  }
241  hasSelector_ = conf.getParameter<std::vector<int>>("hasSelector");
242  copyMVA_ = conf.getParameter<bool>("copyMVA");
243 
244  std::vector<edm::InputTag> selectors(conf.getParameter<std::vector<edm::InputTag>>("selectedTrackQuals"));
245  std::vector<edm::InputTag> mvaStores;
246  if (conf.exists("mvaValueTags")) {
247  mvaStores = conf.getParameter<std::vector<edm::InputTag>>("mvaValueTags");
248  } else {
249  for (int i = 0; i < (int)selectors.size(); i++) {
250  edm::InputTag ntag(selectors[i].label(), "MVAVals");
251  mvaStores.push_back(ntag);
252  }
253  }
254  unsigned int numTrkColl = trackProducerTags.size();
255  if (numTrkColl != hasSelector_.size() || numTrkColl != selectors.size()) {
256  throw cms::Exception("Inconsistent size") << "need same number of track collections and selectors";
257  }
258  if (numTrkColl != hasSelector_.size() || numTrkColl != mvaStores.size()) {
259  throw cms::Exception("Inconsistent size") << "need same number of track collections and MVA stores";
260  }
261  for (unsigned int i = indivShareFrac_.size(); i < numTrkColl; i++) {
262  // edm::LogWarning("TrackListMerger") << "No indivShareFrac for " << trackProducersTags <<". Using default value of 1";
263  indivShareFrac_.push_back(1.0);
264  }
265 
266  trkQualMod_ = conf.getParameter<bool>("writeOnlyTrkQuals");
267  if (trkQualMod_) {
268  bool ok = true;
269  for (unsigned int i = 1; i < numTrkColl; i++) {
270  if (!(trackProducerTags[i] == trackProducerTags[0]))
271  ok = false;
272  }
273  if (!ok) {
274  throw cms::Exception("Bad input") << "to use writeOnlyTrkQuals=True all input InputTags must be the same";
275  }
276  produces<edm::ValueMap<int>>();
277  produces<QualityMaskCollection>("QualityMasks");
278  } else {
279  produces<reco::TrackCollection>();
280 
281  makeReKeyedSeeds_ = conf.getUntrackedParameter<bool>("makeReKeyedSeeds", false);
282  if (makeReKeyedSeeds_) {
283  copyExtras_ = true;
284  produces<TrajectorySeedCollection>();
285  }
286 
287  if (copyExtras_) {
288  produces<reco::TrackExtraCollection>();
289  produces<TrackingRecHitCollection>();
290  }
291  produces<std::vector<Trajectory>>();
292  produces<TrajTrackAssociationCollection>();
293  }
294  produces<edm::ValueMap<float>>("MVAVals");
295  produces<MVACollection>("MVAValues");
296 
297  // Do all the consumes
298  trackProducers_.resize(numTrkColl);
299  for (unsigned int i = 0; i < numTrkColl; ++i) {
300  trackProducers_[i] = hasSelector_[i] > 0 ? edTokens(trackProducerTags[i], selectors[i], mvaStores[i])
301  : edTokens(trackProducerTags[i], mvaStores[i]);
302  }
303 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::vector< bool > promoteQuality_
std::vector< ParameterSet > VParameterSet
Definition: ParameterSet.h:34
bool exists(std::string const &parameterName) const
checks if a parameter exists
reco::TrackBase::TrackQuality qualityToSet_
std::vector< double > indivShareFrac_
T getUntrackedParameter(std::string const &, T const &) const
char const * label
TkEDGetTokenss edTokens(const edm::InputTag &tag, const edm::InputTag &seltag, const edm::InputTag &mvatag)
edm::ESGetToken< TrackAlgoPriorityOrder, CkfComponentsRecord > priorityToken
std::vector< int > hasSelector_
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:126
unsigned int minFound_
std::vector< TkEDGetTokenss > trackProducers_
std::vector< std::vector< int > > listsToMerge_
std::string priorityName_

◆ ~TrackListMerger()

TrackListMerger::~TrackListMerger ( )
overridedefault

Member Function Documentation

◆ edTokens() [1/2]

TkEDGetTokenss TrackListMerger::edTokens ( const edm::InputTag tag,
const edm::InputTag seltag,
const edm::InputTag mvatag 
)
inlineprivate

Definition at line 80 of file TrackListMerger.cc.

References makeGlobalPositionRcd_cfg::tag.

Referenced by TrackListMerger().

80  {
81  return TkEDGetTokenss(tag,
82  consumes<reco::TrackCollection>(tag),
83  consumes<std::vector<Trajectory>>(tag),
84  consumes<TrajTrackAssociationCollection>(tag),
85  consumes<edm::ValueMap<int>>(seltag),
86  consumes<edm::ValueMap<float>>(mvatag));
87  }

◆ edTokens() [2/2]

TkEDGetTokenss TrackListMerger::edTokens ( const edm::InputTag tag,
const edm::InputTag mvatag 
)
inlineprivate

Definition at line 88 of file TrackListMerger.cc.

References makeGlobalPositionRcd_cfg::tag.

88  {
89  return TkEDGetTokenss(tag,
90  consumes<reco::TrackCollection>(tag),
91  consumes<std::vector<Trajectory>>(tag),
92  consumes<TrajTrackAssociationCollection>(tag),
94  consumes<edm::ValueMap<float>>(mvatag));
95  }

◆ produce()

void TrackListMerger::produce ( edm::Event e,
const edm::EventSetup c 
)
override

Definition at line 306 of file TrackListMerger.cc.

References funct::abs(), allowFirstHitShare_, cms::cuda::assert(), edm::OwnVector< T, P >::back(), edm::Range< T >::begin(), edm::AssociationMap< edm::OneToOne< std::vector< Trajectory >, reco::TrackCollection, unsigned short > >::const_iterator, copyExtras_, copyMVA_, dumpMFGeometry_cfg::delta, TrajectorySeed::direction(), MillePedeFileConverter_cfg::e, edm::AssociationMap< Tag >::end(), mps_fire::end, HLT_2022v11_cff::eps, epsilon_, edm::HandleBase::failedToGet(), trigObjTnPSource_cfi::filler, spr::find(), edm::AssociationMap< Tag >::find(), first, dqmMemoryStats::float, foundHitBonus_, TrackingRecHit::geographicalId(), edm::EventSetup::getHandle(), hasSelector_, hh, reco::TrackBase::highPurity, mps_fire::i, edm::RefProd< C >::id(), edm::Ref< C, T, F >::id(), globals_cff::id1, globals_cff::id2, cuy::ii, indivShareFrac_, HLT_2022v11_cff::InputTag, sistrip::SpyUtilities::isValid(), dqmiolumiharvest::j, findQualityFiles::jj, edm::Ref< C, T, F >::key(), LIKELY, listsToMerge_, TrackingRecHit::localPosition(), reco::TrackBase::loose, lostHitPenalty_, electrons_cff::lostHits, makeReKeyedSeeds_, match(), SiStripPI::max, maxNormalizedChisq_, SiStripPI::min, minFound_, minPT_, edm::StableProvenance::moduleLabel(), eostools::move(), dqmiodumpmetadata::n, TrajectorySeed::nHits(), outputSeeds, outputTrajs, outputTrkExtras, outputTrkHits, outputTrks, outputTTAss, priorityToken, edm::StableProvenance::processName(), edm::StableProvenance::productInstanceName(), promoteQuality_, edm::OwnVector< T, P >::push_back(), submitPVResolutionJobs::q, qualityToSet_, rpcPointValidation_cfi::recHit, TrajectorySeed::recHits(), reco::TrackExtraBase::recHitsSize(), refTrajs, refTrajSeeds, refTrkExtras, refTrkHits, refTrks, ClusterRemovalRefSetter::reKey(), edm::OwnVector< T, P >::reserve(), returnEmptyCollections(), offlineSlimmedPrimaryVertices_cfi::score, reco::TrackExtraBase::setHits(), reco::TrackExtra::setResiduals(), reco::TrackExtraBase::setTrajParams(), shareFrac_, TrackingRecHit::some, TrajectorySeed::startingState(), reco::TrackBase::tight, HLT_2022v11_cff::track, trackAlgoPriorityOrder, trackProducers_, reco::TrackExtraBase::trajParams(), trkQualMod_, reco::TrackBase::undefAlgorithm, UNLIKELY, use_sharesInput_, and PV3DBase< T, PVType, FrameType >::x().

306  {
307  // extract tracker geometry
308  //
309  //edm::ESHandle<TrackerGeometry> theG;
310  //es.get<TrackerDigiGeometryRecord>().get(theG);
311 
312  // using namespace reco;
313 
314  edm::ESHandle<TrackAlgoPriorityOrder> priorityH = es.getHandle(priorityToken);
315  auto const& trackAlgoPriorityOrder = *priorityH;
316 
317  // get Inputs
318  // if 1 input list doesn't exist, make an empty list, issue a warning, and continue
319  // this allows TrackListMerger to be used as a cleaner only if handed just one list
320  // if both input lists don't exist, will issue 2 warnings and generate an empty output collection
321  //
322  static const reco::TrackCollection s_empty;
323 
324  std::vector<const reco::TrackCollection*> trackColls;
325  std::vector<edm::Handle<reco::TrackCollection>> trackHandles(trackProducers_.size());
326  for (unsigned int i = 0; i < trackProducers_.size(); i++) {
327  trackColls.push_back(nullptr);
328  //edm::Handle<reco::TrackCollection> trackColl;
329  e.getByToken(trackProducers_[i].tk, trackHandles[i]);
330  if (trackHandles[i].isValid()) {
331  trackColls[i] = trackHandles[i].product();
332  } else {
333  edm::LogWarning("TrackListMerger") << "TrackCollection " << trackProducers_[i].tag << " not found";
334  trackColls[i] = &s_empty;
335  }
336  }
337 
338  if (trackColls.empty()) {
339  // output empty collections and early return
340  this->returnEmptyCollections(e);
341  return;
342  }
343 
344  unsigned int collsSize = trackColls.size();
345  unsigned int rSize = 0;
346  unsigned int trackCollSizes[collsSize];
347  unsigned int trackCollFirsts[collsSize];
348  for (unsigned int i = 0; i != collsSize; i++) {
349  trackCollSizes[i] = trackColls[i]->size();
350  trackCollFirsts[i] = rSize;
351  rSize += trackCollSizes[i];
352  }
353 
354  if (rSize == 0) {
355  // output empty collections and early return
356  this->returnEmptyCollections(e);
357  return;
358  }
359 
360  statCount.begin(rSize);
361 
362  //
363  // quality cuts first
364  //
365  int i = -1;
366 
367  int selected[rSize];
368  int indexG[rSize];
369  bool trkUpdated[rSize];
370  int trackCollNum[rSize];
371  int trackQuals[rSize];
372  float trackMVAs[rSize];
373  reco::TrackBase::TrackAlgorithm oriAlgo[rSize];
374  std::vector<reco::TrackBase::AlgoMask> algoMask(rSize);
375  for (unsigned int j = 0; j < rSize; j++) {
376  indexG[j] = -1;
377  selected[j] = 1;
378  trkUpdated[j] = false;
379  trackCollNum[j] = 0;
380  trackQuals[j] = 0;
381  trackMVAs[j] = -998.0;
383  }
384 
385  int ngood = 0;
386  for (unsigned int j = 0; j != collsSize; j++) {
387  const reco::TrackCollection* tC1 = trackColls[j];
388 
389  edm::Handle<edm::ValueMap<int>> trackSelColl;
390  edm::Handle<edm::ValueMap<float>> trackMVAStore;
391  if (copyMVA_)
392  e.getByToken(trackProducers_[j].tmva, trackMVAStore);
393  if (hasSelector_[j] > 0) {
394  e.getByToken(trackProducers_[j].tsel, trackSelColl);
395  }
396 
397  if (!tC1->empty()) {
398  unsigned int iC = 0;
399  for (reco::TrackCollection::const_iterator track = tC1->begin(); track != tC1->end(); track++) {
400  i++;
401  trackCollNum[i] = j;
402  trackQuals[i] = track->qualityMask();
403  oriAlgo[i] = track->originalAlgo();
404  algoMask[i] = track->algoMask();
405 
406  reco::TrackRef trkRef = reco::TrackRef(trackHandles[j], iC);
407  if (copyMVA_)
408  if ((*trackMVAStore).contains(trkRef.id()))
409  trackMVAs[i] = (*trackMVAStore)[trkRef];
410  if (hasSelector_[j] > 0) {
411  int qual = (*trackSelColl)[trkRef];
412  if (qual < 0) {
413  selected[i] = 0;
414  iC++;
415  continue;
416  } else {
417  trackQuals[i] = qual;
418  }
419  }
420  iC++;
421  selected[i] = trackQuals[i] + 10; //10 is magic number used throughout...
422  if ((short unsigned)track->ndof() < 1) {
423  selected[i] = 0;
424  continue;
425  }
426  if (track->normalizedChi2() > maxNormalizedChisq_) {
427  selected[i] = 0;
428  continue;
429  }
430  if (track->found() < minFound_) {
431  selected[i] = 0;
432  continue;
433  }
434  if (track->pt() < minPT_) {
435  selected[i] = 0;
436  continue;
437  }
438  // good!
439  indexG[i] = ngood++;
440  //if ( beVerb) std::cout << "inverb " << track->pt() << " " << selected[i] << std::endl;
441  } //end loop over tracks
442  } //end more than 0 track
443  } // loop over trackcolls
444 
445  statCount.pre(ngood);
446 
447  //cache the id and rechits of valid hits
448  typedef std::pair<unsigned int, const TrackingRecHit*> IHit;
449  std::vector<std::vector<IHit>> rh1(ngood); // "not an array" of vectors!
450  //const TrackingRecHit* fh1[ngood]; // first hit...
452  float score[ngood];
453 
454  for (unsigned int j = 0; j < rSize; j++) {
455  if (selected[j] == 0)
456  continue;
457  int i = indexG[j];
458  assert(i >= 0);
459  unsigned int collNum = trackCollNum[j];
460  unsigned int trackNum = j - trackCollFirsts[collNum];
461  const reco::Track* track = &((trackColls[collNum])->at(trackNum));
462 
463  algo[i] = track->algo();
464  int validHits = track->numberOfValidHits();
465  int validPixelHits = track->hitPattern().numberOfValidPixelHits();
466  int lostHits = track->numberOfLostHits();
467  score[i] =
468  foundHitBonus_ * validPixelHits + foundHitBonus_ * validHits - lostHitPenalty_ * lostHits - track->chi2();
469 
470  rh1[i].reserve(validHits);
471  auto compById = [](IHit const& h1, IHit const& h2) { return h1.first < h2.first; };
472  for (trackingRecHit_iterator it = track->recHitsBegin(); it != track->recHitsEnd(); ++it) {
473  const TrackingRecHit* hit = (*it);
474  unsigned int id = hit->rawId();
475  if (hit->geographicalId().subdetId() > 2)
476  id &= (~3); // mask mono/stereo in strips...
477  if LIKELY (hit->isValid()) {
478  rh1[i].emplace_back(id, hit);
479  std::push_heap(rh1[i].begin(), rh1[i].end(), compById);
480  }
481  }
482  std::sort_heap(rh1[i].begin(), rh1[i].end(), compById);
483  }
484 
485  //DL here
486  if LIKELY (ngood > 1 && collsSize > 1)
487  for (unsigned int ltm = 0; ltm < listsToMerge_.size(); ltm++) {
488  int saveSelected[rSize];
489  bool notActive[collsSize];
490  for (unsigned int cn = 0; cn != collsSize; ++cn)
491  notActive[cn] = find(listsToMerge_[ltm].begin(), listsToMerge_[ltm].end(), cn) == listsToMerge_[ltm].end();
492 
493  for (unsigned int i = 0; i < rSize; i++)
494  saveSelected[i] = selected[i];
495 
496  //DL protect against 0 tracks?
497  for (unsigned int i = 0; i < rSize - 1; i++) {
498  if (selected[i] == 0)
499  continue;
500  unsigned int collNum = trackCollNum[i];
501 
502  //check that this track is in one of the lists for this iteration
503  if (notActive[collNum])
504  continue;
505 
506  int k1 = indexG[i];
507  unsigned int nh1 = rh1[k1].size();
508  int qualityMaskT1 = trackQuals[i];
509 
510  int nhit1 = nh1; // validHits[k1];
511  float score1 = score[k1];
512 
513  // start at next collection
514  for (unsigned int j = i + 1; j < rSize; j++) {
515  if (selected[j] == 0)
516  continue;
517  unsigned int collNum2 = trackCollNum[j];
518  if ((collNum == collNum2) && indivShareFrac_[collNum] > 0.99)
519  continue;
520  //check that this track is in one of the lists for this iteration
521  if (notActive[collNum2])
522  continue;
523 
524  int k2 = indexG[j];
525 
526  int newQualityMask = -9; //avoid resetting quality mask if not desired 10+ -9 =1
527  if (promoteQuality_[ltm]) {
528  int maskT1 = saveSelected[i] > 1 ? saveSelected[i] - 10 : qualityMaskT1;
529  int maskT2 = saveSelected[j] > 1 ? saveSelected[j] - 10 : trackQuals[j];
530  newQualityMask = (maskT1 | maskT2); // take OR of trackQuality
531  }
532  unsigned int nh2 = rh1[k2].size();
533  int nhit2 = nh2;
534 
535  auto share = use_sharesInput_ ? [](const TrackingRecHit* it, const TrackingRecHit* jt, float) -> bool {
536  return it->sharesInput(jt, TrackingRecHit::some);
537  }
538  : [](const TrackingRecHit* it, const TrackingRecHit* jt, float eps) -> bool {
539  float delta = std::abs(it->localPosition().x() - jt->localPosition().x());
540  return (it->geographicalId() == jt->geographicalId()) && (delta < eps);
541  };
542 
543  statCount.start();
544 
545  //loop over rechits
546  int noverlap = 0;
547  int firstoverlap = 0;
548  // check first hit (should use REAL first hit?)
549  if UNLIKELY (allowFirstHitShare_ && rh1[k1][0].first == rh1[k2][0].first) {
550  const TrackingRecHit* it = rh1[k1][0].second;
551  const TrackingRecHit* jt = rh1[k2][0].second;
552  if (share(it, jt, epsilon_))
553  firstoverlap = 1;
554  }
555 
556  // exploit sorting
557  unsigned int jh = 0;
558  unsigned int ih = 0;
559  while (ih != nh1 && jh != nh2) {
560  // break if not enough to go...
561  // if ( nprecut-noverlap+firstoverlap > int(nh1-ih)) break;
562  // if ( nprecut-noverlap+firstoverlap > int(nh2-jh)) break;
563  auto const id1 = rh1[k1][ih].first;
564  auto const id2 = rh1[k2][jh].first;
565  if (id1 < id2)
566  ++ih;
567  else if (id2 < id1)
568  ++jh;
569  else {
570  // in case of split-hit do full conbinatorics
571  auto li = ih;
572  while ((++li) != nh1 && id1 == rh1[k1][li].first) {
573  }
574  auto lj = jh;
575  while ((++lj) != nh2 && id2 == rh1[k2][lj].first) {
576  }
577  for (auto ii = ih; ii != li; ++ii)
578  for (auto jj = jh; jj != lj; ++jj) {
579  const TrackingRecHit* it = rh1[k1][ii].second;
580  const TrackingRecHit* jt = rh1[k2][jj].second;
581  if (share(it, jt, epsilon_))
582  noverlap++;
583  }
584  jh = lj;
585  ih = li;
586  } // equal ids
587 
588  } //loop over ih & jh
589 
590  bool dupfound =
591  (collNum != collNum2)
592  ? (noverlap - firstoverlap) > (std::min(nhit1, nhit2) - firstoverlap) * shareFrac_
593  : (noverlap - firstoverlap) > (std::min(nhit1, nhit2) - firstoverlap) * indivShareFrac_[collNum];
594 
595  auto seti = [&](unsigned int ii, unsigned int jj) {
596  selected[jj] = 0;
597  selected[ii] = 10 + newQualityMask; // add 10 to avoid the case where mask = 1
598  trkUpdated[ii] = true;
599  if (trackAlgoPriorityOrder.priority(oriAlgo[jj]) < trackAlgoPriorityOrder.priority(oriAlgo[ii]))
600  oriAlgo[ii] = oriAlgo[jj];
601  algoMask[ii] |= algoMask[jj];
602  algoMask[jj] = algoMask[ii]; // in case we keep discarded
603  };
604 
605  if (dupfound) {
606  float score2 = score[k2];
607  constexpr float almostSame =
608  0.01f; // difference rather than ratio due to possible negative values for score
609  if (score1 - score2 > almostSame) {
610  seti(i, j);
611  } else if (score2 - score1 > almostSame) {
612  seti(j, i);
613  } else {
614  // If tracks from both iterations are virtually identical, choose the one with the best quality or with lower algo
615  if ((trackQuals[j] &
617  (trackQuals[i] &
619  //same quality, pick earlier algo
620  if (trackAlgoPriorityOrder.priority(algo[k1]) <= trackAlgoPriorityOrder.priority(algo[k2])) {
621  seti(i, j);
622  } else {
623  seti(j, i);
624  }
625  } else if ((trackQuals[j] & (1 << reco::TrackBase::loose | 1 << reco::TrackBase::tight |
627  (trackQuals[i] & (1 << reco::TrackBase::loose | 1 << reco::TrackBase::tight |
629  seti(i, j);
630  } else {
631  seti(j, i);
632  }
633  } //end fi < fj
634  statCount.overlap();
635  /*
636  if (at0[k1]&&at0[k2]) {
637  statCount.dp(dphi);
638  if (dz<1.f) statCount.de(deta);
639  }
640  */
641  } //end got a duplicate
642  else {
643  statCount.noOverlap();
644  }
645  //stop if the ith track is now unselected
646  if (selected[i] == 0)
647  break;
648  } //end track2 loop
649  } //end track loop
650  } //end loop over track list sets
651 
652  auto vmMVA = std::make_unique<edm::ValueMap<float>>();
653  edm::ValueMap<float>::Filler fillerMVA(*vmMVA);
654 
655  // special case - if just doing the trkquals
656  if (trkQualMod_) {
657  unsigned int tSize = trackColls[0]->size();
658  auto vm = std::make_unique<edm::ValueMap<int>>();
660 
661  std::vector<int> finalQuals(tSize, -1); //default is unselected
662  for (unsigned int i = 0; i < rSize; i++) {
663  unsigned int tNum = i % tSize;
664 
665  if (selected[i] > 1) {
666  finalQuals[tNum] = selected[i] - 10;
667  if (trkUpdated[i])
668  finalQuals[tNum] = (finalQuals[tNum] | (1 << qualityToSet_));
669  }
670  if (selected[i] == 1)
671  finalQuals[tNum] = trackQuals[i];
672  }
673 
674  filler.insert(trackHandles[0], finalQuals.begin(), finalQuals.end());
675  filler.fill();
676 
677  e.put(std::move(vm));
678  for (auto& q : finalQuals)
679  q = std::max(q, 0);
680  auto quals = std::make_unique<QualityMaskCollection>(finalQuals.begin(), finalQuals.end());
681  e.put(std::move(quals), "QualityMasks");
682 
683  std::vector<float> mvaVec(tSize, -99);
684 
685  for (unsigned int i = 0; i < rSize; i++) {
686  unsigned int tNum = i % tSize;
687  mvaVec[tNum] = trackMVAs[tNum];
688  }
689 
690  fillerMVA.insert(trackHandles[0], mvaVec.begin(), mvaVec.end());
691  fillerMVA.fill();
692  if (copyMVA_) {
693  e.put(std::move(vmMVA), "MVAVals");
694  auto mvas = std::make_unique<MVACollection>(mvaVec.begin(), mvaVec.end());
695  e.put(std::move(mvas), "MVAValues");
696  }
697  return;
698  }
699 
700  //
701  // output selected tracks - if any
702  //
703 
704  std::vector<reco::TrackRef> trackRefs(rSize);
705  std::vector<edm::RefToBase<TrajectorySeed>> seedsRefs(rSize);
706 
707  unsigned int nToWrite = 0;
708  for (unsigned int i = 0; i < rSize; i++)
709  if (selected[i] != 0)
710  nToWrite++;
711 
712  std::vector<float> mvaVec;
713 
714  outputTrks = std::make_unique<reco::TrackCollection>();
715  outputTrks->reserve(nToWrite);
716  refTrks = e.getRefBeforePut<reco::TrackCollection>();
717 
718  if (copyExtras_) {
719  outputTrkExtras = std::make_unique<reco::TrackExtraCollection>();
720  outputTrkExtras->reserve(nToWrite);
721  refTrkExtras = e.getRefBeforePut<reco::TrackExtraCollection>();
722  outputTrkHits = std::make_unique<TrackingRecHitCollection>();
723  outputTrkHits->reserve(nToWrite * 25);
724  refTrkHits = e.getRefBeforePut<TrackingRecHitCollection>();
725  if (makeReKeyedSeeds_) {
726  outputSeeds = std::make_unique<TrajectorySeedCollection>();
727  outputSeeds->reserve(nToWrite);
728  refTrajSeeds = e.getRefBeforePut<TrajectorySeedCollection>();
729  }
730  }
731 
732  outputTrajs = std::make_unique<std::vector<Trajectory>>();
733  outputTrajs->reserve(rSize);
734 
735  for (unsigned int i = 0; i < rSize; i++) {
736  if (selected[i] == 0) {
737  trackRefs[i] = reco::TrackRef();
738  continue;
739  }
740 
741  unsigned int collNum = trackCollNum[i];
742  unsigned int trackNum = i - trackCollFirsts[collNum];
743  const reco::Track* track = &((trackColls[collNum])->at(trackNum));
744  outputTrks->push_back(reco::Track(*track));
745  mvaVec.push_back(trackMVAs[i]);
746  if (selected[i] > 1) {
747  outputTrks->back().setQualityMask(selected[i] - 10);
748  if (trkUpdated[i])
749  outputTrks->back().setQuality(qualityToSet_);
750  }
751  //might duplicate things, but doesnt hurt
752  if (selected[i] == 1)
753  outputTrks->back().setQualityMask(trackQuals[i]);
754  outputTrks->back().setOriginalAlgorithm(oriAlgo[i]);
755  outputTrks->back().setAlgoMask(algoMask[i]);
756 
757  // if ( beVerb ) std::cout << "selected " << outputTrks->back().pt() << " " << outputTrks->back().qualityMask() << " " << selected[i] << std::endl;
758 
759  //fill the TrackCollection
760  if (copyExtras_) {
761  edm::RefToBase<TrajectorySeed> origSeedRef = track->seedRef();
762  //creating a seed with rekeyed clusters if required
763  if (makeReKeyedSeeds_) {
764  bool doRekeyOnThisSeed = false;
765 
766  edm::InputTag clusterRemovalInfos("");
767  //grab on of the hits of the seed
768  if (origSeedRef->nHits() != 0) {
769  TrackingRecHit const& hit = *origSeedRef->recHits().begin();
770  if (hit.isValid()) {
771  edm::ProductID pID = clusterProductB(&hit);
772  // the cluster collection either produced a removalInfo or mot
773  //get the clusterremoval info from the provenance: will rekey if this is found
775  edm::StableProvenance const& prov = e.getStableProvenance(pID);
776  clusterRemovalInfos = edm::InputTag(prov.moduleLabel(), prov.productInstanceName(), prov.processName());
777  doRekeyOnThisSeed = e.getByLabel(clusterRemovalInfos, CRIh);
778  } //valid hit
779  } //nhit!=0
780 
781  if (doRekeyOnThisSeed && !(clusterRemovalInfos == edm::InputTag(""))) {
782  ClusterRemovalRefSetter refSetter(e, clusterRemovalInfos);
783  TrajectorySeed::RecHitContainer newRecHitContainer;
784  newRecHitContainer.reserve(origSeedRef->nHits());
785  for (auto const& recHit : origSeedRef->recHits()) {
786  newRecHitContainer.push_back(recHit);
787  refSetter.reKey(&newRecHitContainer.back());
788  }
789  outputSeeds->push_back(
790  TrajectorySeed(origSeedRef->startingState(), newRecHitContainer, origSeedRef->direction()));
791  }
792  //doRekeyOnThisSeed=true
793  else {
794  //just copy the one we had before
795  outputSeeds->push_back(TrajectorySeed(*origSeedRef));
796  }
798  origSeedRef = edm::RefToBase<TrajectorySeed>(pureRef);
799  } //creating a new seed and rekeying it rechit clusters.
800 
801  // Fill TrackExtra collection
802  outputTrkExtras->push_back(reco::TrackExtra(track->outerPosition(),
803  track->outerMomentum(),
804  track->outerOk(),
805  track->innerPosition(),
806  track->innerMomentum(),
807  track->innerOk(),
808  track->outerStateCovariance(),
809  track->outerDetId(),
810  track->innerStateCovariance(),
811  track->innerDetId(),
812  track->seedDirection(),
813  origSeedRef));
814  seedsRefs[i] = origSeedRef;
815  outputTrks->back().setExtra(reco::TrackExtraRef(refTrkExtras, outputTrkExtras->size() - 1));
816  reco::TrackExtra& tx = outputTrkExtras->back();
817  tx.setResiduals(track->residuals());
818 
819  // fill TrackingRecHits
820  unsigned nh1 = track->recHitsSize();
821  tx.setHits(refTrkHits, outputTrkHits->size(), nh1);
822  tx.setTrajParams(track->extra()->trajParams(), track->extra()->chi2sX5());
823  assert(tx.trajParams().size() == tx.recHitsSize());
824  for (auto hh = track->recHitsBegin(), eh = track->recHitsEnd(); hh != eh; ++hh) {
825  outputTrkHits->push_back((*hh)->clone());
826  }
827  }
828  trackRefs[i] = reco::TrackRef(refTrks, outputTrks->size() - 1);
829 
830  } //end faux loop over tracks
831 
832  //Fill the trajectories, etc. for 1st collection
833  refTrajs = e.getRefBeforePut<std::vector<Trajectory>>();
834 
835  outputTTAss = std::make_unique<TrajTrackAssociationCollection>(refTrajs, refTrks);
836 
837  for (unsigned int ti = 0; ti < trackColls.size(); ti++) {
840  e.getByToken(trackProducers_[ti].traj, hTraj1);
841  e.getByToken(trackProducers_[ti].tass, hTTAss1);
842 
843  if (hTraj1.failedToGet() || hTTAss1.failedToGet())
844  continue;
845 
846  for (size_t i = 0, n = hTraj1->size(); i < n; ++i) {
847  edm::Ref<std::vector<Trajectory>> trajRef(hTraj1, i);
849  if (match != hTTAss1->end()) {
850  const edm::Ref<reco::TrackCollection>& trkRef = match->val;
851  uint32_t oldKey = trackCollFirsts[ti] + static_cast<uint32_t>(trkRef.key());
852  if (trackRefs[oldKey].isNonnull()) {
853  outputTrajs->push_back(*trajRef);
854  //if making extras and the seeds at the same time, change the seed ref on the trajectory
856  outputTrajs->back().setSeedRef(seedsRefs[oldKey]);
857  outputTTAss->insert(edm::Ref<std::vector<Trajectory>>(refTrajs, outputTrajs->size() - 1), trackRefs[oldKey]);
858  }
859  }
860  }
861  }
862 
863  statCount.end(outputTrks->size());
864 
865  edm::ProductID nPID = refTrks.id();
866  edm::TestHandle<reco::TrackCollection> outHandle(outputTrks.get(), nPID);
867  fillerMVA.insert(outHandle, mvaVec.begin(), mvaVec.end());
868  fillerMVA.fill();
869 
870  e.put(std::move(outputTrks));
871  if (copyMVA_) {
872  e.put(std::move(vmMVA), "MVAVals");
873  auto mvas = std::make_unique<MVACollection>(mvaVec.begin(), mvaVec.end());
874  e.put(std::move(mvas), "MVAValues");
875  }
876  if (copyExtras_) {
878  e.put(std::move(outputTrkHits));
879  if (makeReKeyedSeeds_)
880  e.put(std::move(outputSeeds));
881  }
882  e.put(std::move(outputTrajs));
883  e.put(std::move(outputTTAss));
884  return;
885 
886 } //end produce
size
Write out results.
reference back()
Definition: OwnVector.h:431
TrajParams const & trajParams() const
std::vector< bool > promoteQuality_
std::unique_ptr< TrajTrackAssociationCollection > outputTTAss
ProductID id() const
Accessor for product ID.
Definition: Ref.h:244
const bool isValid(const Frame &aFrame, const FrameQuality &aQuality, const uint16_t aExpectedPos)
T begin() const
Definition: Range.h:15
reco::TrackRefProd refTrks
RecHitRange recHits() const
void returnEmptyCollections(edm::Event &e)
for(int i=first, nt=offsets[nh];i< nt;i+=gridDim.x *blockDim.x)
void setHits(TrackingRecHitRefProd const &prod, unsigned firstH, unsigned int nH)
std::string const & productInstanceName() const
unsigned int recHitsSize() const
number of RecHits
auto const & hh
reco::TrackBase::TrackQuality qualityToSet_
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
#define LIKELY(x)
Definition: Likely.h:20
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
assert(be >=bs)
std::unique_ptr< std::vector< Trajectory > > outputTrajs
key_type key() const
Accessor for product key.
Definition: Ref.h:250
const_iterator find(const key_type &k) const
find element with specified reference key
TrackAlgorithm
track algorithm
Definition: TrackBase.h:89
TrackingRecHitRefProd refTrkHits
std::vector< double > indivShareFrac_
const_iterator end() const
last iterator over the map (read only)
PropagationDirection direction() const
bool failedToGet() const
Definition: HandleBase.h:72
T x() const
Definition: PV3DBase.h:59
void push_back(D *&d)
Definition: OwnVector.h:326
std::unique_ptr< TrackingRecHitCollection > outputTrkHits
std::vector< TrajectorySeed > TrajectorySeedCollection
std::string const & moduleLabel() const
unsigned int nHits() const
edm::RefProd< TrajectorySeedCollection > refTrajSeeds
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::string const & processName() const
edm::ESGetToken< TrackAlgoPriorityOrder, CkfComponentsRecord > priorityToken
edm::RefProd< std::vector< Trajectory > > refTrajs
PTrajectoryStateOnDet const & startingState() const
std::unique_ptr< reco::TrackExtraCollection > outputTrkExtras
std::vector< int > hasSelector_
ii
Definition: cuy.py:589
ProductID id() const
Accessor for product ID.
Definition: RefProd.h:124
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:10
DetId geographicalId() const
std::unique_ptr< TrajectorySeedCollection > outputSeeds
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
constexpr std::array< unsigned int, reco::TrackBase::algoSize > trackAlgoPriorityOrder
unsigned int minFound_
std::vector< TkEDGetTokenss > trackProducers_
std::vector< std::vector< int > > listsToMerge_
std::unique_ptr< reco::TrackCollection > outputTrks
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
#define UNLIKELY(x)
Definition: Likely.h:21
Log< level::Warning, false > LogWarning
virtual LocalPoint localPosition() const =0
def move(src, dest)
Definition: eostools.py:511
void reserve(size_t)
Definition: OwnVector.h:320
void setTrajParams(TrajParams tmps, Chi2sFive chi2s)
reco::TrackExtraRefProd refTrkExtras
void setResiduals(const TrackResiduals &r)
set the residuals
Definition: TrackExtra.h:132

◆ returnEmptyCollections()

void TrackListMerger::returnEmptyCollections ( edm::Event e)
private

Definition at line 888 of file TrackListMerger.cc.

References copyExtras_, MillePedeFileConverter_cfg::e, makeReKeyedSeeds_, eostools::move(), outputSeeds, outputTrajs, outputTrkExtras, outputTrkHits, outputTrks, outputTTAss, and trkQualMod_.

Referenced by produce().

888  {
889  if (trkQualMod_) {
890  auto vm = std::make_unique<edm::ValueMap<int>>();
891  e.put(std::move(vm));
892  auto quals = std::make_unique<QualityMaskCollection>();
893  e.put(std::move(quals), "QualityMasks");
894  } else {
895  auto outputTrks = std::make_unique<reco::TrackCollection>();
896  e.put(std::move(outputTrks));
897 
898  if (makeReKeyedSeeds_) {
899  auto outputSeeds = std::make_unique<TrajectorySeedCollection>();
900  e.put(std::move(outputSeeds));
901  }
902 
903  if (copyExtras_) {
904  auto outputTrkExtras = std::make_unique<reco::TrackExtraCollection>();
905  auto outputTrkHits = std::make_unique<TrackingRecHitCollection>();
907  e.put(std::move(outputTrkHits));
908  }
909 
910  auto outputTrajs = std::make_unique<std::vector<Trajectory>>();
911  outputTTAss = std::make_unique<TrajTrackAssociationCollection>();
912  e.put(std::move(outputTrajs));
913  e.put(std::move(outputTTAss));
914  }
915  auto vmMVA = std::make_unique<edm::ValueMap<float>>();
916  e.put(std::move(vmMVA), "MVAVals");
917  auto mvas = std::make_unique<MVACollection>();
918  e.put(std::move(mvas), "MVAValues");
919  return;
920 }
std::unique_ptr< TrajTrackAssociationCollection > outputTTAss
std::unique_ptr< std::vector< Trajectory > > outputTrajs
std::unique_ptr< TrackingRecHitCollection > outputTrkHits
std::unique_ptr< reco::TrackExtraCollection > outputTrkExtras
std::unique_ptr< TrajectorySeedCollection > outputSeeds
std::unique_ptr< reco::TrackCollection > outputTrks
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ allowFirstHitShare_

bool TrackListMerger::allowFirstHitShare_
private

Definition at line 114 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ copyExtras_

bool TrackListMerger::copyExtras_
private

Definition at line 59 of file TrackListMerger.cc.

Referenced by produce(), returnEmptyCollections(), and TrackListMerger().

◆ copyMVA_

bool TrackListMerger::copyMVA_
private

Definition at line 112 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ epsilon_

float TrackListMerger::epsilon_
private

Definition at line 103 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ foundHitBonus_

float TrackListMerger::foundHitBonus_
private

Definition at line 105 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ hasSelector_

std::vector<int> TrackListMerger::hasSelector_
private

Definition at line 111 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ indivShareFrac_

std::vector<double> TrackListMerger::indivShareFrac_
private

Definition at line 107 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ listsToMerge_

std::vector<std::vector<int> > TrackListMerger::listsToMerge_
private

Definition at line 109 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ lostHitPenalty_

float TrackListMerger::lostHitPenalty_
private

Definition at line 106 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ makeReKeyedSeeds_

bool TrackListMerger::makeReKeyedSeeds_
private

Definition at line 60 of file TrackListMerger.cc.

Referenced by produce(), returnEmptyCollections(), and TrackListMerger().

◆ maxNormalizedChisq_

double TrackListMerger::maxNormalizedChisq_
private

Definition at line 100 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ minFound_

unsigned int TrackListMerger::minFound_
private

Definition at line 102 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ minPT_

double TrackListMerger::minPT_
private

Definition at line 101 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ outputSeeds

std::unique_ptr<TrajectorySeedCollection> TrackListMerger::outputSeeds
private

Definition at line 51 of file TrackListMerger.cc.

Referenced by produce(), and returnEmptyCollections().

◆ outputTrajs

std::unique_ptr<std::vector<Trajectory> > TrackListMerger::outputTrajs
private

Definition at line 49 of file TrackListMerger.cc.

Referenced by produce(), and returnEmptyCollections().

◆ outputTrkExtras

std::unique_ptr<reco::TrackExtraCollection> TrackListMerger::outputTrkExtras
private

Definition at line 47 of file TrackListMerger.cc.

Referenced by produce(), and returnEmptyCollections().

◆ outputTrkHits

std::unique_ptr<TrackingRecHitCollection> TrackListMerger::outputTrkHits
private

Definition at line 48 of file TrackListMerger.cc.

Referenced by produce(), and returnEmptyCollections().

◆ outputTrks

std::unique_ptr<reco::TrackCollection> TrackListMerger::outputTrks
private

Definition at line 46 of file TrackListMerger.cc.

Referenced by produce(), and returnEmptyCollections().

◆ outputTTAss

std::unique_ptr<TrajTrackAssociationCollection> TrackListMerger::outputTTAss
private

Definition at line 50 of file TrackListMerger.cc.

Referenced by produce(), and returnEmptyCollections().

◆ priorityName_

std::string TrackListMerger::priorityName_
private

Definition at line 98 of file TrackListMerger.cc.

Referenced by TrackListMerger().

◆ priorityToken

edm::ESGetToken<TrackAlgoPriorityOrder, CkfComponentsRecord> TrackListMerger::priorityToken
private

Definition at line 62 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ promoteQuality_

std::vector<bool> TrackListMerger::promoteQuality_
private

Definition at line 110 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ qualityToSet_

reco::TrackBase::TrackQuality TrackListMerger::qualityToSet_
private

Definition at line 115 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ refTrajs

edm::RefProd<std::vector<Trajectory> > TrackListMerger::refTrajs
private

Definition at line 56 of file TrackListMerger.cc.

Referenced by produce().

◆ refTrajSeeds

edm::RefProd<TrajectorySeedCollection> TrackListMerger::refTrajSeeds
private

Definition at line 57 of file TrackListMerger.cc.

Referenced by produce().

◆ refTrkExtras

reco::TrackExtraRefProd TrackListMerger::refTrkExtras
private

Definition at line 54 of file TrackListMerger.cc.

Referenced by produce().

◆ refTrkHits

TrackingRecHitRefProd TrackListMerger::refTrkHits
private

Definition at line 55 of file TrackListMerger.cc.

Referenced by produce().

◆ refTrks

reco::TrackRefProd TrackListMerger::refTrks
private

Definition at line 53 of file TrackListMerger.cc.

Referenced by produce().

◆ shareFrac_

float TrackListMerger::shareFrac_
private

Definition at line 104 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ trackProducers_

std::vector<TkEDGetTokenss> TrackListMerger::trackProducers_
private

Definition at line 96 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

◆ trkQualMod_

bool TrackListMerger::trkQualMod_
private

Definition at line 117 of file TrackListMerger.cc.

Referenced by produce(), returnEmptyCollections(), and TrackListMerger().

◆ use_sharesInput_

bool TrackListMerger::use_sharesInput_
private

Definition at line 116 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().