CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
TrackListMerger Class Reference
Inheritance diagram for TrackListMerger:
edm::stream::EDProducer<> edm::stream::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

struct  TkEDGetTokenss
 

Public Member Functions

virtual void produce (edm::Event &e, const edm::EventSetup &c) override
 
 TrackListMerger (const edm::ParameterSet &conf)
 
virtual ~TrackListMerger ()
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::stream::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

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)
 

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::auto_ptr
< TrajectorySeedCollection
outputSeeds
 
std::auto_ptr< std::vector
< Trajectory > > 
outputTrajs
 
std::auto_ptr
< reco::TrackExtraCollection
outputTrkExtras
 
std::auto_ptr
< TrackingRecHitCollection
outputTrkHits
 
std::auto_ptr
< reco::TrackCollection
outputTrks
 
std::auto_ptr
< TrajTrackAssociationCollection
outputTTAss
 
std::vector< bool > promoteQuality_
 
reco::TrackBase::TrackQuality qualityToSet_
 
edm::RefProd< std::vector
< Trajectory > > 
refTrajs
 
edm::RefProd
< TrajectorySeedCollection
refTrajSeeds
 
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<>
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDProducerBase
typedef EDProducerAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::stream::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 29 of file TrackListMerger.cc.

Constructor & Destructor Documentation

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

Definition at line 200 of file TrackListMerger.cc.

References allowFirstHitShare_, copyExtras_, copyMVA_, edTokens(), epsilon_, edm::hlt::Exception, edm::ParameterSet::exists(), foundHitBonus_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), hasSelector_, i, indivShareFrac_, diffTwoXMLs::label, listsToMerge_, lostHitPenalty_, makeReKeyedSeeds_, maxNormalizedChisq_, minFound_, minPT_, convertSQLiteXML::ok, promoteQuality_, reco::TrackBase::qualityByName(), qualityToSet_, HLT_25ns14e33_v1_cff::setsToMerge, shareFrac_, AlCaHLTBitMon_QueryRunRegistry::string, trackProducers_, trkQualMod_, reco::TrackBase::undefQuality, and use_sharesInput_.

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

Definition at line 294 of file TrackListMerger.cc.

294 { }

Member Function Documentation

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

Definition at line 69 of file TrackListMerger.cc.

Referenced by TrackListMerger().

69  {
70  return TkEDGetTokenss(tag, consumes<reco::TrackCollection>(tag),
71  consumes<std::vector<Trajectory> >(tag), consumes<TrajTrackAssociationCollection >(tag),
73  }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
TkEDGetTokenss TrackListMerger::edTokens ( const edm::InputTag tag,
const edm::InputTag mvatag 
)
inlineprivate

Definition at line 74 of file TrackListMerger.cc.

74  {
75  return TkEDGetTokenss(tag, consumes<reco::TrackCollection>(tag),
76  consumes<std::vector<Trajectory> >(tag), consumes<TrajTrackAssociationCollection >(tag),
78  }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
void TrackListMerger::produce ( edm::Event e,
const edm::EventSetup c 
)
overridevirtual

Implements edm::stream::EDProducerBase.

Definition at line 297 of file TrackListMerger.cc.

References funct::abs(), reco::TrackBase::algo(), HLT_25ns14e33_v1_cff::algo, allowFirstHitShare_, assert(), asciidump::at, edm::OwnVector< T, P >::back(), begin, reco::TrackBase::chi2(), edm::AssociationMap< edm::OneToOne< std::vector< Trajectory >, reco::TrackCollection, unsigned short > >::const_iterator, constexpr, copyExtras_, copyMVA_, delta, TrajectorySeed::direction(), end, epsilon_, edm::HandleBase::failedToGet(), spr::find(), plotBeamSpotDB::first, foundHitBonus_, TrackingRecHit::geographicalId(), edm::Event::getByLabel(), edm::Event::getByToken(), edm::Event::getProvenance(), edm::Event::getRefBeforePut(), hasSelector_, reco::TrackBase::highPurity, reco::TrackBase::hitPattern(), i, edm::RefProd< T >::id(), edm::Ref< C, T, F >::id(), cuy::ii, indivShareFrac_, reco::Track::innerDetId(), reco::Track::innerMomentum(), reco::Track::innerOk(), reco::Track::innerPosition(), reco::Track::innerStateCovariance(), HLT_25ns14e33_v1_cff::InputTag, TrackingRecHit::isValid(), j, findQualityFiles::jj, relval_steps::k2, edm::Ref< C, T, F >::key(), likely, listsToMerge_, TrackingRecHit::localPosition(), reco::TrackBase::loose, lostHitPenalty_, makeReKeyedSeeds_, match(), maxNormalizedChisq_, min(), minFound_, minPT_, edm::Provenance::moduleLabel(), gen::n, TrajectorySeed::nHits(), reco::TrackBase::numberOfLostHits(), reco::TrackBase::numberOfValidHits(), reco::HitPattern::numberOfValidPixelHits(), reco::Track::outerDetId(), reco::Track::outerMomentum(), reco::Track::outerOk(), reco::Track::outerPosition(), reco::Track::outerStateCovariance(), outputSeeds, outputTrajs, outputTrkExtras, outputTrkHits, outputTrks, outputTTAss, edm::Provenance::processName(), edm::Provenance::productInstanceName(), promoteQuality_, edm::OwnVector< T, P >::push_back(), edm::Event::put(), qualityToSet_, TrackingRecHit::rawId(), TrajectorySeed::recHits(), reco::Track::recHitsBegin(), reco::Track::recHitsEnd(), reco::Track::recHitsSize(), refTrajs, refTrajSeeds, refTrkExtras, refTrkHits, refTrks, ClusterRemovalRefSetter::reKey(), edm::OwnVector< T, P >::reserve(), reco::Track::residuals(), reco::Track::seedDirection(), reco::Track::seedRef(), reco::TrackExtraBase::setHits(), reco::TrackExtra::setResiduals(), shareFrac_, TrackingRecHit::some, TrajectorySeed::startingState(), DetId::subdetId(), reco::TrackBase::tight, trackProducers_, trkQualMod_, unlikely, use_sharesInput_, and PV3DBase< T, PVType, FrameType >::x().

298  {
299  // extract tracker geometry
300  //
301  //edm::ESHandle<TrackerGeometry> theG;
302  //es.get<TrackerDigiGeometryRecord>().get(theG);
303 
304  // using namespace reco;
305 
306  // get Inputs
307  // if 1 input list doesn't exist, make an empty list, issue a warning, and continue
308  // this allows TrackListMerger to be used as a cleaner only if handed just one list
309  // if both input lists don't exist, will issue 2 warnings and generate an empty output collection
310  //
311  static const reco::TrackCollection s_empty;
312 
313  std::vector<const reco::TrackCollection *> trackColls;
314  std::vector<edm::Handle<reco::TrackCollection> > trackHandles(trackProducers_.size());
315  for ( unsigned int i=0; i<trackProducers_.size(); i++) {
316  trackColls.push_back(0);
317  //edm::Handle<reco::TrackCollection> trackColl;
318  e.getByToken(trackProducers_[i].tk, trackHandles[i]);
319  if (trackHandles[i].isValid()) {
320  trackColls[i]= trackHandles[i].product();
321  } else {
322  edm::LogWarning("TrackListMerger") << "TrackCollection " << trackProducers_[i].tag <<" not found";
323  trackColls[i]=&s_empty;
324  }
325  }
326 
327  unsigned int collsSize =trackColls.size();
328  unsigned int rSize=0;
329  unsigned int trackCollSizes[collsSize];
330  unsigned int trackCollFirsts[collsSize];
331  for (unsigned int i=0; i!=collsSize; i++) {
332  trackCollSizes[i]=trackColls[i]->size();
333  trackCollFirsts[i]=rSize;
334  rSize+=trackCollSizes[i];
335  }
336 
337  statCount.begin(rSize);
338 
339  //
340  // quality cuts first
341  //
342  int i=-1;
343 
344  int selected[rSize];
345  int indexG[rSize];
346  bool trkUpdated[rSize];
347  int trackCollNum[rSize];
348  int trackQuals[rSize];
349  float trackMVAs[rSize];
350  for (unsigned int j=0; j<rSize;j++) {
351  indexG[j]=-1; selected[j]=1; trkUpdated[j]=false; trackCollNum[j]=0; trackQuals[j]=0;trackMVAs[j] = -99.0;
352  }
353 
354  int ngood=0;
355  for (unsigned int j=0; j!= collsSize; j++) {
356  const reco::TrackCollection *tC1=trackColls[j];
357 
358  edm::Handle<edm::ValueMap<int> > trackSelColl;
359  edm::Handle<edm::ValueMap<float> > trackMVAStore;
360  if ( copyMVA_ )
361  e.getByToken(trackProducers_[j].tmva, trackMVAStore);
362  if ( hasSelector_[j]>0 ){
363  e.getByToken(trackProducers_[j].tsel, trackSelColl);
364  }
365 
366  if ( 0<tC1->size() ){
367  unsigned int iC=0;
368  for (reco::TrackCollection::const_iterator track=tC1->begin(); track!=tC1->end(); track++){
369  i++;
370  trackCollNum[i]=j;
371  trackQuals[i]=track->qualityMask();
372 
373  reco::TrackRef trkRef=reco::TrackRef(trackHandles[j],iC);
374  if ( copyMVA_ )
375  if( (*trackMVAStore).contains(trkRef.id()) ) trackMVAs[i] = (*trackMVAStore)[trkRef];
376  if ( hasSelector_[j]>0 ) {
377  int qual=(*trackSelColl)[trkRef];
378  if ( qual < 0 ) {
379  selected[i]=0;
380  iC++;
381  continue;
382  }else{
383  trackQuals[i]=qual;
384  }
385  }
386  iC++;
387  selected[i]=trackQuals[i]+10;//10 is magic number used throughout...
388  if ((short unsigned)track->ndof() < 1){
389  selected[i]=0;
390  continue;
391  }
392  if (track->normalizedChi2() > maxNormalizedChisq_){
393  selected[i]=0;
394  continue;
395  }
396  if (track->found() < minFound_){
397  selected[i]=0;
398  continue;
399  }
400  if (track->pt() < minPT_){
401  selected[i]=0;
402  continue;
403  }
404  // good!
405  indexG[i] = ngood++;
406  //if ( beVerb) std::cout << "inverb " << track->pt() << " " << selected[i] << std::endl;
407  }//end loop over tracks
408  }//end more than 0 track
409  } // loop over trackcolls
410 
411 
412  statCount.pre(ngood);
413 
414  //cache the id and rechits of valid hits
415  typedef std::pair<unsigned int, const TrackingRecHit*> IHit;
416  #ifdef __clang__
417  std::vector<std::vector<IHit>> rh1(ngood); // an array of vectors!
418  #else
419  std::vector<IHit> rh1[ngood]; // an array of vectors!
420  #endif
421  //const TrackingRecHit* fh1[ngood]; // first hit...
422  uint8_t algo[ngood];
423  float score[ngood];
424 
425 
426  for ( unsigned int j=0; j<rSize; j++) {
427  if (selected[j]==0) continue;
428  int i = indexG[j];
429  assert(i>=0);
430  unsigned int collNum=trackCollNum[j];
431  unsigned int trackNum=j-trackCollFirsts[collNum];
432  const reco::Track *track=&((trackColls[collNum])->at(trackNum));
433 
434  algo[i]=track->algo();
435  int validHits=track->numberOfValidHits();
436  int validPixelHits=track->hitPattern().numberOfValidPixelHits();
437  int lostHits=track->numberOfLostHits();
438  score[i] = foundHitBonus_*validPixelHits+foundHitBonus_*validHits - lostHitPenalty_*lostHits - track->chi2();
439 
440 
441  rh1[i].reserve(validHits) ;
442  auto compById = [](IHit const & h1, IHit const & h2) {return h1.first < h2.first;};
443  for (trackingRecHit_iterator it = track->recHitsBegin(); it != track->recHitsEnd(); ++it) {
444  const TrackingRecHit* hit = (*it);
445  unsigned int id = hit->rawId() ;
446  if(hit->geographicalId().subdetId()>2) id &= (~3); // mask mono/stereo in strips...
447  if likely(hit->isValid()) { rh1[i].emplace_back(id,hit); std::push_heap(rh1[i].begin(),rh1[i].end(),compById); }
448  }
449  std::sort_heap(rh1[i].begin(),rh1[i].end(),compById);
450  }
451 
452  //DL here
453  if likely(ngood>1 && collsSize>1)
454  for ( unsigned int ltm=0; ltm<listsToMerge_.size(); ltm++) {
455  int saveSelected[rSize];
456  bool notActive[collsSize];
457  for (unsigned int cn=0;cn!=collsSize;++cn)
458  notActive[cn]= find(listsToMerge_[ltm].begin(),listsToMerge_[ltm].end(),cn)==listsToMerge_[ltm].end();
459 
460  for ( unsigned int i=0; i<rSize; i++) saveSelected[i]=selected[i];
461 
462  //DL protect against 0 tracks?
463  for ( unsigned int i=0; i<rSize-1; i++) {
464  if (selected[i]==0) continue;
465  unsigned int collNum=trackCollNum[i];
466 
467  //check that this track is in one of the lists for this iteration
468  if (notActive[collNum]) continue;
469 
470  int k1 = indexG[i];
471  unsigned int nh1=rh1[k1].size();
472  int qualityMaskT1 = trackQuals[i];
473 
474  int nhit1 = nh1; // validHits[k1];
475  float score1 = score[k1];
476 
477  // start at next collection
478  for ( unsigned int j=i+1; j<rSize; j++) {
479  if (selected[j]==0) continue;
480  unsigned int collNum2=trackCollNum[j];
481  if ( (collNum == collNum2) && indivShareFrac_[collNum] > 0.99) continue;
482  //check that this track is in one of the lists for this iteration
483  if (notActive[collNum2]) continue;
484 
485  int k2 = indexG[j];
486 
487  int newQualityMask = -9; //avoid resetting quality mask if not desired 10+ -9 =1
488  if (promoteQuality_[ltm]) {
489  int maskT1= saveSelected[i]>1? saveSelected[i]-10 : qualityMaskT1;
490  int maskT2= saveSelected[j]>1? saveSelected[j]-10 : trackQuals[j];
491  newQualityMask =(maskT1 | maskT2); // take OR of trackQuality
492  }
493  unsigned int nh2=rh1[k2].size();
494  int nhit2 = nh2;
495 
496 
497  auto share = use_sharesInput_ ?
498  [](const TrackingRecHit* it,const TrackingRecHit* jt, float)->bool { return it->sharesInput(jt,TrackingRecHit::some); } :
499  [](const TrackingRecHit* it,const TrackingRecHit* jt, float eps)->bool {
500  float delta = std::abs ( it->localPosition().x()-jt->localPosition().x() );
501  return (it->geographicalId()==jt->geographicalId())&&(delta<eps);
502  };
503 
504  statCount.start();
505 
506  //loop over rechits
507  int noverlap=0;
508  int firstoverlap=0;
509  // check first hit (should use REAL first hit?)
510  if unlikely(allowFirstHitShare_ && rh1[k1][0].first==rh1[k2][0].first ) {
511  const TrackingRecHit* it = rh1[k1][0].second;
512  const TrackingRecHit* jt = rh1[k2][0].second;
513  if (share(it,jt,epsilon_)) firstoverlap=1;
514  }
515 
516 
517  // exploit sorting
518  unsigned int jh=0;
519  unsigned int ih=0;
520  while (ih!=nh1 && jh!=nh2) {
521  // break if not enough to go...
522  // if ( nprecut-noverlap+firstoverlap > int(nh1-ih)) break;
523  // if ( nprecut-noverlap+firstoverlap > int(nh2-jh)) break;
524  auto const id1 = rh1[k1][ih].first;
525  auto const id2 = rh1[k2][jh].first;
526  if (id1<id2) ++ih;
527  else if (id2<id1) ++jh;
528  else {
529  // in case of split-hit do full conbinatorics
530  auto li=ih; while( (++li)!=nh1 && id1 == rh1[k1][li].first);
531  auto lj=jh; while( (++lj)!=nh2 && id2 == rh1[k2][lj].first);
532  for (auto ii=ih; ii!=li; ++ii)
533  for (auto jj=jh; jj!=lj; ++jj) {
534  const TrackingRecHit* it = rh1[k1][ii].second;
535  const TrackingRecHit* jt = rh1[k2][jj].second;
536  if (share(it,jt,epsilon_)) noverlap++;
537  }
538  jh=lj; ih=li;
539  } // equal ids
540 
541  } //loop over ih & jh
542 
543  bool dupfound = (collNum != collNum2) ? (noverlap-firstoverlap) > (std::min(nhit1,nhit2)-firstoverlap)*shareFrac_ :
544  (noverlap-firstoverlap) > (std::min(nhit1,nhit2)-firstoverlap)*indivShareFrac_[collNum];
545 
546  if ( dupfound ) {
547  float score2 = score[k2];
548  constexpr float almostSame = 0.01f; // difference rather than ratio due to possible negative values for score
549  if ( score1 - score2 > almostSame ) {
550  selected[j]=0;
551  selected[i]=10+newQualityMask; // add 10 to avoid the case where mask = 1
552  trkUpdated[i]=true;
553  } else if ( score2 - score1 > almostSame ) {
554  selected[i]=0;
555  selected[j]=10+newQualityMask; // add 10 to avoid the case where mask = 1
556  trkUpdated[j]=true;
557  }else{
558  // If tracks from both iterations are virtually identical, choose the one with the best quality or with lower algo
561  //same quality, pick earlier algo
562  if (algo[k1] <= algo[k2]) {
563  selected[j]=0;
564  selected[i]=10+newQualityMask; // add 10 to avoid the case where mask = 1
565  trkUpdated[i]=true;
566  } else {
567  selected[i]=0;
568  selected[j]=10+newQualityMask; // add 10 to avoid the case where mask = 1
569  trkUpdated[j]=true;
570  }
571  } else if ((trackQuals[j] & (1<<reco::TrackBase::loose|1<<reco::TrackBase::tight|1<<reco::TrackBase::highPurity) ) <
573  selected[j]=0;
574  selected[i]=10+newQualityMask; // add 10 to avoid the case where mask = 1
575  trkUpdated[i]=true;
576  }else{
577  selected[i]=0;
578  selected[j]=10+newQualityMask; // add 10 to avoid the case where mask = 1
579  trkUpdated[j]=true;
580  }
581  }//end fi < fj
582  statCount.overlap();
583  /*
584  if (at0[k1]&&at0[k2]) {
585  statCount.dp(dphi);
586  if (dz<1.f) statCount.de(deta);
587  }
588  */
589  }//end got a duplicate
590  else {
591  statCount.noOverlap();
592  }
593  //stop if the ith track is now unselected
594  if (selected[i]==0) break;
595  }//end track2 loop
596  }//end track loop
597  } //end loop over track list sets
598 
599 
600 
601  std::auto_ptr<edm::ValueMap<float> > vmMVA = std::auto_ptr<edm::ValueMap<float> >(new edm::ValueMap<float>);
602  edm::ValueMap<float>::Filler fillerMVA(*vmMVA);
603 
604 
605 
606  // special case - if just doing the trkquals
607  if (trkQualMod_) {
608  unsigned int tSize=trackColls[0]->size();
609  std::auto_ptr<edm::ValueMap<int> > vm = std::auto_ptr<edm::ValueMap<int> >(new edm::ValueMap<int>);
610  edm::ValueMap<int>::Filler filler(*vm);
611 
612  std::vector<int> finalQuals(tSize,-1); //default is unselected
613  for ( unsigned int i=0; i<rSize; i++) {
614  unsigned int tNum=i%tSize;
615 
616  if (selected[i]>1 ) {
617  finalQuals[tNum]=selected[i]-10;
618  if (trkUpdated[i])
619  finalQuals[tNum]=(finalQuals[tNum] | (1<<qualityToSet_));
620  }
621  if ( selected[i]==1 )
622  finalQuals[tNum]=trackQuals[i];
623  }
624 
625  filler.insert(trackHandles[0], finalQuals.begin(),finalQuals.end());
626  filler.fill();
627 
628  e.put(vm);
629 
630  std::vector<float> mvaVec(tSize,-99);
631 
632  for(unsigned int i = 0; i < rSize; i++){
633  unsigned int tNum = i % tSize;
634  mvaVec[tNum] = trackMVAs[tNum];
635  }
636 
637  fillerMVA.insert(trackHandles[0],mvaVec.begin(),mvaVec.end());
638  fillerMVA.fill();
639  if ( copyMVA_)
640  e.put(vmMVA,"MVAVals");
641  return;
642  }
643 
644 
645  //
646  // output selected tracks - if any
647  //
648 
649  #ifdef __clang__
650  std::vector<reco::TrackRef> trackRefs(rSize);
651  std::vector<edm::RefToBase<TrajectorySeed>> seedsRefs(rSize);
652  #else
653  reco::TrackRef trackRefs[rSize];
654  edm::RefToBase<TrajectorySeed> seedsRefs[rSize];
655  #endif
656 
657  unsigned int nToWrite=0;
658  for ( unsigned int i=0; i<rSize; i++)
659  if (selected[i]!=0) nToWrite++;
660 
661  std::vector<float> mvaVec;
662 
663  outputTrks = std::auto_ptr<reco::TrackCollection>(new reco::TrackCollection);
664  outputTrks->reserve(nToWrite);
666 
667  if (copyExtras_) {
668  outputTrkExtras = std::auto_ptr<reco::TrackExtraCollection>(new reco::TrackExtraCollection);
669  outputTrkExtras->reserve(nToWrite);
671  outputTrkHits = std::auto_ptr<TrackingRecHitCollection>(new TrackingRecHitCollection);
672  outputTrkHits->reserve(nToWrite*25);
674  if (makeReKeyedSeeds_){
675  outputSeeds = std::auto_ptr<TrajectorySeedCollection>(new TrajectorySeedCollection);
676  outputSeeds->reserve(nToWrite);
678  }
679  }
680 
681 
682  outputTrajs = std::auto_ptr< std::vector<Trajectory> >(new std::vector<Trajectory>());
683  outputTrajs->reserve(rSize);
684  outputTTAss = std::auto_ptr< TrajTrackAssociationCollection >(new TrajTrackAssociationCollection());
685 
686 
687 
688  for ( unsigned int i=0; i<rSize; i++) {
689  if (selected[i]==0) {
690  trackRefs[i]=reco::TrackRef();
691  continue;
692  }
693 
694  unsigned int collNum=trackCollNum[i];
695  unsigned int trackNum=i-trackCollFirsts[collNum];
696  const reco::Track *track=&((trackColls[collNum])->at(trackNum));
697  outputTrks->push_back( reco::Track( *track ) );
698  mvaVec.push_back(trackMVAs[i]);
699  if (selected[i]>1 ) {
700  outputTrks->back().setQualityMask(selected[i]-10);
701  if (trkUpdated[i])
702  outputTrks->back().setQuality(qualityToSet_);
703  }
704  //might duplicate things, but doesnt hurt
705  if ( selected[i]==1 )
706  outputTrks->back().setQualityMask(trackQuals[i]);
707 
708  // if ( beVerb ) std::cout << "selected " << outputTrks->back().pt() << " " << outputTrks->back().qualityMask() << " " << selected[i] << std::endl;
709 
710  //fill the TrackCollection
711  if (copyExtras_) {
712  edm::RefToBase<TrajectorySeed> origSeedRef = track->seedRef();
713  //creating a seed with rekeyed clusters if required
714  if (makeReKeyedSeeds_){
715  bool doRekeyOnThisSeed=false;
716 
717  edm::InputTag clusterRemovalInfos("");
718  //grab on of the hits of the seed
719  if (origSeedRef->nHits()!=0){
720  TrajectorySeed::const_iterator firstHit=origSeedRef->recHits().first;
721  const TrackingRecHit *hit = &*firstHit;
722  if (firstHit->isValid()){
723  edm::ProductID pID=clusterProductB(hit);
724  // the cluster collection either produced a removalInfo or mot
725  //get the clusterremoval info from the provenance: will rekey if this is found
727  edm::Provenance prov=e.getProvenance(pID);
728  clusterRemovalInfos=edm::InputTag(prov.moduleLabel(),
729  prov.productInstanceName(),
730  prov.processName());
731  doRekeyOnThisSeed=e.getByLabel(clusterRemovalInfos,CRIh);
732  }//valid hit
733  }//nhit!=0
734 
735  if (doRekeyOnThisSeed && !(clusterRemovalInfos==edm::InputTag(""))) {
736  ClusterRemovalRefSetter refSetter(e,clusterRemovalInfos);
737  TrajectorySeed::recHitContainer newRecHitContainer;
738  newRecHitContainer.reserve(origSeedRef->nHits());
739  TrajectorySeed::const_iterator iH=origSeedRef->recHits().first;
740  TrajectorySeed::const_iterator iH_end=origSeedRef->recHits().second;
741  for (;iH!=iH_end;++iH){
742  newRecHitContainer.push_back(*iH);
743  refSetter.reKey(&newRecHitContainer.back());
744  }
745  outputSeeds->push_back( TrajectorySeed( origSeedRef->startingState(),
746  newRecHitContainer,
747  origSeedRef->direction()));
748  }
749  //doRekeyOnThisSeed=true
750  else{
751  //just copy the one we had before
752  outputSeeds->push_back( TrajectorySeed(*origSeedRef));
753  }
755  origSeedRef=edm::RefToBase<TrajectorySeed>( pureRef);
756  }//creating a new seed and rekeying it rechit clusters.
757 
758  // Fill TrackExtra collection
759  outputTrkExtras->push_back( reco::TrackExtra(
760  track->outerPosition(), track->outerMomentum(), track->outerOk(),
761  track->innerPosition(), track->innerMomentum(), track->innerOk(),
762  track->outerStateCovariance(), track->outerDetId(),
763  track->innerStateCovariance(), track->innerDetId(),
764  track->seedDirection(), origSeedRef ) );
765  seedsRefs[i]=origSeedRef;
766  outputTrks->back().setExtra( reco::TrackExtraRef( refTrkExtras, outputTrkExtras->size() - 1) );
767  reco::TrackExtra & tx = outputTrkExtras->back();
768  tx.setResiduals(track->residuals());
769 
770  // fill TrackingRecHits
771  unsigned nh1=track->recHitsSize();
772  tx.setHits(refTrkHits,outputTrkHits->size(),nh1);
773  for (auto hh = track->recHitsBegin(), eh=track->recHitsEnd(); hh!=eh; ++hh ) {
774  outputTrkHits->push_back( (*hh)->clone() );
775  }
776  }
777  trackRefs[i] = reco::TrackRef(refTrks, outputTrks->size() - 1);
778 
779 
780  }//end faux loop over tracks
781 
782  //Fill the trajectories, etc. for 1st collection
783  refTrajs = e.getRefBeforePut< std::vector<Trajectory> >();
784 
785  for (unsigned int ti=0; ti<trackColls.size(); ti++) {
788  e.getByToken(trackProducers_[ti].traj, hTraj1);
789  e.getByToken(trackProducers_[ti].tass, hTTAss1);
790 
791  if (hTraj1.failedToGet() || hTTAss1.failedToGet()) continue;
792 
793  for (size_t i = 0, n = hTraj1->size(); i < n; ++i) {
794  edm::Ref< std::vector<Trajectory> > trajRef(hTraj1, i);
795  TrajTrackAssociationCollection::const_iterator match = hTTAss1->find(trajRef);
796  if (match != hTTAss1->end()) {
797  const edm::Ref<reco::TrackCollection> &trkRef = match->val;
798  short oldKey = trackCollFirsts[ti]+static_cast<short>(trkRef.key());
799  if (trackRefs[oldKey].isNonnull()) {
800  outputTrajs->push_back( *trajRef );
801  //if making extras and the seeds at the same time, change the seed ref on the trajectory
803  outputTrajs->back().setSeedRef( seedsRefs[oldKey] );
804  outputTTAss->insert ( edm::Ref< std::vector<Trajectory> >(refTrajs, outputTrajs->size() - 1),
805  trackRefs[oldKey] );
806  }
807  }
808  }
809  }
810 
811  statCount.end(outputTrks->size());
812 
813  edm::ProductID nPID = refTrks.id();
815  fillerMVA.insert(outHandle,mvaVec.begin(),mvaVec.end());
816  fillerMVA.fill();
817 
818  e.put(outputTrks);
819  if ( copyMVA_ )
820  e.put(vmMVA,"MVAVals");
821  if (copyExtras_) {
822  e.put(outputTrkExtras);
823  e.put(outputTrkHits);
824  if (makeReKeyedSeeds_)
825  e.put(outputSeeds);
826  }
827  e.put(outputTrajs);
828  e.put(outputTTAss);
829  return;
830 
831  }//end produce
PropagationDirection direction() const
std::auto_ptr< reco::TrackCollection > outputTrks
dbl * delta
Definition: mlp_gen.cc:36
int i
Definition: DBlmapReader.cc:9
reference back()
Definition: OwnVector.h:327
std::vector< bool > promoteQuality_
reco::TrackRefProd refTrks
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:449
edm::RefProd< std::vector< Trajectory > > refTrajs
size_t recHitsSize() const
Get number of RecHits. (Warning, this includes invalid hits, which are not physical hits)...
Definition: Track.h:119
void setHits(TrackingRecHitRefProd const &prod, unsigned firstH, unsigned int nH)
assert(m_qm.get())
reco::TrackBase::TrackQuality qualityToSet_
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:13
bool innerOk() const
return true if the innermost hit is valid
Definition: Track.h:50
unsigned short numberOfLostHits() const
number of cases where track crossed a layer without getting a hit.
Definition: TrackBase.h:874
key_type key() const
Accessor for product key.
Definition: Ref.h:266
int ii
Definition: cuy.py:588
std::string const & processName() const
Definition: Provenance.h:61
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
const math::XYZPoint & outerPosition() const
position of the outermost hit
Definition: Track.h:65
edm::RefProd< TrajectorySeedCollection > refTrajSeeds
#define constexpr
ProductID id() const
Accessor for product ID.
Definition: Ref.h:256
TrackingRecHitRefProd refTrkHits
std::vector< double > indivShareFrac_
const math::XYZPoint & innerPosition() const
position of the innermost hit
Definition: Track.h:55
TrackAlgorithm algo() const
Definition: TrackBase.h:423
#define unlikely(x)
#define likely(x)
void push_back(D *&d)
Definition: OwnVector.h:280
std::auto_ptr< TrackingRecHitCollection > outputTrkHits
std::vector< TrajectorySeed > TrajectorySeedCollection
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:597
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:113
recHitContainer::const_iterator const_iterator
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
Definition: Track.h:75
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
Definition: Track.h:94
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int j
Definition: DBlmapReader.cc:9
unsigned short numberOfValidHits() const
number of valid hits found
Definition: TrackBase.h:868
#define end
Definition: vmac.h:37
T min(T a, T b)
Definition: MathUtil.h:58
std::auto_ptr< TrajTrackAssociationCollection > outputTTAss
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:104
edm::AssociationMap< edm::OneToOne< std::vector< Trajectory >, reco::TrackCollection, unsigned short > > TrajTrackAssociationCollection
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
std::auto_ptr< std::vector< Trajectory > > outputTrajs
std::auto_ptr< TrajectorySeedCollection > outputSeeds
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:405
RefProd< PROD > getRefBeforePut()
Definition: Event.h:133
std::vector< int > hasSelector_
bool failedToGet() const
Definition: HandleBase.h:79
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:11
double maxNormalizedChisq_
edm::OwnVector< TrackingRecHit > TrackingRecHitCollection
collection of TrackingRecHits
edm::RefToBase< TrajectorySeed > seedRef() const
Definition: Track.h:213
PTrajectoryStateOnDet const & startingState() const
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
Definition: Track.h:70
bool outerOk() const
return true if the outermost hit is valid
Definition: Track.h:45
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:384
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:19
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
Definition: Track.h:80
range recHits() const
bool isValid() const
std::string const & moduleLabel() const
Definition: Provenance.h:60
std::auto_ptr< reco::TrackExtraCollection > outputTrkExtras
unsigned int nHits() const
#define begin
Definition: vmac.h:30
unsigned int minFound_
std::vector< TkEDGetTokenss > trackProducers_
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
Definition: Track.h:60
ProductID id() const
Accessor for product ID.
Definition: RefProd.h:140
const TrackResiduals & residuals() const
Definition: Track.h:220
int numberOfValidPixelHits() const
Definition: HitPattern.h:749
PropagationDirection seedDirection() const
direction of how the hits were sorted in the original seed
Definition: Track.h:204
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
DetId geographicalId() const
std::string const & productInstanceName() const
Definition: Provenance.h:62
std::vector< std::vector< int > > listsToMerge_
Provenance getProvenance(BranchID const &theID) const
Definition: Event.cc:73
for(const auto &isodef:isoDefs)
T x() const
Definition: PV3DBase.h:62
virtual LocalPoint localPosition() const =0
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
Definition: Track.h:99
tuple size
Write out results.
id_type rawId() const
void reserve(size_t)
Definition: OwnVector.h:274
reco::TrackExtraRefProd refTrkExtras
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
list at
Definition: asciidump.py:428
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
Definition: Track.h:109
void setResiduals(const TrackResiduals &r)
set the residuals
Definition: TrackExtra.h:178

Member Data Documentation

bool TrackListMerger::allowFirstHitShare_
private

Definition at line 95 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

bool TrackListMerger::copyExtras_
private

Definition at line 53 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

bool TrackListMerger::copyMVA_
private

Definition at line 93 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

float TrackListMerger::epsilon_
private

Definition at line 84 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

float TrackListMerger::foundHitBonus_
private

Definition at line 86 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

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

Definition at line 92 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

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

Definition at line 88 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

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

Definition at line 90 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

float TrackListMerger::lostHitPenalty_
private

Definition at line 87 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

bool TrackListMerger::makeReKeyedSeeds_
private

Definition at line 54 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

double TrackListMerger::maxNormalizedChisq_
private

Definition at line 81 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

unsigned int TrackListMerger::minFound_
private

Definition at line 83 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

double TrackListMerger::minPT_
private

Definition at line 82 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

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

Definition at line 45 of file TrackListMerger.cc.

Referenced by produce().

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

Definition at line 43 of file TrackListMerger.cc.

Referenced by produce().

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

Definition at line 41 of file TrackListMerger.cc.

Referenced by produce().

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

Definition at line 42 of file TrackListMerger.cc.

Referenced by produce().

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

Definition at line 40 of file TrackListMerger.cc.

Referenced by produce().

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

Definition at line 44 of file TrackListMerger.cc.

Referenced by produce().

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

Definition at line 91 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

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

Definition at line 96 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

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

Definition at line 50 of file TrackListMerger.cc.

Referenced by produce().

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

Definition at line 51 of file TrackListMerger.cc.

Referenced by produce().

reco::TrackExtraRefProd TrackListMerger::refTrkExtras
private

Definition at line 48 of file TrackListMerger.cc.

Referenced by produce().

TrackingRecHitRefProd TrackListMerger::refTrkHits
private

Definition at line 49 of file TrackListMerger.cc.

Referenced by produce().

reco::TrackRefProd TrackListMerger::refTrks
private

Definition at line 47 of file TrackListMerger.cc.

Referenced by produce().

float TrackListMerger::shareFrac_
private

Definition at line 85 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

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

Definition at line 79 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

bool TrackListMerger::trkQualMod_
private

Definition at line 98 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().

bool TrackListMerger::use_sharesInput_
private

Definition at line 97 of file TrackListMerger.cc.

Referenced by produce(), and TrackListMerger().