ATLAS Offline Software
KalmanVertexOnJetAxisSmoother.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 #include <cmath>
14 
15 //#define KalmanVertexOnJetAxisSmoother_DEBUG
16 
17 namespace Trk
18 {
19 
20 #if 0
21  namespace {
22  int numRow(int numVertex) {
23  return numVertex+5;
24  }
25  }
26 #endif
27 
28 
30  {
31  AthAlgTool::initialize().ignore();
32 
33  //retrieving the udator itself
34  StatusCode sc = m_Updator.retrieve();
35  if(sc.isFailure()) {
36  ATH_MSG_ERROR( " Unable to retrieve "<<m_Updator );
37  return StatusCode::FAILURE;
38  }
39  m_initial_cov_momentum.setZero();
40  m_initial_cov_momentum(0,0) = m_initialMomentumError*m_initialMomentumError;
41  m_initial_cov_momentum(1,1) = m_initialMomentumError*m_initialMomentumError;
42  m_initial_cov_momentum(2,2) = m_initialMomentumError*m_initialMomentumError/10000.;
43 
44  return StatusCode::SUCCESS;
45  }
46 
47 
48  KalmanVertexOnJetAxisSmoother::KalmanVertexOnJetAxisSmoother(const std::string& t, const std::string& n, const IInterface* p):
49  AthAlgTool(t,n,p),
50  m_Updator("Trk::KalmanVertexOnJetAxisUpdator", this),
51  m_maxWeight(0.001),
52  m_initialMomentumError(1000.)
53  {
54  declareProperty("Updator",m_Updator);
55  declareProperty("MaximalWeight",m_maxWeight);
56  declareProperty("initialMomentumError",m_initialMomentumError);
57  declareInterface<KalmanVertexOnJetAxisSmoother>(this);
58  }
59 
61  = default;
62 
63 
65  const VxJetCandidate* candidateToUpdate,
66  bool updateTrack) const {
67 
68  const RecVertexPositions & myFinalPosition=candidateToUpdate->getRecVertexPositions();
69  const VertexPositions & linearizationPositions=candidateToUpdate->getLinearizationVertexPositions();
70  bool isPrimary = (vertexToSmooth==candidateToUpdate->getPrimaryVertex());
71  update(vertexToSmooth,isPrimary,myFinalPosition,linearizationPositions,updateTrack,false);
72 
73  }
74 
76  const VxJetCandidate* candidateToUpdate,
77  bool updateTrack) const {
78  const RecVertexPositions & myFinalPosition=candidateToUpdate->getRecVertexPositions();
79  const VertexPositions & linearizationPositions=candidateToUpdate->getLinearizationVertexPositions();
80  bool isPrimary = (vertexToSmooth==candidateToUpdate->getPrimaryVertex());
81  update(vertexToSmooth,isPrimary,myFinalPosition,linearizationPositions,updateTrack,true);
82  }
83 
85  const RecVertexPositions & myFinalPosition,
86  const VertexPositions & linearizationPositions,
87  bool updateTrack, bool doFastUpdate) const {
88 
89  // void KalmanVertexOnJetAxisSmoother::update(VxVertexOnJetAxis* vertexToSmooth,const VxJetCandidate* candidateToUpdate) const
90  // {
91 
92  if (vertexToSmooth==nullptr) {
93  ATH_MSG_WARNING( " Empty pointers then calling fit method update. No fit will be done..." );
94  return;
95  }
96 
97  ATH_MSG_DEBUG("It's smoothing "<<(isPrimary? "with":"without")<<" primary vertex ");
98  ATH_MSG_DEBUG("It's " << (updateTrack?"with":"without") << " updating the track.");
99  ATH_MSG_DEBUG("It's the "<<(doFastUpdate?"fast":"normal (weight-formalism)")<<" smoother");
100 
101  const std::vector<VxTrackAtVertex*> & allTracksToSmooth(vertexToSmooth->getTracksAtVertex());
102 
103  //care first about the transformation matrix (which is the same for all tracks...)
104 
105 
106  if (allTracksToSmooth.empty()) {
107  ATH_MSG_DEBUG(" Nothing to smooth ");
108  if (!isPrimary)
109  ATH_MSG_WARNING ("Nothing to smooth and it's not a primary vertex: BUG... ");
110  return;
111  }
112 
113  const Amg::VectorX & initialjetdir=linearizationPositions.position();
114 
115  int numVertex=vertexToSmooth->getNumVertex();
116 
117 
118  //calculate 3-dim position on jet axis from linearizationPositionVector and calculate Jacobian of transformation
119  std::pair<Amg::Vector3D,Eigen::Matrix3Xd> PosOnJetAxisAndTransformMatrix =
120  m_Updator->createTransformJacobian(initialjetdir, numVertex, isPrimary, /*truncate=*/false);
121 
122  #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
123  std::cout << " smoother: " << PosOnJetAxisAndTransformMatrix.first << " and transform matrix: " << PosOnJetAxisAndTransformMatrix.second <<
124  std::endl;
125  #endif
126 
127 
128  //prepare a RecVertexPositions to be updated with removal
129  //of all tracks of the present vertex...
130  //THIS TIME copy the RecVertexPositions to a new object... :-)
131  RecVertexPositions myPositionWithRemovedTracks=myFinalPosition; // for fast updator (cov formalism)
132  RecVertexPositions myPositionInWeightFormalism=myFinalPosition; // for full updator (weight formalism)
133  const Amg::VectorX & final_vrt_pos=myFinalPosition.position();
134  const Amg::MatrixX & final_vrt_covariance = myFinalPosition.covariancePosition();
135 
136  Amg::MatrixX final_vrt_weightmatrix;
137  if (!doFastUpdate) {
138  // Hack the JetFitter EDM... avoid to invert big cov matrix at each iteration
139  // by storing position --> weight*position
140  // and covariance -> weightmatrix
141  Eigen::FullPivLU<Amg::MatrixX> lu_decomp(final_vrt_covariance);
142  if (!lu_decomp.isInvertible()) {
143  ATH_MSG_DEBUG("Jet vertex positions matrix not invertible right at start of smoother!" <<
144  " -> stop smoothing.");
145  return;
146  }
147  final_vrt_weightmatrix = final_vrt_covariance.inverse();
148  myPositionInWeightFormalism.setPosition(final_vrt_weightmatrix*
149  myPositionInWeightFormalism.position());
150  myPositionInWeightFormalism.setCovariancePosition(final_vrt_weightmatrix);
151  }
152  //from here onwards (until finishing adding tracks) it is weight*position TO MAKE THINGS FASTER
153 
154  double track_compatibility_chi2(0.);
155  double track_ndf(0.);
156 
157  //nice! that was easy...
158  //now iterate over all tracks in order to calculated the updated TrackParameters + the residual chi2...
159  const std::vector<VxTrackAtVertex*>::const_iterator TracksBegin=allTracksToSmooth.begin();
160  const std::vector<VxTrackAtVertex*>::const_iterator TracksEnd=allTracksToSmooth.end();
161 
162  for (std::vector<VxTrackAtVertex*>::const_iterator TracksIter=TracksBegin;TracksIter!=TracksEnd;++TracksIter) {
163 
164  //get linearized track
165  const LinearizedTrack * trk=(*TracksIter)->linState();
166 
167  if (trk==nullptr) {
168  ATH_MSG_WARNING (" Empty pointers then calling smoothing method update. No smoothing will be performed...");
169  return;
170  }
171 
172  double trackWeight = (*TracksIter)->weight();
173 
174  //only position jacobian changed from A ->oldA
175  const AmgMatrix(5,3)& oldA = trk->positionJacobian();
176 
177  #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
178  std::cout << "the old jacobian xyz d0z0phithetaqoverp vs xyz " << oldA << std::endl;
179  #endif
180 
181  //now create the new jacobian which you should use
182  Eigen::Matrix<double,5,Eigen::Dynamic> A = oldA*PosOnJetAxisAndTransformMatrix.second;
183 
184  #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
185  std::cout << "the new jacobian " << A << std::endl;
186  #endif
187 
188  const AmgMatrix(5,3) & B = trk->momentumJacobian();
189  const AmgVector(5)& trackParameters = trk->expectedParametersAtPCA();
190 
191  #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
192  std::cout << "expected perigee at pca " << trackParameters << std::endl;
193  std::cout << "expected position at pca " << trk->expectedPositionAtPCA() << std::endl;
194  std::cout << " constant term " << trk->constantTerm() <<
195  " old A " << oldA << " * PosOnJetAxis " << PosOnJetAxisAndTransformMatrix.first <<
196  " A " << A << " * initialjetdir " << initialjetdir << std::endl;
197  #endif
198 
199  AmgVector(5) constantTerm=trk->constantTerm() + oldA*PosOnJetAxisAndTransformMatrix.first
200  -A*initialjetdir;
201  const AmgSymMatrix(5)& trackParametersWeight = trk->expectedWeightAtPCA();
202  AmgSymMatrix(3) S = B.transpose()*trackParametersWeight*B;
203  if(S.determinant()==0.0) {
204  ATH_MSG_WARNING ("The S matrix inversion failed during smoothing iteration cycle");
205  continue;
206  }
207  S=S.inverse().eval();
208 
209  if (doFastUpdate) {
210  const Amg::VectorX old_vrt_pos = myPositionWithRemovedTracks.position();
211  const Amg::MatrixX & old_vrt_cov = myPositionWithRemovedTracks.covariancePosition();
212 
213  AmgSymMatrix(5) old_residual_cov = -trk->expectedCovarianceAtPCA() +
214  A*old_vrt_cov*A.transpose() + B*m_initial_cov_momentum*B.transpose();
215  if (old_residual_cov.determinant() == 0.0 ) {
216  ATH_MSG_ERROR ("The old_residual matrix can not be inverted during smoothing interation cycle");
217  continue;
218  }
219  AmgSymMatrix(5) old_residual_cov_inv = old_residual_cov.inverse().eval();
220  Eigen::Matrix<double,Eigen::Dynamic,5> Kk1=old_vrt_cov*A.transpose()*old_residual_cov_inv;
221  AmgVector(5) residual_vector=trackParameters-constantTerm-A*old_vrt_pos;
222  Amg::VectorX new_vrt_pos = old_vrt_pos+Kk1*residual_vector;
223  Amg::MatrixX new_vrt_cov = old_vrt_cov+Kk1*old_residual_cov*Kk1.transpose()
224  - 2.*Kk1*A*old_vrt_cov;
225  myPositionWithRemovedTracks = RecVertexPositions(new_vrt_pos,new_vrt_cov);
226 
227  } else {
228 
229  //REMEMBER: there's also the RecVertexPositions w/ removed tracks: **myPositionWithRemovedTracks**
230 
231  #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
232  std::cout << " Old weight Matrix is " << myPositionInWeightFormalism.covariancePosition() << std::endl;
233  #endif
234 
235  // the full smoother writes weight matrices into RecVertexPositions
236  const Amg::MatrixX & old_vrt_weight = myPositionInWeightFormalism.covariancePosition();
237  const Amg::VectorX old_vrt_weight_times_vrt_pos = myPositionInWeightFormalism.position();
238 
239  //G_b = G_k - G_k*B_k*W_k*B_k^(T)*G_k
240  AmgSymMatrix(5) gB = trackParametersWeight - trackParametersWeight*(B*(S*B.transpose()))*trackParametersWeight.transpose();
241  //(S.similarity(B)).similarity(trackParametersWeight);
242 
243  #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
244  std::cout<<"Gain factor obtained: "<<trackParametersWeight*(B*(S*B.transpose()))*trackParametersWeight.transpose()<<std::endl;
245  std::cout<<"Resulting Gain Matrix: "<<gB<<std::endl;
246  #endif
247 
248  //new vertex weight matrix
249  Amg::MatrixX new_vrt_weight = old_vrt_weight - trackWeight * A.transpose()*gB*A;
250 
251  #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
252  std::cout<<"New vertex weight obtained: "<<new_vrt_weight<<std::endl;
253  #endif
254 
255  //new vertex position
256  Amg::VectorX new_weight_matrix_times_vrt_position =old_vrt_weight_times_vrt_pos - trackWeight * A.transpose() * gB *(trackParameters - constantTerm);
257  // new_vrt_cov*(old_vrt_weight * old_vrt_pos + trackWeight * sign * A.T() * gB *(trackParameters - constantTerm) );
258  // avoid to invert the weight matrix to obtain the COVARIANCE MATRIX!!!
259  //this line COPIES things two times, it would be nice to have a operator=(pos,errm) method in RecVertexPositions...
260  myPositionInWeightFormalism =
261  RecVertexPositions(new_weight_matrix_times_vrt_position,new_vrt_weight);
262  }
263 
264  //refitted track momentum
265  Amg::Vector3D newTrackMomentum = S*B.transpose()*trackParametersWeight*(trackParameters - constantTerm - A*final_vrt_pos);
266  //refitted track parameters
267  AmgVector(5) refTrackParameters = constantTerm + A * final_vrt_pos + B * newTrackMomentum;
268 
269  if (updateTrack) {
270 
271  const AmgSymMatrix(3) final_vrt_covariance_xyz =
272  (PosOnJetAxisAndTransformMatrix.second)*final_vrt_covariance*(PosOnJetAxisAndTransformMatrix.second).transpose();
273 
274  AmgVector(5) refTrackParametersToStore(refTrackParameters);
275 
276 
277  //bring parameter phi again in the limits, if
278  //phi is slightly outside (as can be expected
279  //due to refitting)
280  //thanks to Wolfgang L. / Sebastian F. for the piece of code with fmod!
281  // bool isSth=false;
282  if (refTrackParametersToStore[Trk::phi0] > M_PI) {
283  // isSth=true;
284  ATH_MSG_DEBUG ("-U- phi = " << refTrackParametersToStore[Trk::phi0]);
285  refTrackParametersToStore[Trk::phi0] = fmod(refTrackParametersToStore[Trk::phi0]+M_PI,2*M_PI)-M_PI;
286  ATH_MSG_DEBUG (" out of range, now corrected to " << refTrackParametersToStore[Trk::phi0]);
287  } else if(refTrackParametersToStore[Trk::phi0]<-M_PI) {
288  ATH_MSG_DEBUG ("-U- phi = " << refTrackParametersToStore[Trk::phi0]);
289  refTrackParametersToStore[Trk::phi0] = fmod(refTrackParametersToStore[Trk::phi0]-M_PI,2*M_PI)+M_PI;
290  ATH_MSG_DEBUG (" out of range, now corrected to " << refTrackParametersToStore[Trk::phi0]);
291  }
292 
293  if (refTrackParametersToStore[Trk::theta] > M_PI)
294  {
295  ATH_MSG_DEBUG (" Theta out of range: correcting theta: " << refTrackParametersToStore[Trk::theta]);
296  refTrackParametersToStore[Trk::theta]=fmod(refTrackParametersToStore[Trk::theta]+M_PI,2*M_PI)-M_PI;
297  ATH_MSG_DEBUG (" to: " << refTrackParametersToStore[Trk::theta]);
298  }
299  else if (refTrackParametersToStore[Trk::theta]<0) {
300  ATH_MSG_DEBUG (" Theta out of range: correcting theta: " << refTrackParametersToStore[Trk::theta]);
301  refTrackParametersToStore[Trk::theta]=fmod(refTrackParametersToStore[Trk::theta]-M_PI,2*M_PI)+M_PI;
302  ATH_MSG_DEBUG (" to: " << refTrackParametersToStore[Trk::theta]);
303  }
304 
305  if (refTrackParametersToStore[Trk::theta] < 0) {
306  refTrackParametersToStore[Trk::theta] =
307  - refTrackParametersToStore[Trk::theta];
308  refTrackParametersToStore[Trk::phi0] +=
309  (refTrackParametersToStore[Trk::phi0] > 0 ? -M_PI : M_PI);
310  }
311  else if (refTrackParametersToStore[Trk::theta] > M_PI) {//this is in principle not needed anymore
312  refTrackParametersToStore[Trk::theta] =
313  2*M_PI - refTrackParametersToStore[Trk::theta];
314  refTrackParametersToStore[Trk::phi0] +=
315  (refTrackParametersToStore[Trk::phi0] > 0 ? -M_PI : M_PI);
316  }
317 
318  //making a new track covariance matrix
319  AmgMatrix(Eigen::Dynamic,3) partialCovariance = A.transpose() * trackParametersWeight * B *S;
320 
321  AmgMatrix(Eigen::Dynamic,3) posMomentumCovariance = -final_vrt_covariance * partialCovariance;
322 
323  AmgMatrix(Eigen::Dynamic,3) posMomentumCovariance_xyz = PosOnJetAxisAndTransformMatrix.second * posMomentumCovariance;
324 
325  //new momentum covariance
326  AmgSymMatrix(3) momentumCovariance = doFastUpdate ?
327  S + (partialCovariance.transpose()*final_vrt_covariance*partialCovariance) :
328  S + (posMomentumCovariance.transpose()*final_vrt_weightmatrix*posMomentumCovariance);
329 
330  //full (x,y,z,phi, theta, q/p) covariance matrix
331  AmgSymMatrix(6) fullTrkCov; fullTrkCov.setZero();
332 
333  #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
334  std::cout << " posMomentumCovariance " << posMomentumCovariance <<
335  " final_vrt_covariance " << final_vrt_covariance << " momentumCovariance " <<
336  momentumCovariance << std::endl;
337  #endif
338 
339  fullTrkCov.block<3,3>(0,3) = posMomentumCovariance_xyz.transpose();//GP: to be checked: .T() is here or down?
340  fullTrkCov.block<3,3>(3,0) = posMomentumCovariance_xyz;
341  fullTrkCov.block<3,3>(0,0) = final_vrt_covariance_xyz;
342  fullTrkCov.block<3,3>(3,3) = momentumCovariance;
343  //debug hacking
344  AmgMatrix(5,6) trJac; trJac.setZero();
345  trJac(4,5) = 1.;
346  trJac(3,4) = 1.;
347  trJac(2,3) = 1.;
348 
349  //first row
350  trJac(0,0) = - sin(refTrackParametersToStore[Trk::phi0]);
351  trJac(0,1) = cos(refTrackParametersToStore[Trk::phi0]);
352 
353  //second row
354  trJac(1,0) = -cos(refTrackParametersToStore[Trk::phi0])/tan(refTrackParametersToStore[Trk::theta]);
355  trJac(1,1) = -sin(refTrackParametersToStore[Trk::phi0])/tan(refTrackParametersToStore[Trk::theta]);
356  trJac(1,2) = 1.;
357 
358  AmgSymMatrix(5) perFullTrkCov = AmgSymMatrix(5)(trJac*fullTrkCov*trJac.transpose());
360  Trk::TrackParameters* refittedPerigee = new Perigee(refTrackParametersToStore[0],
361  refTrackParametersToStore[1],
362  refTrackParametersToStore[2],
363  refTrackParametersToStore[3],
364  refTrackParametersToStore[4],
365  pSurf,
366  std::move(perFullTrkCov));
367 
368  //set the refitted track parameters
369  (*TracksIter)->setPerigeeAtVertex(refittedPerigee);
370  }
371 
372 
373  //parameters difference
374  AmgVector(5) paramDifference = trackParameters - refTrackParameters;
375 
376  track_compatibility_chi2 +=
377  (paramDifference.transpose()*trackParametersWeight*paramDifference)(0,0)*trackWeight;
378  track_ndf+=2.;
379  ATH_MSG_DEBUG ("new chi2 with compatibility of the tracks to the vertices " <<
380  track_compatibility_chi2 << " new ndf: " << track_ndf);
381  }//end iteration of tracks at vertex on jet axis
382 
383  if (!isPrimary) {
384  track_ndf-=1.;//consider the vertex
385  }
386  if (!doFastUpdate) { // strange, the original fastSmoother didn't have such calculation
387  //in the end calculate the real position... :-)
388  const Amg::VectorX & vrt_removed_tracks_weight_times_vrt_pos =
389  myPositionInWeightFormalism.position();
390  const Amg::MatrixX & vrt_removed_tracks_weight =
391  myPositionInWeightFormalism.covariancePosition();
392  //perform a FAST inversion of the weight matrix - done here for the first time
393  Amg::MatrixX vrt_removed_tracks_covariance = vrt_removed_tracks_weight;
394 
395  //4.October 2014 remove smartInversion for now (problems with numerical accuracy)
396 // vrt_removed_tracks_covariance=vrt_removed_tracks_weight.inverse().eval();
397  vrt_removed_tracks_covariance=(vrt_removed_tracks_covariance.transpose().eval()+vrt_removed_tracks_covariance)/2.0;
398 // After symmetrizing the matrix before inversion, the smart inversion works again, and move back. wesong@cern.ch 28/05/2016
399  try
400  {
401  m_Updator->smartInvert(vrt_removed_tracks_covariance);
402  }
403  catch (std::string a)
404  {
405  ATH_MSG_ERROR( a << " Doing inversion the normal way " );
406  vrt_removed_tracks_covariance=vrt_removed_tracks_weight.inverse().eval();
407  }
408 
409  const Amg::VectorX vrt_removed_tracks_pos=vrt_removed_tracks_covariance*vrt_removed_tracks_weight_times_vrt_pos;
410 
411  #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
412  std::cout << " final_vrt_pos " << final_vrt_pos << " vrt_removed_tracks_pos " << vrt_removed_tracks_pos << std::endl;
413  std::cout << " weight removed tracks " << vrt_removed_tracks_weight << std::endl;
414  #endif
415 
416  track_compatibility_chi2 +=
417  ((final_vrt_pos-vrt_removed_tracks_pos).transpose()*vrt_removed_tracks_weight*(final_vrt_pos-vrt_removed_tracks_pos))(0,0);
418 
419 
420  ATH_MSG_DEBUG (" new chi2 with the vertex residual" << track_compatibility_chi2 <<
421  " new ndf: " << track_ndf);
422  }
423  vertexToSmooth->setFitQuality(FitQuality(track_compatibility_chi2,track_ndf));
424 #ifdef KalmanVertexOnJetAxisSmoother_DEBUG
425  std::cout << " vertexToSmooth pointer is " << vertexToSmooth << std::endl;
426 #endif
427 
428  }
429 
430 }//end of namespace definitions
431 
Trk::VertexPositions::position
const Amg::VectorX & position() const
return position of vertex
Definition: VertexPositions.cxx:95
Trk::KalmanVertexOnJetAxisSmoother::AmgSymMatrix
AmgSymMatrix(3) m_initial_cov_momentum
Trk::AmgMatrix
AmgMatrix(3, 3) NeutralParticleParameterCalculator
Definition: NeutralParticleParameterCalculator.cxx:233
Amg::VectorX
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Definition: EventPrimitives.h:32
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:29
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
Trk::RecVertexPositions::setCovariancePosition
void setCovariancePosition(const Amg::MatrixX &)
Definition: RecVertexPositions.cxx:175
Trk::VxVertexOnJetAxis::getTracksAtVertex
const std::vector< VxTrackAtVertex * > & getTracksAtVertex(void) const
get Tracks At Vertex Method
Definition: VxVertexOnJetAxis.cxx:102
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::LinearizedTrack::expectedPositionAtPCA
const Amg::Vector3D & expectedPositionAtPCA() const
Access to the expected position at point of closet approach.
Definition: LinearizedTrack.h:104
Trk::VxJetCandidate::getLinearizationVertexPositions
const Trk::VertexPositions & getLinearizationVertexPositions() const
Definition: VxJetCandidate.cxx:531
initialize
void initialize()
Definition: run_EoverP.cxx:894
JetVtxParamDefs.h
VxVertexOnJetAxis.h
VxJetCandidate.h
M_PI
#define M_PI
Definition: ActiveFraction.h:11
Trk::Perigee
ParametersT< 5, Charged, PerigeeSurface > Perigee
Definition: Tracking/TrkEvent/TrkParameters/TrkParameters/TrackParameters.h:29
Trk::VxVertexOnJetAxis
VxVertexOnJetAxis inherits from Vertex.
Definition: VxVertexOnJetAxis.h:79
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
JetTiledMap::S
@ S
Definition: TiledEtaPhiMap.h:44
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Trk::KalmanVertexOnJetAxisSmoother::update
void update(VxVertexOnJetAxis *vertexToSmooth, const VxJetCandidate *candidateToUpdate, bool updateTrack=true) const
Update the VxVertexOnJetAxis (chi2 and ndf) with the knowledge coming from the fitted VxJetCandidate,...
Definition: KalmanVertexOnJetAxisSmoother.cxx:64
Trk::KalmanVertexOnJetAxisSmoother::initialize
virtual StatusCode initialize() override
Definition: KalmanVertexOnJetAxisSmoother.cxx:29
Trk::VxJetCandidate::getRecVertexPositions
const Trk::RecVertexPositions & getRecVertexPositions() const
Definition: VxJetCandidate.cxx:519
Trk::KalmanVertexOnJetAxisSmoother::KalmanVertexOnJetAxisSmoother
KalmanVertexOnJetAxisSmoother(const std::string &t, const std::string &n, const IInterface *p)
Constructor.
Definition: KalmanVertexOnJetAxisSmoother.cxx:48
Trk::VxJetCandidate::getPrimaryVertex
const VxVertexOnJetAxis * getPrimaryVertex(void) const
Definition: VxJetCandidate.cxx:551
Trk::VertexPositions::setPosition
void setPosition(const Amg::VectorX &)
Definition: VertexPositions.cxx:109
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Trk::KalmanVertexOnJetAxisSmoother::~KalmanVertexOnJetAxisSmoother
~KalmanVertexOnJetAxisSmoother()
Destructor.
beamspotman.n
n
Definition: beamspotman.py:731
Trk::theta
@ theta
Definition: ParamDefs.h:72
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
Trk::KalmanVertexOnJetAxisSmoother::m_Updator
ToolHandle< KalmanVertexOnJetAxisUpdator > m_Updator
Definition: KalmanVertexOnJetAxisSmoother.h:96
VxTrackAtVertex.h
Trk::VxVertexOnJetAxis::getNumVertex
int getNumVertex(void) const
Get Method for NumVertex.
Definition: VxVertexOnJetAxis.cxx:98
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
Trk::ParametersBase
Definition: ParametersBase.h:55
RunPrintSiDetElements.Dynamic
Dynamic
Definition: RunPrintSiDetElements.py:43
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::KalmanVertexOnJetAxisSmoother::fastUpdate
void fastUpdate(VxVertexOnJetAxis *vertexToSmooth, const VxJetCandidate *candidateToUpdate, bool updateTrack=true) const
Definition: KalmanVertexOnJetAxisSmoother.cxx:75
KalmanVertexOnJetAxisSmoother.h
Trk::VxJetCandidate
Definition: VxJetCandidate.h:72
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::RecVertexPositions
Definition: RecVertexPositions.h:34
Trk::RecVertexPositions::covariancePosition
Amg::MatrixX const & covariancePosition() const
return the covDeltaV matrix of the vertex fit
Definition: RecVertexPositions.cxx:171
a
TList * a
Definition: liststreamerinfos.cxx:10
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::KalmanVertexOnJetAxisSmoother::m_initialMomentumError
double m_initialMomentumError
Definition: KalmanVertexOnJetAxisSmoother.h:104
Trk::VxVertexOnJetAxis::setFitQuality
void setFitQuality(const Trk::FitQuality &fitQuality)
Fit quality set method.
Definition: VxVertexOnJetAxis.cxx:90
LinearizedTrack.h
Trk::KalmanVertexOnJetAxisSmoother::m_maxWeight
double m_maxWeight
Meaningless in case no adaptive fitting is used.
Definition: KalmanVertexOnJetAxisSmoother.h:103
Trk::VertexPositions
VertexPositions class to represent and store a vertex.
Definition: VertexPositions.h:36
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
AthAlgTool
Definition: AthAlgTool.h:26
Trk::LinearizedTrack::linearizationPoint
const Amg::Vector3D & linearizationPoint() const
An access to an actual linearization point.
Definition: LinearizedTrack.h:154
Trk::phi0
@ phi0
Definition: ParamDefs.h:71
RecVertexPositions.h
python.Dumpers.FitQuality
FitQuality
Definition: Dumpers.py:63
KalmanVertexOnJetAxisUpdator.h
egammaParameters::isPrimary
@ isPrimary
true if matched track has a hit in first or second pixel layer
Definition: egammaParamDefs.h:225
Trk::LinearizedTrack
Definition: LinearizedTrack.h:43