5 #include <utl/AugerUnits.h>
7 #include <utl/EquationSolver.h>
9 #include <utl/AugerException.h>
11 #include <tls/MuonProfile.h>
12 #include <tls/VTankResponse.h>
13 #include <tls/EMComponent.h>
17 using namespace SdHorizontalReconstructionNS;
27 : fType(eFull), fConfig(config), fList(list), fSList(slist), fExt(gd)
44 if (fUseAxisCovariance)
53 fUseAxisCovariance = 0;
63 for (
size_t i = 0; i < 6; ++i)
64 if (std::isnan(pars[i]))
67 const double n19 = pars[0];
68 const double coreX = pars[1]*
km;
69 const double coreY = pars[2]*
km;
70 const double theta0 = pars[3];
71 const double phi0 = pars[4];
72 const double distance0 = pars[5]*
km;
79 const Vector axis = origin - core;
85 for (StationList::const_iterator
90 if (sIt->fRejected)
continue;
94 if (sIt->fRecoveryErr > 0)
97 Predict(mean, sigma, sIt->fPos, origin, n19, core, sIt->fRecoveryErr);
98 const double z = (sIt->fSignal - mean)/sigma;
106 double xProj, yProj, rho, sTheta;
110 const double ratioSEmSMu =
113 const double signalMu = sIt->fSignal/(1.0+ratioSEmSMu);
122 Predict(mean, sigma, sIt->fPos, origin, n19, core);
123 const double z = (sIt->fSignal - mean)/mean;
136 double xProj, yProj, rho, sTheta;
140 const double ratioSEmSMu =
150 double xProj, yProj, rho, sTheta;
154 const double ratioSEmSMu =
157 const double signalMu = sIt->fSignal/(1.0+ratioSEmSMu);
167 Predict(mean, sigma, sIt->fPos, origin, n19, core);
168 const double z = (sIt->fSignal - mean)/sigma;
175 for (SilentStationList::const_iterator
183 double xProj, yProj, rho, sTheta;
187 const double ratioSEmSMu =
199 Predict(mean, sigma, sIt->fPos, origin, n19, core);
200 const double z = mean/sigma;
208 const double delta[3] = {
211 distance0 - fAxisPar[2]
216 result += 0.5 * delta[i] *
fAxisInvCov[i][j] * delta[j];
227 for (
size_t i = 0; i < 4; ++i)
228 for (
size_t j = 0; j < 4; ++j)
229 result += 0.5 * delta[i] *
fExt.
fInvCov[i][j] * delta[j];
238 const Point& station,
242 const double recoveryErr)
245 double xProj, yProj, rho, sTheta;
248 const Vector axis = origin - core;
256 const double ratioSEmSMu =
262 meanSignal *= (1 + ratioSEmSMu);
263 sigmaSignal *= (1 + ratioSEmSMu);
265 sigmaSignal =
sqrt(
Sqr(sigmaSignal) +
Sqr(recoveryErr));
tls::VTankResponse * fTankResponse
double PoissonConvolvedCDF(const double sThreshold, const double theta, const double r, const double muons, const bool complement) const
bool fDropStationsBelowThreshold
constexpr T Sqr(const T &x)
double GetPhi(const CoordinateSystemPtr &coordinateSystem) const
azimuth (phi) angle in spherical and cylindrical coordinates
unsigned char fUseAxisCovariance
double GetTheta(const CoordinateSystemPtr &coordinateSystem) const
zenith (theta) angle in spherical coordinates
utl::CovarianceMatrix fCov
const StationList & fList
void Predict(double &meanSignal, double &sigmaSignal, const utl::Point &station, const utl::Point &origin, const double n19, const utl::Point &core, const double recoveryErr=0) const
void LocalCoordinates(double &xProjected, double &yProjected, double &rho, double &theta, const utl::Point &pos, const utl::Point &origin, const utl::Point &core) const
ShowerSizeFunction(const SdHorizontalReconstruction &config, const StationList &list, const SilentStationList &slist, const AxisData &ad, const ExternalGeometryData &gd)
void InvertMatrix(const size_t n, AMatrix &a)
Invert A in place with Gauss-Jordan elimination and full pivoting.
double fInvCov[size][size]
boost::shared_ptr< tls::MuonProfile > fMuonProfile
utl::CoordinateSystemPtr fBaryCS
const ExternalGeometryData & fExt
double operator()(const std::vector< double > &pars) const
void PoissonConvolvedMeanAndStDev(double &mean, double &stDev, const double theta, const double r, const double muons) const
Mean and standard deviation of signal, given an average number of muons (Poisson convolved).
void GetShowerAxis(utl::Point &core, utl::Point &origin, const double coreX, const double coreY, const double theta, const double phi, const double distance) const
std::vector< StationData > StationList
Base class for inconsistency/illogicality exceptions.
std::vector< SilentStationData > SilentStationList
double fSilentSignalThreshold
double PoissonConvolvedPDF(const double signal, const double theta, const double r, const double muons) const
PDF of signal, given an average number of muons (Poisson convolved).
const SilentStationList & fSList
const SdHorizontalReconstruction & fConfig
boost::shared_ptr< tls::EMComponent > fEMComponent