File indexing completed on 2023-03-17 10:51:35
0001 #ifndef DATAFORMATS_TRAJECTORYSEED_TRAJECTORYSEED_h
0002 #define DATAFORMATS_TRAJECTORYSEED_TRAJECTORYSEED_h
0003
0004 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
0005 #include "DataFormats/Common/interface/OwnVector.h"
0006 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
0007 #include "DataFormats/TrajectoryState/interface/PTrajectoryStateOnDet.h"
0008 #include "FWCore/Utilities/interface/Range.h"
0009 #include <utility>
0010 #include <algorithm>
0011
0012
0013
0014
0015
0016
0017
0018 class TrajectorySeed {
0019 public:
0020 typedef edm::OwnVector<TrackingRecHit> RecHitContainer;
0021 typedef edm::Range<RecHitContainer::const_iterator> RecHitRange;
0022
0023 TrajectorySeed() {}
0024 virtual ~TrajectorySeed() {}
0025
0026 TrajectorySeed(PTrajectoryStateOnDet const& ptsos, RecHitContainer const& rh, PropagationDirection dir)
0027 : hits_(rh), tsos_(ptsos), dir_(dir) {}
0028
0029 TrajectorySeed(PTrajectoryStateOnDet const& ptsos, RecHitContainer&& rh, PropagationDirection dir) noexcept
0030 : hits_(std::move(rh)), tsos_(ptsos), dir_(dir) {}
0031
0032 void swap(PTrajectoryStateOnDet& ptsos, RecHitContainer& rh, PropagationDirection& dir) noexcept {
0033 hits_.swap(rh);
0034 std::swap(tsos_, ptsos);
0035 std::swap(dir_, dir);
0036 }
0037
0038 void swap(TrajectorySeed& rh) noexcept {
0039 hits_.swap(rh.hits_);
0040 std::swap(tsos_, rh.tsos_);
0041 std::swap(dir_, rh.dir_);
0042 }
0043
0044 TrajectorySeed(TrajectorySeed const& o) = default;
0045
0046 TrajectorySeed& operator=(TrajectorySeed const& o) = default;
0047
0048 TrajectorySeed(TrajectorySeed&& o) noexcept = default;
0049
0050 TrajectorySeed& operator=(TrajectorySeed&& o) noexcept = default;
0051
0052 RecHitRange recHits() const { return {hits_.begin(), hits_.end()}; }
0053 unsigned int nHits() const { return hits_.size(); }
0054 PropagationDirection direction() const { return dir_; }
0055 PTrajectoryStateOnDet const& startingState() const { return tsos_; }
0056
0057 virtual TrajectorySeed* clone() const { return new TrajectorySeed(*this); }
0058
0059 private:
0060 RecHitContainer hits_;
0061 PTrajectoryStateOnDet tsos_;
0062 PropagationDirection dir_ = invalidDirection;
0063 };
0064
0065 inline void swap(TrajectorySeed& rh, TrajectorySeed& lh) noexcept { rh.swap(lh); }
0066
0067 typedef TrajectorySeed BasicTrajectorySeed;
0068
0069 #endif