1#ifndef __JFIT__JSHOWERBRIGHTPOINTREGRESSOR__
2#define __JFIT__JSHOWERBRIGHTPOINTREGRESSOR__
33namespace JPP {
using namespace JFIT; }
53 static const int NUMBER_OF_PDFS = 2;
79 const double epsilon = 1.0e-10)
84 const JPDF_t::JSupervisor supervisor(
new JPDF_t::JDefaultResult(
JMATH::zero));
86 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
88 const string file_name = getFilename(fileDescriptor, pdf_t[i]);
90 _pdf[i].load(file_name.c_str());
92 _pdf[i].setExceptionHandler(supervisor);
96 for (
int i = 1; i < NUMBER_OF_PDFS; i += 2) {
98 _pdf[ i ].add(_pdf[i-1]);
102 _pdf[i-1].swap(buffer);
134 DIRECT_LIGHT_FROM_BRIGHT_POINT,
135 SCATTERED_LIGHT_FROM_BRIGHT_POINT
175 const double epsilon = 1.0e-10) :
186 pdf(storage.getPDF())
206 template<
class JHit_t>
207 result_type operator()(
const JPoint4E& vx,
const JHit_t& hit)
const
215 double length = D.getLength();
216 double ct = U.getDot(D) / length;
218 if (ct > +1.0) { ct = +1.0; }
219 if (ct < -1.0) { ct = -1.0; }
221 const double t = vx.
getT() + (length * getIndexOfRefraction() * getInverseSpeedOfLight());
223 const double dt = T_ns.constrain(hit.getT() - t);
225 JPDF_t::result_type H0 = getH0(hit.getR(), dt);
226 JPDF_t::result_type H1 = getH1(length, ct, dt);
228 if (get_value(H1) >= Vmax_npe) {
229 H1 *= Vmax_npe / get_value(H1);
232 double H1_value = get_value(H1);
237 JPDF_t::result_type HT = H1+H0;
238 double HT_value = get_value(HT);
240 result.chi2 = HT.getChi2() - H0.getChi2();
242 double exp_V_HT = exp(-HT.V);
244 double energy_gradient = -1 / HT_value;
245 energy_gradient *= (H1_value - HT_value * v_H1) * (1-exp_V_HT) - HT_value * exp_V_HT * V_H1;
246 energy_gradient /= (1-exp_V_HT);
252 -getIndexOfRefraction() * D.getY() / length,
253 -getIndexOfRefraction() * D.getZ() / length),
257 static_cast<JPoint4D&
>(
result.gradient).mul(getInverseSpeedOfLight() * (HT.getDerivativeOfChi2() -
258 H0.getDerivativeOfChi2()));
271 JPDF_t::result_type getH0(
const double R_Hz,
272 const double t1)
const
276 return JPDF_t::result_type(R_Hz * 1e-9, t1, T_ns);
287 JPDF_t::result_type getH1(
const double D,
289 const double t)
const
295 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
297 if (!pdf[i].empty() && D <= pdf[i].getXmax()) {
301 JPDF_t::result_type y1 = pdf[i](std::max(D, pdf[i].getXmin()), ct, t);
317 ERROR(error << std::endl);
330 inline double getRmax()
const
336 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
338 if (!pdf[i].empty() && pdf[i].getXmax() > xmax) {
339 xmax = pdf[i].getXmax();
348 static double Vmax_npe;
Maximum likelihood estimator (M-estimators).
General purpose messaging.
Numbering scheme for PDF types.
General purpose data regression method.
This include file containes various data structures that can be used as specific return types for the...
Definition of zero value for any class.
Fit method based on the Levenberg-Marquardt method.
Data structure for vertex fit.
Data structure for vertex fit.
double getE() const
Get energy.
Data structure for direction in three dimensions.
Data structure for position in three dimensions.
const JPosition3D & getPosition() const
Get position.
Data structure for vector in three dimensions.
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Multi-dimensional PDF table for arrival time of Cherenkov light.
Auxiliary classes and methods for linear and iterative data regression.
static const JZero zero
Function object to assign zero value.
@ SCATTERED_LIGHT_FROM_BRIGHT_POINT
scattered light from bright point
@ DIRECT_LIGHT_FROM_BRIGHT_POINT
direct light from bright point
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Abstract class for global fit method.
const JPDFs_t & getPDF() const
Get PDFs.
JPHYSICS::JPDFTable< JFunction1D_t, JPDFMapList_t > JPDF_t
std::array< JPDF_t, NUMBER_OF_PDFS > JPDFs_t
PDFs.
JTOOLS::JMAPLIST< JTOOLS::JPolint2FunctionalMap, JTOOLS::JPolint1FunctionalGridMap >::maplist JPDFMapList_t
JRegressorStorage()
Default constructor.
JTOOLS::JSplineFunction1S_t JFunction1D_t
JRegressorStorage(const std::string &fileDescriptor, const double TTS, const int numberOfPoints=25, const double epsilon=1.0e-10)
Parameterized constructor.
Template data structure for storage of internal data.
Template definition of a data regressor of given model.
Auxiliary class to set-up Hit.