33 if ( m_VertexFinderTool.retrieve().isFailure() )
35 ATH_MSG_FATAL(
"Failed to retrieve tool " << m_VertexFinderTool);
36 return StatusCode::FAILURE;
41 if (m_doVertexMerging) {
42 if ( m_VertexMergingTool.retrieve().isFailure() )
44 ATH_MSG_FATAL(
"Failed to retrieve tool " << m_VertexMergingTool);
45 return StatusCode::FAILURE;
49 m_VertexMergingTool.disable();
53 if (m_doVertexSorting) {
54 if ( m_VertexCollectionSortingTool.retrieve().isFailure() )
56 ATH_MSG_FATAL(
"Failed to retrieve tool " << m_VertexCollectionSortingTool);
57 return StatusCode::FAILURE;
64 m_VertexCollectionSortingTool.disable();
66 if (!m_monTool.empty())
CHECK(m_monTool.retrieve());
68 ATH_CHECK(m_trkTracksName.initialize(!m_useTrackParticles));
69 ATH_CHECK(m_tracksName.initialize(m_useTrackParticles));
70 ATH_CHECK(m_vxCandidatesOutputName.initialize());
71 return StatusCode::SUCCESS;
82 auto vertexContainerPair = std::make_pair(vertexContainer, vertexAuxContainer);
84 if (m_useTrackParticles) {
86 if (trackParticleCollection.isValid()) {
87 vertexContainerPair = m_VertexFinderTool->findVertex(ctx, trackParticleCollection.cptr());
91 <<
" exists in StoreGate. No Vertexing Possible");
92 return StatusCode::FAILURE;
96 if (trackCollection.isValid()) {
97 vertexContainerPair = m_VertexFinderTool->findVertex(ctx, trackCollection.cptr());
100 << m_trkTracksName.key()
101 <<
" exists in StoreGate. No Vertexing Possible");
102 return StatusCode::FAILURE;
107 std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer* > myVertexContainerPair{
nullptr,
nullptr};
108 auto deletePair = [](std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer* > &
p){
109 delete p.first;
p.first =
nullptr;
110 delete p.second;
p.second =
nullptr;
113 if (vertexContainerPair.first) {
115 if(m_doVertexMerging && vertexContainerPair.first->size() > 1) {
116 myVertexContainerPair = m_VertexMergingTool->mergeVertexContainer( *vertexContainerPair.first );
117 deletePair(vertexContainerPair);
118 vertexContainerPair = myVertexContainerPair;
121 if (m_doVertexSorting) {
122 myVertexContainerPair = m_VertexCollectionSortingTool->sortVertexContainer(*vertexContainerPair.first);
123 deletePair(vertexContainerPair);
126 if (myVertexContainerPair.first ==
nullptr) {
128 return StatusCode::FAILURE;
131 if (not myVertexContainerPair.first->hasStore()) {
133 return StatusCode::FAILURE;
136 << myVertexContainerPair.first->size() - 1
137 <<
" vertices (excluding dummy)");
141 std::unique_ptr<xAOD::VertexContainer>(myVertexContainerPair.first),
142 std::unique_ptr<xAOD::VertexAuxContainer>(myVertexContainerPair.second)));
146 vertexIter != myVertexContainerPair.first->end(); ++vertexIter ) {
147 if((*vertexIter)->nTrackParticles() > 0 and (*vertexIter)->vertexType() != 0 ){
149 monitor_vertex(
"allVertex", **vertexIter);
151 if( vertexIter == myVertexContainerPair.first->begin() ) monitor_vertex(
"primVertex", **vertexIter);
156 return StatusCode::SUCCESS;
161 return StatusCode::SUCCESS;
165 if (
prefix ==
"allVertex"){
174 else if (
prefix ==
"primVertex"){