Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JACOUSTICS::JKatoomba< JSimplex > Struct Reference

Template specialisation of fit function of acoustic model based on JSimplex minimiser. More...

#include <JKatoomba_t.hh>

Inheritance diagram for JACOUSTICS::JKatoomba< JSimplex >:
JFIT::JSimplex< JModel_t > JACOUSTICS::JKatoomba< JMinimiser_t > JEEP::JMessage< T >

Public Types

typedef double result_type
 

Public Member Functions

 JKatoomba (const JGeometry &geometry, const JSoundVelocity &velocity, const int option)
 Constructor The option corresponds to the use of fit parameters in the model of the detector geometry.
 
double operator() (const JModel &model, const JHit &hit) const
 Fit function.
 
template<class T >
double operator() (T __begin, T __end)
 Fit.
 
template<class JFunction_t , class T >
double operator() (const JFunction_t &fit, T __begin, T __end)
 Multi-dimensional fit.
 
template<class JFunction_t , class T >
double operator() (const JFunction_t &fit, T __begin, T __end, const JModel_t &step)
 1D fit.
 

Public Attributes

JModel_t value
 
std::vector< JModel_t > step
 
int numberOfIterations
 

Static Public Attributes

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

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.
 

Private Attributes

JModel_t p0
 
JModel_t p1
 
JModel_t wall
 

Detailed Description

Template specialisation of fit function of acoustic model based on JSimplex minimiser.

Definition at line 582 of file JKatoomba_t.hh.

Member Typedef Documentation

◆ result_type

template<class JModel_t >
double JFIT::JSimplex< JModel_t >::result_type
inherited

Definition at line 47 of file JSimplex.hh.

Constructor & Destructor Documentation

◆ JKatoomba()

JACOUSTICS::JKatoomba< JSimplex >::JKatoomba ( const JGeometry & geometry,
const JSoundVelocity & velocity,
const int option )
inline

Constructor The option corresponds to the use of fit parameters in the model of the detector geometry.


A negative implies that all strings in the detector use common fit parameters.

Parameters
geometrydetector geometry
velocitysound velocity
optionoption

Definition at line 595 of file JKatoomba_t.hh.

597 :
598 JKatoomba<>(geometry, velocity, option)
599 {};
Template definition of fit function of acoustic model.

Member Function Documentation

◆ operator()() [1/4]

double JACOUSTICS::JKatoomba< JSimplex >::operator() ( const JModel & model,
const JHit & hit ) const
inline

Fit function.


This method is used to determine the chi2 of given hit with respect to actual model.

Parameters
modelmodel
hithit
Returns
chi2

Definition at line 610 of file JKatoomba_t.hh.

611 {
612 const double toa_s = this->getToA(model, hit);
613 const double u = (toa_s - hit.getValue()) / hit.getSigma();
614
615 return estimator->getRho(u);
616 }
void model(JModel_t &value)
Auxiliary function to constrain model during fit.
Definition JGandalf.hh:57
double getSigma() const
Get resolution of time-of-arrival.
double getValue() const
Get expectation value of time-of-arrival.

◆ operator()() [2/4]

template<class T >
double JACOUSTICS::JKatoomba< JSimplex >::operator() ( T __begin,
T __end )
inline

Fit.

Parameters
__beginbegin of hits
__endend of hits
Returns
chi2

Definition at line 627 of file JKatoomba_t.hh.

628 {
629 this->step.clear();
630
631 for (JModel::string_type::const_iterator i = this->value.string.begin(); i != this->value.string.end(); ++i) {
632
634
635 switch (this->option) {
636
638 model.string[i->first] = JMODEL::JString(0.0, 0.0, 0.0, 0.0, 1.0e-6); this->step.push_back(model);
639
641 model.string[i->first] = JMODEL::JString(0.0, 0.0, 1.0e-6, 0.0, 0.0); this->step.push_back(model);
642 model.string[i->first] = JMODEL::JString(0.0, 0.0, 0.0, 1.0e-6, 0.0); this->step.push_back(model);
643
645 model.string[i->first] = JMODEL::JString(1.0e-3, 0.0, 0.0, 0.0, 0.0); this->step.push_back(model);
646 model.string[i->first] = JMODEL::JString(0.0, 1.0e-3, 0.0, 0.0, 0.0); this->step.push_back(model);
647 break;
648
649 default:
650 break;
651 }
652 }
653
654 for (JModel::emission_type::const_iterator i = this->value.emission.begin(); i != this->value.emission.end(); ++i) {
655
657
658 model.emission[i->first] = JMODEL::JEmission(5.0e-5); this->step.push_back(model);
659 }
660
661 return JSimplex<JModel>::operator()(*this, __begin, __end);
662 }
double operator()(const JFunction_t &fit, T __begin, T __end)
Multi-dimensional fit.
Definition JSimplex.hh:71
JModel_t value
Definition JSimplex.hh:240
std::vector< JModel_t > step
Definition JSimplex.hh:241
@ FIT_EMITTERS_AND_STRINGS_1st_ORDER_t
fit times of emission of emitters and tilt angles of strings
@ FIT_EMITTERS_AND_STRINGS_2nd_ORDER_t
fit times of emission of emitters and tilt angles of strings with second order correction
@ FIT_EMITTERS_AND_STRINGS_2nd_ORDER_AND_STRETCHING_t
fit times of emission of emitters and tilt angles of strings with second order correction and stretch...
Model for fit to acoustics data.
JACOUSTICS::JModel::emission_type emission
container_type::const_iterator const_iterator
Definition JHashMap.hh:86

◆ operator()() [3/4]

template<class JModel_t >
template<class JFunction_t , class T >
double JFIT::JSimplex< JModel_t >::operator() ( const JFunction_t & fit,
T __begin,
T __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
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
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
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,
T __begin,
T __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,
T __begin,
T __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

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