94 std::unique_ptr<Trk::PRDtoTrackMap> prd_to_track_map(!
m_assoTool.empty()
96 : std::unique_ptr<Trk::PRDtoTrackMap>());
98 std::unique_ptr<TrackCollection> outputTrackCollection = std::make_unique<TrackCollection>();
99 std::unique_ptr<TrackCollection> skippedTrackCollection = std::make_unique<TrackCollection>();
103 std::vector<std::unique_ptr<Trk::Track> > tmp_track_collection;
107 ATH_MSG_INFO(
"Could not refresh the PRD truth trajectory builder. No truth track creation.");
108 return StatusCode::SUCCESS;
113 const std::map< HepMC::ConstGenParticlePtr, PRD_TruthTrajectory >& truthTraj =
116 ATH_MSG_VERBOSE(
"PRD_TruthTrajectoryBuilder delivered " << truthTraj.size() <<
" PRD truth trajectories, starting track creation.");
118 auto ttIter = truthTraj.begin();
119 auto ttIterE = truthTraj.end();
120 for ( ; ttIter != ttIterE; ++ttIter){
126 for ( ; prdTTSelIter != prdTTSelIterE &&
passed; ++prdTTSelIter ){
127 if (!(*prdTTSelIter)->pass((*ttIter).second)){
128 ATH_MSG_VERBOSE(
"PRD truth trajectory did not pass the selection cuts. Skipping ... ");
138 ATH_MSG_VERBOSE(
"Track creation for PRD truth trajectory with size " << (*ttIter).second.prds.size() <<
" failed. Skipping ...");
141 ATH_MSG_VERBOSE(
"Track creation for PRD truth trajectory with size " << (*ttIter).second.prds.size() <<
" successful.");
152 ToolHandleArray<Trk::ITrackSelectorTool>::iterator tsIter =
m_trackSelectors.begin();
153 ToolHandleArray<Trk::ITrackSelectorTool>::iterator tsIterE =
m_trackSelectors.end();
154 for ( ; ( tsIter != tsIterE && !
passed ); ++tsIter){
155 passed = (*tsIter)->decision(*truthTrack);
161 ATH_MSG_VERBOSE(
"Track created and pushed into the output track collection.");
162 if (prd_to_track_map &&
m_assoTool->addPRDs(*prd_to_track_map, *truthTrack).isFailure()) {
165 tmp_track_collection.push_back(std::move(truthTrack));
167 ATH_MSG_VERBOSE(
"Track did not pass the track selection. Putting it into skipped track collection.");
168 skippedTrackCollection->push_back(truthTrack.release());
174 outputTrackCollection->reserve(tmp_track_collection.size());
175 for (std::unique_ptr<Trk::Track> &track : tmp_track_collection) {
178 outputTrackCollection->push_back(std::move(track));
182 outputTrackCollection->reserve(tmp_track_collection.size());
183 for (std::unique_ptr<Trk::Track> &track : tmp_track_collection) {
184 outputTrackCollection->push_back(std::move(track));
190 ATH_CHECK(outputTrackCollectionHandle.
record(std::move(outputTrackCollection)));
194 ATH_CHECK(skippedTrackCollectionHandle.
record(std::move(skippedTrackCollection)));
199 return StatusCode::SUCCESS;