From f8cde2d27b7d394af358aaec6dd14f880c168c0d Mon Sep 17 00:00:00 2001
From: Moe Wakida <wakida@hepl.phys.nagoya-u.ac.jp>
Date: Mon, 20 Jul 2020 09:12:30 +0200
Subject: [PATCH] muComb overlap removal monitoring

---
 .../python/TrigMuonHypoMTConfig.py            |   2 +-
 .../python/TrigMuonHypoMonitoringMT.py        |   2 +-
 .../TrigMuonHypoMT/src/TrigmuCombHypoTool.cxx | 105 +++++++++---------
 .../TrigMuonHypoMT/src/TrigmuCombHypoTool.h   |   5 +
 4 files changed, 59 insertions(+), 55 deletions(-)

diff --git a/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMTConfig.py b/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMTConfig.py
index a57a588c9e6e..ee5b540978b1 100755
--- a/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMTConfig.py
+++ b/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMTConfig.py
@@ -473,7 +473,7 @@ def TrigmuCombHypoToolwORFromDict( chainDict ):
     tool.MufastDRThres   = [0.4,   0.4,   0.4,   0.4,   0.4]
     tool.MassThres       = [0.004, 0.002, 0.006, 0.006, 0.006]
 
-    addMonitoring( tool, TrigmuCombHypoMonitoring, "TrigmuCombHypoTool", chainDict['chainName'] )
+    addMonitoring( tool, TrigL2MuonOverlapRemoverMonitoringMucomb, "TrigmuCombHypoTool", chainDict['chainName'] )
 
     return tool
 
diff --git a/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMonitoringMT.py b/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMonitoringMT.py
index d012fc170ec7..36fd49b9e114 100755
--- a/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMonitoringMT.py
+++ b/Trigger/TrigHypothesis/TrigMuonHypoMT/python/TrigMuonHypoMonitoringMT.py
@@ -71,7 +71,7 @@ class TrigmuCombHypoMonitoring(GenericMonitoringTool):
         self.defineHistogram('A0', type='TH1F', path='EXPERT', title="PCA along x-y from ID track from #muComb; PCA(A0) (mm)",
                              xbins=100, xmin=-0.6, xmax=0.6)
 
-class TrigL2MuonOverlapRemoverMonitoringMucomb(GenericMonitoringTool):
+class TrigL2MuonOverlapRemoverMonitoringMucomb(TrigmuCombHypoMonitoring):
     def __init__ (self, name):
         super(TrigL2MuonOverlapRemoverMonitoringMucomb, self).__init__(name)
 
diff --git a/Trigger/TrigHypothesis/TrigMuonHypoMT/src/TrigmuCombHypoTool.cxx b/Trigger/TrigHypothesis/TrigMuonHypoMT/src/TrigmuCombHypoTool.cxx
index 426a8cbaf7cc..5576199a33de 100644
--- a/Trigger/TrigHypothesis/TrigMuonHypoMT/src/TrigmuCombHypoTool.cxx
+++ b/Trigger/TrigHypothesis/TrigMuonHypoMT/src/TrigmuCombHypoTool.cxx
@@ -352,29 +352,28 @@ StatusCode TrigmuCombHypoTool::applyOverlapRemoval(std::vector<TrigmuCombHypoToo
 
   if ( numMuon == 0) {
     ATH_MSG_DEBUG( "No positive previous hypo decision. Not need overlap removal." );
-    // auto mucombNrAllEVs     = Monitored::Scalar("NrAllEVs", -9999.);
-    // auto mucombNrActiveEVs  = Monitored::Scalar("NrActiveEVs", -9999.);
-    // auto monitorIt          = Monitored::Group(m_monTool, mucombNrAllEVs, mucombNrActiveEVs);
-    // mucombNrActiveEVs = numMuon;
-    // mucombNrAllEVs = numMuon;
+    auto mucombNrAllEVs     = Monitored::Scalar("NrAllEVs", -9999.);
+    auto mucombNrActiveEVs  = Monitored::Scalar("NrActiveEVs", -9999.);
+    auto monitorIt          = Monitored::Group(m_monTool, mucombNrAllEVs, mucombNrActiveEVs);
+    mucombNrActiveEVs = numMuon;
+    mucombNrAllEVs = numMuon;
     return StatusCode::SUCCESS;
   }
   else if ( numMuon == 1 ) {
     ATH_MSG_DEBUG("Number of muon event = " << numMuon );
     ATH_MSG_DEBUG("no overlap Removal necessary. exitting with all EventViews active." );
-    // auto mucombNrAllEVs     = Monitored::Scalar("NrAllEVs", -9999.);
-    // auto mucombNrActiveEVs  = Monitored::Scalar("NrActiveEVs", -9999.);
-    // auto monitorIt          = Monitored::Group(m_monTool, mucombNrAllEVs, mucombNrActiveEVs);
-    // mucombNrActiveEVs = numMuon;
-    // mucombNrAllEVs = numMuon;
-    // TrigCompositeUtils::addDecisionID(m_decisionId, input[0].decision);
+    auto mucombNrAllEVs     = Monitored::Scalar("NrAllEVs", -9999.);
+    auto mucombNrActiveEVs  = Monitored::Scalar("NrActiveEVs", -9999.);
+    auto monitorIt          = Monitored::Group(m_monTool, mucombNrAllEVs, mucombNrActiveEVs);
+    mucombNrActiveEVs = numMuon;
+    mucombNrAllEVs = numMuon;
     return StatusCode::SUCCESS;
   } else {
     ATH_MSG_DEBUG("Number of muon event = " << numMuon );
-    // auto mucombNrAllEVs  = Monitored::Scalar("NrAllEVs", -9999.);
-    // auto monitorIt       = Monitored::Group(m_monTool, mucombNrAllEVs);
-    // mucombNrAllEVs = numMuon;
-    ATH_CHECK(checkOverlap(input));
+    auto mucombNrAllEVs  = Monitored::Scalar("NrAllEVs", -9999.);
+    auto monitorIt       = Monitored::Group(m_monTool, mucombNrAllEVs);
+    mucombNrAllEVs = numMuon;
+    ATH_CHECK(checkOverlap(toolInput));
     return StatusCode::SUCCESS;
   }
 
@@ -403,9 +402,9 @@ StatusCode TrigmuCombHypoTool::checkOverlap(std::vector<TrigmuCombHypoTool::Comb
 	  ATH_MSG_DEBUG( "inconsistentency in muComb overlap removal for more than two objects" );
 	  ATH_MSG_DEBUG( "two objects are judged as different but both were already marked as identical by someone else as: " );
 	  ATH_MSG_DEBUG( "i/j/result[i]/result[j]=" << i << " / " << j << " / " << mucombResult[i] << " / "  << mucombResult[j] );
-	  // auto mucombError  = Monitored::Scalar("MucombError", -9999.);
-	  // auto monitorIt    = Monitored::Group(m_monTool, mucombError);
-	  // mucombError = TrigL2MuonOverlapRemoverToolConsts::errorCode_inconsistent_overlap1;
+	  auto mucombError  = Monitored::Scalar("MucombError", -9999.);
+	  auto monitorIt    = Monitored::Group(m_monTool, mucombError);
+	  mucombError = TrigmuCombHypoToolConsts::errorCode_inconsistent_overlap1;
 	  errorWhenIdentifyingOverlap = true;
 	}
       }
@@ -414,9 +413,9 @@ StatusCode TrigmuCombHypoTool::checkOverlap(std::vector<TrigmuCombHypoTool::Comb
 	  ATH_MSG_DEBUG( "inconsistentency in muComb based overlap removal for more than two objects" );
 	  ATH_MSG_DEBUG( "two objects are judged as overlap but only either was already marked as overlap to someone else: " );
 	  ATH_MSG_DEBUG( "i/j/result[i]/result[j]=" << i << " / " << j << " / " << mucombResult[i] << " / "  << mucombResult[j] );
-	  // auto mucombError  = Monitored::Scalar("MucombError", -9999.);
-	  // auto monitorIt    = Monitored::Group(m_monTool, mucombError);
-	  // mucombError = TrigL2MuonOverlapRemoverToolConsts::errorCode_inconsistent_overlap2;
+	  auto mucombError  = Monitored::Scalar("MucombError", -9999.);
+	  auto monitorIt    = Monitored::Group(m_monTool, mucombError);
+	  mucombError = TrigmuCombHypoToolConsts::errorCode_inconsistent_overlap2;
 	  errorWhenIdentifyingOverlap = true;
 	}
 	ATH_MSG_DEBUG("   judged as: overlapped objects");
@@ -434,9 +433,9 @@ StatusCode TrigmuCombHypoTool::checkOverlap(std::vector<TrigmuCombHypoTool::Comb
 
   if( errorWhenIdentifyingOverlap ) {
     ATH_MSG_WARNING( "error when resolving overlap. exitting with all EVs active..." );
-    // auto mucombNrActiveEVs  = Monitored::Scalar("NrActiveEVs", -9999.);
-    // auto monitorIt          = Monitored::Group(m_monTool, mucombNrActiveEVs);
-    // mucombNrActiveEVs = numMuon;
+    auto mucombNrActiveEVs  = Monitored::Scalar("NrActiveEVs", -9999.);
+    auto monitorIt          = Monitored::Group(m_monTool, mucombNrActiveEVs);
+    mucombNrActiveEVs = numMuon;
     // for(i=0; i<numMuon; i++) TrigCompositeUtils::addDecisionID( m_decisionId, toolInput[i].decision );
     return StatusCode::SUCCESS;
   }
@@ -457,9 +456,9 @@ StatusCode TrigmuCombHypoTool::checkOverlap(std::vector<TrigmuCombHypoTool::Comb
     ATH_CHECK(chooseBestMuon(input, mucombResult));
   } else {
     ATH_MSG_DEBUG( "no overlap identified. exitting with all EventViews active" );
-    // auto mucombNrActiveEVs  = Monitored::Scalar("NrActiveEVs", -9999.);
-    // auto monitorIt          = Monitored::Group(m_monTool, mucombNrActiveEVs);
-    // mucombNrActiveEVs = n_uniqueMuon;
+    auto mucombNrActiveEVs  = Monitored::Scalar("NrActiveEVs", -9999.);
+    auto monitorIt          = Monitored::Group(m_monTool, mucombNrActiveEVs);
+    mucombNrActiveEVs = n_uniqueMuon;
   }
 
   // if(n_uniqueMuon >= m_multiplicity){
@@ -480,12 +479,12 @@ bool TrigmuCombHypoTool::isOverlap(const xAOD::L2CombinedMuon *combMf1,
 				   const xAOD::L2CombinedMuon *combMf2) const
 {
 
-  // auto mucombDR             = Monitored::Scalar("DR", -9999.);
-  // auto mucombMass           = Monitored::Scalar("Mass", -9999.);
-  // auto mucombDRLog10        = Monitored::Scalar("DRLog10", -9999.);
-  // auto mucombMassLog10      = Monitored::Scalar("MassLog10", -9999.);
+  auto mucombDR             = Monitored::Scalar("DR", -9999.);
+  auto mucombMass           = Monitored::Scalar("Mass", -9999.);
+  auto mucombDRLog10        = Monitored::Scalar("DRLog10", -9999.);
+  auto mucombMassLog10      = Monitored::Scalar("MassLog10", -9999.);
 
-  // auto monitorIt       = Monitored::Group(m_monTool, mucombDR, mucombMass, mucombDRLog10, mucombMassLog10);
+  auto monitorIt       = Monitored::Group(m_monTool, mucombDR, mucombMass, mucombDRLog10, mucombMassLog10);
 
 
   ATH_MSG_DEBUG( "   ...mF1: pt/eta/phi=" << combMf1->pt()/CLHEP::GeV << " / " << combMf1->eta() << " / " << combMf1->phi() );
@@ -538,10 +537,10 @@ bool TrigmuCombHypoTool::isOverlap(const xAOD::L2CombinedMuon *combMf1,
   bool dRisClose = false;
   double dr = dR(combMf1->eta(),combMf1->phi(),combMf2->eta(),combMf2->phi());
 
-  // mucombDR = dr;
-  // const double monitor_limit = 1e-4;
-  // double dr_mon = (dr>=monitor_limit) ? dr : monitor_limit;
-  // mucombDRLog10 = log10(dr_mon);
+  mucombDR = dr;
+  const double monitor_limit = 1e-4;
+  double dr_mon = (dr>=monitor_limit) ? dr : monitor_limit;
+  mucombDRLog10 = log10(dr_mon);
 
   if( m_requireDR ) {
     if( dr < dRThres ) dRisClose = true;
@@ -572,9 +571,9 @@ bool TrigmuCombHypoTool::isOverlap(const xAOD::L2CombinedMuon *combMf1,
   bool massIsClose = false;
   double mass = invMass(TRACK_MASS,combMf1->pt()/CLHEP::GeV,combMf1->eta(),combMf1->phi(),TRACK_MASS,combMf2->pt()/CLHEP::GeV,combMf2->eta(),combMf2->phi());
 
-  // mucombMass = mass;
-  // double mass_mon = (mass>=monitor_limit) ? mass : monitor_limit;
-  // mucombMassLog10 = log10(mass_mon);
+  mucombMass = mass;
+  double mass_mon = (mass>=monitor_limit) ? mass : monitor_limit;
+  mucombMassLog10 = log10(mass_mon);
 
   if( m_requireMass ) {
     if( mass < massThres ) massIsClose = true;
@@ -652,14 +651,14 @@ StatusCode TrigmuCombHypoTool::chooseBestMuon(std::vector<TrigmuCombHypoTool::Co
   size_t numMuon = input.size();
   unsigned int i,j,k;
 
-  // auto mucombNrActiveEVs    = Monitored::Scalar("NrActiveEVs", -9999.);
-  // auto mucombNrOverlapped   = Monitored::Scalar("NrOverlapped", 0);
-  // auto mucombOverlappedEta  = Monitored::Scalar("OverlappedEta", -9999.);
-  // auto mucombOverlappedPhi  = Monitored::Scalar("OverlappedPhi", -9999.);
-  // auto mucombOverlappedPt   = Monitored::Scalar("OverlappedPt", -9999.);
+  auto mucombNrActiveEVs    = Monitored::Scalar("NrActiveEVs", -9999.);
+  auto mucombNrOverlapped   = Monitored::Scalar("NrOverlapped", 0);
+  auto mucombOverlappedEta  = Monitored::Scalar("OverlappedEta", -9999.);
+  auto mucombOverlappedPhi  = Monitored::Scalar("OverlappedPhi", -9999.);
+  auto mucombOverlappedPt   = Monitored::Scalar("OverlappedPt", -9999.);
 
-  // auto monitorIt       = Monitored::Group(m_monTool, mucombNrActiveEVs, mucombNrOverlapped,
-  // 					  mucombOverlappedPt, mucombOverlappedEta, mucombOverlappedPhi);
+  auto monitorIt       = Monitored::Group(m_monTool, mucombNrActiveEVs, mucombNrOverlapped,
+  					  mucombOverlappedPt, mucombOverlappedEta, mucombOverlappedPhi);
 
   ATH_MSG_DEBUG( "--- choose best among overlaps & disable EVs (muComb based) ---" );
   for(i=0; i<numMuon; i++) {
@@ -704,12 +703,12 @@ StatusCode TrigmuCombHypoTool::chooseBestMuon(std::vector<TrigmuCombHypoTool::Co
 
 	  input[j].passOR = false;
 
-	  // // monitoring
-	  // const xAOD::L2CombinedMuon* CombMf = toolInput[j].overlap;
-	  // mucombNrOverlapped++;
-	  // mucombOverlappedPt = CombMf->pt()* CombMf->charge() /CLHEP::GeV;
-	  // mucombOverlappedEta = CombMf->eta();
-	  // mucombOverlappedPhi = CombMf->phi();
+	  // monitoring
+	  const xAOD::L2CombinedMuon* CombMf = input[j].muComb;
+	  mucombNrOverlapped++;
+	  mucombOverlappedPt = CombMf->pt()* CombMf->charge() /CLHEP::GeV;
+	  mucombOverlappedEta = CombMf->eta();
+	  mucombOverlappedPhi = CombMf->phi();
 	}
 	if( j == best_ev ){
 	  ATH_MSG_DEBUG( "      EventView( j=" << j << " ) is best one" );
@@ -717,7 +716,7 @@ StatusCode TrigmuCombHypoTool::chooseBestMuon(std::vector<TrigmuCombHypoTool::Co
       }
     }
   }
-  // mucombNrActiveEVs = numMuon - mucombNrOverlapped;
+  mucombNrActiveEVs = numMuon - mucombNrOverlapped;
 
   return StatusCode::SUCCESS;
 }
diff --git a/Trigger/TrigHypothesis/TrigMuonHypoMT/src/TrigmuCombHypoTool.h b/Trigger/TrigHypothesis/TrigMuonHypoMT/src/TrigmuCombHypoTool.h
index 790f47d8e74a..2f2cee1cae1a 100644
--- a/Trigger/TrigHypothesis/TrigMuonHypoMT/src/TrigmuCombHypoTool.h
+++ b/Trigger/TrigHypothesis/TrigMuonHypoMT/src/TrigmuCombHypoTool.h
@@ -18,6 +18,11 @@ class StoreGateSvc;
 // --------------------------------------------------------------------------------
 
 namespace TrigmuCombHypoToolConsts {
+const int  errorCode_cannot_get_EL         = 1;
+const int  errorCode_EL_not_valid          = 2;
+const int  errorCode_inconsistent_overlap1 = 3;
+const int  errorCode_inconsistent_overlap2 = 4;
+const int  errorCode_cannot_get_RoI        = 5;
 }
 
 // --------------------------------------------------------------------------------
-- 
GitLab