28 const IInterface*
p ) :
30 m_TrackContainerName(
"InDetTrackParticles"),
31 m_PVContainerName(
"PrimaryVertices"),
33 m_npass(0), m_tracks_kept(0), m_keepTracks(false)
50 if(not m_TrackContainerName.key().empty())
ATH_CHECK(m_TrackContainerName.initialize(m_streamName));
51 ATH_CHECK(m_PVContainerName.initialize(m_streamName));
53 return StatusCode::SUCCESS;
58 ATH_MSG_INFO(
"Processed "<< m_ntot <<
" PV, "<< m_npass<<
" were retained ");
59 if(m_keepTracks)
ATH_MSG_INFO(
"Additional tracks kept " << m_tracks_kept);
60 return StatusCode::SUCCESS;
66 const EventContext& ctx = Gaudi::Hive::currentContext();
69 if(!PV_col.isValid()) {
70 ATH_MSG_ERROR (
"Couldn't retrieve VertexContainer with key PrimaryVertices");
71 return StatusCode::FAILURE;
73 m_ntot+=PV_col->size();
75 std::vector<bool>
mask(PV_col->size(),
false);
78 BPhysHelper::PV_MIN_A0,
79 BPhysHelper::PV_MIN_Z0,
80 BPhysHelper::PV_MIN_Z0_BA};
84 for(
auto &
str : m_BPhyCandList) {
87 size_t s = Container->
size();
88 for(
size_t i = 0;
i<
s;
i++) {
91 for(
size_t i =0;
i < 4;
i++) {
93 if(origPv==
nullptr)
continue;
94 auto pvit =
std::find (PV_col->begin(), PV_col->end(), origPv);
95 if(pvit == PV_col->end()) {
110 std::vector<bool> trackmask(importedTrackParticles->size(),
false);
111 size_t pvnum =
mask.size();
112 for(
size_t i =0;
i<pvnum;
i++){
113 if(
mask[
i] ==
false)
continue;
114 auto vtx = PV_col->at(
i);
115 size_t s = vtx->nTrackParticles();
116 for(
size_t j=0;j<
s;j++){
117 auto trackit =
std::find(importedTrackParticles->begin(), importedTrackParticles->end(), vtx->trackParticle(j));
118 if(trackit == importedTrackParticles->end()){
122 size_t x =
std::distance(importedTrackParticles->begin(), trackit);
123 trackmask.at(
x) =
true;
126 importedTrackParticles.
keep(trackmask);
127 m_tracks_kept +=
std::accumulate(trackmask.begin(), trackmask.end(), 0);
131 return StatusCode::SUCCESS;