Fit function.
193 const double STANDARD_DEVIATIONS = 3.0;
198 data.reserve(dataL0.size() +
203 for (JOmega3D_t::const_iterator dir =
omega.begin(); dir !=
omega.end(); ++dir) {
208 buffer_type::iterator __end =
copy(dataL1.begin(), dataL1.end(),
data.begin());
210 for (buffer_type::iterator i =
data.begin(); i != __end; ++i) {
219 buffer_type::iterator __p =
data.begin();
223 partial_sort(
data.begin(), __p, __end,
cmz);
235 buffer_type::iterator p = __end;
236 buffer_type::iterator q =
copy(dataL0.begin(), dataL0.end(), p);
238 for (buffer_type::iterator i = p; i != q; ++i) {
244 if (match1D.count(*i,
data.begin(), __end) != 0) {
255 if (
distance(
data.begin(), __end) <= NUMBER_OF_PARAMETERS) {
263 double chi2 = numeric_limits<double>::max();
264 int NDF =
distance(
data.begin(), __end) - NUMBER_OF_PARAMETERS;
272 if (number_of_outliers > NDF - 1) {
273 number_of_outliers = NDF - 1;
276 double ymin = numeric_limits<double>::max();
278 buffer_type::iterator __end1 = __end;
280 for (
int n = 0;
n <= number_of_outliers; ++
n, --__end1) {
292 (*this)(
data.begin(), __end1);
301 if (
y <= -(STANDARD_DEVIATIONS * STANDARD_DEVIATIONS)) {
303 WARNING(endl <<
"chi2(1) " <<
y << endl);
315 NDF =
distance(
data.begin(), __end1) - NUMBER_OF_PARAMETERS;
320 catch(
const exception& error) {}
324 ymin -= STANDARD_DEVIATIONS * STANDARD_DEVIATIONS;
329 const int number_of_outliers = NDF - 1;
333 (*this)(
data.begin(), __end);
340 for (
int n = 0;
n <= number_of_outliers; ++
n) {
345 for (
size_t i = 0; i !=
Y.size(); ++i) {
355 if (ymax < STANDARD_DEVIATIONS * STANDARD_DEVIATIONS) {
363 this->update(
data.begin(), __end,
V);
371 catch(
const exception& error) {
375 static_cast<JLine1Z&
>(*this) = tz;
386 catch(
const exception& error) {}
389 if (chi2 != numeric_limits<double>::max()) {
400 JEvt::iterator __end = out.end();
408 JEvt::iterator p2 =
p1;
410 for (JEvt::iterator i =
p1; i != out.end(); ++i) {
411 if (i->getQ() > p2->getQ()) {
422 for (
double Q = p2->getQ();
p1 != out.end() && (
p1->getQ() >= p2->getQ() -
Qmin ||
p1->getQ() <= Q); Q = (
p1++)->getQ()) {}
424 swap(*(__end++), *p2);
444 JEvt::iterator __p = __end;
459 out.erase(__end, out.end());
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
double getDZ() const
Get Z-slope.
Data structure for fit of straight line paralel to z-axis.
void set(const JVector3D &pos, T __begin, T __end, const double alpha, const double sigma)
Set co-variance matrix.
void set(const JLine1Z &track, T __begin, T __end)
Set time residual vector.
JPosition3D & rotate_back(const JRotation3D &R)
Rotate back.
Auxiliary class to compare fit results with respect to a reference direction (e.g....
int getModuleID() const
Get module identifier.
static const int JMUONPREFIT
void copy(const Head &from, JHead &to)
Copy header from from to to.
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.
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
double getQuality(const double chi2, const int N, const int NDF)
Get quality of fit.
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.
static const struct JTRIGGER::clusterize clusterize
void update(const size_t k, const double value)
Update inverted matrix at given diagonal element.
void invert()
Invert matrix according LDU decomposition.
size_t numberOfPrefits
number of prefits
int numberOfOutliers
maximum number of outliers
double DZMax
maximal slope for downward pointing solutions
double Qmin
minimal quality step
int factoryLimit
factory limit for combinatorics
size_t numberOfDZMax
additional number of downward pointing solutions
int NMaxHits
maximal number of hits
double sigma_ns
time resolution [ns]
static const struct JRECONSTRUCTION::JMuonPrefit::cmz cmz