ATLAS Offline Software
Public Member Functions | Private Member Functions | Private Attributes | List of all members
InDet::InDetAdaptiveMultiSecVtxFinderTool Class Reference

#include <InDetAdaptiveMultiSecVtxFinderTool.h>

Inheritance diagram for InDet::InDetAdaptiveMultiSecVtxFinderTool:
Collaboration diagram for InDet::InDetAdaptiveMultiSecVtxFinderTool:

Public Member Functions

 InDetAdaptiveMultiSecVtxFinderTool (const std::string &t, const std::string &n, const IInterface *p)
 
virtual ~InDetAdaptiveMultiSecVtxFinderTool ()=default
 Destructor. More...
 
StatusCode initialize () override
 
StatusCode finalize () override
 
std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const xAOD::TrackParticleContainer *trackParticles) override
 
void setPrimaryVertexPosition (double, double, double) override
 

Private Member Functions

std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > doVertexing (const std::vector< Trk::ITrackLink * > &trackVector)
 
float findCompatibleTracks (Amg::Vector3D &seedVertex, Trk::ITrackLink *trkIter) const
 
void countTracksAndNdf (xAOD::Vertex *myxAODVertex, float &ndf, int &ntracks) const
 
bool checkFit (xAOD::Vertex *actualCandidate) const
 
int removeTracksFromSeeds (xAOD::Vertex *actualCandidate, std::vector< Trk::ITrackLink * > &seedTracks) const
 
void removeClosestTrack (Amg::Vector3D &seedVertex, std::vector< Trk::ITrackLink * > &seedTracks, int &nFound) const
 
bool V0check (const std::vector< Amg::Vector3D > &momenta, const Amg::Vector3D &posi) const
 
const std::vector< Amg::Vector3DgetVertexMomenta (xAOD::Vertex *myxAODVertex) const
 

Private Attributes

ToolHandle< Trk::AdaptiveMultiVertexFitterm_VertexFitter {this, "VertexFitterTool", "Trk::AdaptiveMultiVertexFitter", "Multi Vertex Fitter"}
 
ToolHandle< InDet::IInDetTrackSelectionToolm_trkFilter {this, "BaseTrackSelector", "InDet::DetailedTrackSelectToolRelax", "Base track selection tool"}
 
ToolHandle< InDet::IInDetTrackSelectionToolm_SVtrkFilter {this, "SecVtxTrackSelector", "InDet::SecVtxTrackSelector", "SV track selection tool"}
 
ToolHandle< Trk::IVertexSeedFinderm_SeedFinder {this, "SeedFinder", "Trk::IndexedCrossDistancesSeedFinder", "Seed finder"}
 
ToolHandle< Trk::IImpactPoint3dEstimatorm_ImpactPoint3dEstimator {this, "ImpactPoint3dEstimator", "Trk::ImpactPoint3dEstimator", "Impact point estimator"}
 
FloatProperty m_privtxRef {this, "MomentumProjectionOnDirection", -999999.9, "pri vtx ref"}
 
DoubleProperty m_significanceCutSeeding {this, "significanceCutSeeding", 10, "significanceCutSeeding"}
 
DoubleProperty m_minWghtAtVtx {this, "minTrackWeightAtVtx", 0., "minTrackWeightAtVtx"}
 
DoubleProperty m_maxIterations {this, "maxVertices", 25, "max iterations"}
 
Amg::Vector3D m_privtx
 

Detailed Description

Definition at line 53 of file InDetAdaptiveMultiSecVtxFinderTool.h.

Constructor & Destructor Documentation

◆ InDetAdaptiveMultiSecVtxFinderTool()

InDet::InDetAdaptiveMultiSecVtxFinderTool::InDetAdaptiveMultiSecVtxFinderTool ( const std::string &  t,
const std::string &  n,
const IInterface *  p 
)

Definition at line 63 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

◆ ~InDetAdaptiveMultiSecVtxFinderTool()

virtual InDet::InDetAdaptiveMultiSecVtxFinderTool::~InDetAdaptiveMultiSecVtxFinderTool ( )
virtualdefault

Destructor.

Member Function Documentation

◆ checkFit()

bool InDet::InDetAdaptiveMultiSecVtxFinderTool::checkFit ( xAOD::Vertex actualCandidate) const
private

Definition at line 489 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

489  : VTAV(*actualCandidate)) {
490  if ((trkAtVtxIter)->weight() > m_minWghtAtVtx) { ntracks += 1; }
491  }
492 
493  ATH_MSG_DEBUG(" xAOD::Vertex : " << (actualCandidate != nullptr ? 1 : 0) << ", #dof = " << ndf
494  << ", #tracks (weight>0.01) = " << ntracks);
495 
496  return ( ndf > 0 && ntracks >= 2);
497  }
498 
500  std::vector<Trk::ITrackLink*>& seedTracks) const {
501  if (not actualCandidate) return 0;
503 
504  std::vector<Trk::ITrackLink*>::iterator seedBegin = seedTracks.begin();

◆ countTracksAndNdf()

void InDet::InDetAdaptiveMultiSecVtxFinderTool::countTracksAndNdf ( xAOD::Vertex myxAODVertex,
float &  ndf,
int &  ntracks 
) const
private

Definition at line 447 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

449  : VTAV(*myxAODVertex)) {
450  if ((trkAtVtxIter)->weight() > m_minWghtAtVtx) { ntrk += 1; }
451  }
452  }
453  }
454 
455  const std::vector<Amg::Vector3D> InDetAdaptiveMultiSecVtxFinderTool::getVertexMomenta(xAOD::Vertex* myxAODVertex) const {
456  std::vector<Amg::Vector3D> TrkAtVtxMomenta;
457 
458  std::vector<Trk::VxTrackAtVertex>* tracksAtVertex = &(myxAODVertex->vxTrackAtVertex());
459 
460  ATH_MSG_DEBUG(" getVertexMomenta ... #Tracks associated at vertex : " << tracksAtVertex->size());

◆ doVertexing()

std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > InDet::InDetAdaptiveMultiSecVtxFinderTool::doVertexing ( const std::vector< Trk::ITrackLink * > &  trackVector)
private

prepare decorators to hold multi vertex fit information

place all tracks in the origTrack vector and initially all in the seedTrack vector

Definition at line 129 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

146  : origTracks) {
147  Trk::TrackToVtxLink* newTrkToVtxLink(new Trk::TrackToVtxLink(new std::vector<xAOD::Vertex*>));
148 
149  TrackLinkOf[trkIter] = newTrkToVtxLink;
150  myTrackToVtxLinks.push_back(newTrkToVtxLink);
151  }
152 
153  int iteration = 0;
154  unsigned int seedtracknumber = seedTracks.size();
155 
156  do {
157  if (seedtracknumber == 0) { ATH_MSG_DEBUG("New iteration. No tracks available after track selection for seeding."); }
158 
159  iteration += 1;
160  ATH_MSG_DEBUG("Iteration number " << iteration << " and tracks left for seeding " << seedtracknumber);
161 
162  std::vector<const Trk::TrackParameters*> perigeeList;
163 
164  perigeeList.reserve(seedTracks.size());
165 for (const Trk::ITrackLink* seedtrkAtVtxIter : seedTracks) { perigeeList.push_back((seedtrkAtVtxIter)->parameters()); }
166 
167  ATH_MSG_DEBUG("Going to seed finder");
168 
169  std::unique_ptr<Trk::IMode3dInfo> info;
170  Amg::Vector3D seedVertex;
171  seedVertex = m_SeedFinder->findSeed(m_privtx.x(), m_privtx.y(), info, perigeeList);
172 
173  ATH_MSG_DEBUG("Found seed at x: " << seedVertex.x() << " at y: " << seedVertex.y() << " at z: " << seedVertex.z());
174 
175  xAOD::Vertex* seededxAODVertex = new xAOD::Vertex;
176  theVertexContainer->push_back(seededxAODVertex);
177  seededxAODVertex->setPosition(seedVertex);
178  Amg::MatrixX looseConstraintCovariance(3, 3);
179  looseConstraintCovariance.setIdentity();
180  looseConstraintCovariance = looseConstraintCovariance * 1e+8;
181  seededxAODVertex->setCovariancePosition(looseConstraintCovariance);
182  seededxAODVertex->vxTrackAtVertex() = std::vector<Trk::VxTrackAtVertex>();
183  seededxAODVertex->setVertexType(xAOD::VxType::NotSpecified);
184 
185  if (seedVertex.z() == 0) {
186  ATH_MSG_DEBUG("No good seed found: no further vertices in event");
187  ATH_MSG_DEBUG("Number of input tracks: " << perigeeList.size() << ", but no good seed returned");
188  break;
189  }
190 
191  xAOD::Vertex* constraintVertex = nullptr;
192  looseConstraintCovariance.setIdentity();
193  looseConstraintCovariance = looseConstraintCovariance * 1e+8;
194  constraintVertex = new xAOD::Vertex();
195  constraintVertex->makePrivateStore();
196  constraintVertex->setPosition(seedVertex);
197  constraintVertex->setCovariancePosition(looseConstraintCovariance);
198  constraintVertex->setFitQuality(0., -3.);
199  constraintVertex->setVertexType(xAOD::VxType::NotSpecified);
200 
201  xAOD::Vertex* actualCandidate = new xAOD::Vertex;
202  actualCandidate->makePrivateStore();
203  actualCandidate->setVertexType(xAOD::VxType::NotSpecified);
204 
205  MvfFitInfo(*actualCandidate) =
206  new Trk::MvfFitInfo(constraintVertex, new Amg::Vector3D(seedVertex), new Amg::Vector3D(seedVertex));
207  isInitialized(*actualCandidate) = false;
208  std::vector<Trk::VxTrackAtVertex*> vectorOfTracks(0);
209  VTAV(*actualCandidate) = vectorOfTracks;
210 
211  for (Trk::ITrackLink* trkIter : origTracks) {
212  // now fill perigeesToFit list of track parameters from origTracks
213  float doe = findCompatibleTracks(seedVertex, trkIter);
214  if (doe < m_significanceCutSeeding) {
215  Trk::TrackToVtxLink* actualLink = TrackLinkOf[trkIter];
216  std::vector<xAOD::Vertex*>* actualvtxlink = actualLink->vertices();
217  // adding vertex to candidates of track
218  actualvtxlink->push_back(actualCandidate);
219  VTAV(*actualCandidate).push_back(new Trk::MVFVxTrackAtVertex((trkIter)->clone(), actualLink));
220  }
221  }
222 
223  ATH_MSG_DEBUG(" Considering n. " << VTAV(*actualCandidate).size() << " tracks for the fit. ");
224 
225  if (VTAV(*actualCandidate).size() < 2) {
226  ATH_MSG_DEBUG("No tracks found near seed, while at least two tracks were expected.");
227 
228  if (VTAV.isAvailable(*actualCandidate)) {
229  for (auto *tav : VTAV(*actualCandidate)) {
230  if (tav == nullptr) continue;
231 
232  (static_cast<Trk::MVFVxTrackAtVertex*>(tav))->setLinkToVertices(nullptr);
233  delete tav;
234  tav = nullptr;
235  }
236  VTAV(*actualCandidate).clear();
237  }
238  if (MvfFitInfo.isAvailable(*actualCandidate) && MvfFitInfo(*actualCandidate) != nullptr) {
239  delete MvfFitInfo(*actualCandidate);
240  MvfFitInfo(*actualCandidate) = nullptr;
241  }
242  delete actualCandidate;
243  actualCandidate = nullptr;
244 
245  break;
246  }
247 
248  ATH_MSG_DEBUG("Going to fitter.");
249 
250  m_VertexFitter->addVtxTofit(actualCandidate);
251 
252  ATH_MSG_DEBUG("Deleting tracks with really good fit to vertex from seeding tracks.");
253  int nFound = removeTracksFromSeeds(actualCandidate, seedTracks);
254 
255  ATH_MSG_DEBUG("Found and deleted " << nFound << " tracks from seeding tracks.");
256  if (nFound == 0) {
257  ATH_MSG_DEBUG("All tracks used for fitting came from fiting tracks, removing closest from seeding.");
258  // all the tracks used for the fit came from fitting track list
259  //-> so remove the closest track to seed from seeding, otherwise you'll keep finding the same seed position
260 
261  removeClosestTrack(seedVertex, seedTracks, nFound);
262  }
263 
264  if (nFound == 0) {
265  ATH_MSG_DEBUG("You still have not removed any tracks from seeds! Aborting.");
266  break;
267  }
268 
269  ATH_MSG_DEBUG("Checking goodness of fit.");
270  bool goodVertex = checkFit(actualCandidate);
271 
272  if (!goodVertex) {
273  ATH_MSG_DEBUG("Bad vertex, deleting the vertex and clearing all pointers");
274 
275  seededxAODVertex->setVertexType(xAOD::VxType::KinkVtx);
276 
277  if (actualCandidate) {
278  if (VTAV.isAvailable(*actualCandidate)) {
279  for (auto *tav : VTAV(*actualCandidate)) {
280  if (tav == nullptr) continue;
281 
282  (static_cast<Trk::MVFVxTrackAtVertex*>(tav))->setLinkToVertices(nullptr);
283  delete tav;
284  tav = nullptr;
285  }
286  VTAV(*actualCandidate).clear();
287  }
288  if (MvfFitInfo.isAvailable(*actualCandidate) && MvfFitInfo(*actualCandidate) != nullptr) {
289  delete MvfFitInfo(*actualCandidate);
290  MvfFitInfo(*actualCandidate) = nullptr;
291  }
292 
293  delete actualCandidate;
294  actualCandidate = nullptr;
295  }
296 
297  } else {
298  ATH_MSG_DEBUG("I have found a good vertex!");
299 
300  seededxAODVertex->setVertexType(xAOD::VxType::NoVtx);
301  actualCandidate->setVertexType(xAOD::VxType::SecVtx);
302  myxAODVertices.emplace_back(0, actualCandidate);
303  }
304  seedtracknumber = seedTracks.size();
305  } while (seedTracks.size() > 1 && iteration < m_maxIterations);
306 
307  if (iteration >= m_maxIterations) {
308  ATH_MSG_DEBUG("Maximum number of iterations ("
309  << m_maxIterations << ") reached; to reconstruct more vertices, set maxIterations to a higher value.");
310  }
311 
312  ATH_MSG_DEBUG("Secondary vertex finding complete with " << iteration << " iterations and " << myxAODVertices.size()
313  << " vertices found.");
314 
315  for (const xAODVertex_pair& vtxIter : myxAODVertices) {
316  xAOD::Vertex* fittedVert = vtxIter.second;
317 
318  xAOD::Vertex* cand = new xAOD::Vertex;
319  theVertexContainer->push_back(cand);
320  cand->setPosition(fittedVert->position());
321  cand->setCovariancePosition(fittedVert->covariancePosition());
322  cand->setFitQuality(fittedVert->chiSquared(), fittedVert->numberDoF());
324 
325  std::vector<Trk::VxTrackAtVertex>* tracksOfVertex = &(cand->vxTrackAtVertex());
326  tracksOfVertex->clear();
327 
328  for (Trk::VxTrackAtVertex* MVFtrkIter : VTAV(*fittedVert)) {
329  if ((*MVFtrkIter).initialPerigee()) { (*MVFtrkIter).setPerigeeAtVertex(((*MVFtrkIter).initialPerigee())->clone()); }
330  tracksOfVertex->push_back(*MVFtrkIter);
331  }
332  }
333 
334  for (const xAODVertex_pair& vtxIter : myxAODVertices) {
335  xAOD::Vertex* cand = vtxIter.second;
336 
337  for (Trk::VxTrackAtVertex* MVFtrkIter : VTAV(*cand)) {
338  (static_cast<Trk::MVFVxTrackAtVertex*>(MVFtrkIter))->setLinkToVertices(nullptr);
339  delete MVFtrkIter;
340  MVFtrkIter = nullptr;
341  }
342 
343  delete MvfFitInfo(*cand);
344  }
345 
346  ATH_MSG_DEBUG("Looping over vertex container");
347 
348  for (xAOD::Vertex* vxIter : *theVertexContainer) {
349  std::vector<Trk::VxTrackAtVertex>* myVxTracksAtVtx = &((vxIter)->vxTrackAtVertex());
350  if (!myVxTracksAtVtx) continue;
351 
352  for (Trk::VxTrackAtVertex& tracksIter : *myVxTracksAtVtx) {
353  Trk::LinkToXAODTrackParticle* linkToXAODTP = nullptr;
354  Trk::ITrackLink* tmpLink = (tracksIter).trackOrParticleLink();
355  if (tmpLink->type() == Trk::ITrackLink::ToxAODTrackParticle) {
356  linkToXAODTP = static_cast<Trk::LinkToXAODTrackParticle*>(tmpLink);
357  }
358 
359  if (linkToXAODTP) { (vxIter)->addTrackAtVertex(*linkToXAODTP, (tracksIter).weight()); }
360  }
361 
362  int ntrk = myVxTracksAtVtx->size();
363  if (ntrk == 2) {
364  ATH_MSG_DEBUG("Could do a V0 search");
365 
366  bool isV0 = V0check(getVertexMomenta(vxIter), (&(*vxIter))->position());
367  if (isV0) {
368  ATH_MSG_DEBUG("Labeling as V0");
369  (vxIter)->setVertexType(xAOD::VxType::V0Vtx);
370  }
371  }
372  }
373 
374  // delete all TrackToVtxLink objects
375  for (Trk::TrackToVtxLink* iterator : myTrackToVtxLinks) { delete iterator; }
376 
377  if (!theVertexContainer->empty()) {
378  xAOD::Vertex* secVtx = theVertexContainer->front();
379  if (!secVtx->vxTrackAtVertex().empty()) {
381  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
382  theVertexContainer->push_back(dummyxAODVertex); // have to add vertex to container here first so it can use its aux store
383  dummyxAODVertex->setPosition(secVtx->position());
384  dummyxAODVertex->setCovariancePosition(secVtx->covariancePosition());
385  dummyxAODVertex->vxTrackAtVertex() = std::vector<Trk::VxTrackAtVertex>();
386  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
387  } else {
389  }
390  }
391 
392  else if (theVertexContainer->empty()) {
393  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
394  theVertexContainer->push_back(dummyxAODVertex); // have to add vertex to container here first so it can use its aux store
395  dummyxAODVertex->setPosition(Amg::Vector3D(0, 0, 0));
396  Amg::MatrixX looseConstraintCovariance(3, 3);
397  looseConstraintCovariance.setIdentity();
398  looseConstraintCovariance = looseConstraintCovariance * 1e+8;
399  dummyxAODVertex->setCovariancePosition(looseConstraintCovariance);
400  dummyxAODVertex->vxTrackAtVertex() = std::vector<Trk::VxTrackAtVertex>();
401  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
402  }
403 
404  int noVtx = 0;
405  int kinkVtx = 0;
406  int notSpec = 0;
407  int secVtx = 0;
408  int V0vtx = 0;
409  for (unsigned int i = 0; i < theVertexContainer->size(); i++) {
410  xAOD::VxType::VertexType vtxType;
411  vtxType = static_cast<xAOD::VxType::VertexType>((*theVertexContainer)[i]->vertexType());
412  switch (vtxType) {
413  case xAOD::VxType::NoVtx: noVtx++; break;
414  case xAOD::VxType::KinkVtx: kinkVtx++; break;
415  case xAOD::VxType::NotSpecified: notSpec++; break;
416  case xAOD::VxType::V0Vtx: V0vtx++; break;
417  case xAOD::VxType::SecVtx: secVtx++; break;
418  default: ATH_MSG_DEBUG("Unfamiliar vertex type");
419  }
420 
421  ATH_MSG_DEBUG(" Vtx: " << i << " x= " << (*theVertexContainer)[i]->position().x() << " y= "
422  << (*theVertexContainer)[i]->position().y() << " z= " << (*theVertexContainer)[i]->position().z()
423  << " ntracks= " << (*theVertexContainer)[i]->vxTrackAtVertex().size() << " chi2= "
424  << (*theVertexContainer)[i]->chiSquared() << " #dof = " << (*theVertexContainer)[i]->numberDoF());
425  }
426 
427  ATH_MSG_DEBUG("Done finding " << theVertexContainer->size() << " vertices and cleaning the container.");
428  ATH_MSG_DEBUG("Seeds good/bad/all : " << noVtx << "/" << kinkVtx << "/" << notSpec);
429  ATH_MSG_DEBUG("'Good' secondaries : " << secVtx << " and V0: " << V0vtx);
430 
431  return std::make_pair(theVertexContainer, theVertexAuxContainer);
432  }
433 
434  void InDetAdaptiveMultiSecVtxFinderTool::setPrimaryVertexPosition(double vx, double vy, double vz) {
435  m_privtx = Amg::Vector3D(vx, vy, vz);
436  }
437 
438  StatusCode InDetAdaptiveMultiSecVtxFinderTool::finalize() { return StatusCode::SUCCESS; }
439 

◆ finalize()

StatusCode InDet::InDetAdaptiveMultiSecVtxFinderTool::finalize ( )
override

Definition at line 445 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

◆ findCompatibleTracks()

float InDet::InDetAdaptiveMultiSecVtxFinderTool::findCompatibleTracks ( Amg::Vector3D seedVertex,
Trk::ITrackLink trkIter 
) const
private

Definition at line 545 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

545  {
546  ATH_MSG_DEBUG(" ImpactPoint3dEstimator failed to find minimum distance between track and vertex seed: " << err.p);
547  }
548 
549  if (distance < 0) { ATH_MSG_DEBUG(" Distance between track and seed vtx is negative: " << distance); }
550 
551  const Trk::TrackParameters* myPerigee = ((trkIter)->parameters());
552  double doe = 99999999.9;
553  double error = 0.;
554 
555  if (myPerigee && myPerigee->covariance()) {
556  error = std::sqrt((*myPerigee->covariance())(Trk::d0, Trk::d0) + (*myPerigee->covariance())(Trk::z0, Trk::z0));
557  } // end of the security check
558 
559  if (error == 0.) {
560  ATH_MSG_ERROR(" Error is zero! " << distance);
561  error = 1.;
562  }
563 
564  doe = distance / error;
565 
566  ATH_MSG_VERBOSE("Distance between track and seed vtx: " << distance << " d/s(d) = " << distance / error << " err " << error);
567 
568  return doe;
569  }
570 
571  void InDetAdaptiveMultiSecVtxFinderTool::removeClosestTrack(Amg::Vector3D& seedVertex, std::vector<Trk::ITrackLink*>& seedTracks,
572  int& nFound) const {
573  const Trk::ITrackLink* nearestTrack = nullptr;
574  double dist = 1e8;
575 
576  for (Trk::ITrackLink* trkIter : seedTracks) {

◆ findVertex()

std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > InDet::InDetAdaptiveMultiSecVtxFinderTool::findVertex ( const xAOD::TrackParticleContainer trackParticles)
override

Definition at line 88 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

89  : *trackParticles) {
90  xAOD::Vertex null;
91  null.makePrivateStore();
92  null.setPosition(Amg::Vector3D(0, 0, 0));
93  AmgSymMatrix(3) vertexError;
94  vertexError.setZero();
95  null.setCovariancePosition(vertexError);
96  selectionPassed = static_cast<bool>(m_trkFilter->accept(*itr, &null));
97  if (selectionPassed) selectionPassed = static_cast<bool>(m_SVtrkFilter->accept(*itr, &null));
98 
99  if (selectionPassed) {
100  trackPass(*itr) = true;
101 
102  Amg::VectorX par = (itr)->definingParameters();
103  par[0] = (itr)->hitPattern();
104 
106  link.setElement(itr);
108 
109  linkTT->setStorableObject(*trackParticles);
110  selectedTracks.push_back(linkTT);
111  }
112  }
113 
114  ATH_MSG_DEBUG("Of " << trackParticles->size() << " tracks " << selectedTracks.size() << " survived the preselection.");
115 
116  std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> returnContainers = doVertexing(selectedTracks);
117 
118  return returnContainers;
119  }
120 
121  std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
122  InDetAdaptiveMultiSecVtxFinderTool::doVertexing( const std::vector<Trk::ITrackLink*>& trackVector) {
123  xAOD::VertexContainer* theVertexContainer = new xAOD::VertexContainer;
124  xAOD::VertexAuxContainer* theVertexAuxContainer = new xAOD::VertexAuxContainer;
125  theVertexContainer->setStore(theVertexAuxContainer);
126 

◆ getVertexMomenta()

const std::vector< Amg::Vector3D > InDet::InDetAdaptiveMultiSecVtxFinderTool::getVertexMomenta ( xAOD::Vertex myxAODVertex) const
private

Definition at line 462 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

462  : *tracksAtVertex) {
463  if ((tracksAtVertexIter).weight() <= m_minWghtAtVtx) continue;
464  {
465  const Trk::TrackParameters* sv_perigee = (tracksAtVertexIter).perigeeAtVertex();
466  if (!sv_perigee) {
467  ATH_MSG_DEBUG("perigeeAtVertex not available!!");
468  continue;
469  }
470 
471  double qp = 1. / (std::fabs(sv_perigee->parameters()[Trk::qOverP]));
472  double theta = sv_perigee->parameters()[Trk::theta];
473  double phi = sv_perigee->parameters()[Trk::phi];
474 
475  TrkAtVtxMomenta.emplace_back(qp * sin(theta) * cos(phi), qp * sin(theta) * sin(phi), qp * cos(theta));
476  }
477  }
478 
479  return TrkAtVtxMomenta;
480  }
481 
482  bool InDetAdaptiveMultiSecVtxFinderTool::checkFit(xAOD::Vertex* actualCandidate) const {
483  int ntracks = 0;
484  if (not actualCandidate) return false;
485  float ndf = actualCandidate->numberDoF();
486 

◆ initialize()

StatusCode InDet::InDetAdaptiveMultiSecVtxFinderTool::initialize ( )
override

Definition at line 67 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

71  {
72  struct xAODVertex_pair {
73  double first;
75  xAODVertex_pair(double p1, xAOD::Vertex* p2) : first(p1), second(p2) {}
76  bool operator<(const xAODVertex_pair& other) const { return first > other.first; }

◆ removeClosestTrack()

void InDet::InDetAdaptiveMultiSecVtxFinderTool::removeClosestTrack ( Amg::Vector3D seedVertex,
std::vector< Trk::ITrackLink * > &  seedTracks,
int &  nFound 
) const
private

Definition at line 578 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

578  {
579  std::unique_ptr<Trk::PlaneSurface> mySurface =
580  m_ImpactPoint3dEstimator->Estimate3dIP((trkIter)->parameters(), &seedVertex, distance);
582  ATH_MSG_DEBUG(" ImpactPoint3dEstimator failed to find minimum distance between this track and vertex seed: " << err.p);
583  }
584  ATH_MSG_DEBUG("Seed to track dist: " << distance);
585  if (distance < 0) { ATH_MSG_DEBUG("Distance was negative!"); }
586 
587  if (distance > 0 && !nearestTrack) {
588  dist = distance;
589  nearestTrack = trkIter;
590  }
591  if (distance > 0 && distance < dist) {
592  dist = distance;
593  nearestTrack = trkIter;
594  }
595  }
596  if (nearestTrack) {
597  ATH_MSG_DEBUG("Found closest track to seed and deleting.");
598  std::vector<Trk::ITrackLink*>::iterator seedBegin = seedTracks.begin();
599  std::vector<Trk::ITrackLink*>::iterator seedEnd = seedTracks.end();
600  nFound += 1;
601  std::vector<Trk::ITrackLink*>::iterator foundTrack = std::find(seedBegin, seedEnd, nearestTrack);
602  if (foundTrack != seedEnd) {
603  seedTracks.erase(foundTrack);
604  seedBegin = seedTracks.begin();
605  seedEnd = seedTracks.end();
606  } else {
607  ATH_MSG_DEBUG("The nearest track was not found!");
608  }
609  } else {
610  ATH_MSG_DEBUG("What else can I try?");
611  }
612  }
613 
614  bool InDetAdaptiveMultiSecVtxFinderTool::V0check(const std::vector<Amg::Vector3D>& momenta, const Amg::Vector3D& posi) const {
615  int ntrk = momenta.size();
616 
617  if (ntrk < 2) {
618  ATH_MSG_DEBUG(" ntrk < 2 , Meaningless to test mass ");
619  return false;

◆ removeTracksFromSeeds()

int InDet::InDetAdaptiveMultiSecVtxFinderTool::removeTracksFromSeeds ( xAOD::Vertex actualCandidate,
std::vector< Trk::ITrackLink * > &  seedTracks 
) const
private

Definition at line 506 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

511  : VTAV(*actualCandidate)) {
512  // delete the pointer to this vertex if the vertex was bad
513  if (!goodVertex) {
514  (static_cast<Trk::MVFVxTrackAtVertex*>(trkAtVtxIter))->linkToVertices()->vertices()->pop_back();
515  }
516 
517  std::vector<Trk::ITrackLink*>::iterator foundTrack = seedEnd;
518  for (std::vector<Trk::ITrackLink*>::iterator seedtrkiter = seedBegin; seedtrkiter != seedEnd; ++seedtrkiter) {
519  if ((*seedtrkiter)->parameters() == (trkAtVtxIter)->trackOrParticleLink()->parameters() &&
520  (trkAtVtxIter)->weight() > m_minWghtAtVtx) {
521  foundTrack = seedtrkiter;
522  }
523  }
524 
525  if (foundTrack != seedEnd) {
526  seedTracks.erase(foundTrack);
527 
528  nFound += 1;
529 
530  seedBegin = seedTracks.begin();
531  seedEnd = seedTracks.end();
532  }
533  }
534 
535  return nFound;
536  }
537 
539  double distance = 0.;
540 
541  try {
542  std::unique_ptr<Trk::PlaneSurface> mySurface =
543  m_ImpactPoint3dEstimator->Estimate3dIP((trkIter)->parameters(), &seedVertex, distance);

◆ setPrimaryVertexPosition()

void InDet::InDetAdaptiveMultiSecVtxFinderTool::setPrimaryVertexPosition ( double  vx,
double  vy,
double  vz 
)
override

Definition at line 441 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

444  {

◆ V0check()

bool InDet::InDetAdaptiveMultiSecVtxFinderTool::V0check ( const std::vector< Amg::Vector3D > &  momenta,
const Amg::Vector3D posi 
) const
private

Definition at line 621 of file InDetAdaptiveMultiSecVtxFinderTool.cxx.

626  {
627  Amg::Vector3D trk = momenta[t];
628 
629  vz += trk.z();
630  vx += trk.x();
631  vy += trk.y();
632  Pv[t] = trk.x() * trk.x() + trk.y() * trk.y() + trk.z() * trk.z();
633  eK0 += std::sqrt(Pv[t] + pi2);
634  }
635 
636  double mnt2 = vx * vx + vy * vy + vz * vz;
637  double mass = eK0 * eK0 - mnt2;
638  mass = 0.001 * (std::sqrt(std::abs(mass)));
639 
640  Amg::Vector3D vdif = posi - m_privtx;
641  Amg::Vector3D vmoment = Amg::Vector3D(vx, vy, vz);
642 
643  double modir = vmoment.dot(vdif) / std::sqrt(mnt2);
644 
645  // borrowed from InnerDetector/InDetRecAlgs/InDetV0Finder/InDetV0FinderTool
646  double a0z = (vdif + vmoment * vmoment.dot(vdif) / (mnt2 + 0.00001)).z();
647  double Rxy = vdif.perp();
648 
649  ATH_MSG_DEBUG(" V0kine : a0z = " << a0z << " Rxy = " << Rxy << " direction " << modir);
650 
651  if (ntrk != 2) {
652  ATH_MSG_DEBUG(" ntrk != 2 , Meaningless to test V0 ");
653  return false;
654  }
655 
656  if (a0z > 15. || Rxy > 500.) { return false; }
657 
658  // 1 eV^(-1) of time = hbar / eV = 6.582173*10^(-16) second, for energy-time in natural unit
659  // double planck = 6.582173 ;
660 
661  double eGam = std::sqrt(Pv[0] + 0.511 * 0.511) + std::sqrt(Pv[1] + 0.511 * 0.511);
662  double mGam = eGam * eGam - mnt2;
663 
664  double prtn2 = 938.27205 * 938.27205;
665  double eLam = Pv[0] > Pv[1] ? std::sqrt(Pv[0] + prtn2) + std::sqrt(Pv[1] + pi2) : std::sqrt(Pv[0] + pi2) + std::sqrt(Pv[1] + prtn2);
666  double mLam = eLam * eLam - mnt2;
667 
668  ATH_MSG_DEBUG(" V0 masses : " << mass << " " << std::sqrt(std::abs(mGam)) << " " << std::sqrt(std::abs(mLam)));
669 
670  return ((fabs(mass - 497.614) < 100.) // K short
671  || (mGam > 0 && std::sqrt(mGam) < 40.) // gamma conversion ;
672  || (mLam > 0 && std::abs(std::sqrt(mLam) - 1115.683) < 200.) // Lambda
673  );
674  }
675 
676 } // end namespace InDet

Member Data Documentation

◆ m_ImpactPoint3dEstimator

ToolHandle<Trk::IImpactPoint3dEstimator> InDet::InDetAdaptiveMultiSecVtxFinderTool::m_ImpactPoint3dEstimator {this, "ImpactPoint3dEstimator", "Trk::ImpactPoint3dEstimator", "Impact point estimator"}
private

Definition at line 95 of file InDetAdaptiveMultiSecVtxFinderTool.h.

◆ m_maxIterations

DoubleProperty InDet::InDetAdaptiveMultiSecVtxFinderTool::m_maxIterations {this, "maxVertices", 25, "max iterations"}
private

Definition at line 101 of file InDetAdaptiveMultiSecVtxFinderTool.h.

◆ m_minWghtAtVtx

DoubleProperty InDet::InDetAdaptiveMultiSecVtxFinderTool::m_minWghtAtVtx {this, "minTrackWeightAtVtx", 0., "minTrackWeightAtVtx"}
private

Definition at line 100 of file InDetAdaptiveMultiSecVtxFinderTool.h.

◆ m_privtx

Amg::Vector3D InDet::InDetAdaptiveMultiSecVtxFinderTool::m_privtx
private

Definition at line 102 of file InDetAdaptiveMultiSecVtxFinderTool.h.

◆ m_privtxRef

FloatProperty InDet::InDetAdaptiveMultiSecVtxFinderTool::m_privtxRef {this, "MomentumProjectionOnDirection", -999999.9, "pri vtx ref"}
private

Definition at line 98 of file InDetAdaptiveMultiSecVtxFinderTool.h.

◆ m_SeedFinder

ToolHandle<Trk::IVertexSeedFinder> InDet::InDetAdaptiveMultiSecVtxFinderTool::m_SeedFinder {this, "SeedFinder", "Trk::IndexedCrossDistancesSeedFinder", "Seed finder"}
private

Definition at line 94 of file InDetAdaptiveMultiSecVtxFinderTool.h.

◆ m_significanceCutSeeding

DoubleProperty InDet::InDetAdaptiveMultiSecVtxFinderTool::m_significanceCutSeeding {this, "significanceCutSeeding", 10, "significanceCutSeeding"}
private

Definition at line 99 of file InDetAdaptiveMultiSecVtxFinderTool.h.

◆ m_SVtrkFilter

ToolHandle<InDet::IInDetTrackSelectionTool> InDet::InDetAdaptiveMultiSecVtxFinderTool::m_SVtrkFilter {this, "SecVtxTrackSelector", "InDet::SecVtxTrackSelector", "SV track selection tool"}
private

Definition at line 92 of file InDetAdaptiveMultiSecVtxFinderTool.h.

◆ m_trkFilter

ToolHandle<InDet::IInDetTrackSelectionTool> InDet::InDetAdaptiveMultiSecVtxFinderTool::m_trkFilter {this, "BaseTrackSelector", "InDet::DetailedTrackSelectToolRelax", "Base track selection tool"}
private

Definition at line 91 of file InDetAdaptiveMultiSecVtxFinderTool.h.

◆ m_VertexFitter

ToolHandle<Trk::AdaptiveMultiVertexFitter> InDet::InDetAdaptiveMultiSecVtxFinderTool::m_VertexFitter {this, "VertexFitterTool", "Trk::AdaptiveMultiVertexFitter", "Multi Vertex Fitter"}
private

Definition at line 90 of file InDetAdaptiveMultiSecVtxFinderTool.h.


The documentation for this class was generated from the following files:
grepfile.info
info
Definition: grepfile.py:38
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
InDet::InDetAdaptiveMultiSecVtxFinderTool::findCompatibleTracks
float findCompatibleTracks(Amg::Vector3D &seedVertex, Trk::ITrackLink *trkIter) const
Definition: InDetAdaptiveMultiSecVtxFinderTool.cxx:545
covarianceTool.ndf
ndf
Definition: covarianceTool.py:678
InDet::InDetAdaptiveMultiSecVtxFinderTool::V0check
bool V0check(const std::vector< Amg::Vector3D > &momenta, const Amg::Vector3D &posi) const
Definition: InDetAdaptiveMultiSecVtxFinderTool.cxx:621
operator<
bool operator<(const DataVector< T > &a, const DataVector< T > &b)
Vector ordering relation.
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
xAOD::Vertex_v1::setPosition
void setPosition(const Amg::Vector3D &position)
Sets the 3-position.
Amg::VectorX
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Definition: EventPrimitives.h:30
xAOD::Vertex_v1::setFitQuality
void setFitQuality(float chiSquared, float numberDoF)
Set the 'Fit Quality' information.
Definition: Vertex_v1.cxx:150
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:27
xAOD::VertexAuxContainer_v1
Temporary container used until we have I/O for AuxStoreInternal.
Definition: VertexAuxContainer_v1.h:32
Trk::MVFVxTrackAtVertex
Definition: MVFVxTrackAtVertex.h:31
Trk::VxTrackAtVertex
The VxTrackAtVertex is a common class for all present TrkVertexFitters The VxTrackAtVertex is designe...
Definition: VxTrackAtVertex.h:77
InDet::InDetAdaptiveMultiSecVtxFinderTool::checkFit
bool checkFit(xAOD::Vertex *actualCandidate) const
Definition: InDetAdaptiveMultiSecVtxFinderTool.cxx:489
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition: Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
InDet::InDetAdaptiveMultiSecVtxFinderTool::m_VertexFitter
ToolHandle< Trk::AdaptiveMultiVertexFitter > m_VertexFitter
Definition: InDetAdaptiveMultiSecVtxFinderTool.h:90
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
InDet::InDetAdaptiveMultiSecVtxFinderTool::m_maxIterations
DoubleProperty m_maxIterations
Definition: InDetAdaptiveMultiSecVtxFinderTool.h:101
xAOD::VxType::V0Vtx
@ V0Vtx
Vertex from V0 decay.
Definition: TrackingPrimitives.h:575
CutsMETMaker::accept
StatusCode accept(const xAOD::Muon *mu)
Definition: CutsMETMaker.cxx:18
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
python.PhysicalConstants.pi2
float pi2
Definition: PhysicalConstants.py:52
Trk::z0
@ z0
Definition: ParamDefs.h:64
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
InDet::InDetAdaptiveMultiSecVtxFinderTool::removeTracksFromSeeds
int removeTracksFromSeeds(xAOD::Vertex *actualCandidate, std::vector< Trk::ITrackLink * > &seedTracks) const
Definition: InDetAdaptiveMultiSecVtxFinderTool.cxx:506
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
xAOD::VertexContainer
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Definition: VertexContainer.h:14
x
#define x
InDet::InDetAdaptiveMultiSecVtxFinderTool::m_minWghtAtVtx
DoubleProperty m_minWghtAtVtx
Definition: InDetAdaptiveMultiSecVtxFinderTool.h:100
xAOD::VxType::NoVtx
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Definition: TrackingPrimitives.h:570
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:50
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:189
xAOD::VxType::VertexType
VertexType
Vertex types.
Definition: TrackingPrimitives.h:569
xAOD::phi
setEt phi
Definition: TrigEMCluster_v1.cxx:29
InDet::InDetAdaptiveMultiSecVtxFinderTool::finalize
StatusCode finalize() override
Definition: InDetAdaptiveMultiSecVtxFinderTool.cxx:445
xAOD::Vertex_v1::setVertexType
void setVertexType(VxType::VertexType vType)
Set the type of the vertex.
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
InDet::InDetAdaptiveMultiSecVtxFinderTool::getVertexMomenta
const std::vector< Amg::Vector3D > getVertexMomenta(xAOD::Vertex *myxAODVertex) const
Definition: InDetAdaptiveMultiSecVtxFinderTool.cxx:462
InDet::InDetAdaptiveMultiSecVtxFinderTool::m_SVtrkFilter
ToolHandle< InDet::IInDetTrackSelectionTool > m_SVtrkFilter
Definition: InDetAdaptiveMultiSecVtxFinderTool.h:92
TRTCalib_cfilter.p2
p2
Definition: TRTCalib_cfilter.py:131
InDet::InDetAdaptiveMultiSecVtxFinderTool::setPrimaryVertexPosition
void setPrimaryVertexPosition(double, double, double) override
Definition: InDetAdaptiveMultiSecVtxFinderTool.cxx:441
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::InDetAdaptiveMultiSecVtxFinderTool::doVertexing
std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > doVertexing(const std::vector< Trk::ITrackLink * > &trackVector)
Definition: InDetAdaptiveMultiSecVtxFinderTool.cxx:129
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:59
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:182
xAOD::VertexAuxContainer
VertexAuxContainer_v1 VertexAuxContainer
Definition of the current jet auxiliary container.
Definition: VertexAuxContainer.h:19
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
Trk::theta
@ theta
Definition: ParamDefs.h:66
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
xAOD::VxType::SecVtx
@ SecVtx
Secondary vertex.
Definition: TrackingPrimitives.h:572
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
error::ImpactPoint3dEstimatorProblem
Definition: IImpactPoint3dEstimator.h:72
Trk::LinkToXAODTrackParticle
Element link to XAOD TrackParticle.
Definition: LinkToXAODTrackParticle.h:33
xAOD::VxType::KinkVtx
@ KinkVtx
Kink vertex.
Definition: TrackingPrimitives.h:576
InDet::InDetAdaptiveMultiSecVtxFinderTool::m_privtx
Amg::Vector3D m_privtx
Definition: InDetAdaptiveMultiSecVtxFinderTool.h:102
Trk::ParametersBase
Definition: ParametersBase.h:55
jobOption.theta
theta
Definition: jobOption.ParticleGun_fwd_sequence.py:13
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
Trk::d0
@ d0
Definition: ParamDefs.h:63
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
SG::AuxElement::makePrivateStore
void makePrivateStore()
Create a new (empty) private store for this object.
Definition: AuxElement.cxx:192
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
IDTPM::chiSquared
float chiSquared(const U &p)
Definition: TrackParametersHelper.h:128
InDet::InDetAdaptiveMultiSecVtxFinderTool::m_trkFilter
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkFilter
Definition: InDetAdaptiveMultiSecVtxFinderTool.h:91
xAOD::Vertex_v1::numberDoF
float numberDoF() const
Returns the number of degrees of freedom of the vertex fit as float.
InDet::InDetAdaptiveMultiSecVtxFinderTool::m_SeedFinder
ToolHandle< Trk::IVertexSeedFinder > m_SeedFinder
Definition: InDetAdaptiveMultiSecVtxFinderTool.h:94
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
xAOD::Vertex_v1::chiSquared
float chiSquared() const
Returns the of the vertex fit as float.
y
#define y
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
InDet::InDetAdaptiveMultiSecVtxFinderTool::m_ImpactPoint3dEstimator
ToolHandle< Trk::IImpactPoint3dEstimator > m_ImpactPoint3dEstimator
Definition: InDetAdaptiveMultiSecVtxFinderTool.h:95
DeMoScan.first
bool first
Definition: DeMoScan.py:536
InDet::InDetAdaptiveMultiSecVtxFinderTool::m_significanceCutSeeding
DoubleProperty m_significanceCutSeeding
Definition: InDetAdaptiveMultiSecVtxFinderTool.h:99
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:67
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
Trk::phi
@ phi
Definition: ParamDefs.h:75
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
xAOD::Vertex_v1::vxTrackAtVertex
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
Definition: Vertex_v1.cxx:181
get_generator_info.error
error
Definition: get_generator_info.py:40
error
Definition: IImpactPoint3dEstimator.h:70
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
xAOD::VxType::NotSpecified
@ NotSpecified
Default value, no explicit type set.
Definition: TrackingPrimitives.h:577
xAOD::Vertex_v1::setCovariancePosition
void setCovariancePosition(const AmgSymMatrix(3)&covariancePosition)
Sets the vertex covariance matrix.
Trk::MvfFitInfo
Definition: MvfFitInfo.h:40
InDet::InDetAdaptiveMultiSecVtxFinderTool::removeClosestTrack
void removeClosestTrack(Amg::Vector3D &seedVertex, std::vector< Trk::ITrackLink * > &seedTracks, int &nFound) const
Definition: InDetAdaptiveMultiSecVtxFinderTool.cxx:578