7 #include <utl/config.h>
11 #include <utl/AugerException.h>
12 #include <utl/TimeStamp.h>
13 #include <utl/UTCDateTime.h>
14 #include <utl/ModifiedJulianDate.h>
15 #include <utl/NumericalErrorPropagation.h>
16 #include <utl/CorrelationMatrix.h>
18 #include <evt/Event.h>
23 #include <RecShower.h>
56 const double kFirstFullMoon = 1795.157467;
57 const double kMoonCycle = 29.53;
69 const double tt = (julianDay0 - 2415020.0) / 36525.0;
70 const double dgmst0 = (0.000001075*tt + 100.0021359)*tt + 0.276919398;
71 const double gmst0 = (dgmst0 - int(dgmst0)) * 24.0;
80 const double tt = (julianDay - 2415020.0) / 36525.;
82 const double llt = (0.000303*tt + 36000.7689)*tt + 279.6967;
83 const double ldt = (-0.001133*tt + 481267.8831)*tt + 270.4342;
84 const double mmt = (-0.000150*tt + 35999.0498)*tt + 358.4758;
85 const double mdt = (0.009192*tt + 477198.8491)*tt + 296.1046;
86 const double omegat = (0.002078*tt - 1934.1420)*tt + 259.1833;
88 const double ll = fmod(llt, 360.);
89 const double ld = fmod(ldt, 360.);
90 const double mm = fmod(mmt, 360.);
91 const double md = fmod(mdt, 360.);
93 double omega = fmod(omegat, 360.);
111 const double depsit =
112 (9.2100 + 0.00091*tt) * cos(omega*
deg)
113 + (0.5522 - 0.00029*tt) * cos(2*ll*deg)
114 - 0.0904 * cos(2*omega*deg)
115 + 0.0884 * cos(2*ld*deg)
116 + 0.0216 * cos((2*ll + mm)*deg)
117 + 0.0183 * cos((2*ld - omega)*deg)
118 + 0.0113 * cos((2*ld + md)*deg)
119 - 0.0093 * cos((2*ll - mm)*deg)
120 - 0.0006 * cos((2*ll - omega)*deg);
134 ((0.000000503*tt - 0.00000164)*tt - 0.0130125)*tt + 23.452294 +
135 0.00256*cos(omega*deg);
137 double nuthour = depsit / 3600 * cos(epsi*deg);
144 const vector<double>& y,
145 const vector<double>& ey,
157 for (
unsigned int i = 0; i < x.size(); ++i) {
159 const double wi = 1 / (ey[i]*ey[i]);
160 const double wX = wi * x[i];
161 const double wY = wi * y[i];
171 const double d = s1*sxx - sx*sx;
173 a0 = (sxx*sy - sx * sxy) / d;
174 a1 = (-sx*sy + s1 * sxy) / d;
176 chi2 = syy - a0*sy - a1*sxy;
183 const TVector3& coreUTM = recShower.GetCoreUTMCS();
184 TimeStamp coreTime(recShower.GetCoreTimeSecond(), recShower.GetCoreTimeNanoSecond());
192 vector<Parameter> locParameters;
193 locParameters.push_back(
Parameter(julianDay, 0.));
194 locParameters.push_back(
Parameter(gmst, 0.));
195 locParameters.push_back(
Parameter(coreUTM.X(), recShower.GetCoreEastingError()));
196 locParameters.push_back(
Parameter(coreUTM.Y(), recShower.GetCoreNorthingError()));
197 locParameters.push_back(
Parameter(coreUTM.Z(), 0.));
198 locParameters.push_back(
Parameter(recShower.GetZenith(), recShower.GetZenithError()));
199 locParameters.push_back(
Parameter(recShower.GetAzimuth(), recShower.GetAzimuthError()));
203 locCorrelations.
Set(2, 3, recShower.GetCoreNorthingEastingCorrelation());
204 locCorrelations.
Set(5, 6, recShower.GetZenithAzimuthCorrelation());
220 recShower.SetRightAscension(ra);
221 recShower.SetRightAscensionError(raErr);
222 recShower.SetDeclination(dec);
223 recShower.SetDeclinationError(decErr);
224 recShower.SetRDCorrelation(raDecCorr);
241 recShower.SetGalacticLatitude(galLat);
242 recShower.SetGalacticLongitude(galLong);
243 recShower.SetGalLatError(galLatErr);
244 recShower.SetGalLongError(galLongErr);
245 recShower.SetLongLatCorrelation(galLatLongCorr);
double ModifiedJulianDate(const time_t unixSecond)
const std::vector< double > & GetPropagatedErrors() const
unsigned int TimeStamp2HHMMSS(const utl::TimeStamp ×t)
Convert a TimeStamp into an integer representing the time as HHMMSS.
A TimeStamp holds GPS second and nanosecond for some event.
double CalculateNutationCorrection(const double julianDay)
Used by the calculation of the equatorial coordinates. TODO: Move such calculations to utl or use lib...
void Set(const int iPar, const int jPar, const double corr)
const CorrelationMatrix & GetPropagatedCorrelations() const
unsigned int TimeStamp2YYMMDD(const utl::TimeStamp ×t)
Convert a TimeStamp into an integer representing the date as YYMMDD.
double Get(const int iPar, const int jPar) const
double TimeStamp2GMST(const utl::TimeStamp &ts)
Convert a TimeStamp to GMST.
void FillCelestialCoordinates(RecShower &recShower)
void LinearFit(const vector< double > &x, const vector< double > &y, const vector< double > &ey, double &a0, double &a1, double &chi2)
Do a linear fit and return coefficients and chi2.
const std::vector< double > & GetFunctionResult() const
double TimeStamp2MoonCycle(const utl::TimeStamp ×t)
Convert a TimeStamp into a fractional mooncycle since 2004/01/07.