Jpp
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | Private Member Functions | List of all members
JFIT::JRegressor< JLine3Z, JSimplex > Struct Template Reference

Regressor function object for JLine3Z fit using JSimplex minimiser. More...

#include <JLine3ZRegressor.hh>

Inheritance diagram for JFIT::JRegressor< JLine3Z, JSimplex >:
JFIT::JAbstractRegressor< JLine3Z, JSimplex > JFIT::JSimplex< JLine3Z > JEEP::JMessage< JSimplex< JLine3Z > >

Public Types

typedef JSimplex< JLine3Zminimiser_type
 
typedef JRegressor< JLine3Z, JSimplexregressor_type
 
typedef minimiser_type::result_type result_type
 

Public Member Functions

 JRegressor (double sigma)
 Constructor. More...
 
template<class JHit_t >
double operator() (const JLine3Z &track, const JHit_t &hit) const
 Fit function. More...
 
result_type operator() (const JLine3Z &value, T __begin, T __end)
 Global fit. More...
 
result_type operator() (const JLine3Z &value, T1 __begin1, T1 __end1, T2 __begin2, T2 __end2)
 Global fit. More...
 
double operator() (const JFunction_t &fit, T __begin, T __end)
 Multi-dimensional fit. More...
 
double operator() (const JFunction_t &fit, T __begin, T __end, const JLine3Z &step)
 1D fit. More...
 

Public Attributes

JLANG::JSharedPointer< JMEstimatorestimator
 M-Estimator function. More...
 
double sigma
 Time resolution [ns]. More...
 
JLine3Z value
 
std::vector< JLine3Zstep
 
int numberOfIterations
 

Static Public Attributes

static int MAXIMUM_ITERATIONS
 maximal number of iterations More...
 
static double EPSILON
 maximal distance to minimum More...
 
static int debug
 debug level (default is off). More...
 

Private Member Functions

double evaluate (const JFunction_t &fit, T __begin, T __end) const
 Evaluate chi2 for given data set. More...
 

Detailed Description

template<>
struct JFIT::JRegressor< JLine3Z, JSimplex >

Regressor function object for JLine3Z fit using JSimplex minimiser.

Definition at line 52 of file JLine3ZRegressor.hh.

Member Typedef Documentation

◆ minimiser_type

Definition at line 78 of file JRegressor.hh.

◆ regressor_type

Definition at line 79 of file JRegressor.hh.

◆ result_type

Definition at line 80 of file JRegressor.hh.

Constructor & Destructor Documentation

◆ JRegressor()

JFIT::JRegressor< JLine3Z, JSimplex >::JRegressor ( double  sigma)
inline

Constructor.

Parameters
sigmatime resolution of hit [ns]

Definition at line 62 of file JLine3ZRegressor.hh.

62  :
64  {
65  this->sigma = sigma;
66  }

Member Function Documentation

◆ operator()() [1/5]

template<class JHit_t >
double JFIT::JRegressor< JLine3Z, JSimplex >::operator() ( const JLine3Z track,
const JHit_t hit 
) const
inline

Fit function.

This method is used to determine the chi2 of given hit with respect to trajectory of muon.

The template argument JHit_t refers to a data structure which should have the following member methods:

  • double getX(); // [m]
  • double getY(); // [m]
  • double getZ(); // [m]
  • double getT(); // [ns]
Parameters
tracktrack
hithit
Returns
chi2

Definition at line 84 of file JLine3ZRegressor.hh.

85  {
86  using namespace JPP;
87 
88  JPosition3D D(hit.getX(), hit.getY(), hit.getZ());
89 
90  D.sub(track.getPosition());
91 
92  const double z = D.getDot(track.getDirection());
93  const double R = sqrt(D.getLengthSquared() - z*z);
94 
95  const double t1 = track.getT() + (z + R * getKappaC()) * getInverseSpeedOfLight();
96 
97  const double u = (t1 - hit.getT()) / sigma;
98 
99  return estimator->getRho(u) * hit.getW();
100  }

◆ operator()() [2/5]

result_type JFIT::JAbstractRegressor< JLine3Z , JSimplex >::operator() ( const JLine3Z value,
__begin,
__end 
)
inlineinherited

Global fit.

Parameters
valuestart value
__beginbegin of data set
__endend of data set
Returns
chi2

Definition at line 92 of file JRegressor.hh.

93  {
94  static_cast<minimiser_type&>(*this).value = value;
95 
96  return static_cast<minimiser_type&>(*this)(static_cast<regressor_type&>(*this), __begin, __end);
97  }

◆ operator()() [3/5]

result_type JFIT::JAbstractRegressor< JLine3Z , JSimplex >::operator() ( const JLine3Z value,
T1  __begin1,
T1  __end1,
T2  __begin2,
T2  __end2 
)
inlineinherited

Global fit.

Parameters
valuestart value
__begin1begin of first data set
__end1end of first data set
__begin2begin of second data set
__end2end of second data set
Returns
chi2

Definition at line 111 of file JRegressor.hh.

114  {
115  static_cast<minimiser_type&>(*this).value = value;
116 
117  return static_cast<minimiser_type&>(*this)(static_cast<regressor_type&>(*this), __begin1, __end1, __begin2, __end2);
118  }

◆ operator()() [4/5]

double JFIT::JSimplex< JLine3Z >::operator() ( const JFunction_t &  fit,
__begin,
__end 
)
inlineinherited

Multi-dimensional fit.

The given fit function should return the equivalent of chi2 for the current value of the given model and a given data point.

Parameters
fitfit function
__beginbegin of data
__endend of data
Returns
chi2

Definition at line 71 of file JSimplex.hh.

72  {
73  using namespace std;
74  using namespace JPP;
75 
76  double chi2_old = evaluate(fit, __begin, __end);
77 
78  const int N = step.size();
79 
80  if (N != 0) {
81 
82  double chi2[N];
83 
85 
87 
88  DEBUG("old: " << FIXED(12,5) << chi2_old << endl);
89 
90  const JModel_t p0(value);
91 
92  for (int i = 0; i != N; ++i) {
93 
94  DEBUG("step: " << i << ' ' << setw(5) << numberOfIterations << endl);
95 
96  chi2[i] = (*this)(fit, __begin, __end, step[i]);
97  }
98 
99  // overall step direction of last iteration
100 
101  JModel_t wall = value - p0;
102 
103  const double chi2_new = (*this)(fit, __begin, __end, wall);
104 
105  DEBUG("new: " << FIXED(12,5) << chi2_new << endl);
106 
107 
108  if (fabs(chi2_old - chi2_new) < EPSILON*fabs(chi2_old)) {
109  return chi2_new;
110  }
111 
112  // double overall step
113 
114  wall = value - p0;
115 
116  value += wall;
117 
118  const double fe = evaluate(fit, __begin, __end);
119 
120  value -= wall;
121 
122 
123  for (int i = N-1; i != 0; --i) {
124  chi2[i] = chi2[i-1] - chi2[i];
125  }
126 
127  chi2[0] = chi2_old - chi2[0];
128 
129 
130  double df = 0.0;
131 
132  for (int i = 0; i != N; ++i) {
133  if (chi2[i] > df) {
134  df = chi2[i];
135  }
136  }
137 
138  const double fn = chi2_new;
139  const double f0 = chi2_old;
140  const double ff = f0 - fn - df;
141 
142  // shift step directions
143 
144  if (fe < f0 && 2.0*(f0 - 2.0*fn + fe)*ff*ff < (f0-fe)*(f0-fe)*df) {
145 
146  for (int i = 0; i != N - 1; ++i) {
147  step[i] = step[i+1];
148  }
149 
150  step[N-1] = wall;
151  }
152 
153  chi2_old = chi2_new;
154  }
155  }
156 
157  return chi2_old;
158  }

◆ operator()() [5/5]

double JFIT::JSimplex< JLine3Z >::operator() ( const JFunction_t &  fit,
__begin,
__end,
const JLine3Z step 
)
inlineinherited

1D fit.

The given fit function should return the equivalent of chi2 for the current value of the given model and a given data point.

Parameters
fitfit function
__beginbegin of data
__endend of data
stepstep direction

Definition at line 173 of file JSimplex.hh.

174  {
175  using namespace std;
176  using namespace JPP;
177 
178  double lambda = 0.5; // control parameter
179  double factor = 1.0; // multiplication factor
180 
181  double chi2_old = evaluate(fit, __begin, __end);
182 
183  for (int i = 0; numberOfIterations != MAXIMUM_ITERATIONS; ++numberOfIterations, ++i) {
184 
185  value += lambda * step;
186 
187  const double chi2_new = evaluate(fit, __begin, __end);
188 
189  DEBUG("step: " << setw(3) << i << ' ' << FIXED(12,5) << chi2_old << ' ' << FIXED(12,5) << chi2_new << ' ' << FIXED(5,2) << lambda << endl);
190 
191  if (fabs(chi2_old - chi2_new) < EPSILON*fabs(chi2_old)) {
192 
193  if (chi2_new > chi2_old) {
194 
195  value -= lambda * step; // undo last step
196 
197  return chi2_old;
198 
199  } else {
200 
201  return chi2_new;
202  }
203  }
204 
205  if (chi2_new < chi2_old) {
206 
207  chi2_old = chi2_new;
208 
209  } else {
210 
211  value -= lambda * step; // step back
212  lambda = -lambda; // change direction
213 
214  if (i != 0) {
215  factor = 0.5; // reduce step size
216  }
217  }
218 
219  lambda = factor * lambda;
220  }
221 
222  return chi2_old;
223  }

◆ evaluate()

double JFIT::JSimplex< JLine3Z >::evaluate ( const JFunction_t &  fit,
__begin,
__end 
) const
inlineprivateinherited

Evaluate chi2 for given data set.

Parameters
fitfit function
__beginbegin of data
__endend of data

Definition at line 242 of file JSimplex.hh.

243  {
244  double chi2 = 0.0;
245 
246  for (T hit = __begin; hit != __end; ++hit) {
247  chi2 += fit(value, *hit);
248  }
249 
250  return chi2;
251  }

Member Data Documentation

◆ estimator

M-Estimator function.

Definition at line 102 of file JLine3ZRegressor.hh.

◆ sigma

double JFIT::JRegressor< JLine3Z, JSimplex >::sigma

Time resolution [ns].

Definition at line 103 of file JLine3ZRegressor.hh.

◆ MAXIMUM_ITERATIONS

int JFIT::JSimplex< JLine3Z >::MAXIMUM_ITERATIONS
staticinherited

maximal number of iterations

maximal number of iterations.

Definition at line 226 of file JSimplex.hh.

◆ EPSILON

double JFIT::JSimplex< JLine3Z >::EPSILON
staticinherited

maximal distance to minimum

maximal distance to minimum.

Definition at line 227 of file JSimplex.hh.

◆ value

JLine3Z JFIT::JSimplex< JLine3Z >::value
inherited

Definition at line 229 of file JSimplex.hh.

◆ step

std::vector<JLine3Z > JFIT::JSimplex< JLine3Z >::step
inherited

Definition at line 230 of file JSimplex.hh.

◆ numberOfIterations

int JFIT::JSimplex< JLine3Z >::numberOfIterations
inherited

Definition at line 231 of file JSimplex.hh.

◆ debug

int JEEP::JMessage< JSimplex< JLine3Z > >::debug
staticinherited

debug level (default is off).

Definition at line 45 of file JMessage.hh.


The documentation for this struct was generated from the following file:
JFIT::JRegressor< JLine3Z, JSimplex >::sigma
double sigma
Time resolution [ns].
Definition: JLine3ZRegressor.hh:103
FIXED
Auxiliary data structure for floating point format specification.
Definition: JPrint.hh:481
JTOOLS::u
double u[N+1]
Definition: JPolint.hh:706
JFIT::JRegressor< JLine3Z, JSimplex >::estimator
JLANG::JSharedPointer< JMEstimator > estimator
M-Estimator function.
Definition: JLine3ZRegressor.hh:102
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JFIT::JLine3Z::getDirection
JVersor3D getDirection(const JVector3D &pos) const
Get photon direction of Cherenkov light on PMT.
Definition: JLine3Z.hh:254
JTOOLS::getInverseSpeedOfLight
const double getInverseSpeedOfLight()
Get inverse speed of light.
Definition: JConstants.hh:100
JFIT::JSimplex< JLine3Z >::value
JLine3Z value
Definition: JSimplex.hh:229
JGEOMETRY3D::JPosition3D
Data structure for position in three dimensions.
Definition: JPosition3D.hh:35
JFIT::JLine3Z::getT
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Definition: JLine3Z.hh:233
JFIT::JMEstimatorNormal
Normal M-estimator.
Definition: JMEstimator.hh:66
JFIT::JSimplex< JLine3Z >::evaluate
double evaluate(const JFunction_t &fit, T __begin, T __end) const
Evaluate chi2 for given data set.
Definition: JSimplex.hh:242
JTOOLS::getKappaC
double getKappaC()
Get average kappa of Cherenkov light in water.
Definition: JConstants.hh:166
JGEOMETRY3D::JPosition3D::getPosition
const JPosition3D & getPosition() const
Get position.
Definition: JPosition3D.hh:129
DEBUG
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
std
Definition: jaanetDictionary.h:36
JGEOMETRY3D::JVector3D::getDot
double getDot(const JVector3D &vector) const
Get dot product.
Definition: JVector3D.hh:281
JFIT::JSimplex< JLine3Z >::step
std::vector< JLine3Z > step
Definition: JSimplex.hh:230
JGEOMETRY3D::JVector3D::sub
JVector3D & sub(const JVector3D &vector)
Subtract vector.
Definition: JVector3D.hh:157
JFIT::JSimplex< JLine3Z >::EPSILON
static double EPSILON
maximal distance to minimum
Definition: JSimplex.hh:227
JFIT::JSimplex< JLine3Z >::MAXIMUM_ITERATIONS
static int MAXIMUM_ITERATIONS
maximal number of iterations
Definition: JSimplex.hh:226
JFIT::JSimplex< JLine3Z >::numberOfIterations
int numberOfIterations
Definition: JSimplex.hh:231