Jpp  master_rocky-37-gf0c5bc59d
the software that should make you happy
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
JFIT::JRegressor< JPoint4E, JGandalf > Struct Reference

Regressor function object for JPoint4E fit using JGandalf minimiser. More...

#include <JShowerBrightPointRegressor.hh>

Inheritance diagram for JFIT::JRegressor< JPoint4E, JGandalf >:
JFIT::JAbstractRegressor< JPoint4E, JGandalf > JFIT::JGandalf< JModel_t > JEEP::JMessage< T >

Public Types

typedef JTOOLS::JSplineFunction1S_t JFunction1D_t
 
typedef JTOOLS::JMAPLIST< JTOOLS::JPolint2FunctionalMap, JTOOLS::JPolint1FunctionalGridMap >::maplist JPDFMapList_t
 
typedef JPHYSICS::JPDFTable< JFunction1D_t, JPDFMapList_tJPDF_t
 
typedef JGandalf< JPoint4Eminimiser_type
 
typedef JRegressor< JPoint4E, JGandalfregressor_type
 
typedef minimiser_type::result_type result_type
 
typedef JFIT_LOCAL::JTypedef_t< JModel_t >::parameter_type parameter_type
 Data type of fit parameter. More...
 

Public Member Functions

 JRegressor (const std::string &fileDescriptor, const double TTS, const int numberOfPoints=25, const double epsilon=1.0e-10)
 Parameterized constructor. More...
 
template<class JHit_t >
result_type operator() (const JPoint4E &vx, const JHit_t &hit) const
 Fit function. More...
 
JPDF_t::result_type getH0 (const double R_Hz, const double t1) const
 Get background hypothesis value for time differentiated PDF. More...
 
JPDF_t::result_type getH1 (const double D, const double ct, const double t) const
 Get signal hypothesis value per 1 GeV for bright point emission PDF. More...
 
double getRmax () const
 Get maximal road width of PDF. More...
 
result_type operator() (const JPoint4E &value, T __begin, T __end)
 Global fit. More...
 
template<class JFunction_t , class T , class ... Args>
result_type operator() (const JFunction_t &fit, T __begin, T __end, Args ...args)
 Multi-dimensional fit of multiple data sets. More...
 

Public Attributes

JPDF_t pdf [NUMBER_OF_PDFS]
 PDF. More...
 
std::vector< parameter_typeparameters
 fit parameters More...
 
int numberOfIterations
 number of iterations More...
 
double lambda
 control parameter More...
 
JModel_t value
 value More...
 
JModel_t error
 error More...
 
JMATH::JMatrixNS V
 Hesse matrix. More...
 

Static Public Attributes

static JTimeRange T_ns
 Time window with respect to Cherenkov hypothesis [ns]. More...
 
static double Vmax_npe = std::numeric_limits<double>::max()
 Maximal integral of PDF [npe]. More...
 
static const int NUMBER_OF_PDFS = 2
 
static const JPDFType_t pdf_t [NUMBER_OF_PDFS]
 PDF types. More...
 
static int MAXIMUM_ITERATIONS = 1000
 maximal number of iterations More...
 
static double EPSILON = 1.0e-3
 maximal distance to minimum More...
 
static bool EPSILON_ABSOLUTE = false
 set epsilon to absolute difference instead of relative More...
 
static double LAMBDA_MIN = 0.01
 minimal value control parameter More...
 
static double LAMBDA_MAX = 100.0
 maximal value control parameter More...
 
static double LAMBDA_UP = 10.0
 multiplication factor control parameter More...
 
static double LAMBDA_DOWN = 10.0
 multiplication factor control parameter More...
 
static double PIVOT = std::numeric_limits<double>::epsilon()
 minimal value diagonal element of Hesse matrix More...
 
static int debug = 0
 debug level (default is off). More...
 

Private Member Functions

void reset ()
 Reset current parameters. More...
 
template<class JFunction_t , class T , class ... Args>
void update (const JFunction_t &fit, T __begin, T __end, Args ...args)
 Recursive method to update current parameters. More...
 
template<class JFunction_t >
void update (const JFunction_t &fit)
 Termination method to update current parameters. More...
 

Static Private Member Functions

static double get (const JModel_t &model, double JModel_t::*parameter)
 Read/write access to parameter value by data member. More...
 
static double & get (JModel_t &model, double JModel_t::*parameter)
 Read/write access to parameter value by data member. More...
 
static double get (const JModel_t &model, const size_t index)
 Read/write access to parameter value by index. More...
 
static double & get (JModel_t &model, const size_t index)
 Read/write access to parameter value by index. More...
 
static double get (const JModel_t &model, const int index)
 Read/write access to parameter value by index. More...
 
static double & get (JModel_t &model, const int index)
 Read/write access to parameter value by index. More...
 

Private Attributes

std::vector< double > h
 
JMATH::JVectorND x
 
struct {
   result_type   result
 
current
 
struct {
   JModel_t   value
 
   result_type   result
 
previous
 

Detailed Description

Regressor function object for JPoint4E fit using JGandalf minimiser.

Definition at line 44 of file JShowerBrightPointRegressor.hh.

Member Typedef Documentation

◆ JFunction1D_t

Definition at line 49 of file JShowerBrightPointRegressor.hh.

◆ JPDFMapList_t

Definition at line 51 of file JShowerBrightPointRegressor.hh.

◆ JPDF_t

Definition at line 52 of file JShowerBrightPointRegressor.hh.

◆ 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.

◆ parameter_type

template<class JModel_t >
typedef JFIT_LOCAL::JTypedef_t<JModel_t>::parameter_type JFIT::JGandalf< JModel_t >::parameter_type
inherited

Data type of fit parameter.

Definition at line 95 of file JGandalf.hh.

Constructor & Destructor Documentation

◆ JRegressor()

JFIT::JRegressor< JPoint4E, JGandalf >::JRegressor ( const std::string &  fileDescriptor,
const double  TTS,
const int  numberOfPoints = 25,
const double  epsilon = 1.0e-10 
)
inline

Parameterized constructor.

The PDF file descriptor should contain the wild card character JPHYSICS::WILDCARD which will be replaced by the corresponding PDF types.

Parameters
fileDescriptorPDF file descriptor
TTSTTS [ns]
numberOfPointsnumber of points for Gauss-Hermite integration of TTS
epsilonprecision for Gauss-Hermite integration of TTS

Definition at line 66 of file JShowerBrightPointRegressor.hh.

70  {
71  using namespace std;
72  using namespace JPP;
73 
74  const JPDF_t::JSupervisor supervisor(new JPDF_t::JDefaultResult(JMATH::zero));
75 
76  for (int i = 0; i != NUMBER_OF_PDFS; ++i) {
77 
78  try {
79 
80  const string file_name = getFilename(fileDescriptor, pdf_t[i]);
81 
82  NOTICE("loading PDF from file " << file_name << "... " << flush);
83 
84  pdf[i].load(file_name.c_str());
85 
86  NOTICE("OK" << endl);
87 
88  pdf[i].setExceptionHandler(supervisor);
89  }
90  catch(const JException& error) {
91  FATAL(error.what() << endl);
92  }
93  }
94 
95  // Add PDFs
96  for (int i = 1; i < NUMBER_OF_PDFS; i += 2) {
97 
98  pdf[ i ].add(pdf[i-1]);
99 
100  JPDF_t buffer;
101 
102  pdf[i-1].swap(buffer);
103 
104  if (TTS > 0.0) {
105  pdf[i].blur(TTS, numberOfPoints, epsilon);
106  } else if (TTS < 0.0) {
107  ERROR("Illegal value of TTS [ns]: " << TTS << endl);
108  }
109  }
110  }
#define ERROR(A)
Definition: JMessage.hh:66
#define NOTICE(A)
Definition: JMessage.hh:64
#define FATAL(A)
Definition: JMessage.hh:67
int numberOfPoints
Definition: JResultPDF.cc:22
JModel_t error
error
Definition: JGandalf.hh:342
General exception.
Definition: JException.hh:24
void blur(const double TTS, const int numberOfPoints=25, const double epsilon=1.0e-10, const double quantile=0.99)
Blur PDF.
Definition: JPDFTable.hh:111
void setExceptionHandler(const typename function_type::supervisor_type &supervisor)
Set the supervisor for handling of exceptions.
void add(const JMultiFunction_t &input)
Add function.
const double epsilon
Definition: JQuadrature.cc:21
std::string getFilename(const std::string &file_name)
Get file name part, i.e. part after last JEEP::PATHNAME_SEPARATOR if any.
Definition: JeepToolkit.hh:128
static const JZero zero
Function object to assign zero value.
Definition: JZero.hh:105
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JSTDTypes.hh:14
JPHYSICS::JPDFTable< JFunction1D_t, JPDFMapList_t > JPDF_t
static const JPDFType_t pdf_t[NUMBER_OF_PDFS]
PDF types.
void load(const char *file_name)
Load from input file.

Member Function Documentation

◆ operator()() [1/3]

template<class JHit_t >
result_type JFIT::JRegressor< JPoint4E, JGandalf >::operator() ( const JPoint4E vx,
const JHit_t hit 
) const
inline

Fit function.

This method is used to determine the chi2 and gradient of given hit with respect a bright point emitting isotropically

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

  • double getX(); // [m]
  • double getY(); // [m]
  • double getZ(); // [m]
  • double getDX(); // [u]
  • double getDY(); // [u]
  • double getDZ(); // [u]
  • double getT(); // [ns]
Parameters
vxshower vertex
hithit
Returns
chi2 and gradient

Definition at line 130 of file JShowerBrightPointRegressor.hh.

131  {
132  using namespace JPP;
133 
134  JPosition3D D(hit.getPosition());
135  JDirection3D U(hit.getDirection());
136 
137  D.sub(vx.getPosition());
138  double length = D.getLength();
139  double ct = U.getDot(D) / length;
140 
141  if (ct > +1.0) { ct = +1.0; }
142  if (ct < -1.0) { ct = -1.0; }
143 
144  const double t = vx.getT() + (length * getIndexOfRefraction() * getInverseSpeedOfLight());
145 
146  const double dt = T_ns.constrain(hit.getT() - t);
147 
148  JPDF_t::result_type H0 = getH0(hit.getR(), dt); // getH0 = Get background hypothesis value
149  JPDF_t::result_type H1 = getH1(length, ct, dt); // getH1 = Get signal hypothesis value / 1 GeV
150 
151  if (get_value(H1) >= Vmax_npe) {
152  H1 *= Vmax_npe / get_value(H1);
153  }
154 
155  double H1_value = get_value(H1);
156  double v_H1 = H1.v; //Integral from tmin to t of just H1
157  double V_H1 = H1.V; //Integral from tmin to tmax of just H1
158  H1 *= vx.getE();
159 
160  JPDF_t::result_type HT = H1+H0; //now H1 is signal + background
161  double HT_value = get_value(HT);
163  result.chi2 = HT.getChi2() - H0.getChi2(); // Likelihood ratio
164 
165  double exp_V_HT = exp(-HT.V); //V is the integral from tmin to tmax of EH1+H0
166 
167  double energy_gradient = -1 / HT_value; //dPdE
168  energy_gradient *= (H1_value - HT_value * v_H1) * (1-exp_V_HT) - HT_value * exp_V_HT * V_H1; //Numerator
169  energy_gradient /= (1-exp_V_HT); // Denominator
170 
171  /*
172  * Here it is evaluated: d(chi2)/d(ct) * d(ct)/d(x0,y0,z0,t0) + d(chi2)/dE
173  */
174  result.gradient = JPoint4E(JPoint4D(JVector3D(-getIndexOfRefraction() * D.getX() / length, // d(ct)/d(x0)
175  -getIndexOfRefraction() * D.getY() / length, // d(ct)/d(y0)
176  -getIndexOfRefraction() * D.getZ() / length), // d(ct)/d(z0)
177  getSpeedOfLight()), // d(ct)/d(t0)
178  energy_gradient); // d(chi2)/d(E)
179 
180  static_cast<JPoint4D&>(result.gradient).mul(getInverseSpeedOfLight() * (HT.getDerivativeOfChi2() -
181  H0.getDerivativeOfChi2())); // x d(chi2)/d(ct1)
182 
183  return result;
184 
185  }
result_type result
Definition: JGandalf.hh:486
Data structure for vertex fit.
Definition: JPoint4D.hh:24
Data structure for vertex fit.
Definition: JPoint4E.hh:24
double getE() const
Get energy.
Definition: JPoint4E.hh:52
Data structure for direction in three dimensions.
Definition: JDirection3D.hh:35
Data structure for position in three dimensions.
Definition: JPosition3D.hh:38
const JPosition3D & getPosition() const
Get position.
Definition: JPosition3D.hh:130
Data structure for vector in three dimensions.
Definition: JVector3D.hh:36
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Definition: JVertex3D.hh:147
T constrain(argument_type x) const
Constrain value to range.
Definition: JRange.hh:350
double getIndexOfRefraction()
Get average index of refraction of water corresponding to group velocity.
const double getInverseSpeedOfLight()
Get inverse speed of light.
const double getSpeedOfLight()
Get speed of light.
JResultEvaluator< JResult_t >::result_type get_value(const JResult_t &value)
Helper method to recursively evaluate a to function value.
Definition: JResult.hh:998
minimiser_type::result_type result_type
Definition: JRegressor.hh:82
JModel_t gradient
partial derivatives of chi2
Definition: JGandalf.hh:136
JPDF_t::result_type getH0(const double R_Hz, const double t1) const
Get background hypothesis value for time differentiated PDF.
static double Vmax_npe
Maximal integral of PDF [npe].
JPDF_t::result_type getH1(const double D, const double ct, const double t) const
Get signal hypothesis value per 1 GeV for bright point emission PDF.
static JTimeRange T_ns
Time window with respect to Cherenkov hypothesis [ns].

◆ getH0()

JPDF_t::result_type JFIT::JRegressor< JPoint4E, JGandalf >::getH0 ( const double  R_Hz,
const double  t1 
) const
inline

Get background hypothesis value for time differentiated PDF.

Parameters
R_Hzrate [Hz]
t1time [ns]
Returns
hypothesis value

Definition at line 194 of file JShowerBrightPointRegressor.hh.

196  {
197  using namespace JPP;
198 
199  return JPDF_t::result_type(R_Hz * 1e-9, t1, T_ns);
200  }

◆ getH1()

JPDF_t::result_type JFIT::JRegressor< JPoint4E, JGandalf >::getH1 ( const double  D,
const double  ct,
const double  t 
) const
inline

Get signal hypothesis value per 1 GeV for bright point emission PDF.

Parameters
Dhit distance from shower vertex [m]
ctcosine of the HIT angle
tarrival time of the light
Returns
hypothesis value / GeV

Definition at line 210 of file JShowerBrightPointRegressor.hh.

213  {
214  using namespace JPP;
215 
216  JPDF_t::result_type h1 = JMATH::zero;
217 
218  for (int i = 0; i != NUMBER_OF_PDFS; ++i) {
219 
220  if (!pdf[i].empty() && D <= pdf[i].getXmax()) {
221 
222  try {
223 
224  JPDF_t::result_type y1 = pdf[i](std::max(D, pdf[i].getXmin()), ct, t);
225 
226  // safety measures
227 
228  if (y1.f <= 0.0) {
229  y1.f = 0.0;
230  y1.fp = 0.0;
231  }
232 
233  if (y1.v <= 0.0) {
234  y1.v = 0.0;
235  }
236 
237  h1 += y1;
238 
239  }
240  catch(JLANG::JException& error) {
241  ERROR(error << std::endl);
242  }
243  }
244  }
245 
246  return h1;
247  }

◆ getRmax()

double JFIT::JRegressor< JPoint4E, JGandalf >::getRmax ( ) const
inline

Get maximal road width of PDF.

Returns
road width [m]

Definition at line 254 of file JShowerBrightPointRegressor.hh.

255  {
256  using namespace JPP;
257 
258  double xmax = 0.0;
259 
260  for (int i = 0; i != NUMBER_OF_PDFS; ++i) {
261 
262  if (!pdf[i].empty() && pdf[i].getXmax() > xmax) {
263  xmax = pdf[i].getXmax();
264  }
265 
266  }
267 
268  return xmax;
269  }
const double xmax
Definition: JQuadrature.cc:24

◆ operator()() [2/3]

result_type JFIT::JAbstractRegressor< JPoint4E , JGandalf >::operator() ( const JPoint4E 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
value
Definition: JGandalf.hh:341
JRegressor< JPoint4E, JGandalf > regressor_type
Definition: JRegressor.hh:81

◆ operator()() [3/3]

template<class JModel_t >
template<class JFunction_t , class T , class ... Args>
result_type JFIT::JGandalf< JModel_t >::operator() ( const JFunction_t &  fit,
__begin,
__end,
Args ...  args 
)
inlineinherited

Multi-dimensional fit of multiple data sets.

The fit function should return the chi2 as well as the partial derivatives for the current value of the model and a given data point.

Parameters
fitfit function
__beginbegin of data
__endend of data
argsoptional data
Returns
chi2 and gradient

Definition at line 160 of file JGandalf.hh.

161  {
162  using namespace std;
163  using namespace JPP;
164 
165  // note that all model values should be assigned to the start value of the model before use
166  // because the actual list of model parameters can vary from fit to fit
167  // (e.g. if model consists of a container).
168 
169  const size_t N = parameters.size();
170 
171  V.resize(N);
172  h.resize(N);
173  x.resize(N);
174 
175  previous.result.chi2 = numeric_limits<double>::max();
176 
177  current.result.chi2 = numeric_limits<double>::max();
178  current.result.gradient = value;
179  current.result.gradient = zero;
180 
181  error = value;
182  error = zero;
183 
184  lambda = LAMBDA_MIN;
185 
187 
188  DEBUG("step: " << numberOfIterations << endl);
189 
190  reset();
191 
192  update(fit, __begin, __end, args...);
193 
194  DEBUG("lambda: " << FIXED(12,5) << lambda << endl);
195  DEBUG("chi2: " << FIXED(12,5) << current.result.chi2 << endl);
196 
197  if (current.result.chi2 < previous.result.chi2) {
198 
199  if (numberOfIterations != 0) {
200 
201  const double tolerance = EPSILON * (EPSILON_ABSOLUTE ? 1.0 : fabs(previous.result.chi2));
202 
203  if (fabs(previous.result.chi2 - current.result.chi2) <= tolerance) {
204 
205  // normal end
206 
207  const result_type result = current.result;
208 
209  reset();
210 
211  update(fit, __begin, __end, args...);
212 
213  try {
214  V.invert();
215  }
216  catch (const exception& error) {}
217 
218  for (size_t i = 0; i != N; ++i) {
219  get(error, parameters[i]) = sqrt(V(i,i));
220  }
221 
222  return result;
223  }
224 
225  if (lambda > LAMBDA_MIN) {
226  lambda /= LAMBDA_DOWN;
227  }
228  }
229 
230  // store current values
231 
232  previous.value = value;
233  previous.result = current.result;
234 
235  } else {
236 
237  value = previous.value; // restore value
238 
239  lambda *= LAMBDA_UP;
240 
241  if (lambda > LAMBDA_MAX) {
242  break;
243  }
244 
245  reset();
246 
247  update(fit, __begin, __end, args...);
248  }
249 
250  DEBUG("Hesse matrix:" << endl << V << endl);
251 
252  // force definite positiveness
253 
254  for (size_t i = 0; i != N; ++i) {
255 
256  if (V(i,i) < PIVOT) {
257  V(i,i) = PIVOT;
258  }
259 
260  h[i] = 1.0 / sqrt(V(i,i));
261  }
262 
263  // normalisation
264 
265  for (size_t row = 0; row != N; ++row) {
266  for (size_t col = 0; col != row; ++col) {
267  V(row,col) *= h[row] * h[col];
268  V(col,row) = V(row,col);
269  }
270  }
271 
272  for (size_t i = 0; i != N; ++i) {
273  V(i,i) = 1.0 + lambda;
274  }
275 
276  // solve A x = b
277 
278  for (size_t col = 0; col != N; ++col) {
279  x[col] = h[col] * get(current.result.gradient, parameters[col]);
280  }
281 
282  try {
283  V.solve(x);
284  }
285  catch (const exception& error) {
286 
287  ERROR("JGandalf: " << error.what() << endl << V << endl);
288 
289  break;
290  }
291 
292  // update value
293 
294  for (size_t row = 0; row != N; ++row) {
295 
296  DEBUG("u[" << noshowpos << setw(3) << row << "] = " << showpos << FIXED(15,5) << get(value, parameters[row]));
297 
298  get(value, parameters[row]) -= h[row] * x[row];
299 
300  DEBUG(" -> " << FIXED(15,5) << get(value, parameters[row]) << noshowpos << endl);
301  }
302 
303  model(value);
304  }
305 
306  // abnormal end
307 
308  const result_type result = previous.result;
309 
310  value = previous.value; // restore value
311 
312  reset();
313 
314  update(fit, __begin, __end, args...);
315 
316  try {
317  V.invert();
318  }
319  catch (const exception& error) {}
320 
321  for (size_t i = 0; i != N; ++i) {
322  get(error, parameters[i]) = sqrt(V(i,i));
323  }
324 
325  return result;
326  }
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
double lambda
control parameter
Definition: JGandalf.hh:340
static double LAMBDA_MIN
minimal value control parameter
Definition: JGandalf.hh:332
JMATH::JVectorND x
Definition: JGandalf.hh:483
struct JFIT::JGandalf::@12 current
void reset()
Reset current parameters.
Definition: JGandalf.hh:349
static double LAMBDA_DOWN
multiplication factor control parameter
Definition: JGandalf.hh:335
std::vector< parameter_type > parameters
fit parameters
Definition: JGandalf.hh:338
static double LAMBDA_UP
multiplication factor control parameter
Definition: JGandalf.hh:334
int numberOfIterations
number of iterations
Definition: JGandalf.hh:339
static bool EPSILON_ABSOLUTE
set epsilon to absolute difference instead of relative
Definition: JGandalf.hh:331
std::vector< double > h
Definition: JGandalf.hh:482
static double get(const JModel_t &model, double JModel_t::*parameter)
Read/write access to parameter value by data member.
Definition: JGandalf.hh:412
static int MAXIMUM_ITERATIONS
maximal number of iterations
Definition: JGandalf.hh:329
static double PIVOT
minimal value diagonal element of Hesse matrix
Definition: JGandalf.hh:336
void update(const JFunction_t &fit, T __begin, T __end, Args ...args)
Recursive method to update current parameters.
Definition: JGandalf.hh:369
static double EPSILON
maximal distance to minimum
Definition: JGandalf.hh:330
JMATH::JMatrixNS V
Hesse matrix.
Definition: JGandalf.hh:343
static double LAMBDA_MAX
maximal value control parameter
Definition: JGandalf.hh:333
struct JFIT::JGandalf::@13 previous
void model(JModel_t &value)
Auxiliary function to constrain model during fit.
Definition: JGandalf.hh:56
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:448
void resize(const size_t size)
Resize matrix.
Definition: JMatrixND.hh:446
void solve(JVectorND_t &u)
Get solution of equation A x = b.
Definition: JMatrixNS.hh:308
void invert()
Invert matrix according LDU decomposition.
Definition: JMatrixNS.hh:75

◆ reset()

template<class JModel_t >
void JFIT::JGandalf< JModel_t >::reset ( )
inlineprivateinherited

Reset current parameters.

Definition at line 349 of file JGandalf.hh.

350  {
351  using namespace JPP;
352 
353  current.result.chi2 = 0.0;
354  current.result.gradient = zero;
355 
356  V.reset();
357  }
JMatrixND & reset()
Set matrix to the null matrix.
Definition: JMatrixND.hh:459

◆ update() [1/2]

template<class JModel_t >
template<class JFunction_t , class T , class ... Args>
void JFIT::JGandalf< JModel_t >::update ( const JFunction_t &  fit,
__begin,
__end,
Args ...  args 
)
inlineprivateinherited

Recursive method to update current parameters.

Parameters
fitfit function
__beginbegin of data
__endend of data
argsoptional data

Definition at line 369 of file JGandalf.hh.

370  {
371  for (T i = __begin; i != __end; ++i) {
372 
373  const result_type& result = fit(value, *i);
374 
375  current.result.chi2 += result.chi2;
376  current.result.gradient += result.gradient;
377 
378  for (size_t row = 0; row != parameters.size(); ++row) {
379  for (size_t col = row; col != parameters.size(); ++col) {
380  V(row,col) += get(result.gradient, parameters[row]) * get(result.gradient, parameters[col]);
381  }
382  }
383  }
384 
385  update(fit, args...);
386  }

◆ update() [2/2]

template<class JModel_t >
template<class JFunction_t >
void JFIT::JGandalf< JModel_t >::update ( const JFunction_t &  fit)
inlineprivateinherited

Termination method to update current parameters.

Parameters
fitfit function

Definition at line 395 of file JGandalf.hh.

396  {
397  for (size_t row = 0; row != parameters.size(); ++row) {
398  for (size_t col = 0; col != row; ++col) {
399  V(row,col) = V(col,row);
400  }
401  }
402  }

◆ get() [1/6]

template<class JModel_t >
static double JFIT::JGandalf< JModel_t >::get ( const JModel_t model,
double JModel_t::*  parameter 
)
inlinestaticprivateinherited

Read/write access to parameter value by data member.

Parameters
modelmodel
parameterparameter
Returns
value

Definition at line 412 of file JGandalf.hh.

413  {
414  return model.*parameter;
415  }

◆ get() [2/6]

template<class JModel_t >
static double& JFIT::JGandalf< JModel_t >::get ( JModel_t model,
double JModel_t::*  parameter 
)
inlinestaticprivateinherited

Read/write access to parameter value by data member.

Parameters
modelmodel
parameterparameter
Returns
value

Definition at line 425 of file JGandalf.hh.

426  {
427  return model.*parameter;
428  }

◆ get() [3/6]

template<class JModel_t >
static double JFIT::JGandalf< JModel_t >::get ( const JModel_t model,
const size_t  index 
)
inlinestaticprivateinherited

Read/write access to parameter value by index.

Parameters
modelmodel
indexindex
Returns
value

Definition at line 438 of file JGandalf.hh.

439  {
440  return model[index];
441  }

◆ get() [4/6]

template<class JModel_t >
static double& JFIT::JGandalf< JModel_t >::get ( JModel_t model,
const size_t  index 
)
inlinestaticprivateinherited

Read/write access to parameter value by index.

Parameters
modelmodel
indexindex
Returns
value

Definition at line 451 of file JGandalf.hh.

452  {
453  return model[index];
454  }

◆ get() [5/6]

template<class JModel_t >
static double JFIT::JGandalf< JModel_t >::get ( const JModel_t model,
const int  index 
)
inlinestaticprivateinherited

Read/write access to parameter value by index.

Parameters
modelmodel
indexindex
Returns
value

Definition at line 464 of file JGandalf.hh.

465  {
466  return model[index];
467  }

◆ get() [6/6]

template<class JModel_t >
static double& JFIT::JGandalf< JModel_t >::get ( JModel_t model,
const int  index 
)
inlinestaticprivateinherited

Read/write access to parameter value by index.

Parameters
modelmodel
indexindex
Returns
value

Definition at line 477 of file JGandalf.hh.

478  {
479  return model[index];
480  }

Member Data Documentation

◆ T_ns

Time window with respect to Cherenkov hypothesis [ns].

Default values.

Definition at line 271 of file JShowerBrightPointRegressor.hh.

◆ Vmax_npe

double JFIT::JRegressor< JPoint4E, JGandalf >::Vmax_npe = std::numeric_limits<double>::max()
static

Maximal integral of PDF [npe].

Definition at line 272 of file JShowerBrightPointRegressor.hh.

◆ NUMBER_OF_PDFS

const int JFIT::JRegressor< JPoint4E, JGandalf >::NUMBER_OF_PDFS = 2
static

Definition at line 274 of file JShowerBrightPointRegressor.hh.

◆ pdf_t

const JPDFType_t JFIT::JRegressor< JPoint4E, JGandalf >::pdf_t
static
Initial value:
@ SCATTERED_LIGHT_FROM_BRIGHT_POINT
scattered light from bright point
Definition: JPDFTypes.hh:43
@ DIRECT_LIGHT_FROM_BRIGHT_POINT
direct light from bright point
Definition: JPDFTypes.hh:42

PDF types.

Definition at line 276 of file JShowerBrightPointRegressor.hh.

◆ pdf

PDF.

Definition at line 278 of file JShowerBrightPointRegressor.hh.

◆ MAXIMUM_ITERATIONS

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

maximal number of iterations

maximal number of iterations.

Definition at line 329 of file JGandalf.hh.

◆ EPSILON

template<class JModel_t >
double JFIT::JGandalf< JModel_t >::EPSILON = 1.0e-3
staticinherited

maximal distance to minimum

maximal distance to minimum.

Definition at line 330 of file JGandalf.hh.

◆ EPSILON_ABSOLUTE

template<class JModel_t >
bool JFIT::JGandalf< JModel_t >::EPSILON_ABSOLUTE = false
staticinherited

set epsilon to absolute difference instead of relative

set epsilon to absolute difference instead of relative.

Definition at line 331 of file JGandalf.hh.

◆ LAMBDA_MIN

template<class JModel_t >
double JFIT::JGandalf< JModel_t >::LAMBDA_MIN = 0.01
staticinherited

minimal value control parameter

Definition at line 332 of file JGandalf.hh.

◆ LAMBDA_MAX

template<class JModel_t >
double JFIT::JGandalf< JModel_t >::LAMBDA_MAX = 100.0
staticinherited

maximal value control parameter

Definition at line 333 of file JGandalf.hh.

◆ LAMBDA_UP

template<class JModel_t >
double JFIT::JGandalf< JModel_t >::LAMBDA_UP = 10.0
staticinherited

multiplication factor control parameter

Definition at line 334 of file JGandalf.hh.

◆ LAMBDA_DOWN

template<class JModel_t >
double JFIT::JGandalf< JModel_t >::LAMBDA_DOWN = 10.0
staticinherited

multiplication factor control parameter

Definition at line 335 of file JGandalf.hh.

◆ PIVOT

template<class JModel_t >
double JFIT::JGandalf< JModel_t >::PIVOT = std::numeric_limits<double>::epsilon()
staticinherited

minimal value diagonal element of Hesse matrix

minimal value diagonal element of matrix

Definition at line 336 of file JGandalf.hh.

◆ parameters

template<class JModel_t >
std::vector<parameter_type> JFIT::JGandalf< JModel_t >::parameters
inherited

fit parameters

Definition at line 338 of file JGandalf.hh.

◆ numberOfIterations

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

number of iterations

Definition at line 339 of file JGandalf.hh.

◆ lambda

template<class JModel_t >
double JFIT::JGandalf< JModel_t >::lambda
inherited

control parameter

Definition at line 340 of file JGandalf.hh.

◆ value

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

value

Definition at line 341 of file JGandalf.hh.

◆ error

template<class JModel_t >
JModel_t JFIT::JGandalf< JModel_t >::error
inherited

error

Definition at line 342 of file JGandalf.hh.

◆ V

template<class JModel_t >
JMATH::JMatrixNS JFIT::JGandalf< JModel_t >::V
inherited

Hesse matrix.

Definition at line 343 of file JGandalf.hh.

◆ h

template<class JModel_t >
std::vector<double> JFIT::JGandalf< JModel_t >::h
privateinherited

Definition at line 482 of file JGandalf.hh.

◆ x

template<class JModel_t >
JMATH::JVectorND JFIT::JGandalf< JModel_t >::x
privateinherited

Definition at line 483 of file JGandalf.hh.

◆ result

template<class JModel_t >
result_type JFIT::JGandalf< JModel_t >::result
inherited

Definition at line 486 of file JGandalf.hh.

◆ 

struct { ... } JFIT::JGandalf< JModel_t >::current

◆ 

struct { ... } JFIT::JGandalf< JModel_t >::previous

◆ 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: