Fit function.
149 {
152
153 const double STANDARD_DEVIATIONS = 3.0;
154
156
158
160
163
165
166 for (buffer_type::const_iterator
root = dataL1.begin();
root != dataL1.end(); ++
root) {
167
169
171
172 for (buffer_type::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
173
174 if((
root->getModuleIdentifier() != i->getModuleIdentifier() ) && matching(*i)){
176 }
177 }
178
180
181
182 JEstimator_t fit;
184 double chi2 = numeric_limits<double>::max();
185 int NDF =
distance(
data.begin(), __end1) - JEstimator_t::NUMBER_OF_PARAMETERS;
187
188 if(NDF > 0){
190
191 double ymin = numeric_limits<double>::max();
192
193 buffer_type::iterator __end2 = __end1;
194
196 JEstimator_t::NUMBER_OF_PARAMETERS; ++
n, --__end2) {
197
199
200 do {
201 try {
202
203 fit(
data.begin(), __end2);
204
206
207 if (y < ymin) {
209 vx = fit;
210 chi2 = ymin;
211 NDF =
distance(
data.begin(), __end2) - JEstimator_t::NUMBER_OF_PARAMETERS;
213 }
214 }
216
218
219 ymin -= STANDARD_DEVIATIONS * STANDARD_DEVIATIONS;
220 }
221
222 } else {
223
224 const int number_of_outliers =
distance(
data.begin(), __end1) - JEstimator_t::NUMBER_OF_PARAMETERS - 1;
225
226 buffer_type::iterator __end2 = __end1;
227
228 for (
int n = 0;
n <= number_of_outliers; ++
n) {
229
230 try{
231
232 fit(
data.begin(), __end2);
233 vx = fit;
235 NDF =
distance(
data.begin(), __end2) - JEstimator_t::NUMBER_OF_PARAMETERS;
237
238 }
240
241 double ymax = 0;
242 buffer_type::iterator imax = __end2;
243
244 for (buffer_type::iterator i =
data.begin() + 1; i != __end2; ++i) {
245
247
248 if (y > ymax) {
250 imax = i;
251 }
252 }
253
254 if (ymax > STANDARD_DEVIATIONS * STANDARD_DEVIATIONS) {
255 --__end2;
256 swap(*imax, *__end2);
257 } else {
258 break;
259 }
260 }
261 }
262
264
265
266
269
270 }
271 }
272
274
275 size_t solutions = out.size();
276
277 for(size_t i=0; i < solutions; i++){
282 if (x != 0 || y != 0 || z != 0 || t != 0) {
283
284 out.push_back(
getFit(event(),
286 0,
287 0));
288
289
290
293
294 }
295 }
296 }
297 }
298 }
299 }
300
301
303
304
305
306 JFIT::JEvt::iterator __end = out.end();
307
309
311
313
314 out.erase(__end, out.end());
315
316 } else {
317
319 }
320
321 } else {
322
324 }
325
326 return out;
327 }
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Template definition of linear fit.
Data structure for vertex fit.
Data structure for position in three dimensions.
Data structure for normalised vector in positive z-direction.
Auxiliary class to convert binary JMatch operator and given hit to unary match operator.
static const struct JTRIGGER::JHitR1::compare compare
static const int JSHOWERPREFIT
static const int JPP_COVERAGE_POSITION
coverage of dynamic position calibration from any Jpp application
static const int JPP_COVERAGE_ORIENTATION
coverage of dynamic orientation calibration from any Jpp application
double getChi2(const double P)
Get chi2 corresponding to given probability.
size_t getCount(const array_type< T > &buffer, const JCompare_t &compare)
Count number of unique values.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double getQuality(const double chi2, const int N, const int NDF)
Get quality of fit.
JPosition3D getPosition(const JFit &fit)
Get position.
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
JFit getFit(const JHistory &history, const JTrack3D &track, const double Q, const int NDF, const double energy=0.0, const int status=SINGLE_STAGE)
Get fit.
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter.
JBinder2nd< JHit_t > JBind2nd(const JMatch< JHit_t > &match, const JHit_t &second)
Auxiliary method to create JBinder2nd object.
JHitIterator_t clusterizeWeight(JHitIterator_t __begin, JHitIterator_t __end, const JMatch_t &match)
Partition data according given binary match operator.
double sigma_ns
time resolution [ns]
int factoryLimit
factory limit for combinatorics
int numberOfOutliers
maximum number of outliers
int time_grid_ns
edge [ns] of the time grid
int pos_step_m
step in [m] of position grid
int pos_grid_m
edge [m] of the position grid
double DMax_m
maximal distance to optical module [m]
size_t numberOfPrefits
number of prefits
size_t numberOfGrids
number of prefits to be used to build a grid around
int time_step_ns
step in [ns] of time grid