32 declareProperty(
"IgnoreFlags" ,
m_noFlags);
48 ATH_MSG_INFO(
"IgnoreFlags is set, all vertices in the container will be kept");
54 return StatusCode::FAILURE;
57 ATH_MSG_INFO(
"Vertices must pass the \"" << *itr <<
"\" selection");
75 return StatusCode::SUCCESS;
84 return StatusCode::SUCCESS;
90 const EventContext& ctx = Gaudi::Hive::currentContext();
95 unsigned int nTracks = importedTrackParticles->size();
96 if (nTracks==0)
return StatusCode::SUCCESS;
99 std::vector<bool> trackMask(nTracks,
false);
104 std::unordered_map<std::string, SG::ReadDecorHandle<xAOD::VertexContainer, Char_t>> handles;
107 auto it = handles.emplace(std::piecewise_construct, std::forward_as_tuple(key.key()), std::forward_as_tuple(key, ctx));
108 if(!(*it.first).second.isPresent())
return StatusCode::FAILURE;
114 std::vector<bool> vtxMask(vertexContainer->size(),
false);
118 for(
auto vtxItr = vertexContainer->begin(); vtxItr!=vertexContainer->end(); ++vtxItr, ++k) {
124 for(std::vector<std::string>::const_iterator flagItr =
m_passFlags.begin(); flagItr!=
m_passFlags.end(); ++flagItr) {
125 std::string lookupstr = name.key() +
'.' + (*flagItr);
126 const auto& handle = handles.at(lookupstr);
127 if(handle(*vtx) != 0) {
142 TLorentzVector centreCandidate;
147 for(
uint i=0; i<nTracks; ++i) {
150 if(centreCandidate.DeltaR(track->p4()) <
m_acceptanceR) trackMask[i]=
true;
157 for(
uint i=0; i<nTracks; ++i) {
173 vertexContainer.
keep(vtxMask);
177 m_npass += std::accumulate(trackMask.begin(), trackMask.end(), 0);
182 importedTrackParticles.
keep(trackMask);
185 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
: B-physics xAOD helpers.
Handle for requesting thinning for a data object.
StringProperty m_streamName
std::atomic< unsigned int > m_nVtxTot
virtual StatusCode doThinning() const
std::atomic< unsigned int > m_npass
SG::ReadDecorHandleKeyArray< xAOD::VertexContainer > m_passArray
std::atomic< unsigned int > m_nVtxPass
std::vector< std::string > m_passFlags
std::atomic< unsigned int > m_ntot
Thin_vtxTrk(const std::string &t, const std::string &n, const IInterface *p)
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerName
SG::ThinningHandleKeyArray< xAOD::VertexContainer > m_vertexContainerName
void keep(size_t ndx)
Mark that index ndx in the container should be kept (not thinned away).
Handle for requesting thinning for a data object.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.