Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
JFIT::JRegressor< JPoint4D, JSimplex > Struct Template 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< JPoint4D > JEEP::JMessage< T >

Public Types

typedef JSimplex< JPoint4Dminimiser_type
 
typedef JRegressor< JPoint4D,
JSimplex
regressor_type
 

Public Member Functions

 JRegressor (const bool __prefit)
 Constructor. More...
 
 JRegressor (TH2D *hPDF2D, bool __prefit)
 Constructor for a 2D histogram as PDF. More...
 
template<class JHit_t >
double operator() (const JPoint4D &vertex, const JHit_t &hit) const
 
double evaluatePrefit (const double t_res, const double cosT, const double cosT_th) const
 
double evaluateFit (const double t_res, const double D) const
 
double operator() (const JPoint4D &value, T __begin, T __end)
 Global fit. More...
 
double operator() (const JPoint4D &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 JPoint4D &step)
 1D fit. More...
 

Public Attributes

TH2D * hpdf2d [NUMBER_OF_PDFS]
 PDF 2D. More...
 
JLANG::JSharedPointer
< JMEstimator
estimator
 M-Estimator function. More...
 
const bool prefit
 
JPoint4D value
 
std::vector< JPoint4Dstep
 
int numberOfIterations
 

Static Public Attributes

static const double a = 2.0
 constant to prevent the likelihood going to infinity More...
 
static const double d_ref = 10.0
 
static const double p_max = 100
 
static const int NUMBER_OF_PDFS = 1
 
static int MAXIMUM_ITERATIONS
 maximal number of iterations More...
 
static double EPSILON
 maximal distance to minimum More...
 
static int debug = 0
 debug level (default is off). More...
 

Detailed Description

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

Regressor function object for JPoint4D fit using JSimplex minimiser.

Definition at line 47 of file JPoint4DRegressor.hh.

Member Typedef Documentation

Definition at line 76 of file JRegressor.hh.

Definition at line 77 of file JRegressor.hh.

Constructor & Destructor Documentation

JFIT::JRegressor< JPoint4D, JSimplex >::JRegressor ( const bool  __prefit)
inline

Constructor.

Definition at line 55 of file JPoint4DRegressor.hh.

55  :
56  estimator(new JMEstimatorTukey(30.0)),
57  prefit(__prefit)
58  {}
JLANG::JSharedPointer< JMEstimator > estimator
M-Estimator function.
JFIT::JRegressor< JPoint4D, JSimplex >::JRegressor ( TH2D *  hPDF2D,
bool  __prefit 
)
inline

Constructor for a 2D histogram as PDF.

Definition at line 64 of file JPoint4DRegressor.hh.

64  :
65  estimator(new JMEstimatorTukey(30.0)),
66  prefit(__prefit)
67  {
68  hpdf2d[0] = (TH2D*)hPDF2D->Clone();
69  hpdf2d[0]->Smooth();
70  }
JLANG::JSharedPointer< JMEstimator > estimator
M-Estimator function.
TH2D * hpdf2d[NUMBER_OF_PDFS]
PDF 2D.

Member Function Documentation

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

Definition at line 82 of file JPoint4DRegressor.hh.

83  {
84  using namespace std;
85  using namespace JGEOMETRY3D;
86  using namespace JTOOLS;
87 
88  const JPosition3D hit_pos(hit.getPosition());
89  const double D = hit_pos.getDistance(vertex);
90  const double t_res = hit.getT() - vertex.getT(hit_pos);
91  const JDirection3D photonDir(hit_pos - vertex.getPosition());
92  const double cosT = photonDir.getDot(hit.getDirection());
93  const double cosT_th = d_ref / sqrt(d_ref*d_ref + D*D);
94 
95  double LogLik = 0;
96 
97  if(prefit){
98 
99  LogLik = evaluatePrefit(t_res, cosT, cosT_th);
100 
101  } else {
102 
103  LogLik = evaluateFit(t_res, D);
104 
105  }
106 
107  return LogLik;
108  }
Data structure for direction in three dimensions.
Definition: JDirection3D.hh:32
double evaluateFit(const double t_res, const double D) const
double getDistance(const JVector3D &pos) const
Get distance to point.
Definition: JVector3D.hh:266
double getDot(const JAngle3D &angle) const
Get dot product.
double evaluatePrefit(const double t_res, const double cosT, const double cosT_th) const
Data structure for position in three dimensions.
Definition: JPosition3D.hh:35
double JFIT::JRegressor< JPoint4D, JSimplex >::evaluatePrefit ( const double  t_res,
const double  cosT,
const double  cosT_th 
) const
inline

Definition at line 111 of file JPoint4DRegressor.hh.

112  {
113 
114  double p_T = 0;
115 
116  if(cosT < 0){
117  p_T = 0;
118  } else if(cosT > cosT_th){
119  p_T = p_max;
120  } else {
121  p_T = p_max * cosT/cosT_th;
122  }
123 
124  double lik = 1 / (sqrt(a*a + t_res*t_res) + p_T);
125  double u = -log(lik);
126 
127  return estimator->getRho(u);
128  }
static const double a
constant to prevent the likelihood going to infinity
JLANG::JSharedPointer< JMEstimator > estimator
M-Estimator function.
double JFIT::JRegressor< JPoint4D, JSimplex >::evaluateFit ( const double  t_res,
const double  D 
) const
inline

Definition at line 131 of file JPoint4DRegressor.hh.

132  {
133 
134  int x_bin = hpdf2d[0]->GetXaxis()->FindBin(t_res);
135  int y_bin = hpdf2d[0]->GetYaxis()->FindBin(D);
136 
137  int nbinsX = hpdf2d[0]->GetXaxis()->GetNbins();
138  int nbinsY = hpdf2d[0]->GetYaxis()->GetNbins();
139 
140  double lik = 0;
141 
142  if(x_bin > 1 && x_bin < nbinsX){
143  if(y_bin > 1 && y_bin < nbinsY){
144  lik = hpdf2d[0]->Interpolate(t_res, D);
145  }
146  }
147 
148  if(lik == 0){
149  lik = 0.000004; // value of K40 bg
150  }
151 
152  double u = -log(lik);
153  return estimator->getRho(u);
154 
155  }
JLANG::JSharedPointer< JMEstimator > estimator
M-Estimator function.
TH2D * hpdf2d[NUMBER_OF_PDFS]
PDF 2D.
double 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 89 of file JRegressor.hh.

90  {
91  static_cast<minimiser_type&>(*this).value = value;
92 
93  return static_cast<minimiser_type&>(*this)(static_cast<regressor_type&>(*this), __begin, __end);
94  }
JRegressor< JPoint4D, JSimplex > regressor_type
Definition: JRegressor.hh:77
JModel_t value
Definition: JSimplex.hh:227
double JFIT::JAbstractRegressor< JPoint4D , JSimplex >::operator() ( const JPoint4D 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 108 of file JRegressor.hh.

111  {
112  static_cast<minimiser_type&>(*this).value = value;
113 
114  return static_cast<minimiser_type&>(*this)(static_cast<regressor_type&>(*this), __begin1, __end1, __begin2, __end2);
115  }
JRegressor< JPoint4D, JSimplex > regressor_type
Definition: JRegressor.hh:77
JModel_t value
Definition: JSimplex.hh:227
double JFIT::JSimplex< JPoint4D >::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 69 of file JSimplex.hh.

70  {
71  using namespace std;
72  using namespace JPP;
73 
74  double chi2_old = evaluate(fit, __begin, __end);
75 
76  const int N = step.size();
77 
78  if (N != 0) {
79 
80  double chi2[N];
81 
83 
85 
86  DEBUG("old: " << FIXED(12,5) << chi2_old << endl);
87 
88  const JModel_t p0(value);
89 
90  for (int i = 0; i != N; ++i) {
91 
92  DEBUG("step: " << i << ' ' << setw(5) << numberOfIterations << endl);
93 
94  chi2[i] = (*this)(fit, __begin, __end, step[i]);
95  }
96 
97  // overall step direction of last iteration
98 
99  JModel_t wall = value - p0;
100 
101  const double chi2_new = (*this)(fit, __begin, __end, wall);
102 
103  DEBUG("new: " << FIXED(12,5) << chi2_new << endl);
104 
105 
106  if (fabs(chi2_old - chi2_new) < EPSILON*fabs(chi2_old)) {
107  return chi2_new;
108  }
109 
110  // double overall step
111 
112  wall = value - p0;
113 
114  value += wall;
115 
116  const double fe = evaluate(fit, __begin, __end);
117 
118  value -= wall;
119 
120 
121  for (int i = N-1; i != 0; --i) {
122  chi2[i] = chi2[i-1] - chi2[i];
123  }
124 
125  chi2[0] = chi2_old - chi2[0];
126 
127 
128  double df = 0.0;
129 
130  for (int i = 0; i != N; ++i) {
131  if (chi2[i] > df) {
132  df = chi2[i];
133  }
134  }
135 
136  const double fn = chi2_new;
137  const double f0 = chi2_old;
138  const double ff = f0 - fn - df;
139 
140  // shift step directions
141 
142  if (fe < f0 && 2.0*(f0 - 2.0*fn + fe)*ff*ff < (f0-fe)*(f0-fe)*df) {
143 
144  for (int i = 0; i != N - 1; ++i) {
145  step[i] = step[i+1];
146  }
147 
148  step[N-1] = wall;
149  }
150 
151  chi2_old = chi2_new;
152  }
153  }
154 
155  return chi2_old;
156  }
Auxiliary data structure for floating point format specification.
Definition: JPrint.hh:461
double evaluate(const JFunction_t &fit, T __begin, T __end) const
Evaluate chi2 for given data set.
Definition: JSimplex.hh:240
static int MAXIMUM_ITERATIONS
maximal number of iterations
Definition: JSimplex.hh:224
static double EPSILON
maximal distance to minimum
Definition: JSimplex.hh:225
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:60
std::vector< JPoint4D > step
Definition: JSimplex.hh:228
double JFIT::JSimplex< JPoint4D >::operator() ( const JFunction_t &  fit,
__begin,
__end,
const JPoint4D 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 171 of file JSimplex.hh.

172  {
173  using namespace std;
174  using namespace JPP;
175 
176  double lambda = 0.5; // control parameter
177  double factor = 1.0; // multiplication factor
178 
179  double chi2_old = evaluate(fit, __begin, __end);
180 
181  for (int i = 0; numberOfIterations != MAXIMUM_ITERATIONS; ++numberOfIterations, ++i) {
182 
183  value += lambda * step;
184 
185  const double chi2_new = evaluate(fit, __begin, __end);
186 
187  DEBUG("step: " << setw(3) << i << ' ' << FIXED(12,5) << chi2_old << ' ' << FIXED(12,5) << chi2_new << ' ' << FIXED(5,2) << lambda << endl);
188 
189  if (fabs(chi2_old - chi2_new) < EPSILON*fabs(chi2_old)) {
190 
191  if (chi2_new > chi2_old) {
192 
193  value -= lambda * step; // undo last step
194 
195  return chi2_old;
196 
197  } else {
198 
199  return chi2_new;
200  }
201  }
202 
203  if (chi2_new < chi2_old) {
204 
205  chi2_old = chi2_new;
206 
207  } else {
208 
209  value -= lambda * step; // step back
210  lambda = -lambda; // change direction
211 
212  if (i != 0) {
213  factor = 0.5; // reduce step size
214  }
215  }
216 
217  lambda = factor * lambda;
218  }
219 
220  return chi2_old;
221  }
Auxiliary data structure for floating point format specification.
Definition: JPrint.hh:461
double evaluate(const JFunction_t &fit, T __begin, T __end) const
Evaluate chi2 for given data set.
Definition: JSimplex.hh:240
static int MAXIMUM_ITERATIONS
maximal number of iterations
Definition: JSimplex.hh:224
static double EPSILON
maximal distance to minimum
Definition: JSimplex.hh:225
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:60
std::vector< JPoint4D > step
Definition: JSimplex.hh:228

Member Data Documentation

const double JFIT::JRegressor< JPoint4D, JSimplex >::a = 2.0
static

constant to prevent the likelihood going to infinity

Definition at line 157 of file JPoint4DRegressor.hh.

const double JFIT::JRegressor< JPoint4D, JSimplex >::d_ref = 10.0
static

Definition at line 158 of file JPoint4DRegressor.hh.

const double JFIT::JRegressor< JPoint4D, JSimplex >::p_max = 100
static

Definition at line 159 of file JPoint4DRegressor.hh.

const int JFIT::JRegressor< JPoint4D, JSimplex >::NUMBER_OF_PDFS = 1
static

Definition at line 161 of file JPoint4DRegressor.hh.

PDF 2D.

Definition at line 162 of file JPoint4DRegressor.hh.

M-Estimator function.

Definition at line 164 of file JPoint4DRegressor.hh.

const bool JFIT::JRegressor< JPoint4D, JSimplex >::prefit

Definition at line 165 of file JPoint4DRegressor.hh.

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

maximal number of iterations

maximal number of iterations.

Definition at line 224 of file JSimplex.hh.

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

maximal distance to minimum

maximal distance to minimum.

Definition at line 225 of file JSimplex.hh.

JPoint4D JFIT::JSimplex< JPoint4D >::value
inherited

Definition at line 227 of file JSimplex.hh.

Definition at line 228 of file JSimplex.hh.

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

Definition at line 229 of file JSimplex.hh.

template<class T>
int JEEP::JMessage< T >::debug = 0
staticinherited

debug level (default is off).

Definition at line 43 of file JMessage.hh.


The documentation for this struct was generated from the following file: