File indexing completed on 2024-04-06 12:31:26
0001 #ifndef DetLayers_DetGroup_h
0002 #define DetLayers_DetGroup_h
0003
0004 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0005 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0006 #include <vector>
0007 #include <utility>
0008 #include <algorithm>
0009
0010 class DetGroupElement {
0011 public:
0012 typedef std::pair<const GeomDet*, TrajectoryStateOnSurface> DetWithState;
0013 typedef GeomDet Det;
0014
0015 DetGroupElement(const DetWithState& dws) : det_(dws.first), state_(dws.second) {}
0016
0017 DetGroupElement(const Det* d, const TrajectoryStateOnSurface& s) : det_(d), state_(s) {}
0018
0019 DetGroupElement(DetGroupElement const& rhs) : det_(rhs.det_), state_(rhs.state_) {}
0020 DetGroupElement(DetGroupElement&& rhs) noexcept : det_(rhs.det_), state_(std::move(rhs.state_)) {}
0021 DetGroupElement& operator=(DetGroupElement const& rhs) {
0022 det_ = rhs.det_;
0023 state_ = rhs.state_;
0024 return *this;
0025 }
0026 DetGroupElement& operator=(DetGroupElement&& rhs) noexcept {
0027 det_ = rhs.det_;
0028 state_ = std::move(rhs.state_);
0029 return *this;
0030 }
0031 DetGroupElement(const Det* d, TrajectoryStateOnSurface&& s) noexcept : det_(d), state_(std::move(s)) {}
0032
0033 const Det* det() const { return det_; }
0034 const TrajectoryStateOnSurface& trajectoryState() const { return state_; }
0035
0036 private:
0037 const Det* det_;
0038 TrajectoryStateOnSurface state_;
0039 };
0040
0041 class DetGroup : public std::vector<DetGroupElement> {
0042 public:
0043 typedef std::vector<DetGroupElement> Base;
0044 typedef DetGroupElement::DetWithState DetWithState;
0045
0046 DetGroup() : index_(0), indexSize_(0) {}
0047 DetGroup(DetGroup const& rhs) : Base(rhs), index_(rhs.index_), indexSize_(rhs.indexSize_) {}
0048 DetGroup(DetGroup&& rhs) noexcept : Base(std::forward<Base>(rhs)), index_(rhs.index_), indexSize_(rhs.indexSize_) {}
0049 DetGroup& operator=(DetGroup const& rhs) {
0050 Base::operator=(rhs);
0051 index_ = rhs.index_;
0052 indexSize_ = rhs.indexSize_;
0053 return *this;
0054 }
0055 DetGroup& operator=(DetGroup&& rhs) noexcept {
0056 Base::operator=(std::forward<Base>(rhs));
0057 index_ = rhs.index_;
0058 indexSize_ = rhs.indexSize_;
0059 return *this;
0060 }
0061
0062 DetGroup(int ind, int indSize) : index_(ind), indexSize_(indSize) {}
0063
0064 DetGroup(const std::vector<DetWithState>& vec) {
0065 reserve(vec.size());
0066 for (std::vector<DetWithState>::const_iterator i = vec.begin(); i != vec.end(); i++) {
0067 push_back(DetGroupElement(*i));
0068 }
0069 }
0070
0071 int index() const { return index_; }
0072
0073 int indexSize() const { return indexSize_; }
0074
0075 void setIndexSize(int newSize) { indexSize_ = newSize; }
0076
0077 void incrementIndex(int incr) {
0078
0079 index_ += incr;
0080 indexSize_ += incr;
0081 }
0082
0083 private:
0084 int index_;
0085 int indexSize_;
0086 };
0087
0088 #endif