ATLAS Offline Software
Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
InDet::InDetIterativePriVxFinderTool Class Referencefinal

#include <InDetIterativePriVxFinderTool.h>

Inheritance diagram for InDet::InDetIterativePriVxFinderTool:
Collaboration diagram for InDet::InDetIterativePriVxFinderTool:

Public Member Functions

 InDetIterativePriVxFinderTool (const std::string &t, const std::string &n, const IInterface *p)
 Constructor. More...
 
virtual ~InDetIterativePriVxFinderTool ()
 Destructor. More...
 
virtual StatusCode initialize () override
 
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const EventContext &ctx, const TrackCollection *trackTES) const override
 Finding method for Trk::Track collection. More...
 
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const EventContext &ctx, const xAOD::TrackParticleContainer *trackParticles) const override
 Finding method for TrackParticle collection. More...
 
virtual StatusCode finalize () override
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Static Public Member Functions

static const InterfaceID & interfaceID ()
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const EventContext &ctx, const std::vector< Trk::ITrackLink * > &trackVector) const
 
void removeCompatibleTracks (xAOD::Vertex *myxAODVertex, std::vector< const Trk::TrackParameters * > &perigeesToFit, std::vector< Trk::ITrackLink * > &seedTracks) const
 
void removeAllFrom (std::vector< const Trk::TrackParameters * > &perigeesToFit, std::vector< Trk::ITrackLink * > &seedTracks) const
 
double compatibility (const Trk::TrackParameters &measPerigee, const xAOD::Vertex &vertex) const
 
void printParameterSettings ()
 Internal method to print the parameters setting. More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Static Private Member Functions

static void countTracksAndNdf (xAOD::Vertex *myxAODVertex, double &ndf, int &ntracks)
 

Private Attributes

ToolHandle< Trk::IVertexFitterm_iVertexFitter
 
ToolHandle< InDet::IInDetTrackSelectionToolm_trkFilter
 
ToolHandle< Trk::IVertexSeedFinderm_SeedFinder
 
ToolHandle< Trk::IImpactPoint3dEstimatorm_ImpactPoint3dEstimator
 
ToolHandle< Trk::IVertexLinearizedTrackFactorym_LinearizedTrackFactory
 
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey
 
BooleanProperty m_useBeamConstraint {this, "useBeamConstraint", false}
 
DoubleProperty m_significanceCutSeeding {this, "significanceCutSeeding", 10.}
 
DoubleProperty m_maximumChi2cutForSeeding {this, "maximumChi2cutForSeeding", 36.}
 
IntegerProperty m_maxVertices {this, "maxVertices", 25}
 
BooleanProperty m_createSplitVertices {this, "createSplitVertices", false}
 
IntegerProperty m_splitVerticesTrkInvFraction {this, "splitVerticesTrkInvFraction", 2, "inverse fraction to split tracks (1:N)"}
 
BooleanProperty m_reassignTracksAfterFirstFit {this, "reassignTracksAfterFirstFit", false}
 
BooleanProperty m_doMaxTracksCut {this, "doMaxTracksCut", false}
 
UnsignedIntegerProperty m_maxTracks {this, "MaxTracks", 5000}
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Author
Giacinto Piacquadio (Freiburg University)

This class provides an implementation for a primary vertex finding tool, which uses the Adaptive Vertex Fitter to reject outliers not belonging to the primary vertex interaction.


Changes:

David Shope david.nosp@m..ric.nosp@m.hard..nosp@m.shop.nosp@m.e@cer.nosp@m.n.ch (2016-04-26)

EDM Migration to xAOD - from Trk::VxCandidate to xAOD::Vertex

findVertex will now always return an xAOD::VertexContainer, even when using a TrackCollection or a TrackParticleBaseCollection as input.

Dave Casper dcasp.nosp@m.er@u.nosp@m.ci.ed.nosp@m.u (2018-03-28) Migrate beam spot service to conditions handle

Definition at line 68 of file InDetIterativePriVxFinderTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ InDetIterativePriVxFinderTool()

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

Constructor.

Definition at line 58 of file InDetIterativePriVxFinderTool.cxx.

60 {
62  ATH_MSG_FATAL(" Split vertices cannot be obtained if beam spot constraint "
63  "is true! Change settings...");
64  return StatusCode::FAILURE;
65  }

◆ ~InDetIterativePriVxFinderTool()

InDet::InDetIterativePriVxFinderTool::~InDetIterativePriVxFinderTool ( )
virtualdefault

Destructor.

Member Function Documentation

◆ compatibility()

double InDet::InDetIterativePriVxFinderTool::compatibility ( const Trk::TrackParameters measPerigee,
const xAOD::Vertex vertex 
) const
private

Definition at line 824 of file InDetIterativePriVxFinderTool.cxx.

846 {
847  // remove all perigeesToFit and go on...
848 
849  std::vector<Trk::ITrackLink*>::iterator seedBegin = seedTracks.begin();
850  std::vector<Trk::ITrackLink*>::iterator seedEnd = seedTracks.end();
851 

◆ countTracksAndNdf()

void InDet::InDetIterativePriVxFinderTool::countTracksAndNdf ( xAOD::Vertex myxAODVertex,
double &  ndf,
int &  ntracks 
)
staticprivate

Definition at line 894 of file InDetIterativePriVxFinderTool.cxx.

900  {
901  if ((*tracksIter).weight() > 0.01) {
902  ntracks += 1;
903  }
904  }
905  }
906 }
907 
908 void
910  xAOD::Vertex* myxAODVertex,
911  std::vector<const Trk::TrackParameters*>& perigeesToFit,
912  std::vector<Trk::ITrackLink*>& seedTracks) const
913 {
914  // now you have your new vertex with its new tracks
915  // now you have to get the compatibility also of all tracks which DIDN'T
916  // BELONG to the vertex!
917  std::vector<Trk::VxTrackAtVertex>* tracksAtVertex =

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ finalize()

StatusCode InDet::InDetIterativePriVxFinderTool::finalize ( )
overridevirtual

Definition at line 809 of file InDetIterativePriVxFinderTool.cxx.

◆ findVertex() [1/3]

std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > InDet::InDetIterativePriVxFinderTool::findVertex ( const EventContext &  ctx,
const std::vector< Trk::ITrackLink * > &  trackVector 
) const
private

Definition at line 235 of file InDetIterativePriVxFinderTool.cxx.

248  {
249  ATH_MSG_WARNING(trackVector.size()
250  << " tracks - exceeds maximum (" << m_maxTracks
251  << "), skipping vertexing and returning only dummy...");
252  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
253  theVertexContainer->push_back(
254  dummyxAODVertex); // have to add vertex to container here first so it can
255  // use its aux store
256  dummyxAODVertex->setPosition(beamSpot->beamVtx().position());
257  dummyxAODVertex->setCovariancePosition(
258  beamSpot->beamVtx().covariancePosition());
259  dummyxAODVertex->vxTrackAtVertex() = std::vector<Trk::VxTrackAtVertex>();
260  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
261  return std::make_pair(theVertexContainer, theVertexAuxContainer);
262  }
263 
264  int iterations = 0;
265  unsigned int seedtracknumber = seedTracks.size();
266 
267  // used to store seed info
268  Amg::Vector3D actualVertex;
269 
270  // prepare iterators for tracks only necessary for seeding
273 
274  do {
275 
276  seedBegin = seedTracks.begin();
277  seedEnd = seedTracks.end();
278 
279  if (seedtracknumber == 0) {
280  ATH_MSG_DEBUG(" New iteration. No tracks available after track selection "
281  "for seeding. No finding done.");
282  break;
283  }
284 
285  ATH_MSG_DEBUG("ITERATION NUMBER " << iterations);
286 
287  // now find a new SEED
288 
289  std::vector<const Trk::TrackParameters*> perigeeList;
290  for (std::vector<Trk::ITrackLink*>::iterator seedtrkAtVtxIter = seedBegin;
291  seedtrkAtVtxIter != seedEnd;
292  ++seedtrkAtVtxIter) {
293  perigeeList.push_back((*seedtrkAtVtxIter)->parameters());
294  }
295 
296  xAOD::Vertex theconstraint;
297  if (m_useBeamConstraint && beamSpot != nullptr) {
298  theconstraint =
299  xAOD::Vertex(); // Default constructor creates a private store
300  theconstraint.setPosition(beamSpot->beamVtx().position());
301  theconstraint.setCovariancePosition(
302  beamSpot->beamVtx().covariancePosition());
303  theconstraint.setFitQuality(
304  beamSpot->beamVtx().fitQuality().chiSquared(),
305  beamSpot->beamVtx().fitQuality().doubleNumberDoF());
306  actualVertex = m_SeedFinder->findSeed(perigeeList, &theconstraint);
307  } else {
308  actualVertex = m_SeedFinder->findSeed(perigeeList);
309  Amg::MatrixX looseConstraintCovariance(3, 3);
310  looseConstraintCovariance.setIdentity();
311  looseConstraintCovariance = looseConstraintCovariance * 1e+8;
312  theconstraint = xAOD::Vertex();
313  theconstraint.setPosition(actualVertex);
314  theconstraint.setCovariancePosition(looseConstraintCovariance);
315  theconstraint.setFitQuality(0., -3.);
316  }
317 
318  if (msgLvl(MSG::DEBUG)) {
319  msg(MSG::DEBUG) << " seed at x: " << actualVertex.x()
320  << " at y: " << actualVertex.y()
321  << " at z: " << actualVertex.z() << endmsg;
322  }
323 
324  if (actualVertex.z() == 0.) {
325  break;
326  }
327 
328  // now question (remove tracks which are too far away??? I think so...)
329  std::vector<const Trk::TrackParameters*> perigeesToFit;
330  std::vector<const Trk::TrackParameters*> perigeesToFitSplitVertex;
331 
332  int numberOfTracks(perigeeList.size());
333 
334  std::vector<const Trk::TrackParameters*>::const_iterator perigeeListBegin =
335  perigeeList.begin();
336  std::vector<const Trk::TrackParameters*>::const_iterator perigeeListEnd =
337  perigeeList.end();
338 
339  int counter = 0;
340 
341  for (std::vector<const Trk::TrackParameters*>::const_iterator
342  perigeeListIter = perigeeListBegin;
343  perigeeListIter != perigeeListEnd;
344  ++perigeeListIter) {
345  if (numberOfTracks <= 2) {
346  perigeesToFit.push_back(*perigeeListIter);
347  counter += 1;
348  } else if (numberOfTracks <= 4 && !m_createSplitVertices) {
349  perigeesToFit.push_back(*perigeeListIter);
350  counter += 1;
351  } else if (numberOfTracks <= 4 * m_splitVerticesTrkInvFraction &&
353  // few tracks are left, put them into the fit regardless their position!
355  perigeesToFit.push_back(*perigeeListIter);
356  counter += 1;
357  } else {
358  perigeesToFitSplitVertex.push_back(*perigeeListIter);
359  counter += 1;
360  }
361  } else { // check first whether it is not too far away!
362  double distance = 0.;
363  try {
364  std::unique_ptr<Trk::PlaneSurface> mySurface =
365  m_ImpactPoint3dEstimator->Estimate3dIP(
366  *perigeeListIter, &actualVertex, distance);
368  msg(MSG::WARNING) << " ImpactPoint3dEstimator failed to find minimum "
369  "distance between track and vertex seed: "
370  << err.p << endmsg;
371  }
372 
373  if (distance < 0) {
374  msg(MSG::WARNING)
375  << " Distance between track and seed vtx is negative: " << distance
376  << endmsg;
377  }
378 
379  const Trk::TrackParameters* myPerigee = (*perigeeListIter);
380 
381  // very approximate error
382  double error = 0.;
383 
384  if (myPerigee && myPerigee->covariance()) {
385  error = std::sqrt((*myPerigee->covariance())(Trk::d0, Trk::d0) +
386  (*myPerigee->covariance())(Trk::z0, Trk::z0));
387  } // end of the security check
388 
389  if (error == 0.) {
390  msg(MSG::ERROR) << " Error is zero! " << distance << endmsg;
391  error = 1.;
392  }
393 
397  perigeesToFit.push_back(*perigeeListIter);
398  counter += 1;
399  } else {
400  perigeesToFitSplitVertex.push_back(*perigeeListIter);
401  counter += 1;
402  }
403  }
404  }
405  }
406 
407  if (perigeesToFit.empty()) {
408  ATH_MSG_DEBUG(" No good seed found. Exiting search for vertices...");
409  break;
410  }
411 
412  // now you have perigeeToFit and perigeeToFitSplitVertices
413  // AND HERE YOU DO THE FIT
414  // to reassign vertices you look ino what is already in myVxCandidate
415  // you do it only ONCE!
416 
417  xAOD::Vertex* myxAODVertex = nullptr;
418  xAOD::Vertex* myxAODSplitVertex = nullptr;
419 
420  if (m_useBeamConstraint && !perigeesToFit.empty()) {
421  myxAODVertex = m_iVertexFitter->fit(perigeesToFit, theconstraint);
422  } else if (!m_useBeamConstraint && perigeesToFit.size() > 1) {
423  myxAODVertex = m_iVertexFitter->fit(perigeesToFit);
424  }
425  if (m_createSplitVertices && perigeesToFitSplitVertex.size() > 1) {
426  myxAODSplitVertex = m_iVertexFitter->fit(perigeesToFitSplitVertex);
427  }
428 
429  double ndf = 0.;
430  int ntracks = 0;
431  countTracksAndNdf(myxAODVertex, ndf, ntracks);
432 
433  double ndfSplitVertex = 0.;
434  int ntracksSplitVertex = 0;
435  countTracksAndNdf(myxAODSplitVertex, ndfSplitVertex, ntracksSplitVertex);
436 
437  bool goodVertex = myxAODVertex != nullptr &&
438  ((!m_useBeamConstraint && ndf > 0 && ntracks >= 2) ||
439  (m_useBeamConstraint && ndf > 3 && ntracks >= 2));
440 
441  if (msgLvl(MSG::DEBUG)) {
442  msg(MSG::DEBUG) << " xAOD::Vertex is pointer: " << myxAODVertex
443  << " ndf = " << ndf << " ntracks (with weight>0.01) "
444  << ntracks << " beam constraint "
445  << (m_useBeamConstraint ? "yes" : "no") << endmsg;
446  }
447 
448  if (!goodVertex) {
449  removeAllFrom(perigeesToFit, seedTracks);
450  } else {
452  // now you HAVE a good vertex
453  // but you want to add the tracks which you missed...
454 
455  int numberOfAddedTracks = 0;
456 
457  // iterate on remaining vertices and cross-check if tracks need to be
458  // attached to new vertex
459  xAOD::VertexContainer::iterator vxBegin = theVertexContainer->begin();
460  xAOD::VertexContainer::iterator vxEnd = theVertexContainer->end();
461 
462  for (xAOD::VertexContainer::iterator vxIter = vxBegin; vxIter != vxEnd;
463  ++vxIter) {
464  // now iterate on tracks at vertex
465 
466  std::vector<Trk::VxTrackAtVertex>* myVxTracksAtVtx =
467  (&(*vxIter)->vxTrackAtVertex());
468 
469  if (!myVxTracksAtVtx)
470  continue;
471 
473  myVxTracksAtVtx->begin();
475  myVxTracksAtVtx->end();
476 
478  tracksBegin;
479  tracksIter != tracksEnd;) {
480  // only try with tracks which are not too tightly assigned to
481  // another vertex
482  if ((*tracksIter).weight() > 0.01) {
483  ++tracksIter;
484  continue;
485  }
486 
487  const Trk::TrackParameters* trackPerigee =
488  (*tracksIter).initialPerigee();
489 
490  if (trackPerigee == nullptr) {
491  ATH_MSG_ERROR("Cast to perigee gives null pointer");
492  return std::make_pair(theVertexContainer, theVertexAuxContainer);
493  }
494 
495  double chi2_newvtx = compatibility(*trackPerigee, *myxAODVertex);
496  double chi2_oldvtx = compatibility(*trackPerigee, *(*vxIter));
497 
498  bool remove = false;
499 
500  if (chi2_newvtx < chi2_oldvtx) {
501  ATH_MSG_DEBUG(" Found track of old vertex (chi2= "
502  << chi2_oldvtx
503  << ") more compatible to new one (chi2= "
504  << chi2_newvtx << ")");
505 
506  perigeesToFit.push_back(trackPerigee);
507  // but you need to re-add it to the seedTracks too...
508 
509  bool isFound = false;
510 
512  origTracks.begin();
514  origTracks.end();
515 
516  for (std::vector<Trk::ITrackLink*>::iterator origIter = origBegin;
517  origIter != origEnd;
518  ++origIter) {
519  if ((*origIter)->parameters() == trackPerigee) {
520  isFound = true;
521  seedTracks.push_back(*origIter);
522  break;
523  }
524  }
525  if (!isFound) {
526  ATH_MSG_WARNING(" Cannot find old perigee to re-add back to "
527  "seed tracks... ");
528  }
529 
530  numberOfAddedTracks += 1;
531 
532  remove = true;
533  }
534 
535  if (remove) {
536  // now you have to delete the track from the old vertex...
537  // easy???
538  tracksIter = myVxTracksAtVtx->erase(tracksIter);
539  tracksBegin = myVxTracksAtVtx->begin();
540  tracksEnd = myVxTracksAtVtx->end();
541  } else {
542  ++tracksIter;
543  }
544  } // end of iterating on tracks
545  } // end of iterating on already found vertices in event
546 
547  // now you have to delete the previous xAOD::Vertex, do a new fit, then
548  // check if you still have a good vertex
549 
550  if (numberOfAddedTracks > 0) {
551  delete myxAODVertex;
552  myxAODVertex = nullptr;
553 
554  if (m_useBeamConstraint && !perigeesToFit.empty()) {
555  myxAODVertex = m_iVertexFitter->fit(perigeesToFit, theconstraint);
556  } else if (!m_useBeamConstraint && perigeesToFit.size() > 1) {
557  myxAODVertex = m_iVertexFitter->fit(perigeesToFit);
558  }
559 
560  ndf = 0.;
561  ntracks = 0;
562  countTracksAndNdf(myxAODVertex, ndf, ntracks);
563 
564  goodVertex = myxAODVertex != nullptr &&
565  ((!m_useBeamConstraint && ndf > 0 && ntracks >= 2) ||
566  (m_useBeamConstraint && ndf > 3 && ntracks >= 2));
567 
568  ATH_MSG_DEBUG(" Refitted xAODVertex is pointer: "
569  << myxAODVertex << " ndf = " << ndf
570  << " ntracks (with weight>0.01) " << ntracks
571  << " beam constraint "
572  << (m_useBeamConstraint ? "yes" : "no"));
573 
574  if (!goodVertex) {
575  removeAllFrom(perigeesToFit, seedTracks);
576  ATH_MSG_DEBUG(" Adding tracks resulted in an invalid vertex. "
577  "Should be rare. ");
578  }
579  } // end if tracks were added...
580  } // end reassign tracks from previous vertices and refitting if needed
581 
582  // need to re-ask goodVertex since it can be changed in the mean time
583  if (goodVertex) {
584  removeCompatibleTracks(myxAODVertex, perigeesToFit, seedTracks);
585  }
586  } // end else case on if not good Vertex
587 
588  bool goodSplitVertex = false;
589 
590  if (m_createSplitVertices) {
591  goodSplitVertex = myxAODSplitVertex != nullptr && ndfSplitVertex > 0 &&
592  ntracksSplitVertex >= 2;
593 
594  ATH_MSG_DEBUG(" xAODSplitVertex is pointer: "
595  << myxAODSplitVertex << " ndf = " << ndfSplitVertex
596  << " ntracks (with weight>0.01) " << ntracksSplitVertex);
597 
598  if (!goodSplitVertex) {
599  removeAllFrom(perigeesToFitSplitVertex, seedTracks);
600  } else {
602  myxAODSplitVertex, perigeesToFitSplitVertex, seedTracks);
603 
604  } // end else if not good Vertex
605  } // end if create split vertices
606 
607  if (!m_createSplitVertices) {
608  if (goodVertex) {
609  theVertexContainer->push_back(myxAODVertex);
610  } else {
611  if (myxAODVertex) {
612  delete myxAODVertex;
613  myxAODVertex = nullptr;
614  }
615  }
616  } else {
617  if (goodVertex) {
618  // type does not seem to be set earlier
619  myxAODVertex->setVertexType(xAOD::VxType::PriVtx);
620  theVertexContainer->push_back(myxAODVertex);
621  } else {
622  if (myxAODVertex) {
623  delete myxAODVertex;
624  myxAODVertex = nullptr;
625  }
626 
627  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
628  theVertexContainer->push_back(
629  dummyxAODVertex); // have to add vertex to container here first so it
630  // can use its aux store
631  dummyxAODVertex->setPosition(beamSpot->beamVtx().position());
632  dummyxAODVertex->setCovariancePosition(
633  beamSpot->beamVtx().covariancePosition());
634  dummyxAODVertex->vxTrackAtVertex() =
635  std::vector<Trk::VxTrackAtVertex>();
636  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
637  }
638  if (goodSplitVertex) {
639  // type does not seem to be set earlier
640  myxAODSplitVertex->setVertexType(xAOD::VxType::PriVtx);
641  theVertexContainer->push_back(myxAODSplitVertex);
642  } else {
643  if (myxAODSplitVertex) {
644  delete myxAODSplitVertex;
645  myxAODSplitVertex = nullptr;
646  }
647 
648  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
649  theVertexContainer->push_back(
650  dummyxAODVertex); // have to add vertex to container here first so it
651  // can use its aux store
652  dummyxAODVertex->setPosition(beamSpot->beamVtx().position());
653  dummyxAODVertex->setCovariancePosition(
654  beamSpot->beamVtx().covariancePosition());
655  dummyxAODVertex->vxTrackAtVertex() =
656  std::vector<Trk::VxTrackAtVertex>();
657  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
658  }
659  }
660 
661  ++iterations;
662  } while (seedTracks.size() > 1 && iterations < m_maxVertices);
663 
664  if (iterations == m_maxVertices) {
665  ATH_MSG_DEBUG("Reached maximum iterations, have "<<iterations<<" vertices");
666  }
667  else if (iterations > m_maxVertices) {
668  ATH_MSG_WARNING("Exceeded maximum iterations, have "<<iterations<<" vertices, m_maxVertices = "<<m_maxVertices);
669  }
670 
671  //---- add dummy vertex at the end
672  //------------------------------------------------------//
673  //---- if one or more vertices are already there: let dummy have same position
674  // as primary vertex
675  if (!m_createSplitVertices) {
676  if (!theVertexContainer->empty()) {
677  xAOD::Vertex* primaryVtx = theVertexContainer->front();
678  if (!primaryVtx->vxTrackAtVertex().empty()) {
680  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
681  theVertexContainer->push_back(
682  dummyxAODVertex); // have to add vertex to container here first so it
683  // can use its aux store
684  dummyxAODVertex->setPosition(primaryVtx->position());
685  dummyxAODVertex->setCovariancePosition(
686  primaryVtx->covariancePosition());
687  dummyxAODVertex->vxTrackAtVertex() =
688  std::vector<Trk::VxTrackAtVertex>();
689  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
690  } else {
691  primaryVtx->setVertexType(xAOD::VxType::NoVtx);
692  }
693  }
694  //---- if no vertex is there let dummy be at beam spot
695 
696  else if (theVertexContainer->empty()) {
697  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
698  theVertexContainer->push_back(
699  dummyxAODVertex); // have to add vertex to container here first so it
700  // can use its aux store
701  dummyxAODVertex->setPosition(beamSpot->beamVtx().position());
702  dummyxAODVertex->setCovariancePosition(
703  beamSpot->beamVtx().covariancePosition());
704  dummyxAODVertex->vxTrackAtVertex() = std::vector<Trk::VxTrackAtVertex>();
705  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
706  }
707  // loop over the pile up to set it as pile up (EXCLUDE first and last
708  // vertex, do not do that in split mode)
709  for (unsigned int i = 0; i < theVertexContainer->size() - 1; i++) {
710 
712  " Vtx: " << i << " x= " << (*theVertexContainer)[i]->position().x()
713  << " y= " << (*theVertexContainer)[i]->position().y() << " z= "
714  << (*theVertexContainer)[i]->position().z() << " ntracks= "
715  << (*theVertexContainer)[i]->vxTrackAtVertex().size()
716  << " chi2= " << (*theVertexContainer)[i]->chiSquared()
717  << " ndf = " << (*theVertexContainer)[i]->numberDoF());
718  if (i > 0) {
719  (*theVertexContainer)[i]->setVertexType(xAOD::VxType::PileUp);
720  }
721  }
722  }
723 
724  xAOD::VertexContainer::iterator vxBegin = theVertexContainer->begin();
725  xAOD::VertexContainer::iterator vxEnd = theVertexContainer->end();
726 
727  // prepare iterators for tracks only necessary for seeding
728  std::vector<Trk::ITrackLink*>::iterator origtrkbegin = origTracks.begin();
729  std::vector<Trk::ITrackLink*>::iterator origtrkend = origTracks.end();
730 
731  for (xAOD::VertexContainer::iterator vxIter = vxBegin; vxIter != vxEnd;
732  ++vxIter) {
733  std::vector<Trk::VxTrackAtVertex>* myVxTracksAtVtx =
734  &((*vxIter)->vxTrackAtVertex());
735 
736  if (!myVxTracksAtVtx)
737  continue;
738 
740  myVxTracksAtVtx->begin();
742  myVxTracksAtVtx->end();
743 
744  bool found = false;
745 
746  for (std::vector<Trk::VxTrackAtVertex>::iterator tracksIter = tracksBegin;
747  tracksIter != tracksEnd;
748  ++tracksIter) {
749 
750  // now look for corresponding ITrackLink
751  for (std::vector<Trk::ITrackLink*>::iterator origtrkiter = origtrkbegin;
752  origtrkiter != origtrkend;
753  ++origtrkiter) {
754  if ((*origtrkiter)->parameters() == (*tracksIter).initialPerigee()) {
755  found = true;
756 
757  // assigning the input track to the fitted vertex through
758  // VxTrackAtVertices vector
759  (*tracksIter).setOrigTrack(*origtrkiter);
760 
761  // See if the trklink is to an xAOD::TrackParticle
762  Trk::LinkToXAODTrackParticle* linkToXAODTP = nullptr;
763  Trk::ITrackLink* tmpLink = (*tracksIter).trackOrParticleLink();
764  if (tmpLink->type() == Trk::ITrackLink::ToxAODTrackParticle) {
765  linkToXAODTP = static_cast<Trk::LinkToXAODTrackParticle*>(tmpLink);
766  }
767 
768  // If track is an xAOD::TrackParticle, set directly in xAOD::Vertex
769  if (linkToXAODTP) {
770  (*vxIter)->addTrackAtVertex(*linkToXAODTP, (*tracksIter).weight());
771  }
772 
773  origTracks.erase(origtrkiter);
774  origtrkbegin = origTracks.begin();
775  origtrkend = origTracks.end();
776  break;
777  }
778  }
779  if (!found) {
780  ATH_MSG_ERROR(" Cannot find vector element to fix links (step 4)! ");
781  }
782  } // end iterate on tracks at vtx
783  } // end iterate on vertices
784 
785  for (std::vector<Trk::ITrackLink*>::iterator origtrkiter = origtrkbegin;
786  origtrkiter != origtrkend;
787  ++origtrkiter) {
788  if ((*origtrkiter) != 0) {
789  delete *origtrkiter;
790  *origtrkiter = 0;
791  }
792  }
793 
794  return std::make_pair(theVertexContainer, theVertexAuxContainer);
795 }
796 
799 {
800  return StatusCode::SUCCESS;
801 }
802 
803 void
805 {
806  ATH_MSG_DEBUG("VxPrimary initialize(): Parametersettings "

◆ findVertex() [2/3]

std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > InDet::InDetIterativePriVxFinderTool::findVertex ( const EventContext &  ctx,
const TrackCollection trackTES 
) const
overridevirtual

Finding method for Trk::Track collection.

Implements InDet::IVertexFinder.

Definition at line 130 of file InDetIterativePriVxFinderTool.cxx.

135  {
136 
137  if (m_useBeamConstraint && beamSpot != nullptr) {
138  Trk::RecVertex beamPosition{ beamSpot->beamVtx() };
139  selectionPassed =
140  static_cast<bool>(m_trkFilter->accept(**itr, &beamPosition));
141  } else {
142  Trk::Vertex null(Amg::Vector3D(0, 0, 0));
143  selectionPassed = static_cast<bool>(m_trkFilter->accept(**itr, &null));
144  }
145  if (selectionPassed) {
147  link.setElement(*itr);
148  Trk::LinkToTrack* linkTT = new Trk::LinkToTrack(link);
149  linkTT->setStorableObject(*trackTES);
150  selectedTracks.push_back(linkTT);
151  }
152  }
153 
154  ATH_MSG_DEBUG("Of " << trackTES->size() << " tracks " << selectedTracks.size()
155  << " survived the preselection.");
156 
157  std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
158  returnContainers = findVertex(ctx, selectedTracks);
159 
160  return returnContainers;
161 }
162 
163 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
165  const EventContext& ctx,
166  const xAOD::TrackParticleContainer* trackParticles) const
167 {
168  ATH_MSG_DEBUG(" Number of input tracks before track selection: "
169  << trackParticles->size());
170 
172  const InDet::BeamSpotData* beamSpot = *beamSpotHandle;

◆ findVertex() [3/3]

std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > InDet::InDetIterativePriVxFinderTool::findVertex ( const EventContext &  ctx,
const xAOD::TrackParticleContainer trackParticles 
) const
overridevirtual

Finding method for TrackParticle collection.

Implements InDet::IVertexFinder.

Definition at line 175 of file InDetIterativePriVxFinderTool.cxx.

182  {
183 
184  if (m_useBeamConstraint && beamSpot != nullptr) {
185  xAOD::Vertex beamPosition;
186  beamPosition.makePrivateStore();
187  beamPosition.setPosition(beamSpot->beamVtx().position());
188  beamPosition.setCovariancePosition(
189  beamSpot->beamVtx().covariancePosition());
190  selectionPassed =
191  static_cast<bool>(m_trkFilter->accept(**itr, &beamPosition));
192  } else {
193 
194  xAOD::Vertex null;
195  null.makePrivateStore();
196  null.setPosition(Amg::Vector3D(0, 0, 0));
197  AmgSymMatrix(3) vertexError;
198  vertexError.setZero();
199  null.setCovariancePosition(vertexError);
200  selectionPassed = static_cast<bool>(m_trkFilter->accept(**itr, &null));
201  }
202 
203  if (selectionPassed) {
205  link.setElement(*itr);
208  linkTT->setStorableObject(*trackParticles);
209  selectedTracks.push_back(linkTT);
210  }
211  }
212 
213  ATH_MSG_DEBUG("Of " << trackParticles->size() << " tracks "
214  << selectedTracks.size()
215  << " survived the preselection.");
216 
217  std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
218  returnContainers = findVertex(ctx, selectedTracks);
219 
220  return returnContainers;
221 }
222 
223 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*>
225  const EventContext& ctx,
226  const std::vector<Trk::ITrackLink*>& trackVector) const
227 {
229  const InDet::BeamSpotData* beamSpot = *beamSpotHandle;
230  // two things need to be added
231  // 1) the seeding mechanism
232  // 2) the iterative removal of tracks

◆ initialize()

StatusCode InDet::InDetIterativePriVxFinderTool::initialize ( )
overridevirtual

Definition at line 70 of file InDetIterativePriVxFinderTool.cxx.

73  {
74  ATH_MSG_FATAL("Failed to retrieve tool " << m_SeedFinder);
75  return StatusCode::FAILURE;
76  }
77 
78  if (m_LinearizedTrackFactory.retrieve().isFailure()) {
79  ATH_MSG_FATAL("Failed to retrieve tool " << m_LinearizedTrackFactory);
80  return StatusCode::FAILURE;
81  }
82 
83  if (m_ImpactPoint3dEstimator.retrieve().isFailure()) {
84  ATH_MSG_FATAL("Failed to retrieve tool " << m_ImpactPoint3dEstimator);
85  return StatusCode::FAILURE;
86  }
87 
89 
90  if (m_trkFilter.retrieve().isFailure()) {
91  ATH_MSG_ERROR(" Unable to retrieve " << m_trkFilter);
92  return StatusCode::FAILURE;
93  }
94 
95  // since some parameters special to an inherited class this method
96  // will be overloaded by the inherited class
98 
99  return StatusCode::SUCCESS;
100 }
101 
102 namespace {
103 struct xAODVertex_pair
104 {
105  double first;
107  xAODVertex_pair(double p1, xAOD::Vertex* p2)
108  : first(p1)
109  , second(p2)
110  {}
111  bool operator<(const xAODVertex_pair& other) const

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

static const InterfaceID& InDet::IVertexFinder::interfaceID ( )
inlinestaticinherited

Definition at line 73 of file IVertexFinder.h.

◆ msg() [1/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ printParameterSettings()

void InDet::InDetIterativePriVxFinderTool::printParameterSettings ( )
private

Internal method to print the parameters setting.

Definition at line 815 of file InDetIterativePriVxFinderTool.cxx.

816 {
817  Trk::LinearizedTrack* myLinearizedTrack =
818  m_LinearizedTrackFactory->linearizedTrack(&measPerigee, vertex.position());
819 
820  AmgMatrix(2, 2) weightReduced =

◆ removeAllFrom()

void InDet::InDetIterativePriVxFinderTool::removeAllFrom ( std::vector< const Trk::TrackParameters * > &  perigeesToFit,
std::vector< Trk::ITrackLink * > &  seedTracks 
) const
private

Definition at line 854 of file InDetIterativePriVxFinderTool.cxx.

860  {
861 
862  bool found = false;
863 
864  for (std::vector<Trk::ITrackLink*>::iterator seedIter = seedTracks.begin();
865  seedIter != seedEnd;
866  ++seedIter) {
867  if ((*seedIter)->parameters() == *perigeesToFitIter) {
868  found = true;
869  seedTracks.erase(seedIter);
870  seedBegin = seedTracks.begin();
871  seedEnd = seedTracks.end();
872  break;
873  }
874  }
875  if (!found) {
877  " Cannot find vector element to delete when removing BAD vertex! ");
878  }
879  } // for cycle
880 }
881 
882 void
884  double& ndf,
885  int& ntracks)
886 {
887  if (myxAODVertex) {
888  ndf = myxAODVertex->numberDoF();
889 
890  std::vector<Trk::VxTrackAtVertex> myVxTracksAtVtx =
891  myxAODVertex->vxTrackAtVertex();

◆ removeCompatibleTracks()

void InDet::InDetIterativePriVxFinderTool::removeCompatibleTracks ( xAOD::Vertex myxAODVertex,
std::vector< const Trk::TrackParameters * > &  perigeesToFit,
std::vector< Trk::ITrackLink * > &  seedTracks 
) const
private

Definition at line 920 of file InDetIterativePriVxFinderTool.cxx.

936  {
937 
938  bool found = false;
939 
940  for (std::vector<Trk::ITrackLink*>::iterator seedIter = seedBegin;
941  seedIter != seedEnd;
942  ++seedIter) {
943  if ((*seedIter)->parameters() == (*tracksAtVertexIter).initialPerigee()) {
944  found = true;
945  if ((*tracksAtVertexIter).weight() > 0.01) {
946  seedTracks.erase(seedIter);
947  seedBegin = seedTracks.begin();
948  seedEnd = seedTracks.end();
949  }
950  break;
951  }
952  }
953 
954  if (!found) {
955  ATH_MSG_ERROR(" Cannot find vector element to delete (step 1)! ");
956  }
957 
958  found = false;
960  perigeesToFitBegin;
961  perigeesToFitIter != perigeesToFitEnd;
962  ++perigeesToFitIter) {
963  if (*perigeesToFitIter == (*tracksAtVertexIter).initialPerigee()) {
964  found = true;
965  if ((*tracksAtVertexIter).weight() > 0.01) {
966  perigeesToFit.erase(perigeesToFitIter);
967  perigeesToFitBegin = perigeesToFit.begin();
968  perigeesToFitEnd = perigeesToFit.end();
969  }
970  break;
971  }
972  }
973 
974  if (!found) {
975  ATH_MSG_ERROR(" Cannot find vector element to delete (step 2)! ");
976  }
977  } // finishing iterating on tracks at vertex
978 
979  std::vector<Trk::VxTrackAtVertex>* myVxTracksAtVertex =
980  &(myxAODVertex->vxTrackAtVertex());
981 
983  myVxTracksAtVertex->begin();
985  myVxTracksAtVertex->end();
986 
988  perigeesToFitBegin;
989  perigeesToFitIter != perigeesToFitEnd;
990  ++perigeesToFitIter) {
991  bool found = false;
992 
993  // compute the chi2 with respect to the last fitted vertex!
994  //(easy since track was NOT used in the last vertex fit...)
995 
996  const Trk::TrackParameters* myPerigee = (*perigeesToFitIter);
997 
998  if (myPerigee == nullptr) {
999  ATH_MSG_ERROR(" nullptr to perigee ");
1000  return;
1001  }
1002 
1003  double chi2 = compatibility(*myPerigee, *myxAODVertex);
1004 
1005  // check if still sufficiently compatible to previous vertex
1006  //(CAN BE VERY LOOSE TO BE CONSERVATIVE AGAINST FAR OUTLIERS)
1009  seedTracks.begin();
1010  seedIter != seedEnd;
1011  ++seedIter) {
1012  if ((*seedIter)->parameters() == *perigeesToFitIter) {
1013  found = true;
1014  seedTracks.erase(seedIter);
1015  seedBegin = seedTracks.begin();
1016  seedEnd = seedTracks.end();
1017  break;
1018  }
1019  }
1020 
1021  if (!found) {
1022  ATH_MSG_ERROR(" Cannot find vector element to delete (step 3)! ");
1023  }
1024  } else {
1025  // look if the track is attached to the vertex. If this is the case you
1026  // should delete the track from the vertex!
1027  for (std::vector<Trk::VxTrackAtVertex>::iterator tracksIter = tracksBegin;
1028  tracksIter != tracksEnd;
1029  ++tracksIter) {
1030  if ((*tracksIter).initialPerigee() == *perigeesToFitIter) {
1031  // delete *tracksIter;
1032  // delete has to happen BEFORE the erase (because the iterator will
1033  // point to the next object in the vector AFTER the erase!)
1034  myVxTracksAtVertex->erase(tracksIter);
1035  tracksBegin = myVxTracksAtVertex->begin();
1036  tracksEnd = myVxTracksAtVertex->end();
1037  found = true;
1038  break;
1039  }
1040  }
1041  }
1042  } // iterate on all perigeesToFit
1043 }
1044 
1045 } // end namespace InDet

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_beamSpotKey

SG::ReadCondHandleKey<InDet::BeamSpotData> InDet::InDetIterativePriVxFinderTool::m_beamSpotKey
private
Initial value:
{
this,
"BeamSpotKey",
"BeamSpotData",
"SG key for beam spot"
}

Definition at line 149 of file InDetIterativePriVxFinderTool.h.

◆ m_createSplitVertices

BooleanProperty InDet::InDetIterativePriVxFinderTool::m_createSplitVertices {this, "createSplitVertices", false}
private

Definition at line 163 of file InDetIterativePriVxFinderTool.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doMaxTracksCut

BooleanProperty InDet::InDetIterativePriVxFinderTool::m_doMaxTracksCut {this, "doMaxTracksCut", false}
private

Definition at line 170 of file InDetIterativePriVxFinderTool.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_ImpactPoint3dEstimator

ToolHandle<Trk::IImpactPoint3dEstimator> InDet::InDetIterativePriVxFinderTool::m_ImpactPoint3dEstimator
private
Initial value:
{
this,
"ImpactPoint3dEstimator",
"Trk::ImpactPoint3dEstimator"
}

Definition at line 137 of file InDetIterativePriVxFinderTool.h.

◆ m_iVertexFitter

ToolHandle<Trk::IVertexFitter> InDet::InDetIterativePriVxFinderTool::m_iVertexFitter
private
Initial value:
{ this,
"VertexFitterTool",
"Trk::AdaptiveVertexFitter" }

Definition at line 125 of file InDetIterativePriVxFinderTool.h.

◆ m_LinearizedTrackFactory

ToolHandle<Trk::IVertexLinearizedTrackFactory> InDet::InDetIterativePriVxFinderTool::m_LinearizedTrackFactory
private
Initial value:
{
this,
"LinearizedTrackFactory",
"Trk::FullLinearizedTrackFactory"
}

Definition at line 143 of file InDetIterativePriVxFinderTool.h.

◆ m_maximumChi2cutForSeeding

DoubleProperty InDet::InDetIterativePriVxFinderTool::m_maximumChi2cutForSeeding {this, "maximumChi2cutForSeeding", 36.}
private

Definition at line 159 of file InDetIterativePriVxFinderTool.h.

◆ m_maxTracks

UnsignedIntegerProperty InDet::InDetIterativePriVxFinderTool::m_maxTracks {this, "MaxTracks", 5000}
private

Definition at line 171 of file InDetIterativePriVxFinderTool.h.

◆ m_maxVertices

IntegerProperty InDet::InDetIterativePriVxFinderTool::m_maxVertices {this, "maxVertices", 25}
private

Definition at line 161 of file InDetIterativePriVxFinderTool.h.

◆ m_reassignTracksAfterFirstFit

BooleanProperty InDet::InDetIterativePriVxFinderTool::m_reassignTracksAfterFirstFit {this, "reassignTracksAfterFirstFit", false}
private

Definition at line 167 of file InDetIterativePriVxFinderTool.h.

◆ m_SeedFinder

ToolHandle<Trk::IVertexSeedFinder> InDet::InDetIterativePriVxFinderTool::m_SeedFinder
private
Initial value:
{ this,
"SeedFinder",
"Trk::ZScanSeedFinder" }

Definition at line 134 of file InDetIterativePriVxFinderTool.h.

◆ m_significanceCutSeeding

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

Definition at line 157 of file InDetIterativePriVxFinderTool.h.

◆ m_splitVerticesTrkInvFraction

IntegerProperty InDet::InDetIterativePriVxFinderTool::m_splitVerticesTrkInvFraction {this, "splitVerticesTrkInvFraction", 2, "inverse fraction to split tracks (1:N)"}
private

Definition at line 164 of file InDetIterativePriVxFinderTool.h.

◆ m_trkFilter

ToolHandle<InDet::IInDetTrackSelectionTool> InDet::InDetIterativePriVxFinderTool::m_trkFilter
private
Initial value:
{
this,
"TrackSelector",
"InDet::InDetTrackSelection"
}

Definition at line 128 of file InDetIterativePriVxFinderTool.h.

◆ m_useBeamConstraint

BooleanProperty InDet::InDetIterativePriVxFinderTool::m_useBeamConstraint {this, "useBeamConstraint", false}
private

Definition at line 156 of file InDetIterativePriVxFinderTool.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
covarianceTool.ndf
ndf
Definition: covarianceTool.py:678
operator<
bool operator<(const DataVector< T > &a, const DataVector< T > &b)
Vector ordering relation.
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
InDet::InDetIterativePriVxFinderTool::m_maxVertices
IntegerProperty m_maxVertices
Definition: InDetIterativePriVxFinderTool.h:161
Trk::Vertex
Definition: Tracking/TrkEvent/VxVertex/VxVertex/Vertex.h:26
xAOD::Vertex_v1::setPosition
void setPosition(const Amg::Vector3D &position)
Sets the 3-position.
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:27
xAOD::Vertex_v1::setFitQuality
void setFitQuality(float chiSquared, float numberDoF)
Set the 'Fit Quality' information.
Definition: Vertex_v1.cxx:150
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition: Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
InDet::InDetIterativePriVxFinderTool::countTracksAndNdf
static void countTracksAndNdf(xAOD::Vertex *myxAODVertex, double &ndf, int &ntracks)
Definition: InDetIterativePriVxFinderTool.cxx:894
CutsMETMaker::accept
StatusCode accept(const xAOD::Muon *mu)
Definition: CutsMETMaker.cxx:18
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
python.SystemOfUnits.second
float second
Definition: SystemOfUnits.py:135
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
Trk::z0
@ z0
Definition: ParamDefs.h:64
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
InDet::InDetIterativePriVxFinderTool::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: InDetIterativePriVxFinderTool.h:149
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
InDet::InDetIterativePriVxFinderTool::m_significanceCutSeeding
DoubleProperty m_significanceCutSeeding
Definition: InDetIterativePriVxFinderTool.h:158
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::InDetIterativePriVxFinderTool::finalize
virtual StatusCode finalize() override
Definition: InDetIterativePriVxFinderTool.cxx:809
x
#define x
xAOD::VxType::NoVtx
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Definition: TrackingPrimitives.h:571
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:50
AmgMatrix
#define AmgMatrix(rows, cols)
Definition: EventPrimitives.h:49
Trk::RecVertex
Trk::RecVertex inherits from Trk::Vertex.
Definition: RecVertex.h:44
InDet::InDetIterativePriVxFinderTool::removeAllFrom
void removeAllFrom(std::vector< const Trk::TrackParameters * > &perigeesToFit, std::vector< Trk::ITrackLink * > &seedTracks) const
Definition: InDetIterativePriVxFinderTool.cxx:854
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
xAOD::VxType::VertexType
VertexType
Vertex types.
Definition: TrackingPrimitives.h:570
PixelModuleFeMask_create_db.remove
string remove
Definition: PixelModuleFeMask_create_db.py:83
xAOD::Vertex_v1::setVertexType
void setVertexType(VxType::VertexType vType)
Set the type of the vertex.
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
TRTCalib_cfilter.p2
p2
Definition: TRTCalib_cfilter.py:131
InDet::InDetIterativePriVxFinderTool::m_createSplitVertices
BooleanProperty m_createSplitVertices
Definition: InDetIterativePriVxFinderTool.h:163
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::InDetIterativePriVxFinderTool::m_reassignTracksAfterFirstFit
BooleanProperty m_reassignTracksAfterFirstFit
Definition: InDetIterativePriVxFinderTool.h:168
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:183
DataModel_detail::iterator
(Non-const) Iterator class for DataVector/DataList.
Definition: DVLIterator.h:184
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
InDet::InDetIterativePriVxFinderTool::m_LinearizedTrackFactory
ToolHandle< Trk::IVertexLinearizedTrackFactory > m_LinearizedTrackFactory
Definition: InDetIterativePriVxFinderTool.h:143
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
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
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
InDet::InDetIterativePriVxFinderTool::m_maximumChi2cutForSeeding
DoubleProperty m_maximumChi2cutForSeeding
Definition: InDetIterativePriVxFinderTool.h:160
error::ImpactPoint3dEstimatorProblem
Definition: IImpactPoint3dEstimator.h:72
InDet::InDetIterativePriVxFinderTool::printParameterSettings
void printParameterSettings()
Internal method to print the parameters setting.
Definition: InDetIterativePriVxFinderTool.cxx:815
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:572
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:525
Trk::LinkToTrack
AUTO - An Undocumented Tracking Object.
Definition: LinkToTrack.h:20
Trk::LinkToXAODTrackParticle
Element link to XAOD TrackParticle.
Definition: LinkToXAODTrackParticle.h:33
InDet::InDetIterativePriVxFinderTool::m_iVertexFitter
ToolHandle< Trk::IVertexFitter > m_iVertexFitter
Definition: InDetIterativePriVxFinderTool.h:125
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
Trk::ParametersBase
Definition: ParametersBase.h:55
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
InDet::InDetIterativePriVxFinderTool::m_useBeamConstraint
BooleanProperty m_useBeamConstraint
Definition: InDetIterativePriVxFinderTool.h:156
xAOD::VxType::PileUp
@ PileUp
Pile-up vertex.
Definition: TrackingPrimitives.h:574
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Trk::d0
@ d0
Definition: ParamDefs.h:63
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
checkTriggerxAOD.found
found
Definition: checkTriggerxAOD.py:328
SG::AuxElement::makePrivateStore
void makePrivateStore()
Create a new (empty) private store for this object.
Definition: AuxElement.cxx:192
InDet::InDetIterativePriVxFinderTool::removeCompatibleTracks
void removeCompatibleTracks(xAOD::Vertex *myxAODVertex, std::vector< const Trk::TrackParameters * > &perigeesToFit, std::vector< Trk::ITrackLink * > &seedTracks) const
Definition: InDetIterativePriVxFinderTool.cxx:920
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
IDTPM::chiSquared
float chiSquared(const U &p)
Definition: TrackParametersHelper.h:128
xAOD::Vertex_v1::numberDoF
float numberDoF() const
Returns the number of degrees of freedom of the vertex fit as float.
InDet::InDetIterativePriVxFinderTool::m_ImpactPoint3dEstimator
ToolHandle< Trk::IImpactPoint3dEstimator > m_ImpactPoint3dEstimator
Definition: InDetIterativePriVxFinderTool.h:137
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
InDet::BeamSpotData
Definition: BeamSpotData.h:21
InDet::InDetIterativePriVxFinderTool::m_SeedFinder
ToolHandle< Trk::IVertexSeedFinder > m_SeedFinder
Definition: InDetIterativePriVxFinderTool.h:134
a
TList * a
Definition: liststreamerinfos.cxx:10
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
y
#define y
h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DeMoScan.first
bool first
Definition: DeMoScan.py:534
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:475
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:801
Trk::PriVtx
@ PriVtx
Primary Vertex.
Definition: VertexType.h:27
xAOD::Vertex_v1::vxTrackAtVertex
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
Definition: Vertex_v1.cxx:181
test_pyathena.counter
counter
Definition: test_pyathena.py:15
InDet::InDetIterativePriVxFinderTool::m_maxTracks
UnsignedIntegerProperty m_maxTracks
Definition: InDetIterativePriVxFinderTool.h:171
InDet::InDetIterativePriVxFinderTool::findVertex
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex(const EventContext &ctx, const TrackCollection *trackTES) const override
Finding method for Trk::Track collection.
Definition: InDetIterativePriVxFinderTool.cxx:130
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
InDet::InDetIterativePriVxFinderTool::compatibility
double compatibility(const Trk::TrackParameters &measPerigee, const xAOD::Vertex &vertex) const
Definition: InDetIterativePriVxFinderTool.cxx:824
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
xAOD::Vertex_v1::setCovariancePosition
void setCovariancePosition(const AmgSymMatrix(3)&covariancePosition)
Sets the vertex covariance matrix.
fitman.k
k
Definition: fitman.py:528
Trk::LinearizedTrack
Definition: LinearizedTrack.h:43
InDet::InDetIterativePriVxFinderTool::m_trkFilter
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkFilter
Definition: InDetIterativePriVxFinderTool.h:128
InDet::InDetIterativePriVxFinderTool::m_splitVerticesTrkInvFraction
IntegerProperty m_splitVerticesTrkInvFraction
Definition: InDetIterativePriVxFinderTool.h:165