File indexing completed on 2024-04-06 12:28:55
0001 #ifndef TkSeedingLayers_SeedingHitSet_H
0002 #define TkSeedingLayers_SeedingHitSet_H
0003
0004 #include "DataFormats/TrackerRecHit2D/interface/BaseTrackerRecHit.h"
0005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0006
0007 #include <vector>
0008 #include <algorithm>
0009
0010 class SeedingHitSet {
0011 public:
0012 using RecHit = BaseTrackerRecHit;
0013 using RecHitPointer = BaseTrackerRecHit *;
0014 using ConstRecHitPointer = BaseTrackerRecHit const *;
0015
0016 static ConstRecHitPointer nullPtr() { return nullptr; }
0017
0018 SeedingHitSet() = default;
0019
0020 SeedingHitSet(ConstRecHitPointer one, ConstRecHitPointer two) : SeedingHitSet({one, two}) {}
0021
0022 SeedingHitSet(ConstRecHitPointer one, ConstRecHitPointer two, ConstRecHitPointer three)
0023 : SeedingHitSet({one, two, three}) {}
0024
0025 SeedingHitSet(ConstRecHitPointer one, ConstRecHitPointer two, ConstRecHitPointer three, ConstRecHitPointer four)
0026 : SeedingHitSet({one, two, three, four}) {}
0027
0028 SeedingHitSet(const std::vector<ConstRecHitPointer> &hits) {
0029 if (hits.size() >= 2) {
0030 auto end = std::find(hits.begin(), hits.end(), nullPtr());
0031 auto size = std::distance(hits.begin(), end);
0032 if (size >= 2) {
0033 theRecHits.reserve(size);
0034 std::copy(hits.begin(), end, std::back_inserter(theRecHits));
0035 }
0036 }
0037 }
0038
0039 SeedingHitSet(const std::initializer_list<ConstRecHitPointer> &hits) {
0040 if (hits.size() >= 2) {
0041 auto end = std::find(hits.begin(), hits.end(), nullPtr());
0042 auto size = std::distance(hits.begin(), end);
0043 if (size >= 2) {
0044 theRecHits.reserve(size);
0045 std::copy(hits.begin(), end, std::back_inserter(theRecHits));
0046 }
0047 }
0048 }
0049
0050 ConstRecHitPointer const *data() const { return theRecHits.data(); }
0051
0052 unsigned int size() const { return theRecHits.size(); }
0053
0054 ConstRecHitPointer get(unsigned int i) const { return theRecHits[i]; }
0055 ConstRecHitPointer operator[](unsigned int i) const { return theRecHits[i]; }
0056
0057 protected:
0058 std::vector<ConstRecHitPointer> theRecHits;
0059 };
0060
0061 #endif