1#ifndef __JFIT__JSHOWERBRIGHTPOINTREGRESSOR__
2#define __JFIT__JSHOWERBRIGHTPOINTREGRESSOR__
33namespace JPP {
using namespace JFIT; }
51 double E = max(0.0,value.
getE());
66 static const int NUMBER_OF_PDFS = 2;
94 const double epsilon = 1.0e-10) :
101 const JPDF_t::JSupervisor supervisor(
new JPDF_t::JDefaultResult(
JMATH::zero));
103 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
105 const string file_name = getFilename(fileDescriptor, pdf_t[i]);
107 _pdf[i].load(file_name.c_str());
109 _pdf[i].setExceptionHandler(supervisor);
113 for (
int i = 1; i < NUMBER_OF_PDFS; i += 2) {
115 _pdf[ i ].add(_pdf[i-1]);
119 _pdf[i-1].swap(buffer);
152 DIRECT_LIGHT_FROM_BRIGHT_POINT,
153 SCATTERED_LIGHT_FROM_BRIGHT_POINT
195 const double epsilon = 1.0e-10) :
206 pdf(storage.getPDF())
228 template<
class JHit_t>
229 result_type operator()(
const JPoint4E& vx,
const JHit_t& hit)
const
237 double length = D.getLength();
238 double ct = U.getDot(D) / length;
240 if (ct > +1.0) { ct = +1.0; }
241 if (ct < -1.0) { ct = -1.0; }
243 const double t = vx.
getT() + (length * getIndexOfRefraction() * getInverseSpeedOfLight());
245 const double dt = T_ns.constrain(hit.getT() - t);
247 JPDF_t::result_type H0 = getH0(hit.getR(), dt);
248 JPDF_t::result_type H1 = getH1(length, ct, dt);
250 if (get_value(H1) >= Vmax_npe) {
251 H1 *= Vmax_npe / get_value(H1);
254 double H1_value = get_value(H1);
259 JPDF_t::result_type HT = H1+H0;
260 double HT_value = get_value(HT);
262 result.chi2 = HT.getChi2() - H0.getChi2();
264 double exp_V_HT = exp(-HT.V);
266 double energy_gradient = -1 / HT_value;
267 energy_gradient *= (H1_value - HT_value * v_H1) * (1-exp_V_HT) - HT_value * exp_V_HT * V_H1;
268 energy_gradient /= (1-exp_V_HT);
274 -getIndexOfRefraction() * D.getY() / length,
275 -getIndexOfRefraction() * D.getZ() / length),
279 static_cast<JPoint4D&
>(
result.gradient).mul(getInverseSpeedOfLight() * (HT.getDerivativeOfChi2() -
280 H0.getDerivativeOfChi2()));
293 JPDF_t::result_type getH0(
const double R_Hz,
294 const double t1)
const
298 return JPDF_t::result_type(R_Hz * 1e-9, t1, T_ns);
309 JPDF_t::result_type getH1(
const double D,
311 const double t)
const
317 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
319 if (!pdf[i].empty() && D <= pdf[i].getXmax()) {
323 JPDF_t::result_type y1 = pdf[i](std::max(D, pdf[i].getXmin()), ct, t);
339 ERROR(error << std::endl);
352 inline double getRmax()
const
358 for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
360 if (!pdf[i].empty() && pdf[i].getXmax() > xmax) {
361 xmax = pdf[i].getXmax();
369 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.
void model(JModel_t &value)
Auxiliary function to constrain model during fit.
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.
JRegressorStorage(const std::string &fileDescriptor, const JTimeRange &T_ns, const double TTS, const int numberOfPoints=25, const double epsilon=1.0e-10)
Parameterized constructor.
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.
JTimeRange T_ns
Time window with respect to Cherenkov hypothesis [ns].
JTOOLS::JSplineFunction1S_t JFunction1D_t
Template data structure for storage of internal data.
Template definition of a data regressor of given model.
Auxiliary class to set-up Hit.