CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
KinematicConstrainedVertexUpdatorT< nTrk, nConstraint > Class Template Reference

#include <KinematicConstrainedVertexUpdatorT.h>

Public Member Functions

 KinematicConstrainedVertexUpdatorT ()
 
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)
 
 ~KinematicConstrainedVertexUpdatorT ()
 

Private Attributes

ROOT::Math::SVector< double, 3+7 *nTrk > delta_alpha
 
ROOT::Math::SVector< double, 3+7 *nTrk > finPar
 
ROOT::Math::SMatrix< double, nConstraint+4, 3+7 *nTrk > g
 
ROOT::Math::SVector< double, nConstraint+4 > lambda
 
ROOT::Math::SMatrix< double, 7, 7, ROOT::Math::MatRepSym< double, 7 > > nCovariance = ROOT::Math::SMatrixNoInit()
 
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > pCov = ROOT::Math::SMatrixNoInit()
 
ROOT::Math::SMatrix< double, nConstraint+4, nConstraint+4, ROOT::Math::MatRepSym< double, nConstraint+4 > > v_g_sym = ROOT::Math::SMatrixNoInit()
 
ROOT::Math::SVector< double, nConstraint+4 > val
 
VertexKinematicConstraintT vConstraint
 
KinematicVertexFactory vFactory
 

Detailed Description

template<int nTrk, int nConstraint>
class KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >

Class caching the math part for KinematicConstrainedVertexFitter

Definition at line 35 of file KinematicConstrainedVertexUpdatorT.h.

Constructor & Destructor Documentation

template<int nTrk, int nConstraint>
KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::KinematicConstrainedVertexUpdatorT ( )

Default constructor and destructor

Definition at line 77 of file KinematicConstrainedVertexUpdatorT.h.

78 {}
template<int nTrk, int nConstraint>
KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::~KinematicConstrainedVertexUpdatorT ( )

Definition at line 81 of file KinematicConstrainedVertexUpdatorT.h.

82 {}

Member Function Documentation

template<int nTrk, int nConstraint>
RefCountedKinematicVertex KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::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 
)

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.

Definition at line 86 of file KinematicConstrainedVertexUpdatorT.h.

References KineDebug3::count(), g, mps_fire::i, MultiTrackKinematicConstraintBaseT::init(), invertPosDefMatrix(), LogDebug, MultiTrackKinematicConstraintT< NTRK, DIM >::parametersDerivative(), MultiTrackKinematicConstraintT< NTRK, DIM >::positionDerivative(), parseEventContent::prod, heppy_batch::val, MultiTrackKinematicConstraintT< NTRK, DIM >::value(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

92 {
94 
95  int vSize = lStates.size();
96 
97  assert( nConstraint==0 || cs!=nullptr);
98  assert(vSize == nConstraint);
99 
100  const MagneticField* field=lStates.front().magneticField();
101 
102  delta_alpha=inPar;
103  delta_alpha(0)-=lPoint.x();
104  delta_alpha(1)-=lPoint.y();
105  delta_alpha(2)-=lPoint.z();
106  int cst=3;
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);
110  cst++;
111  }
112 
113  // cout<<"delta_alpha"<<delta_alpha<<endl;
114  //resulting matrix of derivatives and vector of values.
115  //their size depends of number of tracks to analyze and number of
116  //additional constraints to apply
117 
118  if( nConstraint !=0) {
119  cs->init(lStates, lPoint, fieldValue);
120  val.Place_at(cs->value(),0);
121  g.Place_at(cs->positionDerivative(),0,0);
122  g.Place_at(cs->parametersDerivative(),0,3);
123  }
124 
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);
129 
130 
131 
132 
133  //debug code
134  v_g_sym = ROOT::Math::Similarity(g,inCov);
135 
136  // bool ifl1 = v_g_sym.Invert();
137  bool ifl1 = invertPosDefMatrix(v_g_sym);
138  if(!ifl1) {
139  edm::LogWarning("KinematicConstrainedVertexUpdatorFailed")<< "invert failed\n"
140  << v_g_sym;
141  LogDebug("KinematicConstrainedVertexFitter3")
142  << "Fit failed: unable to invert SYM gain matrix\n";
143  return RefCountedKinematicVertex();
144  }
145 
146  // delta alpha is now valid!
147  //full math case now!
148  val += g*delta_alpha;
149  lambda = v_g_sym *val;
150 
151  //final parameters
152  finPar = inPar - inCov * (ROOT::Math::Transpose(g) * lambda);
153 
154  //refitted covariance
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);
158  // ROOT::Math::AssignSym::Evaluate(prod, prod1 * inCov);
159  inCov -= prod1;
160 
161  pCov = inCov.template Sub< ROOT::Math::SMatrix<double,3,3,ROOT::Math::MatRepSym<double,3> > >(0,0);
162 
163  // chi2
164  double chi = ROOT::Math::Dot(lambda,val); //??
165 
166  //this is ndf without significant prior
167  //vertex so -3 factor exists here
168  float ndf = 2*vSize - 3;
169  ndf += nConstraint;
170 
171 
172  //making resulting vertex
173  GlobalPoint vPos (finPar(0),finPar(1),finPar(2));
174  VertexState st(vPos,GlobalError(pCov));
175  RefCountedKinematicVertex rVtx = vFactory.vertex(st,chi,ndf);
176 
177  //making refitted states of Kinematic Particles
178  AlgebraicVector7 newPar;
179  int i_int = 0;
180  for(std::vector<KinematicState>::iterator i_st=lStates.begin(); i_st != lStates.end(); i_st++)
181  {
182  for(int i =0; i<7; i++)
183  {newPar(i) = finPar(3 + i_int*7 + i);}
184 
185  nCovariance = inCov.template Sub<ROOT::Math::SMatrix<double, 7,7,ROOT::Math::MatRepSym<double,7> > >(3 + i_int*7, 3 + i_int*7);
186  TrackCharge chl = i_st->particleCharge();
187  KinematicParameters nrPar(newPar);
189  KinematicState newState(nrPar,nrEr,chl, field);
190  (*i_st) = newState;
191  i_int++;
192  }
193  return rVtx;
194 }
#define LogDebug(id)
ROOT::Math::SVector< double, 3+7 *nTrk > finPar
void init(const std::vector< KinematicState > &states, const GlobalPoint &point, const GlobalVector &mf) override
T y() const
Definition: PV3DBase.h:63
ROOT::Math::SMatrix< double, nConstraint+4, 3+7 *nTrk > g
GlobalErrorBase< double, ErrorMatrixTag > GlobalError
Definition: GlobalError.h:13
int TrackCharge
Definition: TrackCharge.h:4
ROOT::Math::SVector< double, 7 > AlgebraicVector7
Definition: Matrices.h:8
T z() const
Definition: PV3DBase.h:64
ROOT::Math::SVector< double, nConstraint+4 > val
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
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
static RefCountedKinematicVertex vertex(const VertexState &state, float totalChiSq, float degreesOfFr)
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
T x() const
Definition: PV3DBase.h:62

Member Data Documentation

template<int nTrk, int nConstraint>
ROOT::Math::SVector<double,3+7*nTrk> KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::delta_alpha
private

Definition at line 63 of file KinematicConstrainedVertexUpdatorT.h.

template<int nTrk, int nConstraint>
ROOT::Math::SVector<double, 3+7*nTrk> KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::finPar
private

Definition at line 66 of file KinematicConstrainedVertexUpdatorT.h.

template<int nTrk, int nConstraint>
ROOT::Math::SMatrix<double,nConstraint+4,3+7*nTrk> KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::g
private

Definition at line 64 of file KinematicConstrainedVertexUpdatorT.h.

template<int nTrk, int nConstraint>
ROOT::Math::SVector<double, nConstraint+4> KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::lambda
private

Definition at line 67 of file KinematicConstrainedVertexUpdatorT.h.

template<int nTrk, int nConstraint>
ROOT::Math::SMatrix<double,7,7,ROOT::Math::MatRepSym<double,7> > KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::nCovariance = ROOT::Math::SMatrixNoInit()
private

Definition at line 69 of file KinematicConstrainedVertexUpdatorT.h.

template<int nTrk, int nConstraint>
ROOT::Math::SMatrix<double,3,3,ROOT::Math::MatRepSym<double,3> > KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::pCov = ROOT::Math::SMatrixNoInit()
private

Definition at line 68 of file KinematicConstrainedVertexUpdatorT.h.

template<int nTrk, int nConstraint>
ROOT::Math::SMatrix<double,nConstraint+4,nConstraint+4,ROOT::Math::MatRepSym<double,nConstraint+4> > KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::v_g_sym = ROOT::Math::SMatrixNoInit()
private

Definition at line 70 of file KinematicConstrainedVertexUpdatorT.h.

template<int nTrk, int nConstraint>
ROOT::Math::SVector<double,nConstraint+4> KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::val
private

Definition at line 65 of file KinematicConstrainedVertexUpdatorT.h.

template<int nTrk, int nConstraint>
VertexKinematicConstraintT KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::vConstraint
private

Definition at line 62 of file KinematicConstrainedVertexUpdatorT.h.

template<int nTrk, int nConstraint>
KinematicVertexFactory KinematicConstrainedVertexUpdatorT< nTrk, nConstraint >::vFactory
private

Definition at line 61 of file KinematicConstrainedVertexUpdatorT.h.