5 #include <fwk/CentralConfig.h>
6 #include <fwk/LocalCoordinateSystem.h>
7 #include <fwk/CoordinateSystemRegistry.h>
9 #include <det/Detector.h>
10 #include <rdet/RDetector.h>
12 #include <utl/ErrorLogger.h>
13 #include <utl/Reader.h>
14 #include <utl/config.h>
15 #include <utl/PhysicalConstants.h>
16 #include <utl/AxialVector.h>
18 #include <utl/AnalyticCoordinateTransformator.h>
20 #include <evt/Event.h>
21 #include <evt/ShowerRRecData.h>
22 #include <evt/ShowerSRecData.h>
23 #include <evt/ShowerFRecData.h>
24 #include <evt/ShowerRecData.h>
25 #include <evt/ShowerSimData.h>
27 #include <revt/REvent.h>
28 #include <revt/Station.h>
29 #include <revt/Header.h>
30 #include <revt/StationRecData.h>
36 #include <Math/Minimizer.h>
37 #include <Minuit2/Minuit2Minimizer.h>
46 #define OUT(x) if ((x) <= fInfoLevel) cerr << " "
55 os <<
'(' << g.GetX(cs) /
meter <<
", " << g.GetY(cs) /
meter <<
", " << g.GetZ(cs) /
meter
63 fMinNumberOfStations(0),
64 fAllowUnphysicalCosines(0),
73 currentWaveFrontModel(0),
74 fSphericalWaveFitVarC(0),
75 fComputeSigmaGamma(0),
80 fEventTimeNanoSecond(0),
99 INFO(
"RdWaveFit::Init()");
146 INFO(
"RdWaveFit::Run()");
149 INFO(
"Plane Wave Fit");
152 INFO(
"Spherical Wave Fit");
155 INFO(
"Spherical Wave Fit with variable speed of light");
158 INFO(
"Conical Wave Fit");
165 OUT(
eIntermediate) <<
"eContinueLoop: No REvent, so no reconstruction" << endl;
169 REvent& rEvent =
event.GetREvent();
175 "RdWaveFit: No RecShower found. Plead use RdPreWaveFitter before RdWaveFit... aborting");
182 "RdWaveFit: No RRecShower found. Plead use RdPreWaveFitter before RdWaveFit... aborting");
187 ShowerRRecData& showerrrec =
event.GetRecShower().GetRRecShower();
198 bool reuseFit =
false;
201 if (showerrrec.
GetParameter(eRecStage) >= ShowerRRecData::kPlaneFit3d) {
203 OUT(
eMinuit) <<
"Fit has been performed previously, setting reusefit = true" << endl;
214 WARNING(
"BaryCenter could not be determined!");
215 return resultBaryCenter;
226 stringstream fMessage;
230 WARNING(
"Event has not SRecShower. Nothing will be done!!!");
236 WARNING(
"Event has no simulated shower. Nothing will be done!!!");
242 WARNING(
"Event has no FD reconstructed shower. Nothing will be done!!!");
248 double zenith(0), azimuth(0);
252 InitialShowerAxis =
event.GetRecShower().GetSRecShower().GetAxis();
253 Point core =
event.GetRecShower().GetSRecShower().GetCorePosition();
255 zenith =
event.GetRecShower().GetSRecShower().GetAxis().GetTheta(coordinateSystem);
256 azimuth =
event.GetRecShower().GetSRecShower().GetAxis().GetPhi(coordinateSystem);
257 OUT(
eMinuit) <<
"Zenith = " << zenith <<
"\t azimuth = " << azimuth << endl;
259 WARNING(
"No SD Shower... aborting");
264 cout <<
"using MC shower axis" << endl;
265 InitialShowerAxis = -1 *
event.GetSimShower().GetDirection();
268 InitialShowerAxis =
event.GetRecShower().GetFRecShower().GetAxis();
273 cout <<
"using MC shower core" << endl;
277 fReferenceCore =
event.GetRecShower().GetSRecShower().GetCorePosition();
280 fReferenceCore =
event.GetRecShower().GetRRecShower().GetCorePosition();
283 fReferenceCore =
event.GetRecShower().GetFRecShower().GetCorePosition();
293 sFitResults.
gamma = 1;
311 sFitResults.
gamma = 1;
333 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
334 vector<utl::Vector> AntennaPositions;
335 vector<double> AntennaTimes;
336 vector<double> AntennaTimesError;
342 AntennaPositions.push_back(sPos);
345 AntennaTimes.push_back(t);
349 const std::vector<double> timeResiduals =
GetTimeResiduals(AntennaPositions, AntennaTimes, axis,
362 sRec.
SetParameter(eTimeResidual, timeResiduals[iStation]);
364 OUT(
eObscure) <<
"TimeResidual of Station " << sIt->GetId() <<
": " << timeResiduals[iStation] <<
" +/- "
365 << AntennaTimesError[iStation] <<
" ns" << endl;
382 double tempCov = AnalyticCoordinateTransformator::GetCartesianCovarianceFromSpherical(
383 0, 0, sFitResults.
r, sFitResults.
theta, sFitResults.
phi, sFitResults.
c00, sFitResults.
c11,
384 sFitResults.
c22, sFitResults.
c01, sFitResults.
c02, sFitResults.
c12);
386 tempCov = AnalyticCoordinateTransformator::GetCartesianCovarianceFromSpherical(1, 1,
397 tempCov = AnalyticCoordinateTransformator::GetCartesianCovarianceFromSpherical(2, 2,
408 tempCov = AnalyticCoordinateTransformator::GetCartesianCovarianceFromSpherical(0, 1,
419 tempCov = AnalyticCoordinateTransformator::GetCartesianCovarianceFromSpherical(0, 2,
430 tempCov = AnalyticCoordinateTransformator::GetCartesianCovarianceFromSpherical(1, 2,
450 if (sFitResults.
recStage >= ShowerRRecData::kConicalWaveFit) {
481 <<
", " << axis.
GetZ(
fLocalCS) <<
")" <<
NL <<
" axis in spherical coord.= ("
487 <<
"Gamma = " << sFitResults.
gamma <<
" +/- " << sFitResults.
gammaError <<
NL << endl;
497 INFO(
"RdWaveFit::Finish()");
509 OUT(
eBreakLoop) <<
"ERROR: At least 3 Stations are needed for a plane wave fit" << endl;
513 ROOT::Minuit2::Minuit2Minimizer* minimizer = 0;
515 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kMigrad);
516 }
else if (type == 1) {
517 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kSimplex);
518 }
else if (type == 2) {
519 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kCombined);
520 }
else if (type == 3) {
521 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kScan);
524 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
526 vector<utl::Vector> AntennaPositions;
527 vector<double> AntennaTimes;
528 vector<double> AntennaTimesError;
534 AntennaPositions.push_back(sPos);
537 AntennaTimes.push_back(t);
544 minimizer->SetFunction(*
ChiPWF);
547 minimizer->SetLimitedVariable(0,
"theta", fit.
theta, 0.1, 0.,
fThetaMax);
548 minimizer->SetVariable(1,
"phi", fit.
phi, 0.1);
552 minimizer->SetPrintLevel(0);
553 if (!minimizer->Minimize()) {
554 fit.
status = minimizer->Status();
555 OUT(
eObscure) <<
"Fit failed: FitStatus = " << minimizer->Status() << endl;
560 fit.
status = minimizer->Status();
561 fit.
phi = NormalizeAngle(minimizer->X()[1]);
562 fit.
theta = NormalizeAngle(minimizer->X()[0]);
563 fit.
phiError = minimizer->Errors()[1];
566 fit.
nCalls = minimizer->NCalls();
567 fit.
minChi = minimizer->MinValue();
568 fit.
recStage = ShowerRRecData::kPlaneFit3d;
572 fit.
c11 = minimizer->CovMatrix(0, 0);
573 fit.
c22 = minimizer->CovMatrix(1, 1);
576 fit.
c12 = minimizer->CovMatrix(0, 1);
591 const std::vector<double> timeResiduals =
GetTimeResiduals(AntennaPositions, AntennaTimes, axis,
603 sRec.
SetParameter(eTimeResidual, timeResiduals[iStation]);
620 OUT(
eBreakLoop) <<
"ERROR: At least 4 Stations are needed for a spherical wave fit" << endl;
624 ROOT::Minuit2::Minuit2Minimizer* minimizer = 0;
626 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kMigrad);
627 }
else if (type == 1) {
628 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kSimplex);
629 }
else if (type == 2) {
630 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kCombined);
631 }
else if (type == 3) {
632 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kScan);
635 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
637 vector<utl::Vector> AntennaPositions;
638 vector<double> AntennaTimes;
639 vector<double> AntennaTimesError;
647 AntennaPositions.push_back(sPos);
649 OUT(
eObscure) <<
"SignalTime of Station " << sIt->GetId() <<
": " << t << endl;
650 AntennaTimes.push_back(t);
654 if (AntennaPositions.size() < 4) {
655 OUT(
eBreakLoop) <<
"Event has less than 3 Stations, can't perform spherical wave fit. " << endl;
661 minimizer->SetFunction(*
ChiSWF);
663 minimizer->SetLimitedVariable(0,
"r", fit.
r, 10., 0.,
fRMax);
664 minimizer->SetLimitedVariable(1,
"theta", fit.
theta, 0.1, 0.,
fThetaMax);
665 minimizer->SetVariable(2,
"phi", fit.
phi, 0.1);
668 minimizer->SetPrintLevel(0);
669 if (!minimizer->Minimize()) {
670 fit.
status = minimizer->Status();
675 fit.
status = minimizer->Status();
676 fit.
r = minimizer->X()[0];
677 fit.
phi = NormalizeAngle(minimizer->X()[2]);
678 fit.
theta = NormalizeAngle(minimizer->X()[1]);
679 fit.
rError = minimizer->Errors()[0];
680 fit.
phiError = minimizer->Errors()[2];
683 fit.
nCalls = minimizer->NCalls();
684 fit.
minChi = minimizer->MinValue();
685 fit.
recStage = ShowerRRecData::kSphericalWaveFit;
688 fit.
c00 = minimizer->CovMatrix(0, 0);
689 fit.
c11 = minimizer->CovMatrix(1, 1);
690 fit.
c22 = minimizer->CovMatrix(2, 2);
691 fit.
c01 = minimizer->CovMatrix(0, 1);
692 fit.
c02 = minimizer->CovMatrix(0, 2);
693 fit.
c12 = minimizer->CovMatrix(1, 2);
708 const std::vector<double> timeResiduals =
GetTimeResiduals(AntennaPositions, AntennaTimes, axis,
721 sRec.
SetParameter(eTimeResidual, timeResiduals[iStation]);
738 <<
"ERROR: At least 5 Stations are needed for a spherical wave fit with variable speed of light"
743 ROOT::Minuit2::Minuit2Minimizer* minimizer = 0;
745 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kMigrad);
746 }
else if (type == 1) {
747 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kSimplex);
748 }
else if (type == 2) {
749 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kCombined);
750 }
else if (type == 3) {
751 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kScan);
754 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
756 vector<utl::Vector> AntennaPositions;
757 vector<double> AntennaTimes;
758 vector<double> AntennaTimesError;
766 AntennaPositions.push_back(sPos);
768 OUT(
eObscure) <<
"SignalTime of Station " << sIt->GetId() <<
": " << t << endl;
769 AntennaTimes.push_back(t);
778 minimizer->SetLimitedVariable(0,
"r", fit.
r, 10., 0.,
fRMax);
779 minimizer->SetLimitedVariable(1,
"theta", fit.
theta, 0.1, 0.,
fThetaMax);
780 minimizer->SetVariable(2,
"phi", fit.
phi, 0.1);
781 minimizer->SetLowerLimitedVariable(3,
"gamma", fit.
gamma, 0.01, 0.);
784 minimizer->SetPrintLevel(0);
785 if (!minimizer->Minimize()) {
786 fit.
status = minimizer->Status();
791 fit.
status = minimizer->Status();
792 fit.
r = minimizer->X()[0];
793 fit.
phi = NormalizeAngle(minimizer->X()[2]);
794 fit.
theta = NormalizeAngle(minimizer->X()[1]);
795 fit.
rError = minimizer->Errors()[0];
796 fit.
phiError = minimizer->Errors()[2];
798 fit.
gamma = minimizer->X()[3];
801 fit.
nCalls = minimizer->NCalls();
802 fit.
minChi = minimizer->MinValue();
803 fit.
recStage = ShowerRRecData::kSphericalWaveFitVarC;
806 fit.
c00 = minimizer->CovMatrix(0, 0);
807 fit.
c11 = minimizer->CovMatrix(1, 1);
808 fit.
c22 = minimizer->CovMatrix(2, 2);
809 fit.
c01 = minimizer->CovMatrix(0, 1);
810 fit.
c02 = minimizer->CovMatrix(0, 2);
811 fit.
c12 = minimizer->CovMatrix(1, 2);
825 const std::vector<double> timeResiduals =
GetTimeResiduals(AntennaPositions, AntennaTimes, axis,
839 sRec.
SetParameter(eTimeResidual, timeResiduals[iStation]);
855 OUT(
eBreakLoop) <<
"ERROR: At least 4 stations are needed for a conical wave fit" << endl;
859 ROOT::Minuit2::Minuit2Minimizer* minimizer = 0;
861 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kMigrad);
862 }
else if (type == 1) {
863 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kSimplex);
864 }
else if (type == 2) {
865 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kCombined);
866 }
else if (type == 3) {
867 minimizer =
new ROOT::Minuit2::Minuit2Minimizer(ROOT::Minuit2::kScan);
870 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
872 vector<utl::Vector> AntennaPositions;
873 vector<double> AntennaTimes;
874 vector<double> AntennaTimesError;
881 AntennaPositions.push_back(sPos);
884 AntennaTimes.push_back(t);
890 minimizer->SetFunction(*
ChiCWF);
891 minimizer->SetVariable(0,
"rho", fit.
rho, 0.01);
896 minimizer->SetFixedVariable(1,
"theta", fit.
theta);
897 minimizer->SetFixedVariable(2,
"phi", fit.
phi);
902 minimizer->SetPrintLevel(1);
903 if (!minimizer->Minimize()) {
904 fit.
status = minimizer->Status();
909 fit.
status = minimizer->Status();
910 fit.
rho = NormalizeAngle(minimizer->X()[0]);
911 fit.
phi = NormalizeAngle(minimizer->X()[2]);
912 fit.
theta = NormalizeAngle(minimizer->X()[1]);
913 fit.
rhoError = minimizer->Errors()[0];
914 fit.
phiError = minimizer->Errors()[2];
920 fit.
nCalls = minimizer->NCalls();
921 fit.
minChi = minimizer->MinValue();
922 fit.
recStage = ShowerRRecData::kConicalWaveFit;
928 fit.
c11 = minimizer->CovMatrix(1, 1);
929 fit.
c22 = minimizer->CovMatrix(2, 2);
932 fit.
c12 = minimizer->CovMatrix(1, 2);
946 const std::vector<double> timeResiduals =
GetTimeResiduals(AntennaPositions, AntennaTimes, axis,
960 sRec.
SetParameter(eTimeResidual, timeResiduals[iStation]);
978 sFitParameters = sFitResults;
990 <<
" stepPhi = " << stepPhi /
utl::deg << endl;
993 bool first_fit =
true;
995 theta = stepTheta * (iTheta + 1);
996 for (
int iPhi = 0; iPhi <
fNInitsPhi; ++iPhi) {
1001 sFitParameters.
theta = theta;
1002 sFitParameters.
phi = phi;
1008 <<
" in kSimplex was not successful: skip to next initial value" << endl;
1014 <<
" in kMigrad was not successful: skip to next initial value" << endl;
1021 if (sFitParameters.
minChi < sFitResults.
minChi || first_fit) {
1023 sFitResults = sFitParameters;
1030 if (sFitResults.
status != 0) {
1031 OUT(
eBreakLoop) <<
"ERROR: reconstruction was not successful" << endl;
1036 if (sFitResults.
theta > TMath::Pi() / 2.)
1038 sFitParameters = sFitResults;
1040 sFitParameters.
theta = TMath::Pi() - sFitParameters.
theta;
1044 OUT(
eObscure) <<
"Horizon Correction: PlaneWaveFit for theta = " << sFitParameters.
theta
1045 <<
" in kSimplex was not successful: calling again in kMigrad mode" << endl;
1053 sFitResults = sFitParameters;
1056 OUT(
eObscure) <<
"Horizon Correction: PlaneWaveFit for theta "
1057 << sFitParameters.
theta /
utl::deg <<
" in kMigrad was not successful" << endl;
1070 sFitParameters = sFitResults;
1073 double rInits[] = { 0., 300., 1000., 3000., 10000. };
1074 const int nRInits =
sizeof(rInits) /
sizeof(rInits[0]);
1080 bool first_fit =
true;
1081 for (
int i = 0; i < nRInits; ++i) {
1082 sFitParameters.
r = rInits[i];
1086 OUT(
eObscure) <<
"SphericalWaveFit for r = " << rInits[i]
1087 <<
" in kSimplex was not successful: skip to next initial value" << endl;
1091 OUT(
eObscure) <<
"SphericalWaveFit for r = " << rInits[i]
1092 <<
" in kMigrad was not successful: skip to next initial value" << endl;
1099 if (sFitParameters.
minChi < sFitResults.
minChi || first_fit) {
1101 sFitResults = sFitParameters;
1106 if (sFitResults.
status > 0) {
1107 OUT(
eBreakLoop) <<
"ERROR: reconstruction was not successful" << endl;
1112 if (sFitResults.
theta > TMath::Pi() / 2.)
1114 sFitParameters = sFitResults;
1116 sFitParameters.
theta = TMath::Pi() - sFitParameters.
theta;
1120 OUT(
eObscure) <<
"Horizon Correction: SphericalWaveFit for theta = " << sFitParameters.
theta
1121 <<
" in kSimplex was not successful: calling again in kMigrad mode" << endl;
1129 sFitResults = sFitParameters;
1132 OUT(
eObscure) <<
"Horizon Correction: SphericalWaveFit for theta " << sFitParameters.
theta
1133 <<
" in kMigrad was not successful" << endl;
1146 sFitParameters = sFitResults;
1152 OUT(
eBreakLoop) <<
"SphericalWaveFitVarC in kSimplexMode was not successful" << endl;
1156 OUT(
eBreakLoop) <<
"SphericalWaveFitVarC in kMigradMode was not successful" << endl;
1160 sFitResults = sFitParameters;
1163 if (sFitResults.
theta > TMath::Pi() / 2.)
1165 sFitParameters = sFitResults;
1167 sFitParameters.
theta = TMath::Pi() - sFitParameters.
theta;
1175 sFitResults = sFitParameters;
1190 sFitParameters = sFitResults;
1192 OUT(
eMinuit) <<
"start values for conical wave fit : zenith = "
1200 const int nRhoInits =
sizeof(rhoInits) /
sizeof(rhoInits[0]);
1202 bool first_fit =
true;
1203 for (
int i = 0; i < nRhoInits; i++) {
1206 sFitParameters.
rho = rhoInits[i];
1209 OUT(
eBreakLoop) <<
"ConicalWaveFit in kSimplexMode was not successful" << endl;
1213 OUT(
eObscure) <<
"ConicalWaveFit for rho = " << sFitParameters.
rho
1214 <<
" in kMigrad was not successful: skip to next initial value" << endl;
1221 if (sFitParameters.
minChi < sFitResults.
minChi || first_fit) {
1223 sFitResults = sFitParameters;
1228 if (sFitResults.
status != 0) {
1229 OUT(
eBreakLoop) <<
"ERROR: reconstruction was not successful" << endl;
1234 if (sFitResults.
theta > TMath::Pi() / 2.)
1236 sFitParameters = sFitResults;
1238 sFitParameters.
theta = TMath::Pi() - sFitParameters.
theta;
1242 OUT(
eObscure) <<
"Horizon Correction: ConicalWaveFit for theta = " << sFitParameters.
theta
1243 <<
" in kSimplex was not successful: calling again in kMigrad mode" << endl;
1251 sFitResults = sFitParameters;
1255 <<
" in kMigrad was not successful" << endl;
1263 bool reuseFit)
const
1274 return ScanPWF(rEvent, sFitResults);
1280 WARNING(
"reuse plane wave fit in kSimplex mode was not successful");
1299 "Event contains less than 4 Stations: Only the PlaneWaveFit will be performed. Setting WaveFrontModel to ePlane");
1313 return ScanSWF(rEvent, sFitResults);
1329 "Event contains less than 4 Stations: Only the PlaneWaveFit will be performed. Setting WaveFrontModel to ePlane");
1337 "Event contains 4 Stations: Only the SphericalWaveFit will be performed. Setting WaveFrontModel to eSpherical");
1353 result =
ScanSWF(rEvent, sFitResults);
1361 return ScanSWF(rEvent, sFitResults);
1382 "Event contains less than 4 Stations: Only the PlaneWaveFit will be performed. Setting WaveFrontModel to ePlane");
1396 OUT(
eMinuit) <<
"Call spherical wave fit with variable speed of light" << endl;
1404 OUT(
eMinuit) <<
"call scan cone fit" << endl;
1406 return ScanCWF(rEvent, sFitResults);
1415 const std::vector<double>& AntennaTimes,
1417 const unsigned int waveFrontModel,
1418 const double gamma,
const double rho)
const
1421 std::vector<double> ExpectedTimes;
1422 std::vector<double> timeResiduals;
1425 tau0 =
TMath::Mean(AntennaTimes.begin(), AntennaTimes.end());
1430 int n = AntennaPositions.size();
1434 for (
int i = 0; i < n; ++i) {
1435 switch (waveFrontModel) {
1437 exp_time = (-(ShowerAxis * AntennaPositions[i])) /
c;
1441 exp_time = ((AntennaPositions[i] - ShowerAxis).GetMag()) / c;
1445 exp_time = ((AntennaPositions[i] - ShowerAxis).GetMag()) / (c * gamma);
1449 exp_time = (-ShowerAxis*AntennaPositions[i] + tan(rho) * fabs((fabs(ShowerAxis*AntennaPositions[i])*ShowerAxis-AntennaPositions[i]).GetMag())) / c;
1454 "GetTimeResiduals(): No method definded to calculate the expected time for that wave model");
1455 return timeResiduals;
1457 ExpectedTimes.push_back(exp_time);
1462 t0 =
TMath::Mean(ExpectedTimes.begin(), ExpectedTimes.end());
1465 for (
int i = 0; i < n; ++i) {
1467 timeResiduals.push_back((AntennaTimes[i] - tau0) - (ExpectedTimes[i] - t0));
1469 return timeResiduals;
1477 const det::Detector& detector = det::Detector::GetInstance();
1482 const Point siteOrigin(0, 0, 0, siteCS);
1484 Vector barySum(0, 0, 0, siteCS);
1485 double weightSum = 0;
1495 barySum /= weightSum;
1496 baryCenter = siteOrigin + barySum;
Branch GetTopBranch() const
unsigned int fWaveFrontModel
Class to access station level reconstructed data.
void SetParameter(Parameter i, double value, bool lock=true)
bool HasParameter(const Parameter i) const
utl::Vector GetAxis() const
Returns vector of the shower axis.
void SetParameterError(Parameter i, double value, bool lock=true)
void DeleteParameter(const Parameter i1)
fwk::VModule::ResultFlag CallSphericalWaveFitVarC(revt::REvent &rEvent, FitParameters &sFitResults, bool reuseFit=false)
fwk::VModule::ResultFlag CallConicalWaveFit(revt::REvent &rEvent, FitParameters &sFitResults, bool reuseFit=false)
double GetPhi(const CoordinateSystemPtr &coordinateSystem) const
azimuth (phi) angle in spherical and cylindrical coordinates
fwk::VModule::ResultFlag PlaneWaveFit(revt::REvent &rEvent, FitParameters &fit, int type) const
Report success to RunController.
Detector description interface for Station-related data.
StationRecData & GetRecData()
Get station level reconstructed data.
bool HasRecShower() const
Interface class to access to the Radio part of an event.
double GetR(const CoordinateSystemPtr &coordinateSystem) const
radius r in spherical coordinates coordinates (distance to origin)
double GetTheta(const CoordinateSystemPtr &coordinateSystem) const
zenith (theta) angle in spherical coordinates
Skip remaining modules in the current loop and continue with next iteration of the loop...
fwk::VModule::ResultFlag ScanSWFVarC(revt::REvent &rEvent, FitParameters &sFitResults) const
ShowerRecData & GetRecShower()
Interface class to access to the RD Reconstruction of a Shower.
bool HasSimShower() const
double GetParameterError(const Parameter i) const
fwk::VModule::ResultFlag SphericalWaveFit(revt::REvent &rEvent, FitParameters &fit, int type) const
vector< double > GetTimeResiduals(const vector< StationFitData > &vStationFitData, const Vector &showerAxis, const double tau0)
void Set(const std::vector< utl::Vector > &_AntennaPositions, const std::vector< double > &_AntennaTimes, const std::vector< double > &AntennaTimesErrors, const utl::CoordinateSystemPtr &_fgLocalCS)
#define INFO(message)
Macro for logging informational messages.
Objective function for the spherical wave fit.
StationIterator StationsEnd()
StationIterator StationsBegin()
string ToString(const G &g, const CoordinateSystemPtr cs)
void Init()
Initialise the registry.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
utl::CoordinateSystemPtr GetSiteCoordinateSystem() const
Get the coordinate system for the site.
const std::vector< double > GetTimeResiduals(const std::vector< utl::Vector > &AntennaPositions, const std::vector< double > &AntennaTimes, const utl::Vector &ShowerAxis, const unsigned int waveFrontModel, const double gamma=1, const double rho=0) const
boost::filter_iterator< StationFilter, AllStationIterator > StationIterator
Iterator over all (non-exculded) stations.
Detector description interface for RDetector-related data.
fwk::VModule::ResultFlag SphericalWaveFitVarC(revt::REvent &rEvent, FitParameters &fit, int type) const
utl::CoordinateSystemPtr fLocalCS
Chi2ForSphericalWaveFit * ChiSWF
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
Class representing a document branch.
Break current loop. It works for nested loops too!
utl::Point GetCoordinateOrigin() const
class to hold data at the radio Station level.
fwk::VModule::ResultFlag ScanSWF(revt::REvent &rEvent, FitParameters &sFitResults) const
fwk::VModule::ResultFlag CallSphericalWaveFit(revt::REvent &rEvent, FitParameters &sFitResults, bool reuseFit=false)
Objective function for the plane wave fit.
void Set(const std::vector< utl::Vector > &_AntennaPositions, const std::vector< double > &_AntennaTimes, const std::vector< double > &_AntennaTimesError, const utl::CoordinateSystemPtr &_fgLocalCS)
double GetX(const CoordinateSystemPtr &coordinateSystem) const
void Set(const std::vector< utl::Vector > &_AntennaPositions, const std::vector< double > &_AntennaTimes, const std::vector< double > &_AntennaTimesError, const utl::CoordinateSystemPtr &_fgLocalCS)
bool HasRRecShower() const
bool HasFRecShower() const
Chi2ForConicalWaveFit * ChiCWF
Top of the hierarchy of the detector description interface.
std::string fUsedCorePosition
#define WARNING(message)
Macro for logging warning messages.
void GetData(bool &b) const
Overloads of the GetData member template function.
utl::Point fReferenceCore
int GetId() const
Get the station Id.
fwk::VModule::ResultFlag ScanPWF(revt::REvent &rEvent, FitParameters &sFitResults) const
void SetSigmaGamma(double _sigma_gamma)
unsigned int currentWaveFrontModel
fwk::VModule::ResultFlag ConicalWaveFit(revt::REvent &rEvent, FitParameters &fit, int type) const
double GetParameter(const Parameter i) const
double GetY(const CoordinateSystemPtr &coordinateSystem) const
constexpr double kSpeedOfLight
ResultFlag
Flag returned by module methods to the RunController.
Chi2ForSphericalWaveFitVarC * ChiSWFVarC
Chi2ForPlaneWaveFit * ChiPWF
void SetParameterError(Parameter i, double value, bool lock=true)
void Set(const std::vector< utl::Vector > &_AntennaPositions, const std::vector< double > &_AntennaTimes, const std::vector< double > &_AntennaTimesError, const utl::CoordinateSystemPtr &_fgLocalCS)
void SetParameter(Parameter i, double value, bool lock=true)
Report failure to RunController, causing RunController to terminate execution.
fwk::VModule::ResultFlag ScanCWF(revt::REvent &rEvent, FitParameters &sFitResults) const
const rdet::RDetector & GetRDetector() const
double GetParameter(const Parameter i) const
double Mean(const std::vector< double > &v)
SignalStationIterator SignalStationsEnd()
double GetZ(const CoordinateSystemPtr &coordinateSystem) const
utl::Point GetPosition() const
Tank position in Site Cartesian Coordinates.
fwk::VModule::ResultFlag CallPlaneWaveFit(revt::REvent &rEvent, FitParameters &sFitResults, bool reuseFit=false) const
const Station & GetStation(const int stationId) const
Get station by Station Id.
std::string fUsedDirection
bool HasSRecShower() const
fwk::VModule::ResultFlag ComputeBaryCenter(const revt::REvent &rEvent, utl::Point &baryCenter)
Objective function for the conical wave fit.
Objective function for the spherical wave fit including the speed of light.
boost::filter_iterator< SignalStationFilter, AllStationIterator > SignalStationIterator
Iterator over all signal stations.
void SetParameterCovariance(Parameter i1, Parameter i2, double value, bool lock=true)
SignalStationIterator SignalStationsBegin()
boost::filter_iterator< SignalStationFilter, ConstAllStationIterator > ConstSignalStationIterator