6 #include <boost/lexical_cast.hpp>
8 #include <fdet/FFixOpticalEfficiencyLossManager.h>
9 #include <fwk/CentralConfig.h>
10 #include <det/Detector.h>
12 #include <utl/ErrorLogger.h>
13 #include <utl/TimeStamp.h>
14 #include <utl/UTCDateTime.h>
15 #include <utl/Reader.h>
16 #include <utl/TabulatedFunction.h>
17 #include <utl/AugerException.h>
18 #include <utl/ShadowPtr.h>
20 #include <fdet/FManagerRegister.h>
21 #include <fdet/FDetector.h>
22 #include <fdet/Telescope.h>
37 fHasDefaultOpticalEfficiencyCorrection =
false;
41 if (fHasDefaultOpticalEfficiencyCorrection)
42 info <<
"fixed optical efficiency correction is " << fOpticalEfficiencyCorrection;
44 info <<
" no default fixed optical efficiency correction";
46 if (!fPerTelescopeOpticalEfficiencyCorrection.empty()) {
47 for (map<
int, map<int, double> >::const_iterator eyeIt = fPerTelescopeOpticalEfficiencyCorrection.begin(),
48 eyeEnd = fPerTelescopeOpticalEfficiencyCorrection.end(); eyeIt != eyeEnd; ++eyeIt) {
50 for (map<int, double>::const_iterator telIt = eyeIt->second.begin(),
51 telEnd = eyeIt->second.end(); telIt != telEnd; ++telIt) {
53 info <<
"\n Override eye " << eyeIt->first <<
" tel " << telIt->first
54 <<
": " << telIt->second;
64 FFixOpticalEfficiencyLossManager::Initialize()
66 Branch defaultOpticalEffBranch = fBranch.
GetChild(
"fixedOpticalEfficiencyCorrection");
67 if (defaultOpticalEffBranch) {
68 defaultOpticalEffBranch.
GetData(fOpticalEfficiencyCorrection);
69 fHasDefaultOpticalEfficiencyCorrection =
true;
71 fHasDefaultOpticalEfficiencyCorrection =
false;
77 while (opticalEffBranch) {
78 double opticalEff = 0;
79 opticalEffBranch.
GetData(opticalEff);
82 AttributeMap::const_iterator attrEnd = attrs.end();
83 AttributeMap::const_iterator eyeIdIt = attrs.find(
"eyeId");
84 AttributeMap::const_iterator telIdIt = attrs.find(
"telId");
85 if (eyeIdIt == attrEnd || telIdIt == attrEnd) {
86 ERROR(
"telescopeOpticalEfficiencyCorrection tag is missing eyeId or telId attributes!");
89 const int eyeId = boost::lexical_cast<
int>(eyeIdIt->second);
90 const int telId = boost::lexical_cast<
int>(telIdIt->second);
91 fPerTelescopeOpticalEfficiencyCorrection[eyeId][telId] = opticalEff;
100 fAvailableComponents.insert(
"pixel_optical_efficiency_corrections");
101 fAvailableComponents.insert(
"status");
102 fAvailableComponents.insert(
"start_time");
103 fAvailableComponents.insert(
"end_time");
108 FFixOpticalEfficiencyLossManager::GetData(
double& ,
127 FFixOpticalEfficiencyLossManager::GetData(map<int, utl::TabulatedFunction>& returnData,
128 const string& componentProperty,
129 const string& componentName,
130 const IndexMap& componentIndex)
134 if (componentName !=
"fd_optical_efficiency")
138 if (fAvailableComponents.find(componentProperty) == fAvailableComponents.end())
143 if (componentProperty ==
"pixel_optical_efficiency_corrections") {
144 const fdet::FDetector& fdet = det::Detector::GetInstance().GetFDetector();
147 const string& eyeIdString = componentIndex.find(
"eyeId")->second;
148 const string& telescopeIdString = componentIndex.find(
"telescopeId")->second;
149 const int eyeId = boost::lexical_cast<
int>(eyeIdString);
150 const int telId = boost::lexical_cast<
int>(telescopeIdString);
152 double opticalEff = 0;
153 if (GetOpticalEfficiencyCorrectionForTelescope(eyeId, telId, opticalEff)) {
155 for (
int iPix = 1; iPix <= 440; ++iPix) {
157 effVsWavelength.
PushBack(wavelength, opticalEff);
158 returnData.insert(make_pair(iPix, effVsWavelength));
170 FFixOpticalEfficiencyLossManager::GetOpticalEfficiencyCorrectionForTelescope(
const unsigned int eyeId,
171 const unsigned int telId,
175 map<int, map<int, double> >::const_iterator eyeIt = fPerTelescopeOpticalEfficiencyCorrection.find(eyeId);
176 if (eyeIt == fPerTelescopeOpticalEfficiencyCorrection.end()) {
177 if (fHasDefaultOpticalEfficiencyCorrection) {
178 value = fOpticalEfficiencyCorrection;
184 map<int, double>::const_iterator telIt = eyeIt->second.find(telId);
185 if (telIt == eyeIt->second.end()) {
186 if (fHasDefaultOpticalEfficiencyCorrection) {
187 value = fOpticalEfficiencyCorrection;
193 value = telIt->second;
199 FFixOpticalEfficiencyLossManager::GetData(vector<int>& returnData,
200 const string& componentProperty,
201 const string& componentName,
205 if (componentProperty !=
"status" || componentName !=
"fd_optical_efficiency")
208 returnData.resize(441, 0);
214 FFixOpticalEfficiencyLossManager::GetData(
int& returnData,
215 const string& componentProperty,
216 const string& componentName,
221 if (componentName !=
"fd_optical_efficiency")
225 if (fAvailableComponents.find(componentProperty) == fAvailableComponents.end())
228 if (componentProperty ==
"start_time") {
234 if (componentProperty ==
"end_time") {
Class to hold collection (x,y) points and provide interpolation between them.
std::map< std::string, std::string > AttributeMap
#define INFO(message)
Macro for logging informational messages.
void Init()
Initialise the registry.
void PushBack(const double x, const double y)
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
Detector description interface for FDetector-related data.
AttributeMap GetAttributes() const
Get a map<string, string> containing all the attributes of this Branch.
Branch GetNextSibling() const
Get next sibling of this branch.
Class representing a document branch.
Manager for FD optical efficiency correction with fixed constants.
void GetData(bool &b) const
Overloads of the GetData member template function.
double GetReferenceLambda() const
unsigned long GetGPSSecond() const
GPS second.
#define REGISTER_F_MANAGER(_name_, _Type_)
Branch GetFirstChild() const
Get first child of this Branch.
#define ERROR(message)
Macro for logging error messages.
TimeStamp GetTimeStamp() const
Status
Specifies success or (eventually) various possible failure modes.