From f4dcd3dd3841cdbca4ad6cfb45eda0becfebe18e Mon Sep 17 00:00:00 2001
From: thitchin <thomas.glyn.hitchings@cern.ch>
Date: Tue, 11 Jan 2022 17:26:09 +0100
Subject: [PATCH] foundTruth fix

---
 .../src/AnalysisConfig_Ntuple.cxx             | 11 ++++++++--
 .../TrigInDetAnalysisUtils/T_AnalysisConfig.h | 21 +++++++++++++++++++
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx
index 4464e618084e..f38f7741095e 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 d7ce721f511e..69babd59d451 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;   
+    }
+
 
 
 
-- 
GitLab