Jpp  19.1.0-rc.1
the software that should make you happy
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | Private Member Functions | Private Attributes | List of all members
JFIT::JRegressor< JPoint4D, JSimplex > Struct Reference

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

#include <JPoint4DRegressor.hh>

Inheritance diagram for JFIT::JRegressor< JPoint4D, JSimplex >:
JFIT::JAbstractRegressor< JPoint4D, JSimplex > JFIT::JSimplex< JModel_t > JEEP::JMessage< T >

Public Types

typedef JSimplex< JPoint4Dminimiser_type
 
typedef JRegressor< JPoint4D, JSimplexregressor_type
 
typedef minimiser_type::result_type result_type
 

Public Member Functions

 JRegressor (double sigma)
 Constructor. More...
 
template<class JHit_t >
double operator() (const JPoint4D &vx, const JHit_t &hit) const
 
result_type operator() (const JPoint4D &value, T __begin, T __end)
 Global fit. More...
 
template<class JFunction_t , class T >
double operator() (const JFunction_t &fit, T __begin, T __end)
 Multi-dimensional fit. More...
 
template<class JFunction_t , class T >
double operator() (const JFunction_t &fit, T __begin, T __end, const JModel_t &step)
 1D fit. More...
 

Public Attributes

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

Static Public Attributes

static int MAXIMUM_ITERATIONS = 1000
 maximal number of iterations More...
 
static double EPSILON = 1.0e-4
 maximal distance to minimum More...
 
static int debug = 0
 debug level (default is off). More...
 

Private Member Functions

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

Private Attributes

JModel_t p0
 
JModel_t p1
 
JModel_t wall
 

Detailed Description

Regressor function object for JPoint4D fit using JSimplex minimiser.

Definition at line 30 of file JPoint4DRegressor.hh.

Member Typedef Documentation

◆ minimiser_type

Definition at line 80 of file JRegressor.hh.

◆ regressor_type

Definition at line 81 of file JRegressor.hh.

◆ result_type

Definition at line 82 of file JRegressor.hh.

Constructor & Destructor Documentation

◆ JRegressor()

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

Constructor.

Definition at line 38 of file JPoint4DRegressor.hh.

39  {
40  this->sigma = sigma;
41  }

Member Function Documentation

◆ operator()() [1/4]

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

Definition at line 52 of file JPoint4DRegressor.hh.

53  {
54  using namespace JPP;
55 
56  const double dt = hit.getT() - vx.getT(hit.getPosition());
57 
58  const double u = dt / sigma;
59 
60  return estimator->getRho(u) * hit.getW();
61  }
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Definition: JVertex3D.hh:147
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double u[N+1]
Definition: JPolint.hh:865
JLANG::JSharedPointer< JMEstimator > estimator
M-Estimator function

◆ operator()() [2/4]

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

Global fit.

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

Definition at line 94 of file JRegressor.hh.

95  {
96  static_cast<minimiser_type&>(*this).value = value;
97 
98  return static_cast<minimiser_type&>(*this)(static_cast<regressor_type&>(*this), __begin, __end);
99  }
JModel_t value
Definition: JSimplex.hh:240
JRegressor< JPoint4D, JSimplex > regressor_type
Definition: JRegressor.hh:81

◆ operator()() [3/4]

template<class JModel_t >
template<class JFunction_t , class T >
double JFIT::JSimplex< JModel_t >::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  p0 = value;
83  p1 = value;
84  wall = value;
85 
86  double chi2[N];
87 
89 
91 
92  DEBUG("old: " << FIXED(12,5) << chi2_old << endl);
93 
94  p0 = value;
95 
96  for (int i = 0; i != N; ++i) {
97 
98  DEBUG("step: " << i << ' ' << setw(5) << numberOfIterations << endl);
99 
100  chi2[i] = (*this)(fit, __begin, __end, step[i]);
101  }
102 
103  // overall step direction of last iteration
104 
105  wall = value;
106  wall -= p0;
107 
108  const double chi2_new = (*this)(fit, __begin, __end, wall);
109 
110  DEBUG("new: " << FIXED(12,5) << chi2_new << endl);
111 
112 
113  if (fabs(chi2_old - chi2_new) < EPSILON*fabs(chi2_old)) {
114  return chi2_new;
115  }
116 
117  // double overall step
118 
119  wall = value;
120  wall -= p0;
121  value += wall;
122 
123  const double fe = evaluate(fit, __begin, __end);
124 
125  value -= wall;
126 
127 
128  for (int i = N-1; i != 0; --i) {
129  chi2[i] = chi2[i-1] - chi2[i];
130  }
131 
132  chi2[0] = chi2_old - chi2[0];
133 
134 
135  double df = 0.0;
136 
137  for (int i = 0; i != N; ++i) {
138  if (chi2[i] > df) {
139  df = chi2[i];
140  }
141  }
142 
143  const double fn = chi2_new;
144  const double f0 = chi2_old;
145  const double ff = f0 - fn - df;
146 
147  // shift step directions
148 
149  if (fe < f0 && 2.0*(f0 - 2.0*fn + fe)*ff*ff < (f0-fe)*(f0-fe)*df) {
150 
151  for (int i = 0; i != N - 1; ++i) {
152  step[i] = step[i+1];
153  }
154 
155  step[N-1] = wall;
156  }
157 
158  chi2_old = chi2_new;
159  }
160  }
161 
162  return chi2_old;
163  }
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
JModel_t wall
Definition: JSimplex.hh:266
static int MAXIMUM_ITERATIONS
maximal number of iterations
Definition: JSimplex.hh:237
std::vector< JModel_t > step
Definition: JSimplex.hh:241
int numberOfIterations
Definition: JSimplex.hh:242
static double EPSILON
maximal distance to minimum
Definition: JSimplex.hh:238
double evaluate(const JFunction_t &fit, T __begin, T __end) const
Evaluate chi2 for given data set.
Definition: JSimplex.hh:253
JModel_t p1
Definition: JSimplex.hh:265
JModel_t p0
Definition: JSimplex.hh:264
Definition: JSTDTypes.hh:14
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:448

◆ operator()() [4/4]

template<class JModel_t >
template<class JFunction_t , class T >
double JFIT::JSimplex< JModel_t >::operator() ( const JFunction_t &  fit,
__begin,
__end,
const JModel_t 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 178 of file JSimplex.hh.

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

◆ evaluate()

template<class JModel_t >
template<class JFunction_t , class T >
double JFIT::JSimplex< JModel_t >::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 253 of file JSimplex.hh.

254  {
255  double chi2 = 0.0;
256 
257  for (T hit = __begin; hit != __end; ++hit) {
258  chi2 += fit(value, *hit);
259  }
260 
261  return chi2;
262  }

Member Data Documentation

◆ estimator

M-Estimator function

Definition at line 63 of file JPoint4DRegressor.hh.

◆ sigma

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

Time resolution [ns].

Definition at line 64 of file JPoint4DRegressor.hh.

◆ MAXIMUM_ITERATIONS

template<class JModel_t >
int JFIT::JSimplex< JModel_t >::MAXIMUM_ITERATIONS = 1000
staticinherited

maximal number of iterations

maximal number of iterations.

Definition at line 237 of file JSimplex.hh.

◆ EPSILON

template<class JModel_t >
double JFIT::JSimplex< JModel_t >::EPSILON = 1.0e-4
staticinherited

maximal distance to minimum

maximal distance to minimum.

Definition at line 238 of file JSimplex.hh.

◆ value

template<class JModel_t >
JModel_t JFIT::JSimplex< JModel_t >::value
inherited

Definition at line 240 of file JSimplex.hh.

◆ step

template<class JModel_t >
std::vector<JModel_t> JFIT::JSimplex< JModel_t >::step
inherited

Definition at line 241 of file JSimplex.hh.

◆ numberOfIterations

template<class JModel_t >
int JFIT::JSimplex< JModel_t >::numberOfIterations
inherited

Definition at line 242 of file JSimplex.hh.

◆ p0

template<class JModel_t >
JModel_t JFIT::JSimplex< JModel_t >::p0
mutableprivateinherited

Definition at line 264 of file JSimplex.hh.

◆ p1

template<class JModel_t >
JModel_t JFIT::JSimplex< JModel_t >::p1
mutableprivateinherited

Definition at line 265 of file JSimplex.hh.

◆ wall

template<class JModel_t >
JModel_t JFIT::JSimplex< JModel_t >::wall
mutableprivateinherited

Definition at line 266 of file JSimplex.hh.

◆ debug

template<class T >
int JEEP::JMessage< T >::debug = 0
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: