Method updating the states. Takes a vector of full parameters: (x,y,z,particle_1,...,particle_n), corresponding linearization point: vector of states and GlobalPoint, and constraint to be applied during the vertex fit. Returns refitted vector of 7n+3 parameters and corresponding covariance matrix, where n - number of tracks.
91 int vSize = lStates.size();
93 assert(nConstraint == 0 ||
cs !=
nullptr);
94 assert(vSize == nConstraint);
103 for (std::vector<KinematicState>::const_iterator
i = lStates.begin();
i != lStates.end();
i++)
104 for (
int j = 0;
j < 7;
j++) {
114 if (nConstraint != 0) {
115 cs->init(lStates, lPoint, fieldValue);
116 val.Place_at(
cs->value(), 0);
117 g.Place_at(
cs->positionDerivative(), 0, 0);
118 g.Place_at(
cs->parametersDerivative(), 0, 3);
127 v_g_sym = ROOT::Math::Similarity(
g, inCov);
133 LogDebug(
"KinematicConstrainedVertexFitter3") <<
"Fit failed: unable to invert SYM gain matrix\n";
143 finPar = inPar - inCov * (ROOT::Math::Transpose(
g) *
lambda);
146 ROOT::Math::SMatrix<double, 3 + 7 * nTrk, 3 + 7 * nTrk, ROOT::Math::MatRepSym<double, 3 + 7 * nTrk> >
prod =
147 ROOT::Math::SimilarityT(
g,
v_g_sym);
148 ROOT::Math::SMatrix<double, 3 + 7 * nTrk, 3 + 7 * nTrk, ROOT::Math::MatRepSym<double, 3 + 7 * nTrk> >
prod1;
149 ROOT::Math::AssignSym::Evaluate(
prod1, inCov *
prod * inCov);
153 pCov = inCov.template Sub<ROOT::Math::SMatrix<double, 3, 3, ROOT::Math::MatRepSym<double, 3> > >(0, 0);
156 double chi = ROOT::Math::Dot(
lambda,
val);
160 float ndf = 2 * vSize - 3;
171 for (std::vector<KinematicState>::iterator i_st = lStates.begin(); i_st != lStates.end(); i_st++) {
172 for (
int i = 0;
i < 7;
i++) {
173 newPar(
i) =
finPar(3 + i_int * 7 +
i);
176 nCovariance = inCov.template Sub<ROOT::Math::SMatrix<double, 7, 7, ROOT::Math::MatRepSym<double, 7> > >(
177 3 + i_int * 7, 3 + i_int * 7);
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > pCov
void init(const std::vector< KinematicState > &states, const GlobalPoint &point, const GlobalVector &mf) override
ROOT::Math::SMatrix< double, nConstraint+4, nConstraint+4, ROOT::Math::MatRepSym< double, nConstraint+4 > > v_g_sym
ROOT::Math::SVector< double, 7 > AlgebraicVector7
GlobalErrorBase< double, ErrorMatrixTag > GlobalError
ROOT::Math::SVector< double, nConstraint+4 > val
positionDerivativeType const & positionDerivative() const
parametersDerivativeType const & parametersDerivative() const
VertexKinematicConstraintT vConstraint
bool invertPosDefMatrix(ROOT::Math::SMatrix< T, N, N, ROOT::Math::MatRepSym< T, N > > &m)
ROOT::Math::SVector< double, 3+7 *nTrk > finPar
valueType const & value() const
ROOT::Math::SMatrix< double, 7, 7, ROOT::Math::MatRepSym< double, 7 > > nCovariance
ReferenceCountingPointer< KinematicVertex > RefCountedKinematicVertex
ROOT::Math::SVector< double, nConstraint+4 > lambda
static RefCountedKinematicVertex vertex(const VertexState &state, float totalChiSq, float degreesOfFr)
Log< level::Warning, false > LogWarning
KinematicVertexFactory vFactory
ROOT::Math::SMatrix< double, nConstraint+4, 3+7 *nTrk > g
ROOT::Math::SVector< double, 3+7 *nTrk > delta_alpha