1#ifndef __JFIT__JSHOWERBRIGHTPOINTREGRESSOR__ 
    2#define __JFIT__JSHOWERBRIGHTPOINTREGRESSOR__ 
   31namespace JPP { 
using namespace JFIT; }
 
   69               const double       epsilon        = 1.0e-10)
 
   74      const JPDF_t::JSupervisor supervisor(
new JPDF_t::JDefaultResult(
JMATH::zero));
 
   76      for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
 
   80          const string file_name = getFilename(fileDescriptor, pdf_t[i]);
 
   82          NOTICE(
"loading PDF from file " << file_name << 
"... " << flush);
 
   84          pdf[i].load(file_name.c_str());
 
   88          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);
 
  106        } 
else if (TTS < 0.0) {
 
  107          ERROR(
"Illegal value of TTS [ns]: " << TTS << endl);
 
  129    template<
class JHit_t>
 
  130    result_type operator()(
const JPoint4E& vx, 
const JHit_t& hit)
 const 
  138      double length = D.getLength();
 
  139      double ct = U.getDot(D) / length;
 
  141      if (ct > +1.0) { ct = +1.0; }
 
  142      if (ct < -1.0) { ct = -1.0; }
 
  144      const double t  = vx.
getT() + (length * getIndexOfRefraction() * getInverseSpeedOfLight());
 
  146      const double dt = T_ns.constrain(hit.getT() - t);
 
  148      JPDF_t::result_type H0 = getH0(hit.getR(), dt);                    
 
  149      JPDF_t::result_type H1 = getH1(length, ct, dt);  
 
  151      if (get_value(H1) >= Vmax_npe) {
 
  152        H1 *= Vmax_npe / get_value(H1);
 
  155      double H1_value = get_value(H1);
 
  160      JPDF_t::result_type HT = H1+H0; 
 
  161      double HT_value = get_value(HT);
 
  163      result.chi2 = HT.getChi2() - H0.getChi2();  
 
  165      double exp_V_HT = exp(-HT.V); 
 
  167      double energy_gradient = -1 / HT_value; 
 
  168      energy_gradient *= (H1_value -  HT_value * v_H1) * (1-exp_V_HT)  -  HT_value * exp_V_HT * V_H1; 
 
  169      energy_gradient /= (1-exp_V_HT); 
 
  175                                                    -getIndexOfRefraction() * D.getY() / length,    
 
  176                                                    -getIndexOfRefraction() * D.getZ() / length),   
 
  180      static_cast<JPoint4D&
>(
result.gradient).mul(getInverseSpeedOfLight() * (HT.getDerivativeOfChi2() -
 
  181                                                                              H0.getDerivativeOfChi2()));                 
 
  194    JPDF_t::result_type getH0(
const double R_Hz,
 
  195                              const double t1)
 const 
  199      return JPDF_t::result_type(R_Hz * 1e-9, t1, T_ns);
 
  210    JPDF_t::result_type getH1(
const double D,
 
  212                              const double t)
 const 
  218      for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
 
  220        if (!pdf[i].empty() && D <= pdf[i].getXmax()) {
 
  224            JPDF_t::result_type y1 = pdf[i](std::max(D, pdf[i].getXmin()), ct, t);
 
  241            ERROR(error << std::endl);
 
  254    inline double getRmax()
 const 
  260      for (
int i = 0; i != NUMBER_OF_PDFS; ++i) {
 
  262        if (!pdf[i].empty() && pdf[i].getXmax() > xmax) {
 
  263          xmax = pdf[i].getXmax();
 
  272    static double       Vmax_npe;                  
 
  274    static const int    NUMBER_OF_PDFS = 2;
 
  276    static const JPDFType_t pdf_t[NUMBER_OF_PDFS];
 
  278    JPDF_t              pdf[NUMBER_OF_PDFS];       
 
  286                                                               SCATTERED_LIGHT_FROM_BRIGHT_POINT };
 
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.
virtual const char * what() const override
Get error message.
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.
Template definition of a data regressor of given model.
Auxiliary class to set-up Hit.