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 Reference

#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
 Find vertex from Trk::TrackCollection. More...
 
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const EventContext &ctx, const xAOD::TrackParticleContainer *trackParticles) const override
 Find vertex from xAOD::TrackParticleContainer. More...
 
virtual StatusCode finalize () override
 
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const EventContext &ctx, const TrackCollection *trackTES) const=0
 Finding method. More...
 
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const EventContext &ctx, const xAOD::TrackParticleContainer *trackParticles) const=0
 Finding method. More...
 
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const TrackCollection *trackTES) const
 Finding method. More...
 
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const xAOD::TrackParticleContainer *trackParticles) const
 Finding method. More...
 
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 > &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
 
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const TrackCollection *trackTES) const
 
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex (const xAOD::TrackParticleContainer *trackParticles) 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 SGError (const std::string &errService)
 
virtual void printParameterSettings ()
 Internal method to print the parameters setting. More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &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 830 of file InDetIterativePriVxFinderTool.cxx.

852 {
853  // remove all perigeesToFit and go on...
854 
855  std::vector<Trk::ITrackLink*>::iterator seedBegin = seedTracks.begin();
856  std::vector<Trk::ITrackLink*>::iterator seedEnd = seedTracks.end();
857 

◆ countTracksAndNdf()

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

Definition at line 900 of file InDetIterativePriVxFinderTool.cxx.

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

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  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 > &  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 > &  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 > &  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 > &  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 810 of file InDetIterativePriVxFinderTool.cxx.

814 {

◆ findVertex() [1/9]

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  msg(MSG::ERROR) << " Cast to perigee gives 0 pointer " << endmsg;
492  }
493 
494  double chi2_newvtx = compatibility(*trackPerigee, *myxAODVertex);
495  double chi2_oldvtx = compatibility(*trackPerigee, *(*vxIter));
496 
497  bool remove = false;
498 
499  if (chi2_newvtx < chi2_oldvtx) {
500  ATH_MSG_DEBUG(" Found track of old vertex (chi2= "
501  << chi2_oldvtx
502  << ") more compatible to new one (chi2= "
503  << chi2_newvtx << ")");
504 
505  perigeesToFit.push_back(trackPerigee);
506  // but you need to re-add it to the seedTracks too...
507 
508  bool isFound = false;
509 
511  origTracks.begin();
513  origTracks.end();
514 
515  for (std::vector<Trk::ITrackLink*>::iterator origIter = origBegin;
516  origIter != origEnd;
517  ++origIter) {
518  if ((*origIter)->parameters() == trackPerigee) {
519  isFound = true;
520  seedTracks.push_back(*origIter);
521  break;
522  }
523  }
524  if (!isFound) {
525  ATH_MSG_WARNING(" Cannot find old perigee to re-add back to "
526  "seed tracks... ");
527  }
528 
529  numberOfAddedTracks += 1;
530 
531  remove = true;
532  }
533 
534  if (remove) {
535  // now you have to delete the track from the old vertex...
536  // easy???
537  tracksIter = myVxTracksAtVtx->erase(tracksIter);
538  tracksBegin = myVxTracksAtVtx->begin();
539  tracksEnd = myVxTracksAtVtx->end();
540  } else {
541  ++tracksIter;
542  }
543  } // end of iterating on tracks
544  } // end of iterating on already found vertices in event
545 
546  // now you have to delete the previous xAOD::Vertex, do a new fit, then
547  // check if you still have a good vertex
548 
549  if (numberOfAddedTracks > 0) {
550  delete myxAODVertex;
551  myxAODVertex = nullptr;
552 
553  if (m_useBeamConstraint && !perigeesToFit.empty()) {
554  myxAODVertex = m_iVertexFitter->fit(perigeesToFit, theconstraint);
555  } else if (!m_useBeamConstraint && perigeesToFit.size() > 1) {
556  myxAODVertex = m_iVertexFitter->fit(perigeesToFit);
557  }
558 
559  ndf = 0.;
560  ntracks = 0;
561  countTracksAndNdf(myxAODVertex, ndf, ntracks);
562 
563  goodVertex = myxAODVertex != nullptr &&
564  ((!m_useBeamConstraint && ndf > 0 && ntracks >= 2) ||
565  (m_useBeamConstraint && ndf > 3 && ntracks >= 2));
566 
567  ATH_MSG_DEBUG(" Refitted xAODVertex is pointer: "
568  << myxAODVertex << " ndf = " << ndf
569  << " ntracks (with weight>0.01) " << ntracks
570  << " beam constraint "
571  << (m_useBeamConstraint ? "yes" : "no"));
572 
573  if (!goodVertex) {
574  removeAllFrom(perigeesToFit, seedTracks);
575  ATH_MSG_DEBUG(" Adding tracks resulted in an invalid vertex. "
576  "Should be rare. ");
577  }
578  } // end if tracks were added...
579  } // end reassign tracks from previous vertices and refitting if needed
580 
581  // need to re-ask goodVertex since it can be changed in the mean time
582  if (goodVertex) {
583  removeCompatibleTracks(myxAODVertex, perigeesToFit, seedTracks);
584  }
585  } // end else case on if not good Vertex
586 
587  bool goodSplitVertex = false;
588 
589  if (m_createSplitVertices) {
590  goodSplitVertex = myxAODSplitVertex != nullptr && ndfSplitVertex > 0 &&
591  ntracksSplitVertex >= 2;
592 
593  ATH_MSG_DEBUG(" xAODSplitVertex is pointer: "
594  << myxAODSplitVertex << " ndf = " << ndfSplitVertex
595  << " ntracks (with weight>0.01) " << ntracksSplitVertex);
596 
597  if (!goodSplitVertex) {
598  removeAllFrom(perigeesToFitSplitVertex, seedTracks);
599  } else {
601  myxAODSplitVertex, perigeesToFitSplitVertex, seedTracks);
602 
603  } // end else if not good Vertex
604  } // end if create split vertices
605 
606  if (!m_createSplitVertices) {
607  if (goodVertex) {
608  theVertexContainer->push_back(myxAODVertex);
609  } else {
610  if (myxAODVertex) {
611  delete myxAODVertex;
612  myxAODVertex = nullptr;
613  }
614  }
615  } else {
616  if (goodVertex) {
617  // type does not seem to be set earlier
618  myxAODVertex->setVertexType(xAOD::VxType::PriVtx);
619  theVertexContainer->push_back(myxAODVertex);
620  } else {
621  if (myxAODVertex) {
622  delete myxAODVertex;
623  myxAODVertex = nullptr;
624  }
625 
626  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
627  theVertexContainer->push_back(
628  dummyxAODVertex); // have to add vertex to container here first so it
629  // can use its aux store
630  dummyxAODVertex->setPosition(beamSpot->beamVtx().position());
631  dummyxAODVertex->setCovariancePosition(
632  beamSpot->beamVtx().covariancePosition());
633  dummyxAODVertex->vxTrackAtVertex() =
634  std::vector<Trk::VxTrackAtVertex>();
635  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
636  }
637  if (goodSplitVertex) {
638  // type does not seem to be set earlier
639  myxAODSplitVertex->setVertexType(xAOD::VxType::PriVtx);
640  theVertexContainer->push_back(myxAODSplitVertex);
641  } else {
642  if (myxAODSplitVertex) {
643  delete myxAODSplitVertex;
644  myxAODSplitVertex = nullptr;
645  }
646 
647  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
648  theVertexContainer->push_back(
649  dummyxAODVertex); // have to add vertex to container here first so it
650  // can use its aux store
651  dummyxAODVertex->setPosition(beamSpot->beamVtx().position());
652  dummyxAODVertex->setCovariancePosition(
653  beamSpot->beamVtx().covariancePosition());
654  dummyxAODVertex->vxTrackAtVertex() =
655  std::vector<Trk::VxTrackAtVertex>();
656  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
657  }
658  }
659 
660  ++iterations;
661  } while (seedTracks.size() > 1 && iterations < m_maxVertices);
662 
663  if (iterations == m_maxVertices) {
664  ATH_MSG_DEBUG("Reached maximum iterations, have "<<iterations<<" vertices");
665  }
666  else if (iterations > m_maxVertices) {
667  ATH_MSG_WARNING("Exceeded maximum iterations, have "<<iterations<<" vertices, m_maxVertices = "<<m_maxVertices);
668  }
669 
670  // unfortunately you have still a problem with the track to links!!!
671 
672  //---- add dummy vertex at the end
673  //------------------------------------------------------//
674  //---- if one or more vertices are already there: let dummy have same position
675  // as primary vertex
676  if (!m_createSplitVertices) {
677  if (!theVertexContainer->empty()) {
678  xAOD::Vertex* primaryVtx = theVertexContainer->front();
679  if (!primaryVtx->vxTrackAtVertex().empty()) {
681  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
682  theVertexContainer->push_back(
683  dummyxAODVertex); // have to add vertex to container here first so it
684  // can use its aux store
685  dummyxAODVertex->setPosition(primaryVtx->position());
686  dummyxAODVertex->setCovariancePosition(
687  primaryVtx->covariancePosition());
688  dummyxAODVertex->vxTrackAtVertex() =
689  std::vector<Trk::VxTrackAtVertex>();
690  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
691  } else {
692  primaryVtx->setVertexType(xAOD::VxType::NoVtx);
693  }
694  }
695  //---- if no vertex is there let dummy be at beam spot
696 
697  else if (theVertexContainer->empty()) {
698  xAOD::Vertex* dummyxAODVertex = new xAOD::Vertex;
699  theVertexContainer->push_back(
700  dummyxAODVertex); // have to add vertex to container here first so it
701  // can use its aux store
702  dummyxAODVertex->setPosition(beamSpot->beamVtx().position());
703  dummyxAODVertex->setCovariancePosition(
704  beamSpot->beamVtx().covariancePosition());
705  dummyxAODVertex->vxTrackAtVertex() = std::vector<Trk::VxTrackAtVertex>();
706  dummyxAODVertex->setVertexType(xAOD::VxType::NoVtx);
707  }
708  // loop over the pile up to set it as pile up (EXCLUDE first and last
709  // vertex, do not do that in split mode)
710  for (unsigned int i = 0; i < theVertexContainer->size() - 1; i++) {
711 
713  " Vtx: " << i << " x= " << (*theVertexContainer)[i]->position().x()
714  << " y= " << (*theVertexContainer)[i]->position().y() << " z= "
715  << (*theVertexContainer)[i]->position().z() << " ntracks= "
716  << (*theVertexContainer)[i]->vxTrackAtVertex().size()
717  << " chi2= " << (*theVertexContainer)[i]->chiSquared()
718  << " ndf = " << (*theVertexContainer)[i]->numberDoF());
719  if (i > 0) {
720  (*theVertexContainer)[i]->setVertexType(xAOD::VxType::PileUp);
721  }
722  }
723  }
724 
725  xAOD::VertexContainer::iterator vxBegin = theVertexContainer->begin();
726  xAOD::VertexContainer::iterator vxEnd = theVertexContainer->end();
727 
728  // prepare iterators for tracks only necessary for seeding
729  std::vector<Trk::ITrackLink*>::iterator origtrkbegin = origTracks.begin();
730  std::vector<Trk::ITrackLink*>::iterator origtrkend = origTracks.end();
731 
732  for (xAOD::VertexContainer::iterator vxIter = vxBegin; vxIter != vxEnd;
733  ++vxIter) {
734  std::vector<Trk::VxTrackAtVertex>* myVxTracksAtVtx =
735  &((*vxIter)->vxTrackAtVertex());
736 
737  if (!myVxTracksAtVtx)
738  continue;
739 
741  myVxTracksAtVtx->begin();
743  myVxTracksAtVtx->end();
744 
745  bool found = false;
746 
747  for (std::vector<Trk::VxTrackAtVertex>::iterator tracksIter = tracksBegin;
748  tracksIter != tracksEnd;
749  ++tracksIter) {
750 
751  // now look for corresponding ITrackLink
752  for (std::vector<Trk::ITrackLink*>::iterator origtrkiter = origtrkbegin;
753  origtrkiter != origtrkend;
754  ++origtrkiter) {
755  if ((*origtrkiter)->parameters() == (*tracksIter).initialPerigee()) {
756  found = true;
757 
758  // assigning the input track to the fitted vertex through
759  // VxTrackAtVertices vector
760  (*tracksIter).setOrigTrack(*origtrkiter);
761 
762  // See if the trklink is to an xAOD::TrackParticle
763  Trk::LinkToXAODTrackParticle* linkToXAODTP = nullptr;
764  Trk::ITrackLink* tmpLink = (*tracksIter).trackOrParticleLink();
765  if (tmpLink->type() == Trk::ITrackLink::ToxAODTrackParticle) {
766  linkToXAODTP = static_cast<Trk::LinkToXAODTrackParticle*>(tmpLink);
767  }
768 
769  // If track is an xAOD::TrackParticle, set directly in xAOD::Vertex
770  if (linkToXAODTP) {
771  (*vxIter)->addTrackAtVertex(*linkToXAODTP, (*tracksIter).weight());
772  }
773 
774  origTracks.erase(origtrkiter);
775  origtrkbegin = origTracks.begin();
776  origtrkend = origTracks.end();
777  break;
778  }
779  }
780  if (!found) {
781  ATH_MSG_ERROR(" Cannot find vector element to fix links (step 4)! ");
782  }
783  } // end iterate on tracks at vtx
784  } // end iterate on vertices
785 
786  for (std::vector<Trk::ITrackLink*>::iterator origtrkiter = origtrkbegin;
787  origtrkiter != origtrkend;
788  ++origtrkiter) {
789  if ((*origtrkiter) != 0) {
790  delete *origtrkiter;
791  *origtrkiter = 0;
792  }
793  }
794 
795  return std::make_pair(theVertexContainer, theVertexAuxContainer);
796 }
797 
800 {
801  return StatusCode::SUCCESS;
802 }
803 
804 void
806 {
807  ATH_MSG_DEBUG("VxPrimary initialize(): Parametersettings "

◆ findVertex() [2/9]

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

Find vertex from Trk::TrackCollection.

Parameters
EventContext
inputtrack container
Returns
a pair of newly created container and auxiliary store

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/9]

virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDet::IVertexFinder::findVertex

Finding method.

Has as input a track collection and as output a VxContainer.

◆ findVertex() [4/9]

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

Find vertex from xAOD::TrackParticleContainer.

Parameters
EventContext
inputtrack particle container
Returns
a pair of newly created container and auxiliary store

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

◆ findVertex() [5/9]

virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDet::IVertexFinder::findVertex

Finding method.

Has as input a track collection and as output a VxContainer.

◆ findVertex() [6/9]

virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDet::IVertexFinder::findVertex
inline

Finding method.

Has as input a track collection and as output a VxContainer.

Definition at line 100 of file IVertexFinder.h.

◆ findVertex() [7/9]

virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDet::IVertexFinder::findVertex ( const TrackCollection trackTES) const
inlinevirtualinherited

Definition at line 100 of file IVertexFinder.h.

◆ findVertex() [8/9]

virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDet::IVertexFinder::findVertex
inline

Finding method.

Has as input a track collection and as output a VxContainer.

Definition at line 106 of file IVertexFinder.h.

◆ findVertex() [9/9]

virtual std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDet::IVertexFinder::findVertex ( const xAOD::TrackParticleContainer trackParticles) const
inlinevirtualinherited

Definition at line 106 of file IVertexFinder.h.

◆ 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 ( )
privatevirtual

Internal method to print the parameters setting.

Definition at line 816 of file InDetIterativePriVxFinderTool.cxx.

822 {

◆ removeAllFrom()

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

Definition at line 860 of file InDetIterativePriVxFinderTool.cxx.

866  {
867 
868  bool found = false;
869 
870  for (std::vector<Trk::ITrackLink*>::iterator seedIter = seedTracks.begin();
871  seedIter != seedEnd;
872  ++seedIter) {
873  if ((*seedIter)->parameters() == *perigeesToFitIter) {
874  found = true;
875  seedTracks.erase(seedIter);
876  seedBegin = seedTracks.begin();
877  seedEnd = seedTracks.end();
878  break;
879  }
880  }
881  if (!found) {
883  " Cannot find vector element to delete when removing BAD vertex! ");
884  }
885  } // for cycle
886 }
887 
888 void
890  double& ndf,
891  int& ntracks)
892 {
893  if (myxAODVertex) {
894  ndf = myxAODVertex->numberDoF();
895 
896  std::vector<Trk::VxTrackAtVertex> myVxTracksAtVtx =
897  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 926 of file InDetIterativePriVxFinderTool.cxx.

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

◆ SGError()

void InDet::InDetIterativePriVxFinderTool::SGError ( const std::string &  errService)
private

Definition at line 824 of file InDetIterativePriVxFinderTool.cxx.

◆ 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 150 of file InDetIterativePriVxFinderTool.h.

◆ m_createSplitVertices

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

Definition at line 164 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 171 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 138 of file InDetIterativePriVxFinderTool.h.

◆ m_iVertexFitter

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

Definition at line 126 of file InDetIterativePriVxFinderTool.h.

◆ m_LinearizedTrackFactory

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

Definition at line 144 of file InDetIterativePriVxFinderTool.h.

◆ m_maximumChi2cutForSeeding

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

Definition at line 160 of file InDetIterativePriVxFinderTool.h.

◆ m_maxTracks

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

Definition at line 172 of file InDetIterativePriVxFinderTool.h.

◆ m_maxVertices

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

Definition at line 162 of file InDetIterativePriVxFinderTool.h.

◆ m_reassignTracksAfterFirstFit

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

Definition at line 168 of file InDetIterativePriVxFinderTool.h.

◆ m_SeedFinder

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

Definition at line 135 of file InDetIterativePriVxFinderTool.h.

◆ m_significanceCutSeeding

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

Definition at line 158 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 165 of file InDetIterativePriVxFinderTool.h.

◆ m_trkFilter

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

Definition at line 129 of file InDetIterativePriVxFinderTool.h.

◆ m_useBeamConstraint

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

Definition at line 157 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:162
Trk::Vertex
Definition: Tracking/TrkEvent/VxVertex/VxVertex/Vertex.h:26
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
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
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDet::InDetIterativePriVxFinderTool::countTracksAndNdf
static void countTracksAndNdf(xAOD::Vertex *myxAODVertex, double &ndf, int &ntracks)
Definition: InDetIterativePriVxFinderTool.cxx:900
CutsMETMaker::accept
StatusCode accept(const xAOD::Muon *mu)
Definition: CutsMETMaker.cxx:18
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
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:150
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
InDet::InDetIterativePriVxFinderTool::m_significanceCutSeeding
DoubleProperty m_significanceCutSeeding
Definition: InDetIterativePriVxFinderTool.h:159
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::InDetIterativePriVxFinderTool::finalize
virtual StatusCode finalize() override
Definition: InDetIterativePriVxFinderTool.cxx:810
x
#define x
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
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:860
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:569
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
TRTCalib_cfilter.p2
p2
Definition: TRTCalib_cfilter.py:131
InDet::InDetIterativePriVxFinderTool::m_createSplitVertices
BooleanProperty m_createSplitVertices
Definition: InDetIterativePriVxFinderTool.h:164
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
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:169
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:182
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:144
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
InDet::InDetIterativePriVxFinderTool::m_maximumChi2cutForSeeding
DoubleProperty m_maximumChi2cutForSeeding
Definition: InDetIterativePriVxFinderTool.h:161
error::ImpactPoint3dEstimatorProblem
Definition: IImpactPoint3dEstimator.h:72
InDet::InDetIterativePriVxFinderTool::printParameterSettings
virtual void printParameterSettings()
Internal method to print the parameters setting.
Definition: InDetIterativePriVxFinderTool.cxx:816
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:571
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:523
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:126
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:157
xAOD::VxType::PileUp
@ PileUp
Pile-up vertex.
Definition: TrackingPrimitives.h:573
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
Trk::d0
@ d0
Definition: ParamDefs.h:63
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
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:926
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:138
InDet::BeamSpotData
Definition: BeamSpotData.h:21
InDet::InDetIterativePriVxFinderTool::m_SeedFinder
ToolHandle< Trk::IVertexSeedFinder > m_SeedFinder
Definition: InDetIterativePriVxFinderTool.h:135
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
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DeMoScan.first
bool first
Definition: DeMoScan.py:536
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:623
python.BuildSignatureFlags.beamSpot
AthConfigFlags beamSpot(AthConfigFlags flags, str instanceName, str recoMode)
Definition: BuildSignatureFlags.py:454
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
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:172
InDet::InDetIterativePriVxFinderTool::findVertex
virtual std::pair< xAOD::VertexContainer *, xAOD::VertexAuxContainer * > findVertex(const EventContext &ctx, const TrackCollection *trackTES) const override
Find vertex from Trk::TrackCollection.
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:830
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
xAOD::Vertex_v1::setCovariancePosition
void setCovariancePosition(const AmgSymMatrix(3)&covariancePosition)
Sets the vertex covariance matrix.
fitman.k
k
Definition: fitman.py:528
InDet::InDetIterativePriVxFinderTool::m_trkFilter
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkFilter
Definition: InDetIterativePriVxFinderTool.h:129
InDet::InDetIterativePriVxFinderTool::m_splitVerticesTrkInvFraction
IntegerProperty m_splitVerticesTrkInvFraction
Definition: InDetIterativePriVxFinderTool.h:166