1 #ifndef KinematicConstrainedVertexUpdatorT_H
2 #define KinematicConstrainedVertexUpdatorT_H
12 namespace KineDebug3 {
52 update(
const ROOT::Math::SVector<double, 3+7*nTrk> & inState,
53 ROOT::Math::SMatrix<
double, 3+7*nTrk,3+7*nTrk ,ROOT::Math::MatRepSym<double,3+7*nTrk> >& inCov, std::vector<KinematicState> & lStates,
61 ROOT::Math::SMatrix<double,nConstraint+4,3+7*nTrk>
g;
62 ROOT::Math::SVector<double,nConstraint+4>
val;
63 ROOT::Math::SVector<double, 3+7*nTrk>
finPar;
64 ROOT::Math::SVector<double, nConstraint+4>
lambda;
65 ROOT::Math::SMatrix<double,3,3,ROOT::Math::MatRepSym<double,3> >
pCov = ROOT::Math::SMatrixNoInit();
66 ROOT::Math::SMatrix<double,7,7,ROOT::Math::MatRepSym<double,7> >
nCovariance = ROOT::Math::SMatrixNoInit();
67 ROOT::Math::SMatrix<double,nConstraint+4,nConstraint+4,ROOT::Math::MatRepSym<double,nConstraint+4> >
v_g_sym = ROOT::Math::SMatrixNoInit();
73 template <
int nTrk,
int nConstra
int>
77 template <
int nTrk,
int nConstra
int>
81 template <
int nTrk,
int nConstra
int>
84 ROOT::Math::SMatrix<
double, 3+7*nTrk,3+7*nTrk ,ROOT::Math::MatRepSym<double,3+7*nTrk> >& inCov,
85 std::vector<KinematicState> & lStates,
92 int vSize = lStates.size();
94 assert( nConstraint==0 || cs!=0);
95 assert(vSize == nConstraint);
100 delta_alpha(0)-=lPoint.
x();
101 delta_alpha(1)-=lPoint.
y();
102 delta_alpha(2)-=lPoint.
z();
104 for(std::vector<KinematicState>::const_iterator
i = lStates.begin();
i != lStates.end();
i++)
105 for (
int j=0;
j<7;
j++) {
106 delta_alpha(cst)-=
i->kinematicParameters()(
j);
115 if( nConstraint !=0) {
116 cs->
init(lStates, lPoint, fieldValue);
117 val.Place_at(cs->
value(),0);
122 vConstraint.init(lStates, lPoint, fieldValue);
123 val.Place_at(vConstraint.value(),nConstraint);
124 g.Place_at(vConstraint.positionDerivative(),nConstraint, 0);
125 g.Place_at(vConstraint.parametersDerivative(),nConstraint, 3);
131 v_g_sym = ROOT::Math::Similarity(
g,inCov);
136 edm::LogWarning(
"KinematicConstrainedVertexUpdatorFailed")<<
"invert failed\n"
138 LogDebug(
"KinematicConstrainedVertexFitter3")
139 <<
"Fit failed: unable to invert SYM gain matrix\n";
145 val +=
g*delta_alpha;
146 lambda = v_g_sym *val;
149 finPar = inPar - inCov * (ROOT::Math::Transpose(
g) * lambda);
152 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);
153 ROOT::Math::SMatrix<double,3+7*nTrk,3+7*nTrk,ROOT::Math::MatRepSym<double,3+7*nTrk> > prod1;
154 ROOT::Math::AssignSym::Evaluate(prod1, inCov * prod * inCov);
158 pCov = inCov.template Sub< ROOT::Math::SMatrix<double,3,3,ROOT::Math::MatRepSym<double,3> > >(0,0);
161 double chi = ROOT::Math::Dot(lambda,val);
165 float ndf = 2*vSize - 3;
177 for(std::vector<KinematicState>::iterator i_st=lStates.begin(); i_st != lStates.end(); i_st++)
179 for(
int i =0;
i<7;
i++)
180 {newPar(
i) = finPar(3 + i_int*7 +
i);}
182 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
auto_ptr< ClusterSequence > cs
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)
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)
ROOT::Math::SMatrix< double, 7, 7, ROOT::Math::MatRepSym< double, 7 > > nCovariance
~KinematicConstrainedVertexUpdatorT()
parametersDerivativeType const & parametersDerivative() const
ReferenceCountingPointer< KinematicVertex > RefCountedKinematicVertex
positionDerivativeType const & positionDerivative() const
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > pCov
ROOT::Math::SVector< double, 3+7 *nTrk > delta_alpha
ROOT::Math::SVector< double, nConstraint+4 > lambda
KinematicConstrainedVertexUpdatorT()
ROOT::Math::SMatrix< double, nConstraint+4, nConstraint+4, ROOT::Math::MatRepSym< double, nConstraint+4 > > v_g_sym
virtual void init(const std::vector< KinematicState > &states, const GlobalPoint &point, const GlobalVector &mf)=0
KinematicVertexFactory vFactory
valueType const & value() const