32 declareProperty(
"IgnoreFlags" ,
m_noFlags);
44 ATH_CHECK(m_trackParticleContainerName.initialize(m_streamName));
48 ATH_MSG_INFO(
"IgnoreFlags is set, all vertices in the container will be kept");
52 if (m_passFlags.empty()) {
54 return StatusCode::FAILURE;
56 for(
auto itr = m_passFlags.begin(); itr!=m_passFlags.end(); ++itr) {
57 ATH_MSG_INFO(
"Vertices must pass the \"" << *itr <<
"\" selection");
62 if (m_acceptanceR > 0.) {
63 ATH_MSG_INFO(
"Extra tracks must be within cone of "<<m_acceptanceR<<
" from vertex candidate.");
66 for(
auto &handle : m_vertexContainerName){
67 ATH_CHECK(handle.initialize(m_streamName));
69 for(
const auto &tracknames : m_vertexContainerName){
70 for(
const auto &
str : m_passFlags){
71 m_passArray.emplace_back(tracknames.key() +
'.' +
str);
75 return StatusCode::SUCCESS;
81 ATH_MSG_INFO(
"Processed "<< m_ntot <<
" tracks, "<< m_npass<<
" were retained ");
82 ATH_MSG_INFO(
"Processed "<< m_nVtxTot <<
" vertices, "<< m_nVtxPass<<
" were retained ");
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;
105 handles.reserve(m_passArray.size());
106 for(
const auto &
key : m_passArray){
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;
112 for(
const auto&
name : m_vertexContainerName){
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) {
139 if(m_acceptanceR > 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);
178 m_nVtxTot += nVtxTot;
179 m_nVtxPass+= nVtxPass;
180 if(m_thinTracks || m_acceptanceR > 0.) {
182 importedTrackParticles.
keep(trackMask);
185 return StatusCode::SUCCESS;