11 #include <analysis/VertexFitting/TreeFitter/FitParams.h>
12 #include <analysis/VertexFitting/TreeFitter/ParticleBase.h>
13 #include <analysis/VertexFitting/TreeFitter/Constraint.h>
14 #include <analysis/VertexFitting/TreeFitter/KalmanCalculator.h>
16 namespace TreeFitter {
41 bool finished(
false) ;
43 double accumulated_chi2 = 0;
44 while (!finished && !status.failure()) {
49 if (!status.failure()) {
51 status |= kalman.calculateGainMatrix(
59 if (!status.failure()) {
60 kalman.updateState(fitpar);
63 double newchisq = kalman.getChiSquare();
65 double dchisqconverged = 0.001 ;
67 double dchisq = newchisq - chisq;
68 bool diverging = iter > 0 && dchisq > 0;
69 bool converged = std::abs(dchisq) < dchisqconverged;
70 finished = ++iter >=
m_maxNIter || diverging || converged;
72 accumulated_chi2 += newchisq;
77 const unsigned int number_of_constraints = kalman.getConstraintDim();
78 fitpar.
addChiSquare(accumulated_chi2, number_of_constraints);
80 kalman.updateCovariance(fitpar);
103 p.getResiduals() += p.getH() * (fitpar.getStateVector() - oldState.getStateVector());
104 if (!status.failure()) {
105 status |= kalman.calculateGainMatrix(
113 if (!status.failure()) {
114 kalman.updateState(fitpar);
118 const unsigned int number_of_constraints = kalman.getConstraintDim();
119 fitpar.addChiSquare(kalman.getChiSquare(), number_of_constraints);
121 kalman.updateCovariance(fitpar);
127 std::string rc =
"unknown constraint!";
129 case beamspot: rc =
"beamspot";
break;
130 case beamenergy: rc =
"beamenergy";
break;
131 case origin: rc =
"origin";
break;
132 case composite: rc =
"composite";
break;
133 case resonance: rc =
"resonance";
break;
134 case track: rc =
"track";
break;
135 case photon: rc =
"photon";
break;
136 case klong: rc =
"klong";
break;
137 case kinematic: rc =
"kinematic";
break;
138 case geometric: rc =
"geometric";
break;
139 case mass: rc =
"mass";
break;
140 case massEnergy: rc =
"massEnergy";
break;
141 case lifetime: rc =
"lifetime";
break;
142 case merged: rc =
"merged";
break;
143 case conversion: rc =
"conversion";
break;
144 case helix: rc =
"helix";
break;