5 #include <fwk/CentralConfig.h>
8 #include <utl/ErrorLogger.h>
9 #include <utl/Vector.h>
10 #include <utl/Point.h>
11 #include <utl/RadioGeometryUtilities.h>
12 #include <utl/CoordinateSystemPtr.h>
13 #include <utl/Minou.h>
16 #include <evt/Event.h>
17 #include <evt/ShowerRecData.h>
18 #include <evt/ShowerSRecData.h>
19 #include <evt/ShowerRRecData.h>
20 #include <evt/ShowerSimData.h>
23 #include <revt/REvent.h>
24 #include <revt/Header.h>
25 #include <revt/Station.h>
26 #include <revt/StationRecData.h>
27 #include <revt/StationRRecDataQuantities.h>
30 #include <det/Detector.h>
31 #include <rdet/RDetector.h>
34 #include <atm/AerosolDB.h>
35 #include <atm/AerosolZone.h>
36 #include <atm/ProfileResult.h>
37 #include <atm/MonthlyAvgDBProfileModel.h>
38 #include <atm/InclinedAtmosphericProfile.h>
39 #include <atm/SimShowerProfileModel.h>
53 namespace RdHASLDFFitter {
56 RdHASLDFFitter::RadiationDensityCorrection(
57 const double densityMax,
const double densityMaxErr,
58 double& radiationDensityCorrection,
double& radiationDensityCorrectionErr)
const
63 const double densityAvg = fAvgDensity;
64 const double p0 = fp0;
65 const double p1 = fp1;
67 radiationDensityCorrection =
pow(1 - p0 + p0 * exp(p1 * (densityMax - densityAvg)), -2);
69 radiationDensityCorrectionErr =
70 abs(-2 * p0 * p1 * exp(p1 * (densityMax - densityAvg)) * densityMaxErr) /
71 pow(1 - p0 + p0 * exp(p1 * (densityMax - densityAvg)), 3);
79 const ShowerRRecData& showerrrec =
event.GetRecShower().GetRRecShower();
86 double azimuthErr = 0;
94 zenith = sShowerAxis.
GetTheta(refCoreCS);
95 azimuth = sShowerAxis.
GetPhi(refCoreCS);
101 zenith = rShowerAxis.
GetTheta(refCoreCS);
102 azimuth = rShowerAxis.
GetPhi(refCoreCS);
106 ERROR(
"Selected ReferenceAxis (in RdEventInitalizer) is not supported! Return sineAlphaSquareErr = 0.");
111 const Vector magneticFieldNormalized = magneticField / magneticField.
GetMag();
112 const double mx = magneticFieldNormalized.
GetX(refCoreCS);
113 const double my = magneticFieldNormalized.
GetY(refCoreCS);
114 const double mz = magneticFieldNormalized.
GetZ(refCoreCS);
117 const double dsineAlphaSquareDzenith =
118 2 * ((mz * cos(zenith) * cos(azimuth) + mx * sin(zenith)) * (-mx * cos(zenith) + mz * cos(azimuth) * sin(zenith)) +
119 cos(zenith) * sin(zenith) *
Sqr(my * cos(azimuth) - mx * sin(azimuth)) -
120 (my * sin(zenith) + mz * cos(zenith) * sin(azimuth)) * (my * cos(zenith) - mz * sin(zenith) * sin(azimuth)));
122 const double dsineAlphaSquareDazimuth =
123 2 * sin(zenith) * (-my * cos(azimuth) + mx * sin(azimuth)) *
124 (mz * cos(zenith) + sin(zenith) * (mx * cos(azimuth) + my * sin(azimuth)));
126 const double sineAlphaSquareErr =
127 sqrt(
Sqr(dsineAlphaSquareDzenith * zenithErr) +
Sqr(dsineAlphaSquareDazimuth * azimuthErr));
128 return sineAlphaSquareErr;
133 RdHASLDFFitter::ElectromagneticEnergy(
134 const double sRad,
const double sRadErr,
135 double& electromagneticEnergyRec,
double& electromagneticEnergyRecErr,
const double zenith)
const
141 const double gamma = fGamma;
144 s19 = s19 / (1 + fSTEPFCCorrectionToSimulatedRadioEnergyScale);
146 electromagneticEnergyRec =
pow(sRad / s19, 1 / gamma) * 1e19 *
eV;
147 electromagneticEnergyRecErr =
pow(sRad / s19, 1 / gamma - 1) * 1e19 * eV / (s19 * gamma) * sRadErr;
149 if (fApplyParametricCorrectionToElectromagneticEnergyUncertainty) {
152 const double correctionFactorEem =
153 1.98593279e+03 *
pow(
Sqr(sin(zenith)) -
Sqr(sin(65 *
utl::deg)), 4) + 1.44615405e+00;
154 electromagneticEnergyRecErr *= correctionFactorEem;
161 RdHASLDFFitter::GetXmaxEstimator(
const evt::Event& event,
double& xmax)
164 if (fXmaxType ==
"MC") {
166 ERROR(
"Event has no sim shower but fXmaxType == simulation was choose.");
172 }
else if (fXmaxType ==
"Param") {
174 ERROR(
"Event has no SD rec shower. Can not estimate Xmax with utl::XmaxParam::Mean.");
178 const double crEnergy = sdShower.
GetEnergy();
181 }
else if (fXmaxType ==
"Average") {
182 xmax = 750 *
g /
cm2;
184 ERROR(
"Wrong fXmaxType choosen!");
200 topBranch.
GetChild(
"MinimumNumberOfStations").
GetData(fMinimumNumberOfStations);
203 topBranch.
GetChild(
"AddLowestSignalAsError").
GetData(fAddLowestSignalAsError);
204 topBranch.
GetChild(
"AddRelativeMaxSignalError").
GetData(fAddRelativeMaxSignalError);
208 std::string hadronicInteractionModule =
209 topBranch.
GetChild(
"HadronicInteractionModel").
Get<
string>();
210 if (hadronicInteractionModule ==
"Sibyll2.3d")
212 else if (hadronicInteractionModule ==
"EPOS-LHC")
214 else if (hadronicInteractionModule ==
"QGSJETII-04")
218 "You used an invalid HadronicInteractionModel in the XML config.");
223 topBranch.
GetChild(
"UseSaturatedStations").
GetData(fUseSaturatedStations);
224 topBranch.
GetChild(
"UseParametrizationToDisentanglePolarisation").
GetData(
225 fUseParametrizationToDisentanglePolarisation);
233 topBranch.
GetChild(
"STEPFCCorrectionToSimulatedRadioEnergyScale")
234 .
GetData(fSTEPFCCorrectionToSimulatedRadioEnergyScale);
236 topBranch.
GetChild(
"ApplyParametricCorrectionToElectromagneticEnergyUncertainty")
237 .
GetData(fApplyParametricCorrectionToElectromagneticEnergyUncertainty);
241 "\tMinimum number of required stations: " << fMinimumNumberOfStations <<
"\n"
242 "\tUse saturated stations: " << fUseSaturatedStations <<
"\n"
243 "\tFit distance to xmax / core: (" << fFitDistanceToXmax <<
"/" << fFitCore <<
")\n"
244 "\tXmax estimator used to determine inital fit values: " << fXmaxType <<
"\n";
245 if (fXmaxType ==
"Param")
246 info <<
"\tUsed high-energy hadronic interaction model : " << hadronicInteractionModule <<
"\n";
247 info <<
"\tDirection used in fit: " << fFitDirection <<
"\n"
248 "\tUse parametrization to determine geomagnetic energy fluence: "
249 << fUseParametrizationToDisentanglePolarisation <<
"\n"
251 if (fUseSoftExponent)
252 info <<
"\"soft\" (default) ";
254 info <<
"\"hard\" (not default) ";
255 info <<
"exponent in geomagnetic ldf" <<
"\n"
256 <<
"\tUse correction for uncertainty: " << fApplyParametricCorrectionToElectromagneticEnergyUncertainty <<
"\n"
257 <<
"\tApply STEPFC energy scale correction factor of: " << fSTEPFCCorrectionToSimulatedRadioEnergyScale <<
"\n";
268 WARNING(
"No radio event found!");
269 return eContinueLoop;
279 ShowerRRecData& showerrrec =
event.GetRecShower().GetRRecShower();
283 det::Detector::GetInstance().GetReferenceCoordinateSystem();
289 if (fFitDirection ==
"Reference") {
291 }
else if (fFitDirection ==
"Rd") {
293 INFO(
"Rd axis requested for reconstruction. Not available. Skip event ...");
294 return eContinueLoop;
296 refShowerAxis = showerrrec.
GetAxis();
300 const double zenith = refShowerAxis.
GetTheta(refCoreCS);
301 const double azimuth = refShowerAxis.
GetPhi(refCoreCS);
304 info <<
"Use geometry:\n"
305 "\tzenith = " << zenith /
utl::deg <<
" deg, azimuth = " << azimuth /
utl::deg <<
" deg\n"
306 "\t" <<
"core in ref cs (PA): (" << refShowerCore.
GetX(referenceCS) /
meter <<
", "
307 << refShowerCore.
GetY(referenceCS) /
meter <<
", "
308 << refShowerCore.
GetZ(referenceCS) /
meter <<
')';
313 const double sineAlpha = RadioGeometryUtilities::GetLorentzVector(refShowerAxis, magneticField).GetMag();
316 const det::Detector& detector = det::Detector::GetInstance();
319 vector<StationFitData> vStationFitData;
320 unsigned int numberOfSignalStations = 0;
322 double addErrMin = 0;
323 if (fAddLowestSignalAsError) {
326 for (
const auto& station : rEvent.SignalStationsRange()) {
327 const auto& sRec = station.GetRecData();
330 if (!fUseSaturatedStations && station.IsSaturated())
333 if (addErrMin > sRec.GetParameter(revt::eSignalEnergyFluenceVxB))
334 addErrMin = sRec.GetParameter(revt::eSignalEnergyFluenceVxB);
338 double addErrMax = 0;
339 if (fAddRelativeMaxSignalError) {
342 "fAddRelativeMaxSignalError is true, requieres SimShower.");
347 const double sineAlphaMC = RadioGeometryUtilities::GetLorentzVector(
350 const double fGeoMax = (6.70443081e+07 *
meter / dmaxMc + 1.07044401e+02) *
Sqr(eemMc /
EeV * sineAlphaMC);
351 addErrMax = fAddRelativeMaxSignalError * fGeoMax;
355 for (
auto& station : rEvent.SignalStationsRange()) {
356 auto& sRec = station.GetRecData();
359 if (!fUseSaturatedStations && station.IsSaturated())
362 if (fAddLowestSignalAsError) {
363 sRec.SetParameterError(revt::eSignalEnergyFluenceVxB,
364 sqrt(
Sqr(sRec.GetParameterError(revt::eSignalEnergyFluenceVxB)) +
368 if (fAddRelativeMaxSignalError) {
369 sRec.SetParameterError(revt::eSignalEnergyFluenceVxB,
370 sqrt(
Sqr(sRec.GetParameterError(revt::eSignalEnergyFluenceVxB)) +
375 stationFitData.
fId = station.GetId();
377 stationFitData.
fEnergyFluenceVxB = sRec.GetParameter(revt::eSignalEnergyFluenceVxB);
382 vStationFitData.push_back(stationFitData);
384 ++numberOfSignalStations;
388 info <<
"Number of Signal Stations: " << numberOfSignalStations;
391 if (numberOfSignalStations < fMinimumNumberOfStations) {
392 WARNING(
"Number of signal stations after rejection " +
393 to_string(fMinimumNumberOfStations) +
" -> doing nothing!");
399 double showerXmaxGuess = 0;
400 if (!GetXmaxEstimator(event, showerXmaxGuess) || showerXmaxGuess / (
g/
cm2) <= 1) {
402 info <<
"Could not get xmax estimator \"" << fXmaxType <<
"\": "
403 << showerXmaxGuess / (
g /
cm2);
420 const double distanceToXmaxGuess =
abs(distanceFromDepth.
Y(showerXmaxGuess));
422 const utl::Point showerMax = refShowerCore + refShowerAxis * distanceToXmaxGuess;
424 info <<
"Position of shower maximum (estimation with \"" << fXmaxType <<
"\": "
425 << showerXmaxGuess / (
g/
cm2) <<
") (for PA): (" << showerMax.
GetX(refCoreCS) /
meter
426 <<
", " << showerMax.GetY(refCoreCS) /
meter
427 <<
", " << showerMax.GetZ(refCoreCS) /
meter <<
')';
433 fitShowerData.
fZenith = zenith;
444 fitConfig.
fUseParam = fUseParametrizationToDisentanglePolarisation;
448 const bool fitDXmax = (fFitDistanceToXmax && numberOfSignalStations >= 3);
449 const bool fitCore = (fFitCore && !fFitDistanceToXmax && numberOfSignalStations >= 3) ||
450 (fFitCore && numberOfSignalStations >= 4);
455 crEnergy =
event.GetRecShower().GetSRecShower().GetEnergy();
457 INFOFinal(
"No SD rec shower information available. "
458 "Use a cosmic ray energy 1 EeV to determine start value for radiation energy ");
461 const double startEgeo = 26.86e6 *
eV *
pow(crEnergy / (1e18 *
eV), 1.989) *
Sqr(sineAlpha);
464 info <<
"Attempt LDF fit: Egeo = " << startEgeo <<
" eV, dmax = " << distanceToXmaxGuess <<
" m.";
468 vector<utl::Minou::ParameterDef> parameters;
471 parameters.emplace_back(
"E_geo", startEgeo, 10, 1e3, 1e13,
false);
475 const double dxmaxMin =
max(-heightFromDistance.
MaxX(), 0.7 * distanceToXmaxGuess /
meter);
476 const double dxmaxMax = min(-heightFromDistance.
MinX(), 1.5 * distanceToXmaxGuess /
meter);
477 parameters.emplace_back(
"distance_xmax_geometric", distanceToXmaxGuess /
meter, 100, dxmaxMin, dxmaxMax,
true);
480 parameters.emplace_back(
"core_x", 0, 1, -1000, 1000,
true);
481 parameters.emplace_back(
"core_y", 0, 1, -1000, 1000,
true);
484 const double egeoCorrectionFactor = 1;
486 vStationFitData, fitShowerData, parameters, fitConfig, egeoCorrectionFactor
490 vector<double> tmpFitResult;
493 vector<pair<double, double>> bestParametersAndErrors;
498 if (fInfoLevel >= eInfoIntermediate)
509 tmpFitResult = min.GetParameters();
511 chi2 = fitFunction.
GetChi2(tmpFitResult);
512 ndf = fitFunction.
GetNDF();
513 bestParametersAndErrors = min.GetParametersAndErrors();
520 const vector<int> fixed({0, 1, 0, 0});
527 if (fInfoLevel >= eInfoIntermediate)
538 tmpFitResult = min.GetParameters();
540 chi2 = fitFunction.
GetChi2(min.GetParameters());
541 ndf = fitFunction.
GetNDF();
542 bestParametersAndErrors = min.GetParametersAndErrors();
549 const vector<int> fixed({0, 0, 1, 1});
556 if (fInfoLevel >= eInfoIntermediate)
567 tmpFitResult = min.GetParameters();
569 chi2 = fitFunction.
GetChi2(min.GetParameters());
570 ndf = fitFunction.
GetNDF();
571 bestParametersAndErrors = min.GetParametersAndErrors();
578 const vector<int> fixed({0, !fitDXmax, 0, 0});
589 if (fInfoLevel >= eInfoIntermediate)
600 tmpFitResult = min.GetParameters();
602 chi2 = fitFunction.
GetChi2(min.GetParameters());
603 ndf = fitFunction.
GetNDF();
604 bestParametersAndErrors = min.GetParametersAndErrors();
608 const double egeo = bestParametersAndErrors.at(0).first;
609 const double egeoErr = bestParametersAndErrors.at(0).second;
611 const double distanceToXmaxFit = bestParametersAndErrors.at(1).first;
612 double distanceToXmaxFitErr;
614 distanceToXmaxFitErr = bestParametersAndErrors.at(1).second;
617 distanceToXmaxFitErr = 0.06 * distanceToXmaxFit;
620 const double coreX = bestParametersAndErrors.at(2).first;
621 const double coreXerr = bestParametersAndErrors.at(2).second;
623 const double coreY = bestParametersAndErrors.at(3).first;
624 const double coreYerr = bestParametersAndErrors.at(3).second;
626 double densityAtXmaxFit = 0;
627 double densityAtXmaxFitErr = 0;
629 const double dxmax_sysdown = distanceToXmaxFit - distanceToXmaxFitErr;
630 const double dxmax_sysup = distanceToXmaxFit + distanceToXmaxFitErr;
632 densityAtXmaxFit = densityFromHeight.
Y(heightFromDistance.
Y(-distanceToXmaxFit));
633 densityAtXmaxFitErr =
634 (densityFromHeight.
Y(heightFromDistance.
Y(-dxmax_sysdown)) -
635 densityFromHeight.
Y(heightFromDistance.
Y(-dxmax_sysup))) / 2;
636 }
catch (
const std::exception& e) {
637 INFOFinal(
"No proper error propagation possible, fit is discarded."
638 " distanceToXmaxFit +/- distanceToXmaxFitErr out of table range for heightFromDistance");
645 info <<
"LDF fit succesfull:\n"
646 "\tEgeo = " << egeo/
MeV <<
" +- " << egeoErr /
MeV <<
" MeV (" << egeoErr / egeo * 100 <<
" %)\n"
647 "\tdmax = " << distanceToXmaxFit /
km <<
" +- " << distanceToXmaxFitErr /
km <<
" km "
648 "(" << distanceToXmaxFitErr / distanceToXmaxFit * 100 <<
" %)\n"
649 "\tCoreX = " << coreX /
m <<
" +- " << coreXerr /
m <<
" m, CoreY = "
650 << coreY /
m <<
" +- " << coreYerr /
m <<
" m\n"
651 "\tchi2 / ndf = " << chi2 <<
" / " << ndf <<
" = " << chi2 / ndf;
658 for (
const auto&
s : vStationFitData) {
662 sRec.
SetParameter(revt::eEarlyLateCorrectionFactor,
s.fCEarlyLate);
663 sRec.
SetParameter(revt::eChargeExcessFraction,
s.fCeFraction);
664 sRec.
SetParameter(revt::ePredictedEnergyFluenceVxB,
s.fEnergyFluenceVxBPredict);
665 sRec.
SetParameter(revt::eGeomagneticEnergyFluence,
s.fEnergyFluenceGeomagnetic);
666 sRec.
SetParameterError(revt::eGeomagneticEnergyFluence,
s.fEnergyFluenceGeomagneticErr);
670 showerrrec.
SetParameter(revt::eGeomagneticRadiationEnergy, egeo);
673 showerrrec.
SetParameter(revt::eHASLDFDensityAtXmax, densityAtXmaxFit / (
kg/
m3));
675 showerrrec.
SetParameter(revt::eHASLDFDistanceToXmaxGeometric, distanceToXmaxFit /
meter);
694 for (
auto& station : rEvent.StationsRange()) {
704 sRec.
SetParameter(revt::eLDFFitStationPositionVxB, xvxB);
705 sRec.
SetParameter(revt::eLDFFitStationPositionVxVxB, yvxB);
710 double densityCorrection = 0;
711 double densityCorrectionErr = 0;
712 RadiationDensityCorrection(densityAtXmaxFit, densityAtXmaxFitErr, densityCorrection, densityCorrectionErr);
713 showerrrec.
SetParameter(revt::eDensityCorrectionFactor, densityCorrection);
714 showerrrec.
SetParameterError(revt::eDensityCorrectionFactor, densityCorrectionErr);
716 double radioEnergyEstimator = egeo /
Sqr(sineAlpha) * densityCorrection;
719 const double radioEnergyEstimatorErr =
720 radioEnergyEstimator *
722 Sqr(densityCorrectionErr / densityCorrection) +
723 Sqr(sineAlphaSquareErr /
Sqr(sineAlpha)));
725 showerrrec.
SetParameter(revt::eCorrectedGeomagneticRadiationEnergy, radioEnergyEstimator);
726 showerrrec.
SetParameterError(revt::eCorrectedGeomagneticRadiationEnergy, radioEnergyEstimatorErr);
728 double electromagneticEnergyRec = 0;
729 double electromagneticEnergyRecErr = 0;
730 ElectromagneticEnergy(
731 radioEnergyEstimator, radioEnergyEstimatorErr,
732 electromagneticEnergyRec, electromagneticEnergyRecErr, zenith);
733 showerrrec.
SetParameter(revt::eReconstructedElectromagneticEnergy, electromagneticEnergyRec);
734 showerrrec.
SetParameterError(revt::eReconstructedElectromagneticEnergy, electromagneticEnergyRecErr);
738 const double cosmicRayEnergy = electromagneticEnergyRec * (1.14263 - 0.03279 * log10(electromagneticEnergyRec / (10 *
utl::EeV)));
739 const double cosmicRayEnergyErr = electromagneticEnergyRecErr * (cosmicRayEnergy / electromagneticEnergyRec);
740 showerrrec.
SetParameter(revt::eCosmicRayEnergy, cosmicRayEnergy);
745 const double sig = fitFunction.
GetSig(distanceToXmaxFit);
746 const double p = fitFunction.
GetP(distanceToXmaxFit);
747 const double arel = fitFunction.
GetArel(distanceToXmaxFit);
748 const double r02 = fitFunction.
GetR02(distanceToXmaxFit);
766 RdHASLDFFitter::Finish()
769 const double total = fSuccessfulFits + fFailedFits;
771 info <<
"Number of successful and failed fits: " << fSuccessfulFits <<
" / " << fFailedFits
772 <<
" (" << fSuccessfulFits / total * 100 <<
"%, " << fFailedFits / total * 100 <<
"%)";
774 info <<
"No radio has ldf fit was performed!";
void SetVerbose(const bool verbose)
Branch GetTopBranch() const
Class to access station level reconstructed data.
Top of the interface to Atmosphere information.
void SetParameter(Parameter i, double value, bool lock=true)
utl::Vector GetAxis() const
Returns vector of the shower axis.
void SetParameterError(Parameter i, double value, bool lock=true)
utl::Point GetReferenceCorePosition(const Event &event) const
Returning the reference core position depending on the corresponding flag.
double GetZenithError() const
returns the error of the zenith angle (from the wave fit)
constexpr T Sqr(const T &x)
double GetPhi(const CoordinateSystemPtr &coordinateSystem) const
azimuth (phi) angle in spherical and cylindrical coordinates
void InitSlantProfileModel(const utl::Point &core, const utl::Vector &dir, const double deltaX) const
Interface class to access to the SD Reconstruction of a Shower.
StationRecData & GetRecData()
Get station level reconstructed data.
const evt::VGaisserHillasParameter & GetGHParameters() const
Get the Gaisser-Hillas parameters of the shower.
bool HasRecShower() const
atm::ProfileResult fDensityFromHeight
Interface class to access to the Radio part of an event.
double GetTheta(const CoordinateSystemPtr &coordinateSystem) const
zenith (theta) angle in spherical coordinates
Base class for exceptions arising because configuration data are not valid.
ShowerRecData & GetRecShower()
Interface class to access to the RD Reconstruction of a Shower.
const atm::ProfileResult & EvaluateDensityVsHeight() const
Tabulated function giving Y=density as a function of X=height.
bool HasSimShower() const
double GetElectromagneticEnergy() const
Get the electromagnetic energy of the shower.
const atm::ProfileResult & EvaluateDistanceVsSlantDepth() const
Table of distance as a function of slant depth.
#define INFO(message)
Macro for logging informational messages.
double GetChi2(const std::vector< double > &pars)
void SetParameterDefFixed(const std::vector< int > &fixed)
void Init()
Initialise the registry.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
double pow(const double x, const unsigned int i)
Station & GetStation(const int stationId)
retrieve station by id throw utl::NonExistentComponentException if n.a.
double GetArel(const double dmax) const
double GetAzimuthError() const
returns the error of the azimuth angle (from the wave fit)
double Y(const double x) const
Get the Y value (coordinate) for given X (ordinate)
Detector description interface for RDetector-related data.
double CalculateR0() const
Interface class to access Shower Simulated parameters.
const atm::Atmosphere & GetAtmosphere() const
atm::ProfileResult fHeightFromDistance
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
#define INFOIntermediate(y)
utl::Point GetVectorFromShowerPlaneVxB(const double x, const double y, const double z, const bool verticalZero) const
in case of positions, the positions has to be relative to the core positions!!!
Class representing a document branch.
double GetDistanceOfShowerMaximum() const
Get the geometrical distance of the shower maximum from the core.
class to hold data at the radio Station level.
double fEnergyFluenceVxVxBErr
bool HasAxis() const
Return true if all 3 axis parameter are set.
const utl::Vector & GetDirection() const
Get the direction of the shower axis. This is the true direction of shower movement.
double GetX(const CoordinateSystemPtr &coordinateSystem) const
Class describing the Atmospheric profile.
double GetSig(const double dmax) const
double abs(const SVector< n, T > &v)
double GetSineAlphaSquareErr(const Event &event)
double GetR02(const double dmax) const
bool HasRRecShower() const
Top of the hierarchy of the detector description interface.
double GetThetaError() const
double fEnergyFluenceVxVxB
const utl::Vector & GetAxis() const
double GetPhiError() const
#define WARNING(message)
Macro for logging warning messages.
void GetData(bool &b) const
Overloads of the GetData member template function.
void GetVectorInShowerPlaneVxB(double &x, double &y, double &z, const utl::Point &point) const
in case of positions, the positions has to be relative to the core positions!!!
double GetY(const CoordinateSystemPtr &coordinateSystem) const
double MinX() const
Return the minimum value for X (ordinate) stored in the profile.
double fEnergyFluenceVxBErr
ResultFlag
Flag returned by module methods to the RunController.
int Minimize(const int n=500)
void SetParameterError(Parameter i, double value, bool lock=true)
void SetParameterDefValues(const std::vector< double > &vals)
void SetParameter(Parameter i, double value, bool lock=true)
utl::Vector GetReferenceAxis(const Event &event) const
Returning the referencedirection depending on the corresponding flag.
void GetPrediction(const std::vector< double > &pars)
atm::ProfileResult fRefracFromHeight
const rdet::RDetector & GetRDetector() const
double Mean(const std::vector< double > &v)
const atm::ProfileResult & EvaluateRefractionIndexVsHeight() const
Tabulated function giving Y=refraction index as a function of X=height.
double GetZ(const CoordinateSystemPtr &coordinateSystem) const
utl::Point GetPosition() const
Tank position in Site Cartesian Coordinates.
ReferenceAxis GetReferenceAxisFlag() const
returns the flag which specify the used reference direction
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.
bool HasSRecShower() const
double GetP(const double dmax) const
double GetNormalization() const override
double MaxX() const
Return the maximum value for X (ordinate) stored in the profile.
const atm::ProfileResult & EvaluateHeightVsDistance() const
Table of height as a function of distance.