6 #include <utl/Vector.h>
7 #include <utl/CoordinateSystemPtr.h>
9 #include <utl/AugerUnits.h>
10 #include <utl/PhysicalConstants.h>
11 #include <utl/MuonArrivalTime.h>
12 #include <utl/AugerException.h>
14 #include <tls/TankResponseUtilities.h>
16 #include <sdet/STimeVariance.h>
20 using namespace SdHorizontalReconstructionNS;
30 : fConfig(config), fCore(core), fList(list), fExt(gd)
39 for (
size_t i = 0; i < 4; ++i)
40 if (std::isnan(pars[i]))
43 const double theta = pars[0];
44 const double phi = pars[1];
45 const double r = pars[2]*
km;
46 const double ct = pars[3]*
km;
52 for (StationList::const_iterator
57 if (sIt->fRejected)
continue;
59 double meanCT, sigmaCT;
60 Predict(meanCT, sigmaCT, *sIt, origin, ct);
61 result += 0.5 *
Sqr((sIt->fCTime - meanCT)/sigmaCT);
65 const double delta[2] = {
70 for (
size_t i = 0; i < 2; ++i)
71 for (
size_t j = 0; j < 2; ++j)
82 const Point& originPos,
83 const double originCT)
86 const Vector posToOrigin = originPos - sd.
fPos;
95 meanCT = originCT + posToOrigin.
GetMag();
108 static const double kStationTimeJitter = 20*
ns;
114 double tmean, tsigma;
115 fMat.GetApproximateMeanAndStDev(tmean, tsigma, nmuon < 1 ? 1: nmuon);
constexpr T Sqr(const T &x)
double Angle(const double theta1, const double phi1, const double theta2, const double phi2)
ShowerFrontFunction(const SdHorizontalReconstruction &config, const utl::Point &core, const StationList &list, const ExternalGeometryData &gd)
const StationList & fList
const ExternalGeometryData & fExt
void SetThetaAndDistance(const double theta, const double distance)
setup model for given zenith angle and mean production distance
void Predict(double &meanCT, double &sigmaCT, const StationData &sd, const utl::Point &originPos, const double originCT) const
double operator()(const std::vector< double > &pars) const
Base class for exceptions trying to access non-existing components.
utl::MuonArrivalTime fMat
const SdHorizontalReconstruction & fConfig
double fInvCov[size][size]
ShowerFrontModel fShowerFrontModel
utl::CoordinateSystemPtr fBaryCS
double TankMeanTrackLength(const double theta)
Mean track length of particle piercing Auger tank with zenith angle theta.
std::vector< StationData > StationList
constexpr double kSpeedOfLight
void SetCoordinates(const double r, const double delta)
void GetRhoAndDelta(double &rho, double &delta, const utl::Point &pos, const utl::Point &core, const utl::Point &origin)
double GetTimeSigma2(const double signal, const double t50, const double cosTheta, const double distance=0) const