1 #ifndef KinematicConstrainedVertexUpdatorT_H 2 #define KinematicConstrainedVertexUpdatorT_H 55 update(
const ROOT::Math::SVector<double, 3+7*nTrk> & inState,
56 ROOT::Math::SMatrix<
double, 3+7*nTrk,3+7*nTrk ,ROOT::Math::MatRepSym<double,3+7*nTrk> >& inCov, std::vector<KinematicState> & lStates,
64 ROOT::Math::SMatrix<double,nConstraint+4,3+7*nTrk>
g;
65 ROOT::Math::SVector<double,nConstraint+4>
val;
66 ROOT::Math::SVector<double, 3+7*nTrk>
finPar;
67 ROOT::Math::SVector<double, nConstraint+4>
lambda;
68 ROOT::Math::SMatrix<double,3,3,ROOT::Math::MatRepSym<double,3> > pCov = ROOT::Math::SMatrixNoInit();
69 ROOT::Math::SMatrix<double,7,7,ROOT::Math::MatRepSym<double,7> > nCovariance = ROOT::Math::SMatrixNoInit();
70 ROOT::Math::SMatrix<double,nConstraint+4,nConstraint+4,ROOT::Math::MatRepSym<double,nConstraint+4> > v_g_sym = ROOT::Math::SMatrixNoInit();
76 template <
int nTrk,
int nConstra
int>
80 template <
int nTrk,
int nConstra
int>
84 template <
int nTrk,
int nConstra
int>
87 ROOT::Math::SMatrix<
double, 3+7*nTrk,3+7*nTrk ,ROOT::Math::MatRepSym<double,3+7*nTrk> >& inCov,
88 std::vector<KinematicState> & lStates,
95 int vSize = lStates.size();
97 assert( nConstraint==0 || cs!=
nullptr);
98 assert(vSize == nConstraint);
103 delta_alpha(0)-=lPoint.
x();
104 delta_alpha(1)-=lPoint.
y();
105 delta_alpha(2)-=lPoint.
z();
107 for(std::vector<KinematicState>::const_iterator
i = lStates.begin();
i != lStates.end();
i++)
108 for (
int j=0; j<7; j++) {
109 delta_alpha(cst)-=
i->kinematicParameters()(j);
118 if( nConstraint !=0) {
119 cs->
init(lStates, lPoint, fieldValue);
125 vConstraint.init(lStates, lPoint, fieldValue);
126 val.Place_at(vConstraint.value(),nConstraint);
127 g.Place_at(vConstraint.positionDerivative(),nConstraint, 0);
128 g.Place_at(vConstraint.parametersDerivative(),nConstraint, 3);
134 v_g_sym = ROOT::Math::Similarity(
g,inCov);
139 edm::LogWarning(
"KinematicConstrainedVertexUpdatorFailed")<<
"invert failed\n" 141 LogDebug(
"KinematicConstrainedVertexFitter3")
142 <<
"Fit failed: unable to invert SYM gain matrix\n";
148 val +=
g*delta_alpha;
149 lambda = v_g_sym *
val;
152 finPar = inPar - inCov * (ROOT::Math::Transpose(
g) * lambda);
155 ROOT::Math::SMatrix<double,3+7*nTrk,3+7*nTrk,ROOT::Math::MatRepSym<double,3+7*nTrk> >
prod = ROOT::Math::SimilarityT(
g,v_g_sym);
156 ROOT::Math::SMatrix<double,3+7*nTrk,3+7*nTrk,ROOT::Math::MatRepSym<double,3+7*nTrk> > prod1;
157 ROOT::Math::AssignSym::Evaluate(prod1, inCov * prod * inCov);
161 pCov = inCov.template Sub< ROOT::Math::SMatrix<double,3,3,ROOT::Math::MatRepSym<double,3> > >(0,0);
164 double chi = ROOT::Math::Dot(lambda,val);
168 float ndf = 2*vSize - 3;
180 for(std::vector<KinematicState>::iterator i_st=lStates.begin(); i_st != lStates.end(); i_st++)
182 for(
int i =0;
i<7;
i++)
183 {newPar(
i) = finPar(3 + i_int*7 +
i);}
185 nCovariance = inCov.template Sub<ROOT::Math::SMatrix<double, 7,7,ROOT::Math::MatRepSym<double,7> > >(3 + i_int*7, 3 + i_int*7);
ROOT::Math::SVector< double, 3+7 *nTrk > finPar
RefCountedKinematicVertex update(const ROOT::Math::SVector< double, 3+7 *nTrk > &inState, ROOT::Math::SMatrix< double, 3+7 *nTrk, 3+7 *nTrk, ROOT::Math::MatRepSym< double, 3+7 *nTrk > > &inCov, std::vector< KinematicState > &lStates, const GlobalPoint &lPoint, GlobalVector const &fieldValue, MultiTrackKinematicConstraintT< nTrk, nConstraint > *cs)
unique_ptr< ClusterSequence > cs
ROOT::Math::SMatrix< double, nConstraint+4, 3+7 *nTrk > g
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
GlobalErrorBase< double, ErrorMatrixTag > GlobalError
ROOT::Math::SVector< double, 7 > AlgebraicVector7
ROOT::Math::SVector< double, nConstraint+4 > val
VertexKinematicConstraintT vConstraint
bool invertPosDefMatrix(ROOT::Math::SMatrix< T, N, N, ROOT::Math::MatRepSym< T, N > > &m)
~KinematicConstrainedVertexUpdatorT()
parametersDerivativeType const & parametersDerivative() const
ReferenceCountingPointer< KinematicVertex > RefCountedKinematicVertex
positionDerivativeType const & positionDerivative() const
ROOT::Math::SVector< double, 3+7 *nTrk > delta_alpha
ROOT::Math::SVector< double, nConstraint+4 > lambda
KinematicConstrainedVertexUpdatorT()
virtual void init(const std::vector< KinematicState > &states, const GlobalPoint &point, const GlobalVector &mf)=0
KinematicVertexFactory vFactory
valueType const & value() const