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< JLine3Z, JSimplex > Struct 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< JModel_t > JEEP::JMessage< T >

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...
 
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 JLine3Z fit using JSimplex minimiser.

Definition at line 44 of file JLine3ZRegressor.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< JLine3Z, JSimplex >::JRegressor ( double  sigma)
inline

Constructor.

Parameters
sigmatime resolution of hit [ns]

Definition at line 54 of file JLine3ZRegressor.hh.

54  :
56  {
57  this->sigma = sigma;
58  }
Normal M-estimator.
Definition: JMEstimator.hh:54
double sigma
Time resolution [ns].
JLANG::JSharedPointer< JMEstimator > estimator
M-Estimator function.

Member Function Documentation

◆ operator()() [1/4]

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 76 of file JLine3ZRegressor.hh.

77  {
78  using namespace JPP;
79 
80  JPosition3D D(hit.getX(), hit.getY(), hit.getZ());
81 
82  D.sub(track.getPosition());
83 
84  const double z = D.getDot(track.getDirection());
85  const double R = sqrt(D.getLengthSquared() - z*z);
86 
87  const double t1 = track.getT() + (z + R * getKappaC()) * getInverseSpeedOfLight();
88 
89  const double u = (t1 - hit.getT()) / sigma;
90 
91  return estimator->getRho(u) * hit.getW();
92  }
JVersor3D getDirection(const JVector3D &pos) const
Get photon direction of Cherenkov light on PMT.
Definition: JLine3Z.hh:255
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Definition: JLine3Z.hh:234
Data structure for position in three dimensions.
Definition: JPosition3D.hh:38
const JPosition3D & getPosition() const
Get position.
Definition: JPosition3D.hh:130
double getKappaC()
Get average R-dependence of arrival time of Cherenkov light (a.k.a.
const double getInverseSpeedOfLight()
Get inverse speed of light.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double u[N+1]
Definition: JPolint.hh:865

◆ operator()() [2/4]

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 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< JLine3Z, 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 94 of file JLine3ZRegressor.hh.

◆ sigma

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

Time resolution [ns].

Definition at line 95 of file JLine3ZRegressor.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: