CDetector.h
Go to the documentation of this file.
1 #ifndef _cdet_CDetector_h_
2 #define _cdet_CDetector_h_
3 
4 #include <iterator>
5 #include <cstddef>
6 #include <string>
7 #include <vector>
8 #include <map>
9 #include <set>
10 #include <cdet/Station.h>
11 #include <boost/iterator/transform_iterator.hpp>
12 #include <utl/Validated.h>
13 
14 
15 namespace det {
16  class Detector;
17 }
18 
19 namespace utl {
20  class NonExistentComponentException;
21 }
22 
23 namespace cevt {
24  class Station;
25 }
26 
27 namespace cdet {
28 
40  class CDetector {
41 
42  private:
43  typedef std::map<int, const cdet::Station*> InternalStationMap;
44  typedef InternalStationMap::const_iterator InternalStationIterator;
45 
46  public:
47 
49  public std::iterator<std::input_iterator_tag, const cdet::Station&, ptrdiff_t, const cdet::Station*, const cdet::Station& > {
50 
51  public:
52  // use this to loop over all stations
55  fEnd(it),
56  fIndex(CDetectorConstants::eAny),
57  fFilter(false)
58  { }
59 
60  // use this to loop only over stations that match the GridIndex
62  const InternalStationIterator& end,
63  const CDetectorConstants::GridIndex index) :
64  fInternalIterator(begin), fEnd(end), fIndex(index), fFilter(true)
65  { }
66 
69  {
71  if (fFilter)
72  // step further to next hit or end
74  if (fInternalIterator->second->IsInGrid(fIndex) || fInternalIterator->second->IsDense())
75  break;
76  return *this;
77  }
78 
79  bool operator==(const StationIterator& other) const
80  { return fInternalIterator == other.fInternalIterator; }
81 
82  bool operator!=(const StationIterator& other) const
83  { return !operator==(other); }
84 
85  const Station& operator*() const
86  { return *fInternalIterator->second; }
87 
88  const Station* operator->() const
89  { return fInternalIterator->second; }
90 
91  private:
95  bool fFilter;
96  };
97 
99 
102  { return StationIterator(fCommissionedStationList.begin()); }
103 
105 
108  { return StationIterator(fCommissionedStationList.end()); }
109 
111 
113  StationIterator
114  GridStationsBegin(const CDetectorConstants::GridIndex index)
115  const
116  {
119  index);
120  }
121 
123 
126 
128 
131  { return StationIterator(fFullStationMap.begin()); }
132 
134 
137  { return StationIterator(fFullStationMap.end()); }
138 
139 
141  bool IsStationCommissioned(const int stationId) const
142  { return fCommissionedStationList.find(stationId) != fCommissionedStationList.end(); }
143 
145  bool IsStationDense(const int stationId) const
146  { return std::find(fDenseStationSubList.begin(), fDenseStationSubList.end(),
147  stationId) != fDenseStationSubList.end(); }
148 
150  const Station& GetStation(const int stationId) const;
151 
153  const Station& GetStation(const cevt::Station& station) const;
154 
155  const Station& GetAllStation(const int stationId) const;
156 
158  const std::vector<int>& GetFullStationList() const;
159 
160  const std::vector<int>& GetDenseStationList() const
161  { return fDenseStationSubList; }
162 
164  typedef std::map<int, std::set<int> > StationGroups;
165  typedef StationGroups::const_iterator StationGroupsIterator;
166 
167  const StationGroups& GetStationGroups() const { return fStationGroups; }
168 
169  private:
170  CDetector() { }
171  ~CDetector();
172 
173  CDetector(const CDetector& cdetector);
174  CDetector& operator=(const CDetector& cdetector);
175 
176  void Update();
177  void UpdateDense();
178 
179  void FetchStationGroups() const;
180 
181  // Container for all stations commissioned at the
182  // current detector time.
184 
185  // List of all stations available in the external sources
186  // (external sources are, for example, the XML file with
187  // station list or perhaps some MySQL database)
191 
192  // list of all dense stations. Used to set the IsDense flag
193  mutable std::vector<int> fDenseStationSubList;
194 
195  friend class det::Detector;
196 
197  };
198 
199 }
200 
201 
202 #endif
203 
204 // Configure (x)emacs for this file ...
205 // Local Variables:
206 // mode: c++
207 // End:
StationIterator & operator++()
Definition: CDetector.h:68
std::map< int, std::set< int > > StationGroups
StationGroups: map key = groupId, value = stationId set.
Definition: CDetector.h:164
StationIterator(const InternalStationIterator &it)
Definition: CDetector.h:53
StationIterator GridStationsEnd() const
End of the collection of pointers to commissioned stations in a specific grid.
Definition: CDetector.h:125
InternalStationMap::const_iterator InternalStationIterator
Definition: CDetector.h:44
Detector description interface for CDetector-related data.
Definition: CDetector.h:40
const std::vector< int > & GetDenseStationList() const
Definition: CDetector.h:160
CDetectorConstants::GridIndex fIndex
Definition: CDetector.h:94
std::vector< int > fDenseStationSubList
Definition: CDetector.h:193
bool operator==(const StationIterator &other) const
Definition: CDetector.h:79
Wrapper class for initially unset data.
Definition: ResponseMap.h:17
StationIterator AllStationsEnd() const
End of the collection of pointers to all stations in the history of the array.
Definition: CDetector.h:136
Detector description interface for MARTA Station-related data.
InternalStationMap fCommissionedStationList
Definition: CDetector.h:183
StationIterator StationsEnd() const
End of the collection of pointers to commissioned stations.
Definition: CDetector.h:107
const Station & GetAllStation(const int stationId) const
Definition: CDetector.cc:288
InternalStationIterator fInternalIterator
Definition: CDetector.h:92
StationIterator StationsBegin() const
Beginning of the collection of pointers to commissioned stations.
Definition: CDetector.h:101
bool IsStationCommissioned(const int stationId) const
Check if station with id is commisioned.
Definition: CDetector.h:141
StationIterator AllStationsBegin() const
Beginning of the collection of pointers to all stations in the history of the array.
Definition: CDetector.h:130
Top of the hierarchy of the detector description interface.
Definition: Detector.h:81
const Station & operator*() const
Definition: CDetector.h:85
void FetchStationGroups() const
Definition: CDetector.cc:150
StationGroups fStationGroups
Definition: CDetector.h:190
bool IsStationDense(const int stationId) const
Check if station is Dense.
Definition: CDetector.h:145
CDetector & operator=(const CDetector &cdetector)
const Station & GetStation(const int stationId) const
Get station by Station Id.
Definition: CDetector.cc:192
utl::Validated< std::vector< int > > fFullStationList
Definition: CDetector.h:188
bool operator!=(const StationIterator &other) const
Definition: CDetector.h:82
const Station * operator->() const
Definition: CDetector.h:88
std::map< int, const cdet::Station * > InternalStationMap
Definition: CDetector.h:43
class to hold data at Station level
const StationGroups & GetStationGroups() const
Definition: CDetector.h:167
void UpdateDense()
Definition: CDetector.cc:32
const std::vector< int > & GetFullStationList() const
Get list of ID&#39;s for all stations available in the database or configuration file.
Definition: CDetector.cc:101
StationGroups::const_iterator StationGroupsIterator
Definition: CDetector.h:165
InternalStationIterator fEnd
Definition: CDetector.h:93
InternalStationMap fFullStationMap
Definition: CDetector.h:189
Definition: XbArray.h:7
StationIterator(const InternalStationIterator &begin, const InternalStationIterator &end, const CDetectorConstants::GridIndex index)
Definition: CDetector.h:61

, generated on Tue Sep 26 2023.