Diaphragm.cc
Go to the documentation of this file.
1 #include <sstream>
2 
3 #include <boost/lexical_cast.hpp>
4 
5 #include <fdet/Diaphragm.h>
6 
7 #include <utl/Reader.h>
8 #include <utl/ErrorLogger.h>
9 #include <utl/MathConstants.h>
10 #include <utl/Math.h>
11 #include <utl/UTCDateTime.h>
12 
13 #include <det/VManager.h>
14 #include <det/Detector.h>
15 #include <fdet/FDetector.h>
16 #include <fdet/Eye.h>
17 #include <fdet/Telescope.h>
18 
19 using namespace std;
20 using namespace utl;
21 using namespace fdet;
22 using namespace det;
23 
24 
25 Diaphragm::Diaphragm(const unsigned int eyeId, const unsigned int telId,
26  const std::string& physEyeIdString,
27  const std::string& physTelIdString) :
28  fEyeId(eyeId),
29  fTelescopeId(telId),
30  fPhysicalEyeIdString(physEyeIdString),
31  fPhysicalTelescopeIdString(physTelIdString),
32  fRadius(0),
33  fArea(0),
34  fCorrectorRingCommissionTime(0)
35 {
36 }
37 
38 
40 {
41  delete fRadius;
43 }
44 
46 
47  delete fRadius;
48  fRadius = 0;
49 
50  delete fArea;
51  fArea = 0;
52 
55 }
56 
57 
58 double
60  const
61 {
62  return GetDiaphragmData(fRadius, "radius", "diaphragm", "radius of diaphragm");
63 }
64 
65 
66 double
68  const
69 {
70  return kPi*Sqr(GetRadius());
71 }
72 
73 
74 bool
76  const
77 {
79  string timeString;
80  GetDiaphragmData(timeString, "CorrectorRingCommission", "telescope",
81  "Corrector ring commission time");
83  new TimeStamp(boost::lexical_cast<UTCDateTime>(timeString).GetTimeStamp());
84  }
85 
86  return *fCorrectorRingCommissionTime < det::Detector::GetInstance().GetTime();
87 }
88 
89 
90 template<typename T>
91 inline
92 const T&
93 Diaphragm::GetDiaphragmData(T*& requestedData,
94  const std::string& property,
95  const std::string& component,
96  const std::string& errorMsg)
97  const
98 {
99  if (!requestedData) {
100  requestedData = new T;
101  GetDiaphragmData(*requestedData, property, component, errorMsg);
102  }
103  return *requestedData;
104 }
105 
106 
107 template<typename T>
108 inline
109 void
111  const std::string& property,
112  const std::string& component,
113  const std::string& errorMsg)
114  const
115 {
116  const VManager& manager = Detector::GetInstance().GetFManagerRegister();
117 
118  det::VManager::IndexMap indexMap;
119  indexMap["eyeId"] = fPhysicalEyeIdString;
120  indexMap["telescopeId"] = fPhysicalTelescopeIdString;
121 
122  if (property == "radius")
123  indexMap["correctorId"] = (HasCorrectorRing() ? "large" : "small");
124 
125  const VManager::Status foundFlag =
126  manager.GetData(requestedData, property, component, indexMap);
127 
128  if (foundFlag == VManager::eNotFound) {
129  ostringstream err;
130  err << "Did not find requested component for " << errorMsg << "; "
131  << VManager::QueryInfoMessage(property, component, indexMap);
132  ERROR(err);
133  throw NonExistentComponentException(err.str());
134  }
135 }
136 
137 
138 // Configure (x)emacs for this file ...
139 // Local Variables:
140 // mode: c++
141 // compile-command: "make -C .. FDetector/Diaphragm.o -k"
142 // End:
std::string fPhysicalTelescopeIdString
Definition: Diaphragm.h:60
constexpr T Sqr(const T &x)
double * fRadius
Definition: Diaphragm.h:71
Base class for exceptions trying to access non-existing components.
std::string fPhysicalEyeIdString
Definition: Diaphragm.h:59
Interface for detector managers.
Definition: VManager.h:115
double GetArea() const
Definition: Diaphragm.cc:67
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
virtual Status GetData(double &returnData, const std::string &componentProperty, const std::string &componentName, const IndexMap &componentIndex) const =0
constexpr double kPi
Definition: MathConstants.h:24
utl::TimeStamp * fCorrectorRingCommissionTime
Definition: Diaphragm.h:73
const T & GetDiaphragmData(T *&requestedData, const std::string &property, const std::string &component, const std::string &errorMsg) const
Definition: Diaphragm.cc:93
fTelescopeId(t.GetTelescopeId())
double * fArea
Definition: Diaphragm.h:72
std::map< std::string, std::string > IndexMap
Definition: VManager.h:133
double GetRadius() const
Radius of the diaphragm.
Definition: Diaphragm.cc:59
bool HasCorrectorRing() const
Definition: Diaphragm.cc:75
#define ERROR(message)
Macro for logging error messages.
Definition: ErrorLogger.h:165
Status
Specifies success or (eventually) various possible failure modes.
Definition: VManager.h:127

, generated on Tue Sep 26 2023.