25 m_prdTruthTrajectoryBuilder(
"Trk::PRD_TruthTrajectoryBuilder/InDetPRD_TruthTrajectoryBuilder"),
26 m_truthTrackBuilder(
"Trk::TruthTrackBuilder/InDetTruthTrackBuilder"),
27 m_trackSummaryTool(
"")
49 if (m_prdTruthTrajectoryBuilder.retrieve().isFailure()){
50 ATH_MSG_ERROR(
"Could not retrieve " << m_prdTruthTrajectoryBuilder <<
". Aborting ...");
51 return StatusCode::FAILURE;
54 if (m_truthTrackBuilder.retrieve().isFailure()){
55 ATH_MSG_ERROR(
"Could not retrieve " << m_truthTrackBuilder <<
". Aborting ...");
56 return StatusCode::FAILURE;
59 if (!m_prdTruthTrajectorySelectors.empty() && m_prdTruthTrajectorySelectors.retrieve().isFailure()){
60 ATH_MSG_ERROR(
"Could not retrieve " << m_prdTruthTrajectorySelectors <<
". Aborting ...");
61 return StatusCode::FAILURE;
63 ATH_CHECK( m_assoTool.retrieve( DisableTool {m_assoTool.empty()} ));
66 if (!m_trackSummaryTool.empty() && m_trackSummaryTool.retrieve().isFailure()){
67 ATH_MSG_ERROR(
"Could not retrieve " << m_trackSummaryTool <<
". Aborting ...");
68 return StatusCode::FAILURE;
71 if (!m_trackSelectors.empty() && m_trackSelectors.retrieve().isFailure()){
72 ATH_MSG_ERROR(
"Could not retrieve " << m_trackSelectors <<
". Aborting ...");
73 return StatusCode::FAILURE;
76 ATH_CHECK( m_outputTrackCollectionName.initialize() );
77 ATH_CHECK( m_skippedTrackCollectionName.initialize() );
79 return StatusCode::SUCCESS;
87 return StatusCode::SUCCESS;
94 std::unique_ptr<Trk::PRDtoTrackMap> prd_to_track_map(!m_assoTool.empty()
95 ? m_assoTool->createPRDtoTrackMap()
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;
106 if ( m_prdTruthTrajectoryBuilder->refreshEvent().isFailure() ){
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 =
114 m_prdTruthTrajectoryBuilder->truthTrajectories();
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){
122 if (!m_prdTruthTrajectorySelectors.empty()){
123 ToolHandleArray<Trk::IPRD_TruthTrajectorySelector>::const_iterator prdTTSelIter = m_prdTruthTrajectorySelectors.begin();
124 ToolHandleArray<Trk::IPRD_TruthTrajectorySelector>::const_iterator prdTTSelIterE = m_prdTruthTrajectorySelectors.end();
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 ... ");
136 std::unique_ptr<Trk::Track> truthTrack( m_truthTrackBuilder->createTrack(ttIter->second));
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.");
143 if (m_trackSummaryTool.isEnabled()){
145 m_trackSummaryTool->computeAndReplaceTrackSummary(*truthTrack,
150 bool passed = m_trackSelectors.empty();
151 if ( !m_trackSelectors.empty() ) {
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());
173 if (m_trackSummaryTool.isEnabled()) {
174 outputTrackCollection->
reserve(tmp_track_collection.size());
175 for (std::unique_ptr<Trk::Track> &track : tmp_track_collection) {
177 m_trackSummaryTool->computeAndReplaceTrackSummary(*track,
false );
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)));
192 ATH_MSG_VERBOSE(
"Truth TrackCollection with name " << m_outputTrackCollectionName <<
" and size " << outputTrackCollectionHandle->
size() <<
" recorded.");
194 ATH_CHECK(skippedTrackCollectionHandle.
record(std::move(skippedTrackCollection)));
196 ATH_MSG_VERBOSE(
"Truth TrackCollection with name " << m_skippedTrackCollectionName <<
" and size " << skippedTrackCollectionHandle->
size() <<
" recorded.");
199 return StatusCode::SUCCESS;