From 7082ae16ae1da9903ff5cc2adaa514e09d151d77 Mon Sep 17 00:00:00 2001
From: Jonathan Bossio <jonathan.bossio@cern.ch>
Date: Tue, 25 Aug 2020 14:48:57 +0200
Subject: [PATCH] Monitor Online PFlow jets/chains

---
 .../python/TrigJetMonitorAlgorithm.py         | 129 +++++++++++-------
 1 file changed, 80 insertions(+), 49 deletions(-)

diff --git a/Trigger/TrigMonitoring/TrigJetMonitoring/python/TrigJetMonitorAlgorithm.py b/Trigger/TrigMonitoring/TrigJetMonitoring/python/TrigJetMonitorAlgorithm.py
index 9e66019343ac..771577e14d30 100644
--- a/Trigger/TrigMonitoring/TrigJetMonitoring/python/TrigJetMonitorAlgorithm.py
+++ b/Trigger/TrigMonitoring/TrigJetMonitoring/python/TrigJetMonitorAlgorithm.py
@@ -10,29 +10,45 @@
 
 import sys,argparse
 
-# Jet collection for each HLT jet
-Chain2JetCollDict = dict()
-# Jet collections for AthenaMT and Legacy
-JetCollections    = dict() # HLT jet collections
+#####################################
+# Offline jet collections to monitor
+#####################################
+
 OfflineJetCollections = [
   'AntiKt4EMTopoJets',
   'AntiKt4EMPFlowJets',
 ]
 
-# L1 monitoring
+###########################################
+# L1 jet collections and chains to monitor
+###########################################
+
 L1JetCollections = ['LVL1JetRoIs']
-Chain2L1JetCollDict = {
+Chain2L1JetCollDict = { # set L1 jet collection name for L1 jet chains
   'L1_J15'  : 'LVL1JetRoIs',
   'L1_J20'  : 'LVL1JetRoIs',
   'L1_J100' : 'LVL1JetRoIs',
 }
 
+
+############################################
+# HLT jet collections and chains to monitor
+############################################
+
+Chain2JetCollDict = dict() # set HLT jet collection for AT and legacy master HLT jet chains
+JetCollections    = dict() # List of HLT jet collections for AT and legacy master
+
 # AthenaMT
-JetCollections['MT']    = [
-  'HLT_AntiKt4EMTopoJets_subjesIS',                   # default small-R
+JetCollections['MT'] = [
+  'HLT_AntiKt4EMTopoJets_subjesIS',                   # default small-R EM
   'HLT_AntiKt10JetRCJets_subjesIS',                   # a10r
   'HLT_AntiKt10LCTopoJets_subjes',                    # a10
   'HLT_AntiKt10LCTopoTrimmedPtFrac5SmallR20Jets_jes', # a10t
+  'HLT_AntiKt4EMPFlowJets_subjesIS_ftf',              # pflow w/o calo+track GSC
+  'HLT_AntiKt4EMPFlowJets_subjesgscIS_ftf',           # pflow w/ calo+track GSC
+  'HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf',        # pflow w/ residual + calo+track GSC
+  'HLT_AntiKt4EMPFlowJets_nojcalib_ftf',              # pflow nojcalib
+  'HLT_AntiKt4EMPFlowCSSKJets_nojcalib_ftf',          # pflow cssk nojcalib
 ]
 Chain2JetCollDict['MT'] = {
   'HLT_j420_L1J100'                        : 'HLT_AntiKt4EMTopoJets_subjesIS',
@@ -43,10 +59,16 @@ Chain2JetCollDict['MT'] = {
   'HLT_j460_a10_lcw_subjes_L1J100'         : 'HLT_AntiKt10LCTopoJets_subjes',
   'HLT_j460_a10t_lcw_jes_L1J100'           : 'HLT_AntiKt10LCTopoTrimmedPtFrac5SmallR20Jets_jes',
   'HLT_2j330_a10t_lcw_jes_35smcINF_L1J100' : 'HLT_AntiKt10LCTopoTrimmedPtFrac5SmallR20Jets_jes',
+  'HLT_j45_ftf_pf_L1J20'                   : 'HLT_AntiKt4EMPFlowJets_subjesIS_ftf',
+  'HLT_j45_ftf_subjesgscIS_pf_L1J20'       : 'HLT_AntiKt4EMPFlowJets_subjesgscIS_ftf',
+  'HLT_j45_ftf_subresjesgscIS_pf_L1J20'    : 'HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf',
+  'HLT_j85_ftf_pf_L1J20'                   : 'HLT_AntiKt4EMPFlowJets_subjesIS_ftf',
+  'HLT_j45_ftf_pf_nojcalib_L1J20'          : 'HLT_AntiKt4EMPFlowJets_nojcalib_ftf',
+  'HLT_j45_ftf_csskpf_nojcalib_L1J20'      : 'HLT_AntiKt4EMPFlowCSSKJets_nojcalib_ftf',
 }
- 
+
 # Legacy
-JetCollections['Legacy']    = [
+JetCollections['Legacy'] = [
   'HLT_xAOD__JetContainer_a4tcemsubjesISFS',    # default small-R
   'HLT_xAOD__JetContainer_a10r_tcemsubjesISFS', # a10r
   'HLT_xAOD__JetContainer_a10tclcwsubjesFS',    # a10
@@ -63,7 +85,49 @@ Chain2JetCollDict['Legacy'] = {
   'HLT_3j200'                              : 'HLT_xAOD__JetContainer_a4tcemsubjesISFS',
 }
 
+#########################################################
+# Schedule more histograms for dedicated jet collections
+#########################################################
 from JetMonitoring.JetMonitoringConfig import JetMonAlgSpec, HistoSpec, EventHistoSpec, SelectSpec, ToolSpec #VarSpec can be added to define specific/custom variables
+
+# All offline jet collections
+ExtraOfflineHists = [
+  HistoSpec('HECFrac', (50,0,1), title="HECFrac;HEC fraction;Entries" ),
+  HistoSpec('EMFrac', (50,0,1), title="EMFrac;EM fraction;Entries" ),
+  HistoSpec('Jvt', (50,-0.1,1), title="JVT;JVT;Entries" ),
+  "JVFCorr",
+  "JvtRpt",
+  "NumTrkPt1000[0]",
+  "TrackWidthPt1000[0]",
+  "SumPtTrkPt500[0]",
+  SelectSpec( 'LooseBadFailedJets', 'LooseBad', InverseJetSel=True, FillerTools = ["pt","phi","eta"]),
+]
+
+# All online small-R jet collections
+ExtraSmallROnlineHists = [
+  HistoSpec('HECFrac', (50,0,1), title="HECFrac;HEC fraction;Entries" ),
+  HistoSpec('EMFrac', (50,0,1), title="EMFrac;EM fraction;Entries" ),
+  HistoSpec('DetectorEta', (100,-5,5), title="DetectorEta;Detector #eta;Entries" ), 
+  HistoSpec('ActiveArea', (80,0,0.8), title="ActiveArea;Active Area;Entries" ), 
+  HistoSpec('et:GeV;eta',  (100,0,750, 50,-5,5) , title='#eta vs E_{T};E_{T} [GeV];#eta;Entries'),
+  "EM3Frac",
+  "Tile0Frac",
+]
+
+# All online large-R jet collections
+ExtraLargeROnlineHists = [
+]
+
+# Kinematics at different scales for offline and small-R online jet collections
+OfflineScaleMomenta = [ "ConstitScale", "EMScale", "PileupScale", "EtaJESScale"]
+OnlineScaleMomenta  = [ "ConstitScale" ]
+for var in [ "pt", "eta", "m" ]:
+  for offlinescale in OfflineScaleMomenta:
+    ExtraOfflineHists.append("Jet"+offlinescale+"Momentum_"+var)
+  for onlinescale in OnlineScaleMomenta:
+    ExtraSmallROnlineHists.append("Jet"+onlinescale+"Momentum_"+var)
+
+
 from AthenaConfiguration.AllConfigFlags import ConfigFlags
 
 def TrigJetMonConfig(inputFlags):
@@ -110,6 +174,7 @@ def TrigJetMonConfig(inputFlags):
   # the AthMonitorCfgHelper returns an accumulator to be used by the general configuration system.
   return helper.result()
 
+
 # Basic selection of histograms common for online and offline jets
 def basicJetMonAlgSpec(jetcoll,isOnline,athenaMT):
   # we use a specialized dictionnary (JetMonAlgSpec) which will be translated into the final C++ tool
@@ -186,43 +251,6 @@ def basicJetMonAlgSpec(jetcoll,isOnline,athenaMT):
 
   return Conf
 
-# Additional histograms for offline jets
-ExtraOfflineHists = [
-  HistoSpec('HECFrac', (50,0,1), title="HECFrac;HEC fraction;Entries" ),
-  HistoSpec('EMFrac', (50,0,1), title="EMFrac;EM fraction;Entries" ),
-  HistoSpec('Jvt', (50,-0.1,1), title="JVT;JVT;Entries" ),
-  "JVFCorr",
-  "JvtRpt",
-  "NumTrkPt1000[0]",
-  "TrackWidthPt1000[0]",
-  "SumPtTrkPt500[0]",
-  SelectSpec( 'LooseBadFailedJets', 'LooseBad', InverseJetSel=True, FillerTools = ["pt","phi","eta"]),
-]
-
-# Additional histograms for online jets
-ExtraSmallROnlineHists = [
-  HistoSpec('HECFrac', (50,0,1), title="HECFrac;HEC fraction;Entries" ),
-  HistoSpec('EMFrac', (50,0,1), title="EMFrac;EM fraction;Entries" ),
-  HistoSpec('DetectorEta', (100,-5,5), title="DetectorEta;Detector #eta;Entries" ), 
-  HistoSpec('ActiveArea', (80,0,0.8), title="ActiveArea;Active Area;Entries" ), 
-  HistoSpec('et:GeV;eta',  (100,0,750, 50,-5,5) , title='#eta vs E_{T};E_{T} [GeV];#eta;Entries'),
-  "EM3Frac",
-  "Tile0Frac",
-]
-
-ExtraLargeROnlineHists = [
-]
-
-#Additional online & offline histograms to include kinematics at various jet calibration scales
-OfflineScaleMomenta = [ "ConstitScale", "EMScale", "PileupScale", "EtaJESScale"]
-OnlineScaleMomenta = [ "ConstitScale" ]
-
-for var in [ "pt", "eta", "m" ]:
-  for offlinescale in OfflineScaleMomenta:
-    ExtraOfflineHists.append("Jet"+offlinescale+"Momentum_"+var)
-  for onlinescale in OnlineScaleMomenta:
-    ExtraSmallROnlineHists.append("Jet"+onlinescale+"Momentum_"+var)
-
 
 def jetMonitoringConfig(inputFlags,jetcoll,athenaMT):
    '''Function to configures some algorithms in the monitoring system.'''
@@ -233,17 +261,20 @@ def jetMonitoringConfig(inputFlags,jetcoll,athenaMT):
    if isOnline:
      if 'AntiKt4' in jetcoll or 'a4tcem' in jetcoll:
        for hist in ExtraSmallROnlineHists: conf.appendHistos(hist)
-       if 'ftf' in jetcoll:
+       if 'ftf' in jetcoll: # dedicated histograms for FTF chains
          conf.appendHistos("JVFCorr")
          conf.appendHistos("JvtRpt")
          conf.appendHistos("SumPtTrkPt500[0]")
          conf.appendHistos("NumTrkPt1000[0]")
          conf.appendHistos("TrackWidthPt1000[0]")
+         if 'PF' in jetcoll: # dedicated histograms for online PFlow jets
+           conf.appendHistos("SumPtChargedPFOPt500[0]")
+           conf.appendHistos("fCharged")
      else:
        for hist in ExtraLargeROnlineHists: conf.appendHistos(hist)
    else: # offline
      for hist in ExtraOfflineHists: conf.appendHistos(hist)
-     if 'pf' in jetcoll or 'PF' in jetcoll:
+     if 'PF' in jetcoll: # dedicated histograms for offline PFlow jets
        conf.appendHistos("SumPtChargedPFOPt500[0]")
        conf.appendHistos("fCharged")
 
-- 
GitLab