8 #include <Minuit2/FCNBase.h>
10 #include <utl/CoordinateSystemPtr.h>
11 #include <utl/Vector.h>
12 #include <utl/BasicVector.h>
13 #include <utl/Point.h>
15 #include <utl/PhysicalFunctions.h>
16 #include <utl/RadioGeometryUtilities.h>
17 #include <utl/Probability.h>
18 #include <utl/AugerUnits.h>
24 #include "adst/UtilityFunctions.h"
32 fFitConfig(fitconfig),
33 fEventData(eventData),
34 fStationData(stationData),
37 fLDFConstsTable(ldfConstsTable),
38 fcalcLDFConsts(calcLDFConsts)
44 const double arrivalDirection_theta,
54 utl::Vector dynamic_Showeraxis(sin(arrivalDirection_theta) * cos(arrivalDirection_phi),
55 sin(arrivalDirection_theta) * sin(arrivalDirection_phi),
98 double negLogLikelihood = 0;
99 double twoDLDFLikelyhood = 0.;
100 double arrivalTimeLikelihood = 0.;
106 double stationLikelihood =
calc2dLDFMinCrit(pars[0], pars[4], DXmax, pars[5], pars[6],
107 pars[7], pars[8], pars[9], sIt->x_vxB, sIt->y_vxB,
108 sIt->energyFluence, sIt->energyFluenceError, sIt);
109 negLogLikelihood += stationLikelihood;
110 twoDLDFLikelyhood += stationLikelihood;
114 double stationLikelihood =
calcTimeMinCrit(pars[10], Rmax, pars[12], pars[13], sIt->x_vxB,
115 sIt->y_vxB, sIt->z_vxB, sIt->signalTime,
116 sIt->signalTimeError, sIt);
117 negLogLikelihood += stationLikelihood;
118 arrivalTimeLikelihood += stationLikelihood;
123 return negLogLikelihood;
127 double a3,
double a4)
const
130 sigma_result = (1.0L / 6.0L)
131 * (-
pow(2, 2.0L / 3.0L) *
pow(a1, 2)
135 (4 *
pow(3 * a1 * a3 -
pow(a2, 2), 3)
136 +
pow(27 *
pow(a1, 2) * (DXmax - a4) + 9 * a1 * a2 * a3 - 2 *
pow(a2, 3),
137 2)) /
pow(a1, 6)) + 27 *
pow(a1, 2) * (-DXmax + a4)
138 - 9 * a1 * a2 * a3 + 2 *
pow(a2, 3)) /
pow(a1, 3),
144 (4 *
pow(3 * a1 * a3 -
pow(a2, 2), 3)
146 27 *
pow(a1, 2) * (DXmax - a4) + 9 * a1 * a2 * a3
148 2)) /
pow(a1, 6)) + 27 *
pow(a1, 2) * (-DXmax + a4)
149 - 9 * a1 * a2 * a3 + 2 *
pow(a2, 3)) /
pow(a1, 3),
150 1.0L / 3.0L) + 2 *
pow(2, 1.0L / 3.0L) * (3 * a1 * a3 -
pow(a2, 2)))
155 (4 *
pow(3 * a1 * a3 -
pow(a2, 2), 3)
156 +
pow(27 *
pow(a1, 2) * (DXmax - a4) + 9 * a1 * a2 * a3 - 2 *
pow(a2, 3),
157 2)) /
pow(a1, 6)) + 27 *
pow(a1, 2) * (-DXmax + a4)
158 - 9 * a1 * a2 * a3 + 2 *
pow(a2, 3)) /
pow(a1, 3),
164 double alpha_3,
double c)
const
167 gamma_result = (1.0L / 2.0L)
169 +
sqrt(c * (4 * DXmax * alpha_1 - 4 * alpha_1 * alpha_3 * c +
pow(alpha_2, 2) * c)))
175 const double Aplus,
const double sigmaPlus,
const double DXmax,
const double C2Theta,
176 const double C1Theta,
const double CTheta,
const double C1,
const double C2,
const double x_vxB,
177 const double y_vxB,
const double signal,
const double signalError,
178 std::vector<StationFitData>::iterator sIt)
const
185 double a1 = 2.1 *
pow(10, -4);
191 double d_xmax = DXmax;
197 double c1Theta = C1Theta;
198 double c2Theta = C2Theta;
201 double cTheta = CTheta;
210 "[0]*TMath::Exp(-((x-([1]+[5]))**2+(y-[2])**2)/[3]**2)-[6]*[0]*TMath::Exp(-((x-([1]+[4]))**2+(y-[2])**2)/TMath::Exp([7]+[8]*[3])**2)");
211 LDF2DFit.SetParameter(0, Aplus);
212 LDF2DFit.SetParameter(1, 0.);
213 LDF2DFit.SetParameter(2, 0.);
214 LDF2DFit.SetParameter(3, sigmaPl);
215 LDF2DFit.SetParameter(4, c2Theta);
216 LDF2DFit.SetParameter(5, c1Theta);
217 LDF2DFit.SetParameter(6, cTheta);
218 LDF2DFit.SetParameter(7, c1);
219 LDF2DFit.SetParameter(8, c2);
221 double weight = signalError;
222 double calculatedEnergieDensity = LDF2DFit.Eval(x_vxB, y_vxB);
223 double minimizationCriterium =
pow((signal - calculatedEnergieDensity) / weight, 2);
224 sIt->fittedEnergyFluence = calculatedEnergieDensity;
226 std::cout << x_vxB <<
"\t" << y_vxB <<
"\t" << signal <<
"\t" << calculatedEnergieDensity
227 <<
"\t" << minimizationCriterium << std::endl;
230 return minimizationCriterium;
234 const double gamma,
const double DXmax,
const double b,
const double t0,
const double x_vxB,
235 const double y_vxB,
const double z_vxB,
const double signalTime,
const double signalTimeError,
236 std::vector<StationFitData>::iterator sIt)
const
238 TF1 arrivalTimeFit = TF1(
"ArrivalTimeFit",
239 "TMath::Sqrt(1 + x * x / ([0] * [0])) * [1] - [1] + [2]");
243 double alpha_3 = -1.49048;
244 double alpha_2 = -0.0371733;
245 double alpha_1 = 0.00086932;
247 gammaTilde =
gammaFromRmax(DXmax, alpha_1, alpha_2, alpha_3, c);
251 arrivalTimeFit.SetParameter(0, gammaTilde);
252 arrivalTimeFit.SetParameter(1, b);
253 arrivalTimeFit.SetParameter(2, t0);
255 double weight = signalTimeError;
256 double r =
sqrt(x_vxB * x_vxB + y_vxB * y_vxB);
257 double calculatedArrivalTime = arrivalTimeFit.Eval(r);
258 double measuredArrivalTime = signalTime;
259 double timeDrift = 0;
261 double planeTime = timeDrift + relativePulseTime;
262 double measuredProjTime = measuredArrivalTime - planeTime;
263 double minimizationCriterium =
pow((measuredProjTime - calculatedArrivalTime) / weight, 2);
264 sIt->fittedProjTime = calculatedArrivalTime;
265 sIt->measuredProjTime = measuredProjTime;
267 std::cout << x_vxB <<
"\t" << y_vxB <<
"\t" << measuredProjTime <<
"\t" << calculatedArrivalTime
268 <<
"\t" << minimizationCriterium << std::endl;
270 return minimizationCriterium;
const LDFConstsTable fLDFConstsTable
double fTwoDLDFLikelyhood
double fArrivalTimeLikelihood
double calc2dLDFMinCrit(const double Aplus, const double sigma_max, const double DXmax, const double C2Theta, const double C1Theta, const double CTheta, const double C1, const double C2, const double x_vxB, const double y_vxvxB, const double signal, const double signalError, std::vector< StationFitData >::iterator sIt) const
void calc2dLDFConstants(double zenith) const
const EventFitData fEventData
double pow(const double x, const unsigned int i)
RdGlobalFitMinimizationCriterion(FitConfig &fitconfig, const EventFitData eventData, std::vector< StationFitData > &stationData, const utl::Vector magneticFieldVector, const LDFConstsTable ldfConstsTable, calcLDFConsts &calcLDFConsts)
double gammaFromRmax(double DXmax, double alpha_1, double alpha_2, double alpha_3, double c) const
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
double sigmaPlusFromDXmax(double DXmax, double a1, double a2, double a3, double a4) const
utl::CoordinateSystemPtr fLocalCS
constexpr double nanosecond
double operator()(const std::vector< double > &pars) const
calcLDFConsts & fcalcLDFConsts
double calcTimeMinCrit(const double gamma, const double DXmax, const double b, const double t0, const double x_vxB, const double y_vxvxB, const double z_vxvxB, const double signalTime, const double signalTimeError, std::vector< StationFitData >::iterator sIt) const
void calcShowerCoordinates(const double arrivalDirection_phi, const double arrivalDirection_theta, const double core_x, const double core_y, const double core_z, utl::Vector magneticFieldVector) const
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!!!
constexpr double kSpeedOfLight
bool fitGammaAndSigmaPlusIndependently
static Policy::type Create(const utl::Point &theOrigin)
Create the standard local coordinate system for a Point.
utl::Vector fMagneticFieldVector
std::vector< StationFitData > & fStationData