CDetector/Station.h
Go to the documentation of this file.
1 #ifndef _cdet_Station_h_
2 #define _cdet_Station_h_
3 
4 #include <vector>
5 #include <list>
6 #include <map>
7 #include <string>
8 #include <bitset>
9 
10 #include <boost/iterator/indirect_iterator.hpp>
11 #include <boost/iterator/transform_iterator.hpp>
12 
13 #include <det/VManager.h>
14 #include <det/Detector.h>
15 #include <sdet/SDetector.h>
16 #include <cdet/CDetectorConstants.h>
17 #include <utl/AugerUnits.h>
18 #include <utl/AugerException.h>
19 #include <utl/CoordinateSystemPtr.h>
20 #include <utl/ReferenceEllipsoid.h>
21 #include <utl/Validated.h>
22 #include <utl/Point.h>
23 #include <utl/Vector.h>
24 #include <utl/TimeStamp.h>
25 #include <utl/TimeRange.h>
26 #include <utl/TabulatedFunction.h>
27 #include <utl/ShadowPtr.h>
28 
29 namespace cevt {
30  class Pad;
31 }
32 
33 namespace cdet {
34 
35 
46  class Station {
47 
48  private:
49  // These constants are to be read from external file ....
50  // all code that uses them must be changed accordingly
51  //
52  static const double kTimeBinSize;
53 
54  public:
55  static double GetTimeBinning() { return kTimeBinSize; }
56 
58  const std::string& GetName() const;
59 
61  int GetId() const { return fId; }
62 
65  { return GetCommissionTimeRange().GetStartTime(); }
66 
69  { return GetCommissionTimeRange().GetStopTime(); }
70 
73 
75  //const utl::Point& GetPosition() const;
76  // temporary solution for detector creeping (bug #307)
77  utl::Point GetPosition() const;
78 
79  // Get RPC ID from pad id
80  unsigned int GetRPCId(const unsigned int & padId) const {return int(padId/10000);};
81 
82 
83  // Get functions to access MARTA detector data
84 
85 
87  int GetNumberRPCChambers() const;
88 
90  const utl::Point & GetRPCPosition(const unsigned int id) const;
91 
93  double GetRPCRotation(const unsigned int id) const;
94 
95  utl::CoordinateSystemPtr GetRPCCoordinateSystem(unsigned int id) const;
96 
98  utl::Point GetPadPosition(const cevt::Pad & pad) const;
99  utl::Point GetPadPosition(const unsigned int & padId) const;
100 
101  // ID of pad given position in RPC
102  unsigned int GetPadId(const utl::Point & position) const;
103 
104  std::vector<unsigned int> GetListPadIds() const;
105 
106  // Dimensions of precast tank support.
107  // See GAP-2013-052 for the technical drawing of the proposed precast structure
108  std::vector<double> GetTankSupportTopSlabDimensions() const;
109  std::vector<double> GetTankSupportCentralFootDimensions() const;
110  std::vector<double> GetTankSupportCentralFootBaseDimensions() const;
111  std::vector<double> GetTankSupportOuterFootDimensions() const;
112  std::vector<double> GetTankSupportOuterFootBaseDimensions() const;
114 
115 
117  std::vector<double> GetRPCHousingInnerDimensions() const;
119  std::vector<double> GetRPCHousingThickness() const;
120  double GetSpacerThickness() const;
121 
122 
124 
125  double GetRPCSizeX() const;
126  double GetRPCSizeY() const;
127 
129  int GetNumberPadsX() const;
130  int GetNumberPadsY() const;
131 
132  double GetPadSizeX() const;
133  double GetPadSizeY() const;
134  double GetPadArea() const;
135  double GetDeadTime() const;
136 
139 
141 
145  bool IsDense() const { return fDense; }
146 
147  bool IsInEngineeringArray() const { return false; }
148 
149  // ------------------
150  // Dynamic quantities
151  // ------------------
152 
153  // ---------------------
154  // Station subcomponents
155  // ---------------------
156 
157  private:
158 
159  Station(const int id);
160  ~Station();
161 
162  Station(const Station&);
163  Station operator=(const Station&);
164 
165  void Update() const;
166 
174  template<typename T>
176  GetStationData(T& requestedData,
177  const std::string& property,
178  const std::string& component,
179  const std::string& errorMsg, const bool throwOnFailure = true)
180  const
181  {
182  det::VManager::IndexMap indexMap;
183  indexMap["stationId"] = fStationIdString;
184 
185  const det::VManager& manager =
186  det::Detector::GetInstance().GetCManagerRegister();
187  const det::VManager::Status status =
188  manager.GetData(requestedData, property, component, indexMap);
189 
190  if (throwOnFailure && status == det::VManager::eNotFound)
191  NotFoundAndThrow(errorMsg);
192 
193  return status;
194  }
195 
196 
197  template<typename T>
199  GetRPCData(const std::string& id,
200  T& requestedData,
201  const std::string& property,
202  const std::string& component,
203  const std::string& errorMsg, const bool throwOnFailure = true)
204  const
205  {
206  det::VManager::IndexMap indexMap;
207  indexMap["stationId"] = fStationIdString;
208  indexMap["RPCId"] = id;
209 
210  const det::VManager& manager =
211  det::Detector::GetInstance().GetCManagerRegister();
212  const det::VManager::Status status =
213  manager.GetData(requestedData, property, component, indexMap);
214 
215  if (throwOnFailure && status == det::VManager::eNotFound)
216  NotFoundAndThrow(errorMsg);
217 
218  return status;
219  }
220 
221 
222  void NotFoundAndThrow(const std::string& msg) const;
223 
224  //
225 
226  int fId;
227  // station id held as a string as that is what is passed through the
228  // detector manager interface
229  std::string fStationIdString;
230 
231 
232  // Quantities filled by lazy evaluation
233  // ------------------------------------
235  typedef std::bitset<CDetectorConstants::kGridIndexSize> InGridType;
237 
239  mutable std::map<unsigned int, utl::Point> fRPCPositions;
240  mutable std::map<unsigned int, double> fRPCRotations;
241  mutable std::map<unsigned int, utl::CoordinateSystemPtr> fRPCCoordinateSystems;
242 
249 
252 
255 
260 
265 
268 
269  // used in UTM conversions
274 
275  bool fDense;
276 
277  friend class CDetector;
278 
279  };
280 
281 }
282 
283 #endif
284 
285 // Configure (x)emacs for this file ...
286 // Local Variables:
287 // mode: c++
288 // End:
const utl::TimeStamp & GetDecommissionTime() const
Station decommission time.
static const double kTimeBinSize
utl::Validated< std::string > fName
utl::Validated< double > fRPCSizeY
double GetPadArea() const
Point object.
Definition: Point.h:32
Detector description interface for CDetector-related data.
Definition: CDetector.h:40
utl::Validated< double > fPadArea
utl::Validated< int > fNumberPadsX
Time interval defined by two TimeStamps.
Definition: TimeRange.h:23
unsigned int GetPadId(const utl::Point &position) const
utl::ReferenceEllipsoid::EllipsoidID fEllipsoid
const utl::TimeRange & GetCommissionTimeRange() const
Station commission time range.
utl::CoordinateSystemPtr GetRPCCoordinateSystem(unsigned int id) const
utl::Validated< utl::Point > fPosition
std::map< unsigned int, double > fRPCRotations
const utl::TimeStamp & GetCommissionTime() const
Station commission time.
double GetSpacerThickness() const
utl::Validated< utl::TimeRange > fCommissionTimeRange
double GetPadSizeY() const
std::string fStationIdString
int GetNumberPadsX() const
RPC readout parameters.
utl::Validated< double > fTankSupportOuterFootDistanceToCenter
void Update() const
double GetRPCSizeX() const
Dimensions of the RPC chamber.
const TimeStamp & GetStopTime() const
Definition: TimeRange.h:36
bool IsInGrid(const cdet::CDetectorConstants::GridIndex index=cdet::CDetectorConstants::eStandard) const
Tells whether the station is in the regular triangular grid.
std::vector< double > GetTankSupportOuterFootBaseDimensions() const
det::VManager::Status GetStationData(T &requestedData, const std::string &property, const std::string &component, const std::string &errorMsg, const bool throwOnFailure=true) const
Interface for detector managers.
Definition: VManager.h:115
std::map< unsigned int, utl::Point > fRPCPositions
utl::Point GetPosition() const
Station position in Site Cartesian Coordinates.
Station(const int id)
utl::Validated< double > fRPCSizeX
utl::Validated< std::vector< double > > fTankSupportOuterFootBaseDimensions
int GetId() const
Station ID.
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
Detector description interface for MARTA Station-related data.
utl::Validated< double > fPadSizeY
const std::string & GetName() const
Station name.
class to hold data at Pad level
Definition: Pad.h:27
utl::Validated< int > fGroupId
virtual Status GetData(double &returnData, const std::string &componentProperty, const std::string &componentName, const IndexMap &componentIndex) const =0
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
std::vector< double > GetRPCHousingInnerDimensions() const
Size of the RPC aluminum housing.
utl::Validated< std::vector< double > > fTankSupportOuterFootDimensions
std::vector< double > GetTankSupportOuterFootDimensions() const
utl::Validated< int > fIsInAcquisition
utl::Point GetPadPosition(const cevt::Pad &pad) const
Pad position relative to center of the tank.
bool IsInEngineeringArray() const
utl::Validated< double > fPadSizeX
utl::Validated< double > fDeadTime
int GetNumberRPCChambers() const
Number of RPC Chambers.
std::vector< double > GetTankSupportCentralFootDimensions() const
utl::Validated< InGridType > fInGrid
double GetRPCSizeY() const
utl::Validated< int > fNumberRPCChambers
utl::CoordinateSystemPtr fReferenceSystem
const TimeStamp & GetStartTime() const
Definition: TimeRange.h:35
std::vector< unsigned int > GetListPadIds() const
RPC readout parameters.
det::VManager::Status GetRPCData(const std::string &id, T &requestedData, const std::string &property, const std::string &component, const std::string &errorMsg, const bool throwOnFailure=true) const
double GetDeadTime() const
utl::Validated< std::vector< double > > fRPCHousingThickness
utl::Validated< int > fNumberPadsY
utl::Validated< std::vector< double > > fTankSupportCentralFootDimensions
std::map< unsigned int, utl::CoordinateSystemPtr > fRPCCoordinateSystems
Station operator=(const Station &)
std::vector< double > GetRPCHousingThickness() const
Thickness of walls of the RPC aluminum housing.
std::vector< double > GetTankSupportCentralFootBaseDimensions() const
double GetTankSupportOuterFootDistanceToCenter() const
const utl::Point & GetRPCPosition(const unsigned int id) const
RPC position.
std::map< std::string, std::string > IndexMap
Definition: VManager.h:133
std::bitset< CDetectorConstants::kGridIndexSize > InGridType
utl::Validated< std::vector< double > > fTankSupportCentralFootBaseDimensions
double GetRPCRotation(const unsigned int id) const
RPC rotation around its Z axis (axis perpendicular to RPC plane.
void NotFoundAndThrow(const std::string &msg) const
int GetNumberPadsY() const
static double GetTimeBinning()
EllipsoidID
ID&#39;s of known reference ellipsoid&#39;s.
utl::Validated< std::vector< unsigned int > > fListPadIds
RPC readout parameters.
utl::Validated< std::vector< double > > fTankSupportTopSlabDimensions
double GetPadSizeX() const
bool IsDense() const
Tells whether the station belongs to set of hypothetical &quot;dense&quot; stations.
utl::Validated< std::vector< double > > fRPCHousingInnerDimensions
Status
Specifies success or (eventually) various possible failure modes.
Definition: VManager.h:127
std::vector< double > GetTankSupportTopSlabDimensions() const
unsigned int GetRPCId(const unsigned int &padId) const

, generated on Tue Sep 26 2023.