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
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();
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 }
0044
0045 #endif