00001 #ifndef DetLayers_DetGroup_h 00002 #define DetLayers_DetGroup_h 00003 00004 #include "Geometry/CommonDetUnit/interface/GeomDet.h" 00005 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" 00006 #include <vector> 00007 #include <utility> 00008 00009 00010 class DetGroupElement { 00011 public: 00012 typedef std::pair<const GeomDet*,TrajectoryStateOnSurface> DetWithState; 00013 typedef GeomDet Det; 00014 00015 00016 DetGroupElement( const DetWithState& dws) : 00017 det_(dws.first), state_(dws.second) {} 00018 00019 DetGroupElement( const Det* d, const TrajectoryStateOnSurface& s) : 00020 det_(d), state_(s) {} 00021 00022 const Det* det() const {return det_;} 00023 const TrajectoryStateOnSurface& trajectoryState() const {return state_;} 00024 00025 private: 00026 00027 const Det* det_; 00028 TrajectoryStateOnSurface state_; 00029 00030 }; 00031 00032 00033 class DetGroup : public std::vector< DetGroupElement> { 00034 public: 00035 00036 typedef std::vector< DetGroupElement> Base; 00037 typedef DetGroupElement::DetWithState DetWithState; 00038 00039 DetGroup() {} 00040 DetGroup(int ind, int indSize) : index_(ind), indexSize_(indSize) {} 00041 00042 DetGroup(const std::vector<DetWithState>& vec) { 00043 reserve( vec.size()); 00044 for (std::vector<DetWithState>::const_iterator i=vec.begin(); i!=vec.end(); i++) { 00045 push_back(DetGroupElement(*i)); 00046 } 00047 } 00048 00049 int index() const {return index_;} 00050 00051 int indexSize() const {return indexSize_;} 00052 00053 void setIndexSize( int newSize) {indexSize_ = newSize;} 00054 00055 void incrementIndex( int incr) { 00056 // for (iterator i=begin(); i!=end(); i++) i->incrementIndex(incr); 00057 index_ += incr; 00058 indexSize_ += incr; 00059 } 00060 00061 private: 00062 00063 int index_; 00064 int indexSize_; 00065 00066 }; 00067 00068 #endif