2 #include <utl/ErrorLogger.h>
6 #include <fwk/CentralConfig.h>
7 #include <revt/StationRecData.h>
8 #include <utl/Vector.h>
10 #include <utl/BasicVector.h>
11 #include <utl/GeometryUtilities.h>
12 #include <utl/RadioGeometryUtilities.h>
13 #include <utl/CoordinateSystemPtr.h>
14 #include <utl/StringCompare.h>
16 #include <evt/Event.h>
17 #include <evt/ShowerRecData.h>
18 #include <evt/ShowerSRecData.h>
19 #include <evt/ShowerRRecData.h>
20 #include <evt/ShowerFRecData.h>
21 #include <evt/ShowerSimData.h>
23 #include <revt/REvent.h>
24 #include <revt/Station.h>
25 #include <revt/Header.h>
26 #include <revt/StationRecData.h>
27 #include <revt/StationRRecDataQuantities.h>
29 #include <det/Detector.h>
30 #include <rdet/RDetector.h>
33 #include "TGraph2DErrors.h"
37 #include "TFitResultPtr.h"
62 #include <fwk/CentralConfig.h>
63 #include <det/VManager.h>
64 #include <det/Detector.h>
65 #include <rdet/RDetector.h>
66 #include <utl/Branch.h>
67 #include <utl/RadioGeometryUtilities.h>
69 #include <evt/Event.h>
70 #include <evt/ShowerSRecData.h>
71 #include <evt/ShowerRecData.h>
72 #include <evt/ShowerRRecData.h>
73 #include <evt/ShowerSimData.h>
75 #include <revt/REvent.h>
76 #include <revt/Header.h>
77 #include <revt/StationConstants.h>
78 #include <revt/StationConstants.h>
80 #include <utl/TraceAlgorithm.h>
88 #include <atm/AerosolDB.h>
89 #include <atm/AerosolZone.h>
90 #include <atm/ProfileResult.h>
91 #include <atm/MonthlyAvgDBProfileModel.h>
100 #define OUT(x) if ((x) <= fInfoLevel) cerr << " "
103 namespace RdGlobalFit {
111 RdGlobalFit::~RdGlobalFit()
124 INFO(
"RdGlobalFit::Init()");
128 topBranch = CentralConfig::GetInstance()->
GetTopBranch(
"RdGlobalFit");
334 bool Sorter(std::vector<double> x, std::vector<double> y)
336 return (x[7] < y[7]);
348 INFO(
"RdGlobalFit::Run()");
351 WARNING(
"No radio event found!");
356 REvent& rEvent =
event.GetREvent();
358 event.MakeRecShower();
361 event.GetRecShower().MakeRRecShower();
364 ShowerRRecData& showerrrec =
event.GetRecShower().GetRRecShower();
366 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
369 const Point coreRF =
event.GetRecShower().GetRRecShower().GetCoordinateOrigin();
377 ERROR(
"fetching the localCSPtr according to Infile lead to NULLPtr -> eBreakLoop");
383 int Nant = showerrrec.
GetParameter(revt::eNumberOfStationsWithPulseFound);
392 unsigned int signal_stations = 0;
393 unsigned int silent_stations = 0;
413 if (signal_stations < 3) {
414 WARNING(
"Number of signalstations after rejection of saturated stations < 3 -> CONTINUE!");
421 std::vector<StationFitData> vStationFitData;
422 unsigned int nrDataPoints = 0;
423 double meanSignalTime = 0.;
424 double meanSignalTimeError = 0.;
439 double integral = sRec.
GetParameter(revt::eSignalEnergyFluenceMag);
443 uncertainty = uncertainty *
sqrt(1.79);
446 double signalTime = sIt->GetRecData().GetParameter(revt::eSignalTime);
447 double signalTimeError = sIt->GetRecData().GetParameterError(eSignalTime) *
sqrt(1.65);
450 ofstream errorDatei(
"ExperimentalErrors.txt",
ios::out | ios::app);
451 errorDatei <<
event.GetHeader().GetId() <<
"\t"
452 <<
event.GetREvent().GetHeader().GetRunNumber() <<
"\t OfflineTimeerror: "
453 << signalTimeError <<
"\t IntAmplError: " << uncertainty << endl;
458 temp_StationFitData.
stationId = sIt->GetId();
464 vStationFitData.push_back(temp_StationFitData);
466 meanSignalTime = meanSignalTime + signalTime;
467 meanSignalTimeError = meanSignalTimeError + signalTimeError;
471 meanSignalTime /= nrDataPoints;
472 meanSignalTimeError /= nrDataPoints;
515 ROOT::Minuit2::MnUserParameters upar;
566 upar.Fix(
"sigmaPlus");
586 upar.Fix(
"sigmaPlus");
604 upar.Fix(
"arrivalDirection_phi");
606 upar.Fix(
"arrivalDirection_theta");
608 upar.Fix(
"showerMax");
649 upar.SetValue(
"t0", meanSignalTime);
650 upar.SetLimits(
"t0", meanSignalTime + 30, meanSignalTime - 30);
653 const ROOT::Minuit2::MnStrategy strat(2);
656 ROOT::Minuit2::MnMigrad LDFPrefit(fitFunction, upar, strat);
662 ROOT::Minuit2::MnMigrad LDFPrefit(fitFunction, upar, strat);
663 LDFPrefit.Fix(
"arrivalDirection_phi");
664 LDFPrefit.Fix(
"arrivalDirection_theta");
665 LDFPrefit.Fix(
"gamma");
667 NDF =
calcNDF(LDFPrefit.Parameters(), nrDataPoints);
669 INFO(
"NDF less than 1 -> eContinueLoop");
672 ROOT::Minuit2::FunctionMinimum LDFPrefitMin = LDFPrefit();
673 cout <<
"Fit result Stage 1:" << endl << LDFPrefitMin << endl;
677 ROOT::Minuit2::MnMigrad LDFPrefit2 = LDFPrefit;
681 LDFPrefit2.Fix(
"arrivalDirection_phi");
682 LDFPrefit2.Fix(
"arrivalDirection_theta");
683 LDFPrefit2.Fix(
"gamma");
684 LDFPrefit2.Fix(
"t0");
686 LDFPrefit2.Release(
"core_x");
688 LDFPrefit2.Release(
"core_y");
689 NDF =
calcNDF(LDFPrefit2.Parameters(), nrDataPoints);
691 INFO(
"NDF less than 1 -> eContinueLoop");
694 ROOT::Minuit2::FunctionMinimum LDFPrefitMin2 = LDFPrefit2();
695 cout <<
"Fit result Stage 2:" << endl << LDFPrefitMin2 << endl;
699 ROOT::Minuit2::MnMigrad PrefitT0 = LDFPrefit2;
704 PrefitT0.Fix(
"Aplus");
705 PrefitT0.Fix(
"sigmaPlus");
710 PrefitT0.Fix(
"arrivalDirection_phi");
711 PrefitT0.Fix(
"arrivalDirection_theta");
712 PrefitT0.Fix(
"gamma");
713 PrefitT0.Fix(
"core_x");
714 PrefitT0.Fix(
"core_y");
716 PrefitT0.Release(
"t0");
717 NDF =
calcNDF(PrefitT0.Parameters(), nrDataPoints);
719 INFO(
"NDF less than 1 -> eContinueLoop");
722 ROOT::Minuit2::FunctionMinimum PrefitT0Min = PrefitT0();
723 cout <<
"Fit result Stage 3:" << endl << PrefitT0Min << endl;
727 ROOT::Minuit2::MnMigrad PrefitT = PrefitT0;
732 PrefitT.Fix(
"Aplus");
733 PrefitT.Fix(
"sigmaPlus");
739 PrefitT.Release(
"arrivalDirection_phi");
741 PrefitT.Release(
"arrivalDirection_theta");
743 PrefitT.Release(
"gamma");
745 PrefitT.Release(
"t0");
747 PrefitT.Fix(
"core_x");
748 PrefitT.Fix(
"core_y");
749 NDF =
calcNDF(PrefitT.Parameters(), nrDataPoints);
751 INFO(
"NDF less than 1 -> eContinueLoop");
754 ROOT::Minuit2::FunctionMinimum PrefitTMin = PrefitT();
755 cout <<
"Fit result Stage 4:" << endl << PrefitTMin << endl;
759 ROOT::Minuit2::MnMigrad Fit = PrefitT;
763 Fit.Release(
"Aplus");
765 Fit.Release(
"sigmaPlus");
772 Fit.Release(
"arrivalDirection_phi");
774 Fit.Release(
"arrivalDirection_theta");
776 Fit.Release(
"gamma");
785 Fit.Release(
"core_x");
787 Fit.Release(
"core_y");
788 NDF =
calcNDF(Fit.Parameters(), nrDataPoints);
790 INFO(
"NDF less than 1 -> eContinueLoop");
795 Fit.Release(
"arrivalDirection_phi");
797 Fit.Release(
"arrivalDirection_theta");
799 ROOT::Minuit2::FunctionMinimum minimum = Fit(10000, 0.0001);
800 cout <<
"Final fit result (Stage 5):" << endl <<
event.GetHeader().GetId() <<
"\t"
801 <<
event.GetREvent().GetHeader().GetRunNumber() <<
"\t" << endl <<
"Nr. St = " << nrDataPoints
802 << endl << meanSignalTime << meanSignalTime << endl << minimum << endl;
803 std::cout <<
"Nr fct calls: " << minimum.NFcn() << std::endl;
806 fitFunction(minimum.UserParameters().Params());
813 std::vector<double> contourParams = minimum.UserParameters().Params();
814 std::vector<std::vector<double> > contourVec;
815 ofstream Zieldatei(
"CoreContour.dat",
ios::out | ios::app);
816 for (
int x = -300; x < 301; x = x + 10) {
817 for (
int y = -300; y < 301; y = y + 10) {
818 std::vector<double> contourtriple;
819 contourParams[1] = x;
820 contourParams[2] = y;
821 contourtriple.push_back(x);
822 contourtriple.push_back(y);
823 contourtriple.push_back(fitFunction(contourParams));
824 contourVec.push_back(contourtriple);
825 Zieldatei << contourtriple[0] <<
"\t" << contourtriple[1] <<
"\t" << contourtriple[2]
826 <<
"\t" <<
event.GetHeader().GetId() << std::endl;
833 std::vector<double> contourParams = minimum.UserParameters().Params();
834 double min_x = minimum.UserParameters().Value(
"core_x");
835 double min_y = minimum.UserParameters().Value(
"core_y");
836 std::vector<std::vector<double> > contourVec;
837 ofstream Zieldatei(
"CoreContourZoom.dat",
ios::out | ios::app);
838 for (
double x = min_x - 5; x < min_x + 5; x = x + 0.25) {
839 for (
double y = min_y - 5; y < min_y + 5; y = y + 0.25) {
840 std::vector<double> contourtriple;
841 contourParams[1] = x;
842 contourParams[2] = y;
843 contourtriple.push_back(x);
844 contourtriple.push_back(y);
845 contourtriple.push_back(fitFunction(contourParams));
846 contourVec.push_back(contourtriple);
847 Zieldatei << contourtriple[0] <<
"\t" << contourtriple[1] <<
"\t" << contourtriple[2]
848 <<
"\t" <<
event.GetHeader().GetId() << std::endl;
856 std::vector<std::string> parameterNames;
857 parameterNames.push_back(
"showerMax");
858 parameterNames.push_back(
"core_x");
859 parameterNames.push_back(
"core_y");
860 parameterNames.push_back(
"core_z");
861 parameterNames.push_back(
"t0");
862 parameterNames.push_back(
"gamma");
863 parameterNames.push_back(
"arrivalDirection_theta");
864 parameterNames.push_back(
"arrivalDirection_phi");
865 parameterNames.push_back(
"Aplus");
866 parameterNames.push_back(
"sigmaPlus");
867 std::cout <<
"Defined scan parameters" << std::endl << flush;
868 std::vector<std::pair<std::vector<std::pair<double, double> >, std::string> > scanPlots(
873 ROOT::Minuit2::MnUserParameterState minUstate = minimum.UserState();
874 ROOT::Minuit2::MnUserCovariance cov = minUstate.Covariance();
877 sin(minUstate.Value(
"arrivalDirection_theta")) * cos(minUstate.Value(
"arrivalDirection_phi")),
878 sin(minUstate.Value(
"arrivalDirection_theta")) * sin(minUstate.Value(
"arrivalDirection_phi")),
879 cos(minUstate.Value(
"arrivalDirection_theta")), eventData.
fLocalCS);
880 double sineAlpha = RadioGeometryUtilities::GetLorentzVector(fittedShoweraxis,
883 double sigma = minUstate.Value(
"sigmaPlus");
884 double sigma_error = minUstate.Error(
"sigmaPlus");
885 double A = minUstate.Value(
"Aplus");
886 double A_error = minUstate.Error(
"Aplus");
887 double sigmaA_error = 0;
894 double gl_epsilonError =
pow(
901 +
pow(A, 2) *
pow(TMath::Pi(), 2)
906 2) *
pow(sigma_error, 2)
913 const double d = 2.3137 * 1e14;
914 const double c = 0.505;
915 double gl_energy = d *
std::pow(gl_epsilon / (sineAlpha * sineAlpha), c);
916 double gl_energyError = c * d *
std::pow(1 / (sineAlpha * sineAlpha), c)
917 *
std::pow(gl_epsilon, c - 1) * gl_epsilonError;
919 Point coreFit(minUstate.Value(
"core_x"), minUstate.Value(
"core_y"), minUstate.Value(
"core_z"),
921 Point coreFitError(minUstate.Error(
"core_x"), minUstate.Error(
"core_y"),
922 minUstate.Error(
"core_z"),
fLocalCS);
931 det::Detector::GetInstance().GetReferenceCoordinateSystem();
935 double RmaxFrSigma = 65 * minUstate.Value(
"sigmaPlus") - 3129;
936 double RmaxFrGamma = 200 * minUstate.Value(
"gamma") - 17700;
938 double XmaxFromSigma =
XmaxFromRmax(event, RmaxFrSigma, zenitInLocalCS);
939 double XmaxFromGamma =
XmaxFromRmax(event, RmaxFrGamma, zenitInLocalCS);
941 ShowerRRecData& showerReco =
event.GetRecShower().GetRRecShower();
942 showerReco.
SetParameter(eGlobalFitA, minUstate.Value(
"Aplus"));
944 showerReco.
SetParameter(eGlobalFitB, minUstate.Value(
"b"));
946 showerReco.
SetParameter(eGlobalFitChi2, minUstate.Fval());
947 showerReco.
SetParameter(eGlobalFitChi2A, minTwoDLDFLikelihood);
948 showerReco.
SetParameter(eGlobalFitChi2T, minArrivalTimeLikelihood);
951 showerReco.
SetParameter(eGlobalFitGamma, minUstate.Value(
"gamma"));
957 showerReco.
SetParameter(eGlobalFitSigma, minUstate.Value(
"sigmaPlus"));
959 showerReco.
SetParameter(eGlobalFitT0, minUstate.Value(
"t0"));
967 showerReco.
SetParameter(eGlobalFitValMin, minimum.IsValid());
968 showerReco.
SetParameter(eGlobalFitRmaxFrSigma, RmaxFrSigma);
969 showerReco.
SetParameter(eGlobalFitXmaxFrSigma, XmaxFromSigma);
970 showerReco.
SetParameter(eGlobalFitRmaxFrGamma, RmaxFrGamma);
971 showerReco.
SetParameter(eGlobalFitXmaxFrGamma, XmaxFromGamma);
981 std::vector<std::pair<std::vector<std::pair<double, double> >, std::string> > RdGlobalFit::scanParameters(
983 ROOT::Minuit2::FunctionMinimum minimum,
984 std::vector<std::string> parameterToScan)
986 ROOT::Minuit2::MnStrategy strat(2);
987 std::vector<std::pair<std::vector<std::pair<double, double> >, std::string> > scanResults;
988 ROOT::Minuit2::MnScan scan(fitFct, minimum.UserState(), strat);
989 for (std::vector<std::string>::iterator it = parameterToScan.begin(); it != parameterToScan.end();
991 std::cout <<
"Actual scaning of parameters." << std::endl << flush;
992 int parameterIndex = minimum.UserParameters().Index(*it);
993 double low = minimum.UserParameters().Value(*it) - 10 * minimum.UserParameters().Error(*it);
994 double up = minimum.UserParameters().Value(*it) + 10 * minimum.UserParameters().Error(*it);
995 std::vector<std::pair<double, double> > points = scan.Scan(parameterIndex, 50, low, up);
996 std::pair<std::vector<std::pair<double, double> >, std::string> parameterScan(points, *it);
997 scanResults.push_back(parameterScan);
1002 void RdGlobalFit::printPlotsVec(
1003 std::vector<std::pair<std::vector<std::pair<double, double> >, std::string> > plotsVec)
1005 for (std::vector<std::pair<std::vector<std::pair<double, double> >, std::string> >::iterator it =
1006 plotsVec.begin(); it != plotsVec.end(); ++it) {
1007 std::cout <<
"Plotting core scans" << std::endl << flush;
1008 std::vector<std::pair<double, double> > plotPoints = it->first;
1009 std::string plotComment = it->second;
1010 ROOT::Minuit2::MnPlot plot;
1011 cout <<
"Comment: " << endl << plotComment << endl;
1019 const Point coreRLocal =
event.GetRecShower().GetRRecShower().GetCoordinateOrigin();
1025 const Point coreSD =
event.GetRecShower().GetSRecShower().GetCorePosition();
1031 const Point coreMC =
event.GetSimShower().GetPosition();
1037 const Point coreRF =
event.GetRecShower().GetRRecShower().GetCoordinateOrigin();
1043 const Point coreRD =
event.GetRecShower().GetRRecShower().GetCorePosition();
1052 double RdGlobalFit::XmaxFromRmax(
evt::Event& event,
double rmax,
double zenithInLocalCS)
1056 const atm::Atmosphere& theAtm = det::Detector::GetInstance().GetAtmosphere();
1057 double hauger = 1564;
1059 double Xmax = ((depthVsheight.
Y(hauger + rmax *
m * cos(zenithInLocalCS))) / (
g /
cm /
cm))
1060 / cos(zenithInLocalCS);
1073 const utl::Plane XYPlaneFLocalCS(originFLocalCS, zAxisFLocalCS);
1075 const Point coreSD =
event.GetRecShower().GetSRecShower().GetCorePosition();
1076 const utl::Vector& axisSD =
event.GetRecShower().GetSRecShower().GetAxis();
1077 const utl::Line SDCoreAxisLine(coreSD, axisSD);
1086 const Point originTargetCS(0., 0., 0., targetCS);
1087 const utl::Vector zAxisTargetCS(0., 0., 1., targetCS);
1088 const utl::Plane XYPlaneTargetCS(originTargetCS, zAxisTargetCS);
1090 const utl::Line CoreAxisLine(core, axis);
1093 return CoreInTargetCSPlane;
1103 const Point coreRD =
event.GetRecShower().GetRRecShower().GetCorePosition();
1141 utl::Vector sAxis = -
event.GetSimShower().GetDirection();
1147 event.GetRecShower().GetRRecShower().GetAxis().GetTheta(
fLocalCS);
1151 event.GetRecShower().GetSRecShower().GetAxis().GetTheta(
fLocalCS);
1155 utl::Vector sAxis = -
event.GetSimShower().GetDirection();
1159 int RdGlobalFit::calcNDF(ROOT::Minuit2::MnUserParameters upar,
int nrSigSt)
1161 const std::vector<ROOT::Minuit2::MinuitParameter>& parameter = upar.Parameters();
1162 int dataPerStation = 0;
1167 int NDF = dataPerStation * nrSigSt;
1168 for (std::vector<ROOT::Minuit2::MinuitParameter>::const_iterator parit = parameter.begin();
1169 parit != parameter.end(); ++parit) {
1171 if ((parit->GetName() ==
"core_x") && !parit->IsFixed())
1173 if ((parit->GetName() ==
"core_y") && !parit->IsFixed())
1175 if ((parit->GetName() ==
"core_z") && !parit->IsFixed())
1177 if ((parit->GetName() ==
"arrivalDirection_theta") && !parit->IsFixed())
1179 if ((parit->GetName() ==
"arrivalDirection_phi") && !parit->IsFixed())
1181 if ((parit->GetName() ==
"Aplus") && !parit->IsFixed())
1183 if ((parit->GetName() ==
"C2Theta") && !parit->IsFixed())
1185 if ((parit->GetName() ==
"C1Theta") && !parit->IsFixed())
1187 if ((parit->GetName() ==
"CTheta") && !parit->IsFixed())
1189 if ((parit->GetName() ==
"C1") && !parit->IsFixed())
1191 if ((parit->GetName() ==
"C2") && !parit->IsFixed())
1193 if ((parit->GetName() ==
"sigmaPlus") && !parit->IsFixed())
1195 if ((parit->GetName() ==
"gamma") && !parit->IsFixed())
1197 if ((parit->GetName() ==
"b") && !parit->IsFixed())
1199 if ((parit->GetName() ==
"t0") && !parit->IsFixed())
1202 std::cout <<
"calculated NDF = " << NDF << std::endl;
1210 INFO(
"RdGlobalFit::Finish()");
Branch GetTopBranch() const
utl::CoordinateSystemPtr getlocalCSPtr(evt::Event &event)
void Update(const utl::TimeStamp &time, const bool invData=true, const bool invComp=true, const bool forceRadio=false)
Update detector: deletes currently constructed stations and sets new time.
Class to access station level reconstructed data.
Top of the interface to Atmosphere information.
void SetParameter(Parameter i, double value, bool lock=true)
double GetPhi(const CoordinateSystemPtr &coordinateSystem) const
azimuth (phi) angle in spherical and cylindrical coordinates
boost::filter_iterator< CandidateStationFilter, AllStationIterator > CandidateStationIterator
Iterator over all CandidateStations (i.e., HasSignal, HasNoSignal)
Report success to RunController.
evt::Header & GetHeader()
StationRecData & GetRecData()
Get station level reconstructed data.
bool HasRecShower() const
CandidateStationIterator CandidateStationsEnd()
utl::CoordinateSystemPtr fLocalCS
Interface class to access to the Radio part of an event.
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...
ShowerRecData & GetRecShower()
Interface class to access to the RD Reconstruction of a Shower.
int calcNDF(ROOT::Minuit2::MnUserParameters upar, int nrSigSt)
double GetParameterError(const Parameter i) const
double getTwoDLDFLikelyhood()
bool Sorter(std::vector< double > x, std::vector< double > y)
#define INFO(message)
Macro for logging informational messages.
void Init()
Initialise the registry.
vector< t2list > out
output of the algorithm: a list of clusters
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
double energyFluenceError
double pow(const double x, const unsigned int i)
LDFConstsTable fLDFConstsTable
double XmaxFromRmax(evt::Event &event, double rmax, double zenithInLocalCS)
double Y(const double x) const
Get the Y value (coordinate) for given X (ordinate)
Line Intersection(const Plane &p1, const Plane &p2)
Detector description interface for RDetector-related data.
double getArrivalTimeLikelihood()
RdGlobalFitData fGlobalFitData
utl::Point adaptSDCoreTofLocalCS(evt::Event &event)
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
utl::Point stationPosition
void setGlFitDataCore(evt::Event &event)
Class representing a document branch.
Break current loop. It works for nested loops too!
class to hold data at the radio Station level.
Class describing a Plane object.
double GetX(const CoordinateSystemPtr &coordinateSystem) const
Class describing the Atmospheric profile.
FitData arrivalDirection_phi
utl::CoordinateSystemPtr fLocalCS
void printPlotsVec(std::vector< std::pair< std::vector< std::pair< double, double > >, std::string > >)
calcLDFConsts fcalcLDFConsts
std::string startValueFrom
bool HasRRecShower() const
Top of the hierarchy of the detector description interface.
void setGlFitDataStartValues(evt::Event &event)
const atm::ProfileResult & EvaluateDepthVsHeight() const
Tabulated function giving Y=depth as a function of X=height.
CandidateStationIterator CandidateStationsBegin()
void setGlFitDataDirection(evt::Event &event)
#define WARNING(message)
Macro for logging warning messages.
void GetData(bool &b) const
Overloads of the GetData member template function.
double GetParameter(const Parameter i) const
double GetY(const CoordinateSystemPtr &coordinateSystem) const
utl::Point getCoreInCSPlane(utl::Point core, utl::Vector &axis, utl::CoordinateSystemPtr targetCS)
ResultFlag
Flag returned by module methods to the RunController.
unsigned long GetGPSSecond() const
GPS second.
void SetParameterError(Parameter i, double value, bool lock=true)
std::vector< std::pair< std::vector< std::pair< double, double > >, std::string > > scanParameters(RdGlobalFitMinimizationCriterion, ROOT::Minuit2::FunctionMinimum, std::vector< std::string >)
utl::Vector GetReferenceAxis(const Event &event) const
Returning the referencedirection depending on the corresponding flag.
bool fitGammaAndSigmaPlusIndependently
double GetParameter(const Parameter i) const
FitData arrivalDirection_theta
double GetZ(const CoordinateSystemPtr &coordinateSystem) const
utl::Point GetPosition() const
Tank position in Site Cartesian Coordinates.
utl::Vector GetMagneticFieldVector() const
returns the magnetic field vector from the components stored in the parameter storage ...
#define ERROR(message)
Macro for logging error messages.
const Station & GetStation(const int stationId) const
Get station by Station Id.