Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:33

0001 #ifndef Tracking_TempMeasurements_H
0002 #define Tracking_TempMeasurements_H
0003 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
0004 
0005 #include <vector>
0006 #include <algorithm>
0007 
0008 namespace tracking {
0009   // the return type from a MeasurementDet
0010   struct TempMeasurements {
0011     typedef TrackingRecHit::ConstRecHitContainer RecHitContainer;
0012     typedef TrackingRecHit::ConstRecHitPointer ConstRecHitPointer;
0013     typedef std::vector<float> Distances;
0014 
0015     void clear() {
0016       hits.clear();
0017       distances.clear();
0018     }
0019     bool empty() const { return hits.empty(); }
0020     std::size_t size() const { return hits.size(); }
0021 
0022     inline void sortIndex(int* index) const {
0023       float const* d = &distances.front();  // do not trust capture
0024       for (std::size_t i = 0; i != size(); ++i) {
0025         index[i] = i;
0026         std::push_heap(index, index + i + 1, [d](int j, int k) { return d[j] < d[k]; });
0027       }
0028       std::make_heap(index, index + size(), [d](int j, int k) { return d[j] < d[k]; });
0029     }
0030 
0031     void add(ConstRecHitPointer const& h, float d) {
0032       hits.push_back(h);
0033       distances.push_back(d);
0034     }
0035     void add(ConstRecHitPointer&& h, float d) {
0036       hits.push_back(std::move(h));
0037       distances.push_back(d);
0038     }
0039 
0040     RecHitContainer hits;
0041     Distances distances;
0042   };
0043 }  // namespace tracking
0044 
0045 #endif  // Tracking_TempMeas_H