From 39c95e34d8c56840c490cb0282e8cedf03ba3e15 Mon Sep 17 00:00:00 2001
From: sherwood <peter.sherwood@cern.ch>
Date: Fri, 22 May 2020 16:12:45 +0200
Subject: [PATCH] adding support for HT chain condiguration

---
 .../python/chainDict2jetLabel.py              | 81 ++++++++++++++++---
 .../python/testChainDictMaker.py              | 14 ++++
 .../HLTMenuConfig/Menu/SignatureDicts.py      |  3 +-
 3 files changed, 87 insertions(+), 11 deletions(-)

diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py
index 3fb405fe03b0..ec59f29204ec 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py
@@ -276,6 +276,69 @@ def _make_dijet_label(chain_parts):
             )""" % argvals
 
 
+def _make_ht_label(chain_parts):
+    """ht label. ht cuts, and cuts on particpating jets
+    Currently supported cuts:
+    - all jets: ht
+    - all jets: et
+    - all jets:  eta
+
+    - default values are used for unspecified cuts.
+    The cut set can be extended according to the pattern
+    """
+
+    assert len(chain_parts) == 1
+    scenario = chain_parts[0]['hypoScenario']
+    
+    assert scenario.startswith('ht')
+
+    arg_res = [
+        re.compile(r'^(?P<lo>\d*)(?P<key>ht)(?P<hi>\d*)$'),
+        re.compile(r'^(?P<lo>\d*)(?P<key>et)(?P<hi>\d*)$'),
+        re.compile(r'^(?P<lo>\d*)(?P<key>eta)(?P<hi>\d*)$'),
+    ]
+
+    defaults = {
+        'ht': ('0', 'inf'),
+        'et': ('0', 'inf'),
+        'eta': ('0', 'inf'),
+    }
+
+
+    args = _args_from_scenario(scenario)
+    argvals = {}
+    while args:
+        assert len(args) == len(arg_res)
+        arg = args.pop()
+        for r in arg_res:
+            m = r.match(arg)
+            if m is not None:
+                arg_res.remove(r)
+                gd = m.groupdict()
+                key = gd['key']
+
+                try:
+                    lo = float(gd['lo'])
+                except ValueError:
+                    lo = defaults[key][0]
+                argvals[key+'lo'] = lo 
+                try:
+                    hi = float(gd['hi'])
+                except ValueError:
+                    hi = defaults[key][1]
+                argvals[key+'hi'] =  hi
+
+    assert len(args) == len(arg_res)
+    assert len(args) == 0
+
+    return """
+    ht([(%(htlo).0fht) 
+        (%(etlo).0fet%(ethi).0f)
+        (%(etalo).0feta%(etahi).0f)
+    ])"""  % argvals
+    
+
+
 def _make_combinationsTest_label(chain_parts):
     """make test label for  combinations helper with two simple children."""
 
@@ -369,16 +432,13 @@ def _tests():
 
     print('\n--------- _tests() starts _______')
 
-    from TriggerMenuMT.HLTMenuConfig.Menu import DictFromChainName
-    from TrigHLTJetHypo.ChainLabelParser import ChainLabelParser
-
     chain_names = (
         'HLT_j85_L1J20',
         # 'HLT_j80_0eta240_2j60_320eta490_L1J20',
         # ``'HLT_j85_j70_L1J20',
         'HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet_L1J20',
         'HLT_j80_0eta240_2j60_320eta490_j0_dijetSEP80j1etSEP0j1eta240SEP80j2etSEP0j2eta240SEP700djmass_L1J20',
-        
+        'HLT_j0_ht1000htSEP100etSEP0eta333',        
     )
     
 
@@ -401,9 +461,6 @@ def _tests1():
     
     print('\n--------- _tests1() starts _______')
 
-    from TriggerMenuMT.HLTMenuConfig.Menu import DictFromChainName
-    from TrigHLTJetHypo.ChainLabelParser import ChainLabelParser
-    
     chain_name = 'HLT_j85_L1J20'
 
     chain_dict = DictFromChainName.dictFromChainName(chain_name)
@@ -422,9 +479,6 @@ def _tests1():
 def _tests2():
     print('\n--------- _tests2() starts _______')
 
-    from TriggerMenuMT.HLTMenuConfig.Menu import DictFromChainName
-    from TrigHLTJetHypo.ChainLabelParser import ChainLabelParser
-    
     chain_name = 'HLT_j85_L1J20'
 
     chain_dict = DictFromChainName.dictFromChainName(chain_name)
@@ -442,6 +496,13 @@ def _tests2():
 
 
 if __name__ == '__main__':
+    from TriggerMenuMT.HLTMenuConfig.Menu.Physics_pp_run3_v1 import (
+        SingleJetGroup,
+        MultiJetGroup)
+    
+    from TriggerMenuMT.HLTMenuConfig.Menu.ChainDefInMenu import ChainProp
+    from TriggerMenuMT.HLTMenuConfig.Menu.DictFromChainName import dictFromChainName
+
     _tests()
     _tests1()
     _tests2()
diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/testChainDictMaker.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/testChainDictMaker.py
index 4e0dde308cff..16e9268551be 100644
--- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/testChainDictMaker.py
+++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/testChainDictMaker.py
@@ -18,9 +18,17 @@ def testChainDictMaker():
         ChainProp(name='HLT_j80_j60_L1J15',
                   l1SeedThresholds=['FSNOSEED']*2, groups=MultiJetGroup),
 
+        ChainProp(name='HLT_j0_HT1000htSEP100etSEP0eta320_L1J15',
+                  l1SeedThresholds=['FSNOSEED'], groups=MultiJetGroup),
+
+
         ChainProp(name='HLT_j80_0eta240_2j60_320eta490_j0_dijetSEP80j1etSEP0j1eta240SEP80j2etSEP0j2eta240SEP700djmass_L1J20',
                   l1SeedThresholds=['FSNOSEED']*3,
                   groups=MultiJetGroup),
+
+        ChainProp(name='HLT_j0_vbenfSEP30etSEP34mass35SEP50fbet_L1J20',
+                  l1SeedThresholds=['FSNOSEED']*3,
+                  groups=MultiJetGroup),
     ]
 
     result = []
@@ -29,3 +37,9 @@ def testChainDictMaker():
         result.append((cp.name, chain_dict))
 
     return result
+
+if __name__ == '__main__':
+    dicts = testChainDictMaker()
+    for d in dicts:
+        print
+        print d
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
index 0376aae89c7b..f91598aa726e 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
@@ -122,7 +122,8 @@ JetChainParts = {
     'trkopt'       : ['notrk','ftk','ftkrefit','ftf'],
     'hypoScenario' : ['simple', 'vbenf',
                       'vbenfSEP30etSEP34mass35SEP50fbet',
-                      'dijetSEP80j1etSEP0j1eta240SEP80j2etSEP0j2eta240SEP700djmass'],
+                      'dijetSEP80j1etSEP0j1eta240SEP80j2etSEP0j2eta240SEP700djmass',
+                      'HT1000htSEP100etSEP0eta320'],
     'smc'          : ['30smcINF', '35smcINF', '40smcINF', '50smcINF', '60smcINF', 'nosmc'],
 }
 
-- 
GitLab