CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DuplicateListMerger.cc
Go to the documentation of this file.
1 
27 #include <vector>
28 #include <algorithm>
29 #include <string>
30 #include <iostream>
31 #include <map>
32 #include<memory>
33 
34 #include "TMVA/Reader.h"
35 
36 #include "trackAlgoPriorityOrder.h"
37 
38 using namespace reco;
39 
41  public:
43  explicit DuplicateListMerger(const edm::ParameterSet& iPara);
45  virtual ~DuplicateListMerger();
46 
48  using DuplicateRecord = std::pair<TrackCandidate,std::pair<reco::TrackRef,reco::TrackRef> >;
50 
51  using MVACollection = std::vector<float>;
52 
53  protected:
55  void produce( edm::Event &, const edm::EventSetup &) override;
56 
57  private:
58  int matchCandidateToTrack(TrackCandidate,edm::Handle<reco::TrackCollection>);
59 
61  return reinterpret_cast<const BaseTrackerRecHit *>(hit)->firstClusterRef().id();
62  }
63 
65  struct ThreeTokens {
72  tag(tag_), tk(tk_), traj(traj_), tass(tass_) {}
73  };
75  return ThreeTokens(tag, consumes<reco::TrackCollection>(tag), consumes<std::vector<Trajectory> >(tag), consumes<TrajTrackAssociationCollection >(tag));
76  }
77  ThreeTokens mergedTrackSource_, originalTrackSource_;
79 
84 
86  unsigned int diffHitsCut_;
90  };
91 
92 
97 
100 
101 
103 {
104  diffHitsCut_ = 9999;
105  minTrkProbCut_ = 0.0;
106  if(iPara.exists("diffHitsCut"))diffHitsCut_ = iPara.getParameter<int>("diffHitsCut");
107  if(iPara.exists("minTrkProbCut"))minTrkProbCut_ = iPara.getParameter<double>("minTrkProbCut");
108  if(iPara.exists("mergedSource")) mergedTrackSource_ = threeTokens(iPara.getParameter<edm::InputTag>("mergedSource"));
109  if(iPara.exists("originalSource"))originalTrackSource_ = threeTokens(iPara.getParameter<edm::InputTag>("originalSource"));
110  if(iPara.exists("candidateSource"))candidateSource_ = consumes<edm::View<DuplicateRecord> >(iPara.getParameter<edm::InputTag>("candidateSource"));
111 
112 
113  if(iPara.exists("mergedMVAVals")){
114  mergedMVAVals_ = iPara.getParameter<edm::InputTag>("mergedMVAVals");
115  }else{
116  mergedMVAVals_ = edm::InputTag(mergedTrackSource_.tag.label(),"MVAValues");
117  }
118  mergedMVAValsToken_ = consumes<MVACollection>(mergedMVAVals_);
119  if(iPara.exists("originalMVAVals")){
120  originalMVAVals_ = iPara.getParameter<edm::InputTag>("originalMVAVals");
121  }else{
122  originalMVAVals_ = edm::InputTag(originalTrackSource_.tag.label(),"MVAValues");
123  }
124  originalMVAValsToken_ = consumes<MVACollection>(originalMVAVals_);
125 
126  copyExtras_ = iPara.getUntrackedParameter<bool>("copyExtras",true);
127  qualityToSet_ = reco::TrackBase::undefQuality;
128  if (iPara.exists("newQuality")) {
129  std::string qualityStr = iPara.getParameter<std::string>("newQuality");
130  if (qualityStr != "") {
131  qualityToSet_ = reco::TrackBase::qualityByName(qualityStr);
132  }
133  }
134 
135  produces<std::vector<reco::Track> >();
136  produces< std::vector<Trajectory> >();
137  produces< TrajTrackAssociationCollection >();
138 
139  produces<MVACollection>("MVAValues");
140 
141  makeReKeyedSeeds_ = iPara.getUntrackedParameter<bool>("makeReKeyedSeeds",false);
142  if (makeReKeyedSeeds_){
143  copyExtras_=true;
144  produces<TrajectorySeedCollection>();
145  }
146  if(copyExtras_){
147  produces<reco::TrackExtraCollection>();
148  produces<TrackingRecHitCollection>();
149  }
150 
151 }
152 
154 {
155 
156  /* no op */
157 
158 }
159 
161 {
163  iEvent.getByToken(originalTrackSource_.tk,originalHandle);
165  iEvent.getByToken(mergedTrackSource_.tk,mergedHandle);
166 
167  const reco::TrackCollection& mergedTracks(*mergedHandle);
168  reco::TrackRefProd originalTrackRefs(originalHandle);
169  reco::TrackRefProd mergedTrackRefs(mergedHandle);
170 
171  edm::Handle< std::vector<Trajectory> > mergedTrajHandle;
172  iEvent.getByToken(mergedTrackSource_.traj,mergedTrajHandle);
173  edm::Handle< TrajTrackAssociationCollection > mergedTrajTrackHandle;
174  iEvent.getByToken(mergedTrackSource_.tass,mergedTrajTrackHandle);
175 
176  edm::Handle< std::vector<Trajectory> > originalTrajHandle;
177  iEvent.getByToken(originalTrackSource_.traj,originalTrajHandle);
178  edm::Handle< TrajTrackAssociationCollection > originalTrajTrackHandle;
179  iEvent.getByToken(originalTrackSource_.tass,originalTrajTrackHandle);
180 
181  edm::Handle<edm::View<DuplicateRecord> > candidateHandle;
182  iEvent.getByToken(candidateSource_,candidateHandle);
183 
184  std::auto_ptr<std::vector<reco::Track> > out_generalTracks(new std::vector<reco::Track>());
185  out_generalTracks->reserve(originalHandle->size());
187  std::auto_ptr< std::vector<Trajectory> > outputTrajs = std::auto_ptr< std::vector<Trajectory> >(new std::vector<Trajectory>());
188  outputTrajs->reserve(originalTrajHandle->size()+mergedTrajHandle->size());
190  //std::auto_ptr< TrajectorySeedCollection > outputSeeds
191 
192  std::auto_ptr<reco::TrackExtraCollection> outputTrkExtras;
193  reco::TrackExtraRefProd refTrkExtras;
194  std::auto_ptr<TrackingRecHitCollection> outputTrkHits;
195  TrackingRecHitRefProd refTrkHits;
196  std::auto_ptr<TrajectorySeedCollection> outputSeeds;
198 
199  edm::Handle<MVACollection> originalMVAStore;
200  edm::Handle<MVACollection> mergedMVAStore;
201 
202  iEvent.getByToken(originalMVAValsToken_,originalMVAStore);
203  iEvent.getByToken(mergedMVAValsToken_,mergedMVAStore);
204 
205  MVACollection mvaVec;
206 
207 
208  if(copyExtras_){
209  outputTrkExtras = std::auto_ptr<reco::TrackExtraCollection>(new reco::TrackExtraCollection);
210  outputTrkExtras->reserve(originalHandle->size());
211  refTrkExtras = iEvent.getRefBeforePut<reco::TrackExtraCollection>();
212  outputTrkHits = std::auto_ptr<TrackingRecHitCollection>(new TrackingRecHitCollection);
213  outputTrkHits->reserve(originalHandle->size()*25);
214  refTrkHits = iEvent.getRefBeforePut<TrackingRecHitCollection>();
215  if (makeReKeyedSeeds_){
216  outputSeeds = std::auto_ptr<TrajectorySeedCollection>(new TrajectorySeedCollection);
217  outputSeeds->reserve(originalHandle->size());
218  refTrajSeeds = iEvent.getRefBeforePut<TrajectorySeedCollection>();
219  }
220  }
221 
222  //match new tracks to their candidates
223  std::vector<std::pair<int,const DuplicateRecord*> > matches;
224  for(int i = 0; i < (int)candidateHandle->size(); i++){
225  const DuplicateRecord& duplicateRecord = candidateHandle->at(i);
226  int matchTrack = matchCandidateToTrack(duplicateRecord.first,mergedHandle);
227  if(matchTrack < 0)continue;
228  const reco::Track& matchedTrack(mergedTracks[matchTrack]);
229  if( ChiSquaredProbability(matchedTrack.chi2(),matchedTrack.ndof()) < minTrkProbCut_)continue;
230  unsigned int dHits = (duplicateRecord.first.recHits().second - duplicateRecord.first.recHits().first) - matchedTrack.recHitsSize();
231  if(dHits > diffHitsCut_)continue;
232  matches.push_back(std::pair<int,const DuplicateRecord*>(matchTrack,&duplicateRecord));
233  }
234 
235  //check for candidates/tracks that share merged tracks, select minimum chi2, remove the rest
236  std::vector<std::pair<int,const DuplicateRecord*> >::iterator matchIter0 = matches.begin();
237  std::vector<std::pair<int,const DuplicateRecord*> >::iterator matchIter1;
238  while(matchIter0 != matches.end()){
239  double nchi2 = mergedTracks[matchIter0->first].normalizedChi2();
240  bool advance = true;
241  for(matchIter1 = matchIter0+1; matchIter1 != matches.end(); matchIter1++){
242  const reco::Track& match0first = *(matchIter0->second->second.first.get());
243  const reco::Track& match0second = *(matchIter0->second->second.second.get());
244  const reco::Track& match1first = *(matchIter1->second->second.first.get());
245  const reco::Track& match1second = *(matchIter1->second->second.second.get());
246  if(match1first.seedRef() == match0first.seedRef() ||
247  match1first.seedRef() == match0second.seedRef() ||
248  match1second.seedRef() == match0first.seedRef() ||
249  match1second.seedRef() == match0second.seedRef()){
250  double nchi2_1 = mergedTracks[matchIter1->first].normalizedChi2();
251  advance = false;
252  if(nchi2_1 < nchi2){
253  matches.erase(matchIter0);
254  }else{
255  matches.erase(matchIter1);
256  }
257  break;
258  }
259  }
260  if(advance)matchIter0++;
261  }
262 
263  //add the good merged tracks to the output list, remove input tracks
264  std::vector<reco::Track> inputTracks;
265 
266  refTrajs = iEvent.getRefBeforePut< std::vector<Trajectory> >();
267 
268  std::auto_ptr< TrajTrackAssociationCollection > outputTTAss = std::auto_ptr< TrajTrackAssociationCollection >(new TrajTrackAssociationCollection(refTrajs, refTrks));
269 
270  for(matchIter0 = matches.begin(); matchIter0 != matches.end(); matchIter0++){
271  reco::TrackRef inTrkRef1 = matchIter0->second->second.first;
272  reco::TrackRef inTrkRef2 = matchIter0->second->second.second;
273  const reco::Track& inTrk1 = *(inTrkRef1.get());
274  const reco::Track& inTrk2 = *(inTrkRef2.get());
275  reco::TrackBase::TrackAlgorithm newTrkAlgo = std::min(inTrk1.algo(),inTrk2.algo(),
278  });
279  int combinedQualityMask = (inTrk1.qualityMask() | inTrk2.qualityMask());
280  inputTracks.push_back(inTrk1);
281  inputTracks.push_back(inTrk2);
282  out_generalTracks->push_back(mergedTracks[matchIter0->first]);
283  reco::TrackRef curTrackRef = reco::TrackRef(refTrks, out_generalTracks->size() - 1);
284  float mergedMVA = (*mergedMVAStore)[matchIter0->first];
285  mvaVec.push_back(mergedMVA);
286  out_generalTracks->back().setAlgorithm(newTrkAlgo);
287  out_generalTracks->back().setQualityMask(combinedQualityMask);
288  out_generalTracks->back().setQuality(qualityToSet_);
289  edm::RefToBase<TrajectorySeed> origSeedRef;
290  if(copyExtras_){
291  const reco::Track& track = mergedTracks[matchIter0->first];
292  origSeedRef = track.seedRef();
293  //creating a seed with rekeyed clusters if required
294  if (makeReKeyedSeeds_){
295  bool doRekeyOnThisSeed=false;
296 
297  edm::InputTag clusterRemovalInfos("");
298  //grab on of the hits of the seed
299  if (origSeedRef->nHits()!=0){
300  TrajectorySeed::const_iterator firstHit=origSeedRef->recHits().first;
301  const TrackingRecHit *hit = &*firstHit;
302  if (firstHit->isValid()){
303  edm::ProductID pID=clusterProductB(hit);
304  // the cluster collection either produced a removalInfo or mot
305  //get the clusterremoval info from the provenance: will rekey if this is found
307  edm::Provenance prov=iEvent.getProvenance(pID);
308  clusterRemovalInfos=edm::InputTag(prov.moduleLabel(),
309  prov.productInstanceName(),
310  prov.processName());
311  doRekeyOnThisSeed=iEvent.getByLabel(clusterRemovalInfos,CRIh);
312  }//valid hit
313  }//nhit!=0
314 
315  if (doRekeyOnThisSeed && !(clusterRemovalInfos==edm::InputTag(""))) {
316  ClusterRemovalRefSetter refSetter(iEvent,clusterRemovalInfos);
317  TrajectorySeed::recHitContainer newRecHitContainer;
318  newRecHitContainer.reserve(origSeedRef->nHits());
319  TrajectorySeed::const_iterator iH=origSeedRef->recHits().first;
320  TrajectorySeed::const_iterator iH_end=origSeedRef->recHits().second;
321  for (;iH!=iH_end;++iH){
322  newRecHitContainer.push_back(*iH);
323  refSetter.reKey(&newRecHitContainer.back());
324  }
325  outputSeeds->push_back( TrajectorySeed( origSeedRef->startingState(),
326  newRecHitContainer,
327  origSeedRef->direction()));
328  }
329  //doRekeyOnThisSeed=true
330  else{
331  //just copy the one we had before
332  outputSeeds->push_back( TrajectorySeed(*origSeedRef));
333  }
334  edm::Ref<TrajectorySeedCollection> pureRef(refTrajSeeds, outputSeeds->size()-1);
335  origSeedRef=edm::RefToBase<TrajectorySeed>( pureRef);
336  }//creating a new seed and rekeying it rechit clusters.
337  // Fill TrackExtra collection
338  outputTrkExtras->push_back( reco::TrackExtra(
339  track.outerPosition(), track.outerMomentum(), track.outerOk(),
340  track.innerPosition(), track.innerMomentum(), track.innerOk(),
341  track.outerStateCovariance(), track.outerDetId(),
342  track.innerStateCovariance(), track.innerDetId(),
343  track.seedDirection(), origSeedRef ) );
344  out_generalTracks->back().setExtra( reco::TrackExtraRef( refTrkExtras, outputTrkExtras->size() - 1) );
345  reco::TrackExtra & tx = outputTrkExtras->back();
346  tx.setResiduals(track.residuals());
347  // fill TrackingRecHits
348  unsigned nh1=track.recHitsSize();
349  auto const firstTrackIndex = outputTrkHits->size();
350  for ( unsigned ih=0; ih<nh1; ++ih ) {
351  //const TrackingRecHit*hit=&((*(track->recHit(ih))));
352  outputTrkHits->push_back( track.recHit(ih)->clone() );
353  }
354  tx.setHits( refTrkHits, firstTrackIndex, outputTrkHits->size() - firstTrackIndex );
355  }
356  edm::Ref< std::vector<Trajectory> > trajRef(mergedTrajHandle, (*matchIter0).first);
357  TrajTrackAssociationCollection::const_iterator match = mergedTrajTrackHandle->find(trajRef);
358  if (match != mergedTrajTrackHandle->end()) {
359  if(curTrackRef.isNonnull()){
360  outputTrajs->push_back( *trajRef );
361  if (copyExtras_ && makeReKeyedSeeds_)
362  outputTrajs->back().setSeedRef( origSeedRef );
363  outputTTAss->insert(edm::Ref< std::vector<Trajectory> >(refTrajs, outputTrajs->size() - 1),curTrackRef );
364  }
365  }
366  }
367 
368  for(int i = 0; i < (int)originalHandle->size(); i++){
369  bool good = true;
370  const reco::Track& origTrack = originalHandle->at(i);
371  for(int j = 0; j < (int)inputTracks.size() && good; j++){
372  const reco::Track& inputTrack = inputTracks[j];
373  if(origTrack.seedRef() != inputTrack.seedRef())continue;
374  if(origTrack.charge() != inputTrack.charge())continue;
375  if(origTrack.momentum() != inputTrack.momentum())continue;
376  if(origTrack.referencePoint() != inputTrack.referencePoint())continue;
377  good = false;
378  }
379 
380  if(good){
381  out_generalTracks->push_back(origTrack);
382  reco::TrackRef curTrackRef = reco::TrackRef(refTrks, out_generalTracks->size() - 1);
383  edm::RefToBase<TrajectorySeed> origSeedRef;
384  reco::TrackRef origTrackRef = reco::TrackRef(originalHandle,i);
385  mvaVec.push_back((*originalMVAStore)[i]);
386  if(copyExtras_){
387  const reco::Track& track = origTrack;
388  origSeedRef = track.seedRef();
389  //creating a seed with rekeyed clusters if required
390  if (makeReKeyedSeeds_){
391  bool doRekeyOnThisSeed=false;
392 
393  edm::InputTag clusterRemovalInfos("");
394  //grab on of the hits of the seed
395  if (origSeedRef->nHits()!=0){
396  TrajectorySeed::const_iterator firstHit=origSeedRef->recHits().first;
397  const TrackingRecHit *hit = &*firstHit;
398  if (firstHit->isValid()){
399  edm::ProductID pID=clusterProductB(hit);
400  // the cluster collection either produced a removalInfo or mot
401  //get the clusterremoval info from the provenance: will rekey if this is found
403  edm::Provenance prov=iEvent.getProvenance(pID);
404  clusterRemovalInfos=edm::InputTag(prov.moduleLabel(),
405  prov.productInstanceName(),
406  prov.processName());
407  doRekeyOnThisSeed=iEvent.getByLabel(clusterRemovalInfos,CRIh);
408  }//valid hit
409  }//nhit!=0
410 
411  if (doRekeyOnThisSeed && !(clusterRemovalInfos==edm::InputTag(""))) {
412  ClusterRemovalRefSetter refSetter(iEvent,clusterRemovalInfos);
413  TrajectorySeed::recHitContainer newRecHitContainer;
414  newRecHitContainer.reserve(origSeedRef->nHits());
415  TrajectorySeed::const_iterator iH=origSeedRef->recHits().first;
416  TrajectorySeed::const_iterator iH_end=origSeedRef->recHits().second;
417  for (;iH!=iH_end;++iH){
418  newRecHitContainer.push_back(*iH);
419  refSetter.reKey(&newRecHitContainer.back());
420  }
421  outputSeeds->push_back( TrajectorySeed( origSeedRef->startingState(),
422  newRecHitContainer,
423  origSeedRef->direction()));
424  }
425  //doRekeyOnThisSeed=true
426  else{
427  //just copy the one we had before
428  outputSeeds->push_back( TrajectorySeed(*origSeedRef));
429  }
430  edm::Ref<TrajectorySeedCollection> pureRef(refTrajSeeds, outputSeeds->size()-1);
431  origSeedRef=edm::RefToBase<TrajectorySeed>( pureRef);
432  }//creating a new seed and rekeying it rechit clusters.
433 
434  // Fill TrackExtra collection
435  outputTrkExtras->push_back( reco::TrackExtra(
436  track.outerPosition(), track.outerMomentum(), track.outerOk(),
437  track.innerPosition(), track.innerMomentum(), track.innerOk(),
438  track.outerStateCovariance(), track.outerDetId(),
439  track.innerStateCovariance(), track.innerDetId(),
440  track.seedDirection(), origSeedRef ) );
441  out_generalTracks->back().setExtra( reco::TrackExtraRef( refTrkExtras, outputTrkExtras->size() - 1) );
442  reco::TrackExtra & tx = outputTrkExtras->back();
443  tx.setResiduals(track.residuals());
444 
445  // fill TrackingRecHits
446  unsigned nh1=track.recHitsSize();
447  tx.setHits(refTrkHits,outputTrkHits->size(),nh1);
448  for (auto hh = track.recHitsBegin(), eh=track.recHitsEnd(); hh!=eh; ++hh ) {
449  outputTrkHits->push_back( (*hh)->clone() );
450  }
451 
452  }
453 
454  edm::Ref< std::vector<Trajectory> > trajRef(originalTrajHandle, i);
455  TrajTrackAssociationCollection::const_iterator match = originalTrajTrackHandle->find(trajRef);
456  if (match != originalTrajTrackHandle->end()) {
457  if(curTrackRef.isNonnull()){
458  outputTrajs->push_back( *trajRef );
459  if (copyExtras_ && makeReKeyedSeeds_)
460  outputTrajs->back().setSeedRef( origSeedRef );
461  outputTTAss->insert(edm::Ref< std::vector<Trajectory> >(refTrajs, outputTrajs->size() - 1),curTrackRef );
462  }
463  }
464  }
465  }
466 
467  edm::ProductID nPID = refTrks.id();
468  edm::TestHandle<TrackCollection> out_gtHandle(out_generalTracks.get(),nPID);
469 
470  iEvent.put(std::move(std::make_unique<MVACollection>(std::move(mvaVec))),"MVAValues");
471 
472  out_generalTracks->shrink_to_fit(); iEvent.put(out_generalTracks);
473  if (copyExtras_) {
474  outputTrkExtras->shrink_to_fit(); iEvent.put(outputTrkExtras);
475  outputTrkHits->shrink_to_fit(); iEvent.put(outputTrkHits);
476  if (makeReKeyedSeeds_) {
477  outputSeeds->shrink_to_fit(); iEvent.put(outputSeeds);
478  }
479  }
480  outputTrajs->shrink_to_fit(); iEvent.put(outputTrajs);
481  iEvent.put(outputTTAss);
482 }
483 
484 //------------------------------------------------------------
485 //------------------------------------------------------------
486 //------------------------------------------------------------
487 //------------------------------------------------------------
489  int track = -1;
490  std::vector<int> rawIds;
491  RecHitContainer::const_iterator candBegin = candidate.recHits().first;
492  RecHitContainer::const_iterator candEnd = candidate.recHits().second;
493  for(; candBegin != candEnd; candBegin++){
494  rawIds.push_back((*(candBegin)).rawId());
495  }
496 
497 
498  for(int i = 0; i < (int)tracks->size() && track < 0;i++){
499  if( (*tracks)[i].seedRef() != candidate.seedRef())continue;
500  int match = 0;
501  trackingRecHit_iterator trackRecBegin = (*tracks)[i].recHitsBegin();
502  trackingRecHit_iterator trackRecEnd = (*tracks)[i].recHitsEnd();
503  for(;trackRecBegin != trackRecEnd; trackRecBegin++){
504  if(std::find(rawIds.begin(),rawIds.end(),(*(trackRecBegin))->rawId()) != rawIds.end()) match++;
505  }
506  if(match != (int)( (*tracks)[i].recHitsSize() ) ) continue;
507  track = i;
508  }
509 
510  return track;
511 }
512 
515 
PropagationDirection direction() const
T getParameter(std::string const &) const
#define dso_hidden
T getUntrackedParameter(std::string const &, T const &) const
const Point & referencePoint() const
Reference point on the track.
Definition: TrackBase.h:668
int i
Definition: DBlmapReader.cc:9
edm::EDGetTokenT< MVACollection > mergedMVAValsToken_
reference back()
Definition: OwnVector.h:327
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:252
edm::EDGetTokenT< TrajTrackAssociationCollection > tass
range recHits() const
std::vector< float > MVACollection
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
Definition: TrackBase.h:548
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
TrackQuality
track quality
Definition: TrackBase.h:149
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
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)
void reKey(TrackingRecHit *hit) const
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
edm::EDGetTokenT< std::vector< Trajectory > > traj
bool exists(std::string const &parameterName) const
checks if a parameter exists
bool innerOk() const
return true if the innermost hit is valid
Definition: Track.h:50
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:662
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
TrackAlgorithm
track algorithm
Definition: TrackBase.h:99
const math::XYZPoint & innerPosition() const
position of the innermost hit
Definition: Track.h:55
TrackAlgorithm algo() const
Definition: TrackBase.h:484
void produce(edm::Event &, const edm::EventSetup &) override
produce one event
void push_back(D *&d)
Definition: OwnVector.h:280
edm::EDGetTokenT< MVACollection > originalMVAValsToken_
int iEvent
Definition: GenABIO.cc:230
virtual ~DuplicateListMerger()
destructor
edm::EDGetTokenT< edm::View< DuplicateRecord > > candidateSource_
ThreeTokens originalTrackSource_
std::vector< TrajectorySeed > TrajectorySeedCollection
double chi2() const
chi-squared of the fit
Definition: TrackBase.h:536
edm::InputTag originalMVAVals_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:120
recHitContainer::const_iterator const_iterator
double ndof() const
number of degrees of freedom of the fit
Definition: TrackBase.h:542
DuplicateListMerger(const edm::ParameterSet &iPara)
constructor
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
Definition: Track.h:75
edm::InputTag mergedMVAVals_
int qualityMask() const
Definition: TrackBase.h:849
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
Definition: Track.h:94
int j
Definition: DBlmapReader.cc:9
float ChiSquaredProbability(double chiSquared, double nrDOF)
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:244
T min(T a, T b)
Definition: MathUtil.h:58
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
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:420
RefProd< PROD > getRefBeforePut()
Definition: Event.h:140
ThreeTokens threeTokens(const edm::InputTag &tag)
edm::EDGetTokenT< reco::TrackCollection > tk
std::pair< TrackCandidate, std::pair< reco::TrackRef, reco::TrackRef > > DuplicateRecord
alias for container of candidate and input tracks
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:11
edm::OwnVector< TrackingRecHit > TrackingRecHitCollection
collection of TrackingRecHits
edm::RefToBase< TrajectorySeed > seedRef() const
Definition: Track.h:213
int matchCandidateToTrack(TrackCandidate, edm::Handle< reco::TrackCollection >)
PTrajectoryStateOnDet const & startingState() const
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:123
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
tuple tracks
Definition: testEve_cfg.py:39
reco::TrackBase::TrackQuality qualityToSet_
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
Definition: Track.h:80
std::array< unsigned int, reco::TrackBase::algoSize > trackAlgoPriorityOrder
range recHits() const
double b
Definition: hdecay.h:120
std::string const & moduleLabel() const
Definition: Provenance.h:60
edm::ProductID clusterProductB(const TrackingRecHit *hit)
ThreeTokens(const edm::InputTag &tag_, edm::EDGetTokenT< reco::TrackCollection > &&tk_, edm::EDGetTokenT< std::vector< Trajectory > > &&traj_, edm::EDGetTokenT< TrajTrackAssociationCollection > &&tass_)
unsigned int nHits() const
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
Definition: Track.h:60
double a
Definition: hdecay.h:121
TrackingRecHitRef recHit(size_t i) const
Get i-th hit on the track.
Definition: Track.h:114
ProductID id() const
Accessor for product ID.
Definition: RefProd.h:137
const TrackResiduals & residuals() const
Definition: Track.h:220
PropagationDirection seedDirection() const
direction of how the hits were sorted in the original seed
Definition: Track.h:204
int charge() const
track electric charge
Definition: TrackBase.h:554
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
std::string const & productInstanceName() const
Definition: Provenance.h:62
Provenance getProvenance(BranchID const &theID) const
Definition: Event.cc:85
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
Definition: Track.h:99
edm::RefToBase< TrajectorySeed > seedRef() const
void reserve(size_t)
Definition: OwnVector.h:274
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
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:179