CMS 3D CMS Logo

CachingSeedCleanerBySharedInput.cc
Go to the documentation of this file.
2 
4 
6 
8 
9 #include<algorithm>
10 
11 void CachingSeedCleanerBySharedInput::init(const std::vector<Trajectory> *vect) {
12  theVault.clear(); theCache.clear();
13 }
14 
16  //edm::LogInfo("CachingSeedCleanerBySharedInput") << " Calls: " << calls_ << ", Tracks: " << tracks_ <<", Comps: " << comps_ << " Vault: " << theVault.size() << ".";
17  //calls_ = comps_ = tracks_ = 0;
18  theVault.clear(); theCache.clear();
19 
20 }
21 
22 
23 
25  unsigned int idx = theVault.size();
26  theVault.resize(idx+1);
27  // a vector of shared pointers....
28  auto & hits = theVault.back();
29  (*trj).validRecHits(hits);
30 
31  for (auto const & h : hits) {
32  auto detid = h->geographicalId().rawId();
33 
34  //For seeds that are made only of pixel hits, it is pointless to store the
35  //information about hits on other sub-detector of the trajectory.
36  if( theOnlyPixelHits &&
37  h->geographicalId().subdetId() != PixelSubdetector::PixelBarrel &&
38  h->geographicalId().subdetId() != PixelSubdetector::PixelEndcap ) continue;
39  if (detid) theCache.insert(std::pair<uint32_t, unsigned int>(detid, idx));
40  }
41 }
42 
44  if (seed->nHits()==0){ return true; }
45 
46  auto range = seed->recHits();
47 
48  auto first = range.first;
49  auto last = range.second;
50  auto detid = first->geographicalId().rawId();
51 
52  //calls_++;
53  auto itrange = theCache.equal_range(detid);
54  for (auto it = itrange.first; it != itrange.second; ++it) {
55  assert(it->first == detid);
56  //tracks_++;
57 
58  // seeds are limited to the first "theNumHitsForSeedCleaner" hits in trajectory...
59  int ext = std::min(theNumHitsForSeedCleaner,int(theVault[it->second].size()));
60  auto ts = theVault[it->second].begin();
61  auto te = ts+ext;
62  auto t = ts;
63  auto curr = first;
64  for (; curr != last; ++curr) {
65  bool found = false;
66  for (;t != te; ++t) {
67  //comps_++;
68  if ( curr->sharesInput((**t).hit(),TrackingRecHit::all) ) { found = true; ++t; break; }
69  }
70  if (!found) break;
71  }
72  if (curr == last) return false;
73  }
74  return true;
75 }
void done() override
Tells the cleaner that the seeds are finished, and so it can clear any cache it has.
bool good(const TrajectorySeed *seed) override
Returns true if the seed is not overlapping with another trajectory.
void add(const Trajectory *traj) override
Informs the cleaner that a new trajectory has been made, in case the cleaner keeps a local collection...
std::unordered_multimap< unsigned int, unsigned int > theCache
std::vector< Trajectory::RecHitContainer > theVault
T min(T a, T b)
Definition: MathUtil.h:58
range recHits() const
unsigned int nHits() const
Definition: memstream.h:15
void init(const std::vector< Trajectory > *vect) override
Provides the cleaner a pointer to the vector where trajectories are stored, in case it does not want ...