CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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::SMatrix< double,
3, 3, ROOT::Math::MatRepSym
< double, 3 > > 
pCov
 
ROOT::Math::SMatrix< double,
nConstraint+4, nConstraint+4,
ROOT::Math::MatRepSym< double,
nConstraint+4 > > 
v_g_sym
 
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 31 of file KinematicConstrainedVertexUpdatorT.h.

Constructor & Destructor Documentation

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

Default constructor and destructor

Definition at line 76 of file KinematicConstrainedVertexUpdatorT.h.

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

Definition at line 80 of file KinematicConstrainedVertexUpdatorT.h.

81 {}

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 85 of file KinematicConstrainedVertexUpdatorT.h.

References KineDebug3::count(), statics::field, g, i, MultiTrackKinematicConstraintBaseT::init(), invertPosDefMatrix(), j, LogDebug, MultiTrackKinematicConstraintT< NTRK, DIM >::parametersDerivative(), MultiTrackKinematicConstraintT< NTRK, DIM >::positionDerivative(), parseEventContent::prod, 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__(), relval_steps.Matrix::__setitem__(), relval_steps.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(), relval_steps.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().

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

Member Data Documentation

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

Definition at line 59 of file KinematicConstrainedVertexUpdatorT.h.

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

Definition at line 64 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 60 of file KinematicConstrainedVertexUpdatorT.h.

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

Definition at line 65 of file KinematicConstrainedVertexUpdatorT.h.

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

Definition at line 68 of file KinematicConstrainedVertexUpdatorT.h.

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

Definition at line 67 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
private

Definition at line 69 of file KinematicConstrainedVertexUpdatorT.h.

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

Definition at line 61 of file KinematicConstrainedVertexUpdatorT.h.

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

Definition at line 58 of file KinematicConstrainedVertexUpdatorT.h.

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

Definition at line 57 of file KinematicConstrainedVertexUpdatorT.h.