diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx index 4464e618084eec8b6311733d790d6f2e1d3c9990..f38f7741095eca0077ee4dc976cab340143bbebe 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx @@ -573,6 +573,8 @@ void AnalysisConfig_Ntuple::loop() { selectorTruth.clear(); + static bool emptyContainerWarningGiven = false; // if container contains no events only print warning for first event + m_provider->msg(MSG::INFO) << "MC Truth flag " << m_mcTruth << endmsg; const TrigInDetTrackTruthMap* truthMap = 0; bool foundTruth = false; @@ -593,8 +595,13 @@ void AnalysisConfig_Ntuple::loop() { } else if (m_provider->evtStore()->contains<TruthParticleContainer>("SpclMC")) { /// AOD - selectTracks<TruthParticleContainer>( &selectorTruth, "SpclMC"); - foundTruth = true; + if (selectTracksNotEmpty<TruthParticleContainer>( &selectorTruth, "SpclMC")) { // added for muon sample bug + foundTruth = true; + m_provider->msg(MSG::DEBUG) << "SpclMC" << endmsg; + } else if (!emptyContainerWarningGiven) { + emptyContainerWarningGiven = true; + m_provider->msg(MSG::WARNING) << "SpclMC Container empty" << endmsg; + } } else if (m_provider->evtStore()->contains<TruthParticleContainer>("")) { /// anything else? diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisUtils/TrigInDetAnalysisUtils/T_AnalysisConfig.h b/Trigger/TrigAnalysis/TrigInDetAnalysisUtils/TrigInDetAnalysisUtils/T_AnalysisConfig.h index d7ce721f511e12f9ae67b660ded7a9dcdb5a21cd..69babd59d451701d3351a9a379cb38e78760a1d5 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisUtils/TrigInDetAnalysisUtils/T_AnalysisConfig.h +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisUtils/TrigInDetAnalysisUtils/T_AnalysisConfig.h @@ -595,6 +595,27 @@ protected: + template<class Collection> + bool selectTracksNotEmpty( TrigTrackSelector* selector, const std::string& key ) { + const Collection* collection = nullptr; + if ( key.empty() ) return false; + if ( !m_provider->evtStore()->template contains<Collection>( key ) ) return false; + + StatusCode sc = m_provider->evtStore()->retrieve( collection, key ); + m_provider->msg(MSG::DEBUG) << "SG Collection->size() " << collection->size() << " (" << key << ")" << endmsg; + + if ( !( sc.isSuccess() && collection ) ) return false; + + // added to fix muon samples bug + if ( collection->size() == 0 ) { + m_provider->msg(MSG::WARNING) << "no particles in collection" << endmsg; + return false; + } + + selector->selectTracks( collection ); + return true; + } +