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, JGandalf > Struct Template Reference

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

#include <JShowerBrightPointRegressor.hh>

Inheritance diagram for JFIT::JRegressor< JPoint4D, JGandalf >:
JFIT::JAbstractRegressor< JPoint4D, JGandalf > JFIT::JGandalf< JPoint4D > 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_t
JPDF_t
 
typedef JGandalf< JPoint4Dminimiser_type
 
typedef JRegressor< JPoint4D,
JGandalf
regressor_type
 
typedef minimiser_type::result_type result_type
 
typedef JPoint4D::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...
 
result_type operator() (const JPoint4D &vx, const JHitW0 &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 double E) const
 Get signal hypothesis value for bright point emission PDF. More...
 
double getRmax () const
 Get maximal road width of PDF. More...
 
result_type operator() (const JPoint4D &value, T __begin, T __end)
 Global fit. More...
 
result_type operator() (const JFunction_t &fit, T __begin, T __end, Args...args)
 Multi-dimensional fit of two data sets. More...
 

Public Attributes

JPDF_t pdf [NUMBER_OF_PDFS]
 PDF. More...
 
double E_GeV
 Energy of the shower [GeV]. More...
 
double lambda
 
JPoint4D value
 
JPoint4D error
 
std::vector< parameter_typeparameters
 
int numberOfIterations
 
JMATH::JMatrixNS H
 

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
 maximal number of iterations More...
 
static double EPSILON
 maximal distance to minimum More...
 
static double LAMBDA_MIN
 minimal value control parameter More...
 
static double LAMBDA_MAX
 maximal value control parameter More...
 
static double LAMBDA_UP
 multiplication factor control parameter More...
 
static double LAMBDA_DOWN
 multiplication factor control parameter More...
 
static double PIVOT
 minimal value diagonal element of matrix More...
 
static int debug = 0
 debug level (default is off). More...
 

Detailed Description

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

Regressor function object for JPoint4D fit using JGandalf minimiser.

Definition at line 44 of file JShowerBrightPointRegressor.hh.

Member Typedef Documentation

Definition at line 49 of file JShowerBrightPointRegressor.hh.

Definition at line 51 of file JShowerBrightPointRegressor.hh.

Definition at line 52 of file JShowerBrightPointRegressor.hh.

Definition at line 78 of file JRegressor.hh.

Definition at line 79 of file JRegressor.hh.

typedef minimiser_type::result_type JFIT::JAbstractRegressor< JPoint4D , JGandalf >::result_type
inherited

Definition at line 80 of file JRegressor.hh.

Data type of fit parameter.

Definition at line 63 of file JGandalf.hh.

Constructor & Destructor Documentation

JFIT::JRegressor< JPoint4D, 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::WILD_CARD 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.

69  :
70  E_GeV(0.0)
71  {
72  using namespace std;
73  using namespace JPP;
74 
75  const JPDF_t::JSupervisor supervisor(new JPDF_t::JDefaultResult(JMATH::zero));
76 
77  for (int i = 0; i != NUMBER_OF_PDFS; ++i) {
78 
79  try {
80 
81  const string file_name = getFilename(fileDescriptor, pdf_t[i]);
82 
83  NOTICE("loading PDF from file " << file_name << "... " << flush);
84 
85  pdf[i].load(file_name.c_str());
86 
87  NOTICE("OK" << endl);
88 
89  pdf[i].setExceptionHandler(supervisor);
90  }
91  catch(const JException& error) {
92  FATAL(error.what() << endl);
93  }
94  }
95 
96  // Add PDFs
97  for (int i = 1; i < NUMBER_OF_PDFS; i += 2) {
98 
99  pdf[ i ].add(pdf[i-1]);
100 
101  JPDF_t buffer;
102 
103  pdf[i-1].swap(buffer);
104 
105  if (TTS > 0.0) {
106  pdf[i].blur(TTS, numberOfPoints, epsilon);
107  } else if (TTS < 0.0) {
108  ERROR("Illegal value of TTS [ns]: " << TTS << endl);
109  }
110  }
111  }
General exception.
Definition: JException.hh:23
void load(const char *file_name)
Load from input file.
JPHYSICS::JPDFTable< JFunction1D_t, JPDFMapList_t > JPDF_t
void setExceptionHandler(const supervisor_type &supervisor)
Set the supervisor for handling of exceptions.
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:110
static const JZero zero
Function object to assign zero value.
Definition: JZero.hh:105
void add(const JMultiFunction_t &input)
Add function.
#define NOTICE(A)
Definition: JMessage.hh:64
static const JPDFType_t pdf_t[NUMBER_OF_PDFS]
PDF types.
#define FATAL(A)
Definition: JMessage.hh:67
int numberOfPoints
Definition: JResultPDF.cc:22
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:88
virtual const char * what() const
Get error message.
Definition: JException.hh:48

Member Function Documentation

result_type JFIT::JRegressor< JPoint4D, JGandalf >::operator() ( const JPoint4D vx,
const JHitW0 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

JHitW0 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 
139  double ct = U.getDot(D) / D.getLength();
140  if (ct > +1.0) { ct = +1.0; }
141  if (ct < -1.0) { ct = -1.0; }
142 
143  const double t = vx.getT() + (D.getLength() * getIndexOfRefraction() * getInverseSpeedOfLight());
144 
145  const double dt = T_ns.constrain(hit.getT() - t);
146 
147  JPDF_t::result_type H0 = getH0(hit.getR(), dt); // getH0 = Get background hypothesis value
148  JPDF_t::result_type H1 = getH1(D.getLength(), ct, dt, E_GeV); // getH1 = Get signal hypothesis value
149 
150  if (get_value(H1) >= Vmax_npe) {
151  H1 *= Vmax_npe / get_value(H1);
152  }
153 
154  H1 += H0; // now H1 is signal + background
155 
157 
158  result.chi2 = H1.getChi2() - H0.getChi2(); // Likelihood ratio
159 
160  /*
161  * Here it is evaluated: d(chi2)/d(ct) * d(ct)/d(x0,y0,z0,t0)
162  */
163  result.gradient = JPoint4D(JVector3D(-getIndexOfRefraction() * D.getX() / D.getLength(), // d(ct)/d(x0)
164  -getIndexOfRefraction() * D.getY() / D.getLength(), // d(ct)/d(y0)
165  -getIndexOfRefraction() * D.getZ() / D.getLength()), // d(ct)/d(z0)
166  getSpeedOfLight()); // d(ct)/d(t0)
167 
168  result.gradient.mul(getInverseSpeedOfLight() * (H1.getDerivativeOfChi2() -
169  H0.getDerivativeOfChi2())); // x d(chi2)/d(ct1)
170 
171  return result;
172 
173  }
double getT() const
Get calibrated time of hit.
do echo Generating $dir eval D
Definition: JDrawLED.sh:50
Data structure for direction in three dimensions.
Definition: JDirection3D.hh:32
double getIndexOfRefraction()
Get average index of refraction of water.
Definition: JConstants.hh:111
const double getSpeedOfLight()
Number of bytes in a gigabyte.
Definition: JConstants.hh:89
Data structure for vertex fit.
Definition: JPoint4D.hh:22
const JDirection3D & getDirection() const
Get direction.
const double getInverseSpeedOfLight()
Get inverse speed of light.
Definition: JConstants.hh:100
minimiser_type::result_type result_type
Definition: JRegressor.hh:80
JPDF_t::result_type getH0(const double R_Hz, const double t1) const
Get background hypothesis value for time differentiated PDF.
Data structure for vector in three dimensions.
Definition: JVector3D.hh:33
return result
Definition: JPolint.hh:695
const JPosition3D & getPosition() const
Get position.
Definition: JPosition3D.hh:129
double getR() const
Get rate.
Definition: JHitW0.hh:52
static double Vmax_npe
Maximal integral of PDF [npe].
Data structure for position in three dimensions.
Definition: JPosition3D.hh:35
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
Definition: JVertex3D.hh:144
JResultEvaluator< JResult_t >::result_type get_value(const JResult_t &value)
Helper method to recursively evaluate a to function value.
Definition: JResult.hh:936
JPDF_t::result_type getH1(const double D, const double ct, const double t, const double E) const
Get signal hypothesis value for bright point emission PDF.
static JTimeRange T_ns
Time window with respect to Cherenkov hypothesis [ns].
JPDF_t::result_type JFIT::JRegressor< JPoint4D, 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 182 of file JShowerBrightPointRegressor.hh.

184  {
185  using namespace JPP;
186 
187  return JPDF_t::result_type(R_Hz * 1e-9, t1, T_ns);
188  }
static JTimeRange T_ns
Time window with respect to Cherenkov hypothesis [ns].
JPDF_t::result_type JFIT::JRegressor< JPoint4D, JGandalf >::getH1 ( const double  D,
const double  ct,
const double  t,
const double  E 
) const
inline

Get signal hypothesis value for bright point emission PDF.

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

Definition at line 199 of file JShowerBrightPointRegressor.hh.

203  {
204  using namespace JPP;
205 
206  JPDF_t::result_type h1 = JMATH::zero;
207 
208  for (int i = 0; i != NUMBER_OF_PDFS; ++i) {
209 
210  if (!pdf[i].empty() && D <= pdf[i].getXmax()) {
211 
212  try {
213 
214  JPDF_t::result_type y1 = E * pdf[i](std::max(D, pdf[i].getXmin()), ct, t);
215 
216  if (get_value(y1) > 0.0) {
217  h1 += y1;
218  }
219 
220  }
221  catch(JLANG::JException& error) {
222  ERROR(error << std::endl);
223  }
224  }
225  }
226 
227  return h1;
228  }
General exception.
Definition: JException.hh:23
do echo Generating $dir eval D
Definition: JDrawLED.sh:50
then for HISTOGRAM in h0 h1
Definition: JMatrixNZ.sh:69
static const JZero zero
Function object to assign zero value.
Definition: JZero.hh:105
JResultEvaluator< JResult_t >::result_type get_value(const JResult_t &value)
Helper method to recursively evaluate a to function value.
Definition: JResult.hh:936
then usage $script[input file[working directory[option]]] nWhere option can be E
Definition: JMuonPostfit.sh:37
double JFIT::JRegressor< JPoint4D, JGandalf >::getRmax ( ) const
inline

Get maximal road width of PDF.

Returns
road width [m]

Definition at line 235 of file JShowerBrightPointRegressor.hh.

236  {
237  using namespace JPP;
238 
239  double xmax = 0.0;
240 
241  for (int i = 0; i != NUMBER_OF_PDFS; ++i) {
242 
243  if (!pdf[i].empty() && pdf[i].getXmax() > xmax) {
244  xmax = pdf[i].getXmax();
245  }
246 
247  }
248 
249  return xmax;
250  }
result_type JFIT::JAbstractRegressor< JPoint4D , JGandalf >::operator() ( const JPoint4D value,
T  __begin,
T  __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  }
JModel_t value
Definition: JGandalf.hh:256
JRegressor< JPoint4D, JGandalf > regressor_type
Definition: JRegressor.hh:79
result_type JFIT::JGandalf< JPoint4D >::operator() ( const JFunction_t &  fit,
T  __begin,
T  __end,
Args...  args 
)
inlineinherited

Multi-dimensional fit of two data sets.

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

Parameters
fitfit function
__beginbegin of data
__endend of data
Returns
chi2

Definition at line 127 of file JGandalf.hh.

128  {
129  using namespace std;
130  using namespace JPP;
131 
132  const int N = parameters.size();
133 
134  H.resize(N);
135  h.resize(N);
136 
137  previous = value;
138 
139  successor.gradient = value;
140  successor.gradient = zero;
141 
142  error = value;
143  error = zero;
144 
145  lambda = LAMBDA_MIN;
146 
147  result_type precessor = result_type(numeric_limits<double>::max(), value);
148 
150 
151  DEBUG("step: " << numberOfIterations << endl);
152 
153  reset();
154 
155  __evaluate__(fit, __begin, __end, args...);
156 
157  DEBUG("lambda: " << SCIENTIFIC(12,5) << lambda << endl);
158  DEBUG("chi2: " << FIXED (12,5) << successor.chi2 << endl);
159 
160  if (successor.chi2 < precessor.chi2) {
161 
162  if (numberOfIterations != 0) {
163 
164  if (fabs(precessor.chi2 - successor.chi2) < EPSILON*fabs(precessor.chi2)) {
165  return successor;
166  }
167 
168  if (lambda > LAMBDA_MIN) {
169  lambda /= LAMBDA_DOWN;
170  }
171  }
172 
173  precessor = successor;
174  previous = value;
175 
176  } else {
177 
178  value = previous;
179  lambda *= LAMBDA_UP;
180 
181  if (lambda > LAMBDA_MAX) {
182  return precessor; // no improvement found
183  }
184 
185  reset();
186 
187  __evaluate__(fit, __begin, __end, args...);
188  }
189 
190  DEBUG("Hesse matrix:" << endl);
191  DEBUG(H << endl);
192 
193 
194  // force definite positiveness
195 
196  for (int i = 0; i != N; ++i) {
197 
198  if (H(i,i) < PIVOT) {
199  H(i,i) = PIVOT;
200  }
201 
202  h[i] = 1.0 / sqrt(H(i,i));
203  }
204 
205 
206  // normalisation
207 
208  for (int i = 0; i != N; ++i) {
209  for (int j = 0; j != i; ++j) {
210  H(j,i) *= h[i] * h[j];
211  H(i,j) = H(j,i);
212  }
213  }
214 
215  for (int i = 0; i != N; ++i) {
216  H(i,i) = 1.0 + lambda;
217  }
218 
219 
220  try {
221  H.invert();
222  }
223  catch (const JException& error) {
224  ERROR("JGandalf: " << error.what() << endl);
225  return precessor;
226  }
227 
228 
229  for (int i = 0; i != N; ++i) {
230 
231  DEBUG("u[" << noshowpos << i << "] = " << showpos << FIXED(15,5) << alias(value, parameters[i]));
232 
233  for (int j = 0; j != N; ++j) {
234  alias(value, parameters[i]) -= H(i,j) * alias(successor.gradient, parameters[j]) * h[i] * h[j];
235  }
236 
237  DEBUG(' ' << FIXED(15,5) << alias(value, parameters[i]) << noshowpos << endl);
238 
239  alias(error, parameters[i]) = h[i];
240  }
241  }
242 
243  return precessor;
244  }
static double EPSILON
maximal distance to minimum
Definition: JGandalf.hh:248
static double PIVOT
minimal value diagonal element of matrix
Definition: JGandalf.hh:253
static const JZero zero
Function object to assign zero value.
Definition: JZero.hh:105
Auxiliary data structure for floating point format specification.
Definition: JPrint.hh:481
std::vector< parameter_type > parameters
Definition: JGandalf.hh:258
void resize(const size_t size)
Resize matrix.
Definition: JMatrixND.hh:359
static double LAMBDA_MIN
minimal value control parameter
Definition: JGandalf.hh:249
static double LAMBDA_DOWN
multiplication factor control parameter
Definition: JGandalf.hh:252
#define ERROR(A)
Definition: JMessage.hh:66
JMATH::JMatrixNS H
Definition: JGandalf.hh:260
static double alias(const T &model, const typename T::parameter_type parameter)
Read/write access to parameter value by data member.
Definition: JGandalf.hh:326
static double LAMBDA_UP
multiplication factor control parameter
Definition: JGandalf.hh:251
void invert()
Invert matrix according LDU decomposition.
Definition: JMatrixNS.hh:80
void __evaluate__(const JFunction_t &fit, T __begin, T __end, Args...args)
Recursive method for evaluation of fit.
Definition: JGandalf.hh:286
static int MAXIMUM_ITERATIONS
maximal number of iterations
Definition: JGandalf.hh:247
int j
Definition: JPolint.hh:634
static double LAMBDA_MAX
maximal value control parameter
Definition: JGandalf.hh:250
Auxiliary data structure for floating point format specification.
Definition: JPrint.hh:518
then usage $script[input file[working directory[option]]] nWhere option can be N
Definition: JMuonPostfit.sh:37
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
std::vector< double > h
Definition: JGandalf.hh:404

Member Data Documentation

JTimeRange JFIT::JRegressor< JPoint4D, JGandalf >::T_ns
static

Time window with respect to Cherenkov hypothesis [ns].

Default values.

Definition at line 252 of file JShowerBrightPointRegressor.hh.

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

Maximal integral of PDF [npe].

Definition at line 253 of file JShowerBrightPointRegressor.hh.

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

Definition at line 255 of file JShowerBrightPointRegressor.hh.

const JPDFType_t JFIT::JRegressor< JPoint4D, JGandalf >::pdf_t
static
Initial value:

PDF types.

Definition at line 257 of file JShowerBrightPointRegressor.hh.

PDF.

Definition at line 259 of file JShowerBrightPointRegressor.hh.

double JFIT::JRegressor< JPoint4D, JGandalf >::E_GeV

Energy of the shower [GeV].

Definition at line 261 of file JShowerBrightPointRegressor.hh.

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

maximal number of iterations

maximal number of iterations.

Definition at line 247 of file JGandalf.hh.

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

maximal distance to minimum

maximal distance to minimum.

Definition at line 248 of file JGandalf.hh.

double JFIT::JGandalf< JPoint4D >::LAMBDA_MIN
staticinherited

minimal value control parameter

Definition at line 249 of file JGandalf.hh.

double JFIT::JGandalf< JPoint4D >::LAMBDA_MAX
staticinherited

maximal value control parameter

Definition at line 250 of file JGandalf.hh.

double JFIT::JGandalf< JPoint4D >::LAMBDA_UP
staticinherited

multiplication factor control parameter

Definition at line 251 of file JGandalf.hh.

double JFIT::JGandalf< JPoint4D >::LAMBDA_DOWN
staticinherited

multiplication factor control parameter

Definition at line 252 of file JGandalf.hh.

double JFIT::JGandalf< JPoint4D >::PIVOT
staticinherited

minimal value diagonal element of matrix

Definition at line 253 of file JGandalf.hh.

double JFIT::JGandalf< JPoint4D >::lambda
inherited

Definition at line 255 of file JGandalf.hh.

JPoint4D JFIT::JGandalf< JPoint4D >::value
inherited

Definition at line 256 of file JGandalf.hh.

JPoint4D JFIT::JGandalf< JPoint4D >::error
inherited

Definition at line 257 of file JGandalf.hh.

Definition at line 258 of file JGandalf.hh.

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

Definition at line 259 of file JGandalf.hh.

Definition at line 260 of file JGandalf.hh.

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: