diff --git a/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonDetailedTrackTruthMaker.h b/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonDetailedTrackTruthMaker.h index d89160dc40d450f4b1a937d4e8f604ff1ae86742..32866939b3eeff59e6eaa28231fea3c2e8a3592c 100755 --- a/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonDetailedTrackTruthMaker.h +++ b/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonDetailedTrackTruthMaker.h @@ -11,9 +11,15 @@ #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ToolHandle.h" #include "StoreGate/StoreGateSvc.h" +#include "StoreGate/WriteHandleKeyArray.h" +#include "StoreGate/ReadHandleKeyArray.h" #include "TrkToolInterfaces/IDetailedTrackTruthBuilder.h" +#include "TrkTrack/TrackCollection.h" +#include "TrkTruthData/PRD_MultiTruthCollection.h" +#include "TrkTruthData/DetailedTrackTruthCollection.h" + /** * This algorithm produces track truth data using Muon PRD truth collections. * Calls a DetailedTrackTruthBuilder tool that does the actual job. @@ -32,13 +38,13 @@ public: private: // PRD truth maps in any order - std::vector<std::string> m_PRD_TruthNames; + SG::ReadHandleKeyArray<PRD_MultiTruthCollection> m_PRD_TruthNames; // Track input - std::vector<std::string> m_trackCollectionNames; + SG::ReadHandleKeyArray<TrackCollection> m_trackCollectionNames; // DetailedTrackTruthCollection output - std::vector<std::string> m_detailedTrackTruthNames; + SG::WriteHandleKeyArray<DetailedTrackTruthCollection> m_detailedTrackTruthNames; // Tool Handle for truth tool ToolHandle<Trk::IDetailedTrackTruthBuilder> m_truthTool; diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonDetailedTrackTruthMaker.cxx b/MuonSpectrometer/MuonTruthAlgs/src/MuonDetailedTrackTruthMaker.cxx index 92b3374f5264a47ffc71f9d3d1cc028f3384a6a8..ad88b6e545abb7220f430305bc8515ccc232cf42 100755 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonDetailedTrackTruthMaker.cxx +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonDetailedTrackTruthMaker.cxx @@ -6,9 +6,6 @@ // A. Gaponenko, 2006 #include "MuonTruthAlgs/MuonDetailedTrackTruthMaker.h" -#include "TrkTruthData/PRD_MultiTruthCollection.h" -#include "TrkTruthData/DetailedTrackTruthCollection.h" -#include "TrkTrack/TrackCollection.h" #include <iterator> //================================================================ @@ -21,24 +18,24 @@ MuonDetailedTrackTruthMaker::MuonDetailedTrackTruthMaker(const std::string &name // Inputs declareProperty("TrackCollectionNames", m_trackCollectionNames ); m_trackCollectionNames.reserve(9); - m_trackCollectionNames.push_back("MuonSpectrometerTracks"); - m_trackCollectionNames.push_back("MooreTracks"); - m_trackCollectionNames.push_back("ConvertedMBoyMuonSpectroOnlyTracks"); - m_trackCollectionNames.push_back("ConvertedMBoyTracks"); - m_trackCollectionNames.push_back("MuidExtrapolatedTracks"); - m_trackCollectionNames.push_back("ExtrapolatedMuonSpectrometerTracks"); - m_trackCollectionNames.push_back("Combined_Tracks"); - m_trackCollectionNames.push_back("CombinedFitMuonTracks"); - m_trackCollectionNames.push_back("ConvertedMuIdCBTracks"); - m_trackCollectionNames.push_back("ConvertedMuIdExtrTracks"); - m_trackCollectionNames.push_back("ConvertedStacoTracks"); - m_trackCollectionNames.push_back("MuGirlRefittedTracks"); + m_trackCollectionNames.emplace_back("MuonSpectrometerTracks"); + m_trackCollectionNames.emplace_back("MooreTracks"); + m_trackCollectionNames.emplace_back("ConvertedMBoyMuonSpectroOnlyTracks"); + m_trackCollectionNames.emplace_back("ConvertedMBoyTracks"); + m_trackCollectionNames.emplace_back("MuidExtrapolatedTracks"); + m_trackCollectionNames.emplace_back("ExtrapolatedMuonSpectrometerTracks"); + m_trackCollectionNames.emplace_back("Combined_Tracks"); + m_trackCollectionNames.emplace_back("CombinedFitMuonTracks"); + m_trackCollectionNames.emplace_back("ConvertedMuIdCBTracks"); + m_trackCollectionNames.emplace_back("ConvertedMuIdExtrTracks"); + m_trackCollectionNames.emplace_back("ConvertedStacoTracks"); + m_trackCollectionNames.emplace_back("MuGirlRefittedTracks"); declareProperty("PRD_TruthNames", m_PRD_TruthNames); - m_PRD_TruthNames.push_back("CSC_TruthMap"); - m_PRD_TruthNames.push_back("RPC_TruthMap"); - m_PRD_TruthNames.push_back("TGC_TruthMap"); - m_PRD_TruthNames.push_back("MDT_TruthMap"); + m_PRD_TruthNames.emplace_back("CSC_TruthMap"); + m_PRD_TruthNames.emplace_back("RPC_TruthMap"); + m_PRD_TruthNames.emplace_back("TGC_TruthMap"); + m_PRD_TruthNames.emplace_back("MDT_TruthMap"); // Output @@ -60,16 +57,14 @@ StatusCode MuonDetailedTrackTruthMaker::initialize() } m_detailedTrackTruthNames.reserve ( m_trackCollectionNames.size()); - std::vector<std::string >::const_iterator it = m_trackCollectionNames.begin(), itEnd = m_trackCollectionNames.end(); - for ( ; it!=itEnd ; ++it) - m_detailedTrackTruthNames.push_back(*it+"Truth"); - - msg(MSG::INFO) << " processing: "; - std::vector<std::string>::const_iterator ikeyt = m_detailedTrackTruthNames.begin(); - for(std::vector<std::string>::const_iterator ikey = m_trackCollectionNames.begin(); ikey != m_trackCollectionNames.end(); ikey++,++ikeyt) { - msg(MSG::INFO) << " " << *ikey << " " << *ikeyt; + for(unsigned int i=0;i<m_trackCollectionNames.size();i++){ + m_detailedTrackTruthNames.emplace_back(m_trackCollectionNames.at(i).key()+"Truth"); + ATH_MSG_INFO("process "<<m_trackCollectionNames.at(i).key()<<" for detailed truth collection "<<m_detailedTrackTruthNames.at(i).key()); } - msg(MSG::INFO) << endmsg; + + ATH_CHECK(m_trackCollectionNames.initialize()); + ATH_CHECK(m_PRD_TruthNames.initialize()); + ATH_CHECK(m_detailedTrackTruthNames.initialize()); //---------------- return StatusCode::SUCCESS; @@ -86,49 +81,36 @@ StatusCode MuonDetailedTrackTruthMaker::finalize() StatusCode MuonDetailedTrackTruthMaker::execute() { ATH_MSG_DEBUG( "MuonDetailedTrackTruthMaker::execute()"); - StatusCode sc; - //---------------------------------------------------------------- // Retrieve prep raw data truth std::vector<const PRD_MultiTruthCollection*> prdCollectionVector; - for(std::vector<std::string>::const_iterator ikey = m_PRD_TruthNames.begin(); ikey != m_PRD_TruthNames.end(); ikey++) { - prdCollectionVector.push_back(0); - sc = evtStore()->retrieve(*prdCollectionVector.rbegin(), *ikey); - if (!sc.isSuccess()){ - ATH_MSG_WARNING( "PRD_MultiTruthCollection "<<*ikey<<" NOT found"); - } else { - ATH_MSG_DEBUG( "Got PRD_MultiTruthCollection "<<*ikey); + for(SG::ReadHandle<PRD_MultiTruthCollection>& col : m_PRD_TruthNames.makeHandles()){ + if(!col.isValid()){ + ATH_MSG_WARNING("invalid PRD_MultiTruthCollection "<<col.name()); + return StatusCode::FAILURE; } + if(!col.isPresent()) continue; + prdCollectionVector.push_back(col.cptr()); } //---------------------------------------------------------------- // Retrieve track collections - unsigned int i=0; - std::vector<std::string>::const_iterator it = m_trackCollectionNames.begin(), itEnd = m_trackCollectionNames.end(); - for ( ; it!=itEnd ; ++it, ++i) { - - const TrackCollection *tracks = 0; - if (evtStore()->contains<TrackCollection>(*it) && evtStore()->retrieve(tracks, *it).isSuccess()){ - ATH_MSG_DEBUG( "Got TrackCollection "<<*it ); - } else { - ATH_MSG_VERBOSE( "TrackCollection "<<*it<<" NOT found"); - continue; + int i=0; + for(SG::ReadHandle<TrackCollection>& tcol : m_trackCollectionNames.makeHandles()){ + if(!tcol.isValid()){ + ATH_MSG_WARNING("invalid TrackCollection "<<tcol.name()); + return StatusCode::FAILURE; } + if(!tcol.isPresent()) continue; //---------------------------------------------------------------- // Produce and store the output. - DetailedTrackTruthCollection *dttc = new DetailedTrackTruthCollection(tracks); - m_truthTool->buildDetailedTrackTruth(dttc, *tracks, prdCollectionVector); - - sc=evtStore()->record(dttc, m_detailedTrackTruthNames[i], false); - if (sc.isFailure()) { - ATH_MSG_WARNING( "DetailedTrackTruthCollection '" << m_detailedTrackTruthNames[i] << "' could not be registered in StoreGate !" ); - return StatusCode::SUCCESS; - } else { - ATH_MSG_DEBUG("DetailedTrackTruthCollection '" << m_detailedTrackTruthNames[i] - << "' is registered in StoreGate, size="<<dttc->size() ); - } + SG::WriteHandle<DetailedTrackTruthCollection> dttc(m_detailedTrackTruthNames.at(i)); + ATH_CHECK(dttc.record(std::make_unique<DetailedTrackTruthCollection>())); + dttc->setTrackCollection(tcol.cptr()); + m_truthTool->buildDetailedTrackTruth(dttc.ptr(), *(tcol.cptr()), prdCollectionVector); + i++; } return StatusCode::SUCCESS; } diff --git a/Tracking/TrkEvent/TrkTruthData/TrkTruthData/DetailedTrackTruthCollection.h b/Tracking/TrkEvent/TrkTruthData/TrkTruthData/DetailedTrackTruthCollection.h index 4584e4a2fd3316863dfe4ee5c48dce57bc64ab5e..238eaff92365a94fa4b70886991aa381a8692639 100755 --- a/Tracking/TrkEvent/TrkTruthData/TrkTruthData/DetailedTrackTruthCollection.h +++ b/Tracking/TrkEvent/TrkTruthData/TrkTruthData/DetailedTrackTruthCollection.h @@ -23,6 +23,7 @@ class DetailedTrackTruthCollection : public std::multimap<Trk::TrackTruthKey, De public: DetailedTrackTruthCollection(const DataLink<TrackCollection> tracks) : m_trackCollection(tracks) {} DataLink<TrackCollection> trackCollectionLink() const { return m_trackCollection; } + void setTrackCollection(const DataLink<TrackCollection> tracks){m_trackCollection=tracks;} // for POOL DetailedTrackTruthCollection() {}