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;
94 unsigned int nTracks = importedTrackParticles->size();
95 if (nTracks==0)
return StatusCode::SUCCESS;
98 std::vector<bool> trackMask(nTracks,
false);
103 std::unordered_map<std::string, SG::ReadDecorHandle<xAOD::VertexContainer, Char_t>> handles;
106 auto it = handles.emplace(std::piecewise_construct, std::forward_as_tuple(key.key()), std::forward_as_tuple(key, ctx));
107 if(!(*it.first).second.isPresent())
return StatusCode::FAILURE;
113 std::vector<bool> vtxMask(vertexContainer->size(),
false);
117 for(
auto vtxItr = vertexContainer->begin(); vtxItr!=vertexContainer->end(); ++vtxItr, ++k) {
123 for(std::vector<std::string>::const_iterator flagItr =
m_passFlags.begin(); flagItr!=
m_passFlags.end(); ++flagItr) {
124 std::string lookupstr = name.key() +
'.' + (*flagItr);
125 const auto& handle = handles.at(lookupstr);
126 if(handle(*vtx) != 0) {
141 TLorentzVector centreCandidate;
146 for(
uint i=0; i<nTracks; ++i) {
149 if(centreCandidate.DeltaR(track->p4()) <
m_acceptanceR) trackMask[i]=
true;
156 for(
uint i=0; i<nTracks; ++i) {
172 vertexContainer.
keep(vtxMask);
176 m_npass += std::accumulate(trackMask.begin(), trackMask.end(), 0);
181 importedTrackParticles.
keep(trackMask);
184 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
std::atomic< unsigned int > m_npass
SG::ReadDecorHandleKeyArray< xAOD::VertexContainer > m_passArray
std::atomic< unsigned int > m_nVtxPass
std::vector< std::string > m_passFlags
virtual StatusCode doThinning(const EventContext &ctx) const
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.