2 #include <evt/ShowerRecData.h>
4 #include <utl/ErrorLogger.h>
5 #include <utl/Branch.h>
6 #include <utl/Particle.h>
7 #include <utl/AugerUnits.h>
9 #include <fwk/CentralConfig.h>
11 #include <revt/REvent.h>
12 #include <revt/Header.h>
13 #include <revt/Station.h>
14 #include <revt/StationRecData.h>
15 #include <revt/StationRRecDataQuantities.h>
16 #include <evt/ShowerRecData.h>
17 #include <evt/ShowerRRecData.h>
19 #include <utl/Trace.h>
20 #include <utl/TraceAlgorithm.h>
21 #include <utl/ErrorLogger.h>
22 #include <utl/Reader.h>
23 #include <utl/config.h>
24 #include <utl/AugerUnits.h>
25 #include <utl/CoordinateSystemPtr.h>
26 #include <utl/CoordinateSystem.h>
27 #include <fwk/LocalCoordinateSystem.h>
28 #include <fwk/CoordinateSystemRegistry.h>
31 #include <tst/Validatrix.h>
41 using namespace tst::Validatrix;
44 namespace VerificationRadio {
49 auto topB = CentralConfig::GetInstance()->GetTopBranch(
"Verification");
52 const auto csString = topB.GetChild(
"coordinateSystemId").Get<
string>();
56 for (
auto b = topB.GetFirstChild();
b;
b =
b.GetNextSibling()) {
58 unsigned long parameterId = 0;
60 bool useAbsoluteTolerance =
false;
63 if (
b.GetName() ==
"StationQuantity") {
64 b.GetChild(
"ParameterId").GetData(parameterId);
65 b.GetChild(
"ParameterName").GetData(parameterName);
66 b.GetChild(
"UseAbsoluteTolerance").GetData(useAbsoluteTolerance);
67 b.GetChild(
"Tolerance").GetData(tolerance);
68 fStationTests.push_back(TestInformation(parameterId, parameterName, useAbsoluteTolerance, tolerance));
69 }
else if (
b.GetName() ==
"ShowerQuantity") {
70 b.GetChild(
"ParameterId").GetData(parameterId);
71 b.GetChild(
"ParameterName").GetData(parameterName);
72 b.GetChild(
"UseAbsoluteTolerance").GetData(useAbsoluteTolerance);
73 b.GetChild(
"Tolerance").GetData(tolerance);
74 fShowerTests.push_back(TestInformation(parameterId, parameterName, useAbsoluteTolerance, tolerance));
79 topB.GetChild(
"RefFileName").GetData(fRefFileName);
84 fTestResults =
new ofstream(fRefFileName +
".new");
86 return fTestResults->is_open() ?
eSuccess : eFailure;
94 info <<
"Run validation for radio event E" <<
event.GetREvent().GetHeader().GetId();
97 *fTestResults <<
BeLabel(
"Verification for Radio:");
100 *fTestResults <<
BeLabel(
"No radio event found! Test failed");
101 ERROR(
"No radio event found! Test failed");
104 auto& rEvent =
event.GetREvent();
107 *fTestResults <<
BeLabel(
"No reconstructed shower found! Test failed");
108 ERROR(
"No reconstructed shower found! Test failed");
113 *fTestResults <<
BeLabel(
"No reconstructed radio shower found! Test failed");
114 ERROR(
"No reconstructed radio shower found! Test failed");
117 auto& rRecShower =
event.GetRecShower().GetRRecShower();
120 *fTestResults <<
BeLabel(
"Run number:")
121 <<
BeEqual(rEvent.GetHeader().GetRunNumber())
123 <<
BeEqual(rEvent.GetHeader().GetId());
126 *fTestResults <<
BeLabel(
"Tests on radio shower level:");
128 for (
const auto& info : fShowerTests) {
130 label <<
"R" << rEvent.GetHeader().GetRunNumber() <<
"-E" << rEvent.GetHeader().GetId() <<
"-" << info.fParameterId <<
"->" << info.fParameterName;
131 *fTestResults <<
BeLabel(label.str());
132 if (rRecShower.HasParameter(ShowerRRecDataQuantities(info.fParameterId))) {
133 if (info.fUseAbsoluteTolerance)
134 *fTestResults <<
BeCloseAbs(rRecShower.GetParameter(ShowerRRecDataQuantities(info.fParameterId)), info.fTolerance);
136 *fTestResults <<
BeCloseRel(rRecShower.GetParameter(ShowerRRecDataQuantities(info.fParameterId)), info.fTolerance);
141 *fTestResults <<
BeLabel(label.str());
142 if (rRecShower.HasParameterError(ShowerRRecDataQuantities(info.fParameterId))) {
143 if (info.fUseAbsoluteTolerance)
144 *fTestResults <<
BeCloseAbs(rRecShower.GetParameterError(ShowerRRecDataQuantities(info.fParameterId)), info.fTolerance);
146 *fTestResults <<
BeCloseRel(rRecShower.GetParameterError(ShowerRRecDataQuantities(info.fParameterId)), info.fTolerance);
153 *fTestResults <<
BeLabel(
"Tests on radio station level:");
154 for (
auto sIt = rEvent.StationsBegin(); sIt != rEvent.StationsEnd(); ++sIt) {
155 auto& station = *sIt;
157 if (!station.HasRecData()) {
158 *fTestResults <<
BeLabel(
"No radio reconstructed data on station level found! Test failed");
159 ERROR(
"No radio reconstructed data on station level found! Test failed");
163 for (
const auto& info : fStationTests) {
165 label <<
"R" << rEvent.GetHeader().GetRunNumber() <<
"-E" << rEvent.GetHeader().GetId() <<
"-S" << station.GetId() <<
"-" << info.fParameterId <<
"->" << info.fParameterName;
166 *fTestResults <<
BeLabel(label.str());
167 if (station.GetRecData().HasParameter(StationRRecDataQuantities(info.fParameterId))) {
168 if (info.fUseAbsoluteTolerance)
169 *fTestResults <<
BeCloseAbs(station.GetRecData().GetParameter(StationRRecDataQuantities(info.fParameterId)), info.fTolerance);
171 *fTestResults <<
BeCloseRel(station.GetRecData().GetParameter(StationRRecDataQuantities(info.fParameterId)), info.fTolerance);
176 *fTestResults <<
BeLabel(label.str());
177 if (station.GetRecData().HasParameterError(StationRRecDataQuantities(info.fParameterId))) {
178 if (info.fUseAbsoluteTolerance)
179 *fTestResults <<
BeCloseAbs(station.GetRecData().GetParameterError(StationRRecDataQuantities(info.fParameterId)), info.fTolerance);
181 *fTestResults <<
BeCloseRel(station.GetRecData().GetParameterError(StationRRecDataQuantities(info.fParameterId)), info.fTolerance);
193 Verification::Finish()
196 fTestResults =
nullptr;
198 INFO(
"Comparing radio reconstruction results to reference file");
200 const auto comp =
Compare(fRefFileName, fRefFileName +
".new",
false);
std::string BeCloseRel(const T &value, const double tolerance=kDefaultTolerance)
bool HasRecShower() const
ShowerRecData & GetRecShower()
#define INFO(message)
Macro for logging informational messages.
void Init()
Initialise the registry.
std::string BeCloseAbs(const T &value, const double tolerance=kDefaultTolerance)
bool Compare(const string &oldFilename, const string &newFilename, const bool failOnFirst)
std::string BeLabel(const string &tag)
bool HasRRecShower() const
std::string BeEqual(const T &value)
ResultFlag
Flag returned by module methods to the RunController.
utl::CoordinateSystemPtr Get(const std::string &id)
Get a well-known Coordinate System.
#define ERROR(message)
Macro for logging error messages.