From 14c31974b811d534425e11e58d9c4db562b48bf1 Mon Sep 17 00:00:00 2001
From: Yohei Yamaguchi <yohei.yamaguchi@cern.ch>
Date: Wed, 18 Nov 2020 15:51:57 +0000
Subject: [PATCH] modify filtering for L2 inside-out

---
 .../TrigMuonEF/src/MuonChainFilterAlg.cxx     | 29 ++++++++++++++-----
 .../TrigMuonEF/src/MuonChainFilterAlg.h       |  2 ++
 .../HLTMenuConfig/Muon/MuonSequenceSetup.py   |  5 ++--
 3 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/MuonChainFilterAlg.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/MuonChainFilterAlg.cxx
index 4cfa79340b3..3110d9bcd2a 100644
--- a/Trigger/TrigAlgorithms/TrigMuonEF/src/MuonChainFilterAlg.cxx
+++ b/Trigger/TrigAlgorithms/TrigMuonEF/src/MuonChainFilterAlg.cxx
@@ -41,7 +41,7 @@ StatusCode MuonChainFilterAlg::execute()
 
   bool pass = false;
   //First check if there is anything in the filter list
-  if(m_filterChains.size()==0){
+  if(!m_notGate && m_filterChains.size()==0){
     ATH_MSG_DEBUG("Nothing to filter");
     setFilterPassed(true);
     return StatusCode::SUCCESS;
@@ -64,14 +64,27 @@ StatusCode MuonChainFilterAlg::execute()
 	  auto it = find(m_filterChains.begin(), m_filterChains.end(), chainName);
 	  //if there is any chain that is active and not on 
 	  //the filter list, set the filter to pass
-	  if(it != m_filterChains.end()){
-	    ATH_MSG_DEBUG("chain "<<chainName<<" is on the filter list, keep looking");
+	  if(!m_notGate) {
+	    if(it != m_filterChains.end()) {
+	      ATH_MSG_DEBUG("chain "<<chainName<<" is on the filter list, keep looking");
+	    }
+	    else {
+	      ATH_MSG_DEBUG("chain "<<chainName<<" is not on the filter list. Passing");
+	      pass = true;
+	      setFilterPassed(pass);
+	      return StatusCode::SUCCESS;
+	    }
 	  }
-	  else{
-	    ATH_MSG_DEBUG("chain "<<chainName<<" is not on the filter list. Passing");
-	    pass = true;
-	    setFilterPassed(pass);
-	    return StatusCode::SUCCESS;
+	  else {
+	    if(it != m_filterChains.end()) {
+	      ATH_MSG_DEBUG("chain "<<chainName<<" is on the not-filter list, Passing");
+	      pass = true;
+	      setFilterPassed(pass);
+	      return StatusCode::SUCCESS;
+	    }
+	    else{
+	      ATH_MSG_DEBUG("chain "<<chainName<<" is not on the not-filter list. keep looking");
+	    }
 	  }
 	}
       }
diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/MuonChainFilterAlg.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/MuonChainFilterAlg.h
index 40bf4c43703..f06ac03644a 100644
--- a/Trigger/TrigAlgorithms/TrigMuonEF/src/MuonChainFilterAlg.h
+++ b/Trigger/TrigAlgorithms/TrigMuonEF/src/MuonChainFilterAlg.h
@@ -41,6 +41,8 @@ class MuonChainFilterAlg : public AthAlgorithm
     Gaudi::Property< bool > m_writeL2muFast {this, "WriteMuFast", false, "Flag to record muFast muons" };
     SG::WriteHandleKey<xAOD::L2StandAloneMuonContainer> m_muFastKey {this, "L2MuFastContainer", "MuonL2SAInfo", "Output container for muFast"};
 
+    Gaudi::Property< bool > m_notGate {this, "NotGate", false, "filtering if not contained in ChainsToFilter" };
+
 };
 
 #endif
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py
index 125532d3283..ee45b85d7a1 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py
@@ -151,6 +151,7 @@ def muCombAlgSequence(ConfigFlags):
     insideoutMuonChainFilter.L2MuCombContainer = muNames.L2CBName+"IOmode"
     insideoutMuonChainFilter.WriteMuFast = True
     insideoutMuonChainFilter.WriteMuComb = True
+    insideoutMuonChainFilter.NotGate = True
 
     muFastIOFilterSequence = seqAND("l2muFastIOFilterSequence", [insideoutMuonChainFilter, muFastIORecoSequence])
 
@@ -610,11 +611,11 @@ def getInsideOutMuonChainNames():
     chains =[]
 
     try:
-        chains += [chain.name for chain in muonSlice if "l2io" not in chain.name]
+        chains += [chain.name for chain in muonSlice if "l2io" in chain.name]
     except Exception as e:
         log.debug(e)
     try:
-        chains += [chain.name for chain in bphysSlice if "l2io" not in chain.name]
+        chains += [chain.name for chain in bphysSlice if "l2io" in chain.name]
     except Exception as e:
         log.debug(e)
 
-- 
GitLab