diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ConditionsToolSetterHT.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ConditionsToolSetterHT.py new file mode 100644 index 0000000000000000000000000000000000000000..c2a8236c6df68863d486377e849eea253deb10fc --- /dev/null +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/ConditionsToolSetterHT.py @@ -0,0 +1,88 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +"""Instantiates TrigJetHypoToolConfig_fastreduction AlgTool +from a hypo tree.""" + +from __future__ import print_function + +from TrigHLTJetHypo.TrigHLTJetHypoConf import ( + TrigJetConditionConfig_ht, + TrigJetHypoToolConfig_ht, + TrigJetHypoToolHelperMT, +) + + +class ConditionsToolSetterHT(object): + + """Visitor to set instantiated AlgTools to a jet hypo tree""" + + def __init__(self, name): + + self.name = name + # for simple, use TrigJetConditionConfig_etaet. Needs to be + # completed because simple can conain any single jet condition + self.tool_factories = { + 'htcondition': [TrigJetConditionConfig_ht, 0], + 'htconfig': [TrigJetHypoToolConfig_ht, 0], + 'helper': [TrigJetHypoToolHelperMT, 0], + } + + + def _get_tool_instance(self, key, extra=''): + + klass = self.tool_factories[key][0] + sn = self.tool_factories[key][1] + + name = '%s_%d_fn' % (key, sn) + if extra: name += '_' + extra + tool = klass(name=name) + self.tool_factories[key][1] += 1 + return tool + + def report(self): + wid = max(len(k) for k in self.tool_factories.keys()) + rep = '\n%s: ' % self.__class__.__name__ + + rep += '\n'.join( + ['%s: %d' % (k.ljust(wid), v[1]) + for k, v in self.tool_factories.items()]) + + return rep + + def mod(self, node): + """Entry point for this module. HT specific. + Set up + TrigJetConditionConfig_ht, + TrigJetHypoToolConfig_h + TrigJetHypoToolHelperMT + """ + + # navigate the tree filling in node-parent and node- Condtion factory + # relations + + + # root = Node(scenario='root') + # root.children = [node] + + # self._check_scenarios(root) + + # root is an alias for node - as in ConditionTooSetterFastReduction + assert node.scenario == 'ht' + + print (node) + conditionMaker = self._get_tool_instance('htcondition') + config_tool = self._get_tool_instance('htconfig') + cut_windows = {} + [cut_windows.update(d) for d in node.conf_attrs] + print (cut_windows) + conditionMaker.htmin = cut_windows['ht']['min'] + conditionMaker.etmin = cut_windows['et']['min'] + conditionMaker.etamin = cut_windows['eta']['min'] + conditionMaker.etamax = cut_windows['eta']['max'] + print (conditionMaker) + + config_tool.conditionMakers = [conditionMaker] + helper_tool = self._get_tool_instance('helper') + helper_tool.HypoConfigurer = config_tool + + self.tool = helper_tool diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py index 749a7d141876183a439196f83d2e2988c4eeedee..130957aa5ce8c26843be5803c53131832b66362b 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/TrigJetHypoToolConfig.py @@ -3,11 +3,13 @@ from __future__ import print_function from TrigHLTJetHypo.TrigHLTJetHypoConf import TrigJetHypoToolMT -from TrigHLTJetHypo.treeVisitors import TreeParameterExpander -from TrigHLTJetHypo.ConditionsToolSetterTree import ConditionsToolSetterTree -from TrigHLTJetHypo.ConditionsToolSetterFastReduction import ( +from TrigHLTJetHypo.treeVisitors import TreeParameterExpander +from TrigHLTJetHypo.ConditionsToolSetterTree import ConditionsToolSetterTree +from TrigHLTJetHypo.ConditionsToolSetterFastReduction import ( ConditionsToolSetterFastReduction, - ) +) + +from TrigHLTJetHypo.ConditionsToolSetterHT import ConditionsToolSetterHT from TrigHLTJetHypo.chainDict2jetLabel import chainDict2jetLabel @@ -55,7 +57,8 @@ def trigJetHypoToolHelperFromDict_(chain_label, else: if toolSetter.__class__.__name__ in ( - 'ConditionsToolSetterFastReduction',): + 'ConditionsToolSetterFastReduction', + 'ConditionsToolSetterHT'): toolSetter.mod(tree) tool = toolSetter.tool @@ -96,7 +99,12 @@ def trigJetHypoToolHelperFromDict(chain_dict): chain_name = chain_dict['chainName'] - toolSetter=ConditionsToolSetterFastReduction(chain_name) + toolSetter = None + if 'HT' in chain_name: + toolSetter=ConditionsToolSetterHT(chain_name) + else: + toolSetter=ConditionsToolSetterFastReduction(chain_name) + return trigJetHypoToolHelperFromDict_(chain_label, chain_name, toolSetter) @@ -115,7 +123,7 @@ def trigJetHypoToolFromDict(chain_dict): tool.helper_tool = trigJetHypoToolHelperFromDict(chain_dict) # controls whether debug visitor is sent to helper tool - debug = False # SET TO False WHEN COMMITTING + debug = True # SET TO False WHEN COMMITTING tool.visit_debug = debug log.info('%s', tool) diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py index 79615a71c7e2f7f094f5840fd624f7312b0c8ee8..a5b57eec8a10b028c0a2a330f0166a48110e866e 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/chainDict2jetLabel.py @@ -287,10 +287,10 @@ def _make_ht_label(chain_parts): The cut set can be extended according to the pattern """ - assert len(chain_parts) == 1 + assert len(chain_parts) == 1, '_make_ht_label, no. of chain parts != 1' scenario = chain_parts[0]['hypoScenario'] - assert scenario.startswith('ht') + assert scenario.startswith('HT'), '_make_ht_label(): scenario does not start with HT' arg_res = [ re.compile(r'^(?P<lo>\d*)(?P<key>ht)(?P<hi>\d*)$'), @@ -302,13 +302,17 @@ def _make_ht_label(chain_parts): 'ht': ('0', 'inf'), 'et': ('0', 'inf'), 'eta': ('0', 'inf'), - } + } args = _args_from_scenario(scenario) argvals = {} + nargs = len(args) + assert len(args) <= len(arg_res), 'bad num of args %d, expected < %d' % (len(args), + len(arg_res)) + + # obtain argument values frrom scenario while args: - assert len(args) == len(arg_res) arg = args.pop() for r in arg_res: m = r.match(arg) @@ -320,22 +324,25 @@ def _make_ht_label(chain_parts): try: lo = float(gd['lo']) except ValueError: - lo = defaults[key][0] + lo = float(defaults[key][0]) argvals[key+'lo'] = lo try: hi = float(gd['hi']) except ValueError: - hi = defaults[key][1] + hi = float(defaults[key][1]) argvals[key+'hi'] = hi - assert len(args) == len(arg_res) - assert len(args) == 0 + print (argvals) + assert len(argvals) == 2*nargs, 'no of args: %d, expected %d' % (len(argvals), 2*nargs) - return """ + print ('sent 100') + result = """ ht([(%(htlo).0fht) - (%(etlo).0fet%(ethi).0f) + (%(etlo).0fet) (%(etalo).0feta%(etahi).0f) ])""" % argvals + print (result) + return result @@ -392,6 +399,7 @@ def chainDict2jetLabel(chain_dict): # suported scenarios router = { 'simple': _make_simple_label, + 'HT': _make_ht_label, 'vbenf': _make_vbenf_label, 'dijet': _make_dijet_label, 'combinationsTest': _make_combinationsTest_label, diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/testChainDictMaker.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/testChainDictMaker.py index 8463fe5eea32b602c946b8a7105cf3a41040ba8c..b60f1b83b9fea7c282242895b9822829884758ff 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/testChainDictMaker.py +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/testChainDictMaker.py @@ -1,6 +1,8 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """Make chain dicts for testing jet hypo config modules""" +from __future__ import print_function + from TriggerMenuMT.HLTMenuConfig.Menu.Physics_pp_run3_v1 import ( SingleJetGroup, MultiJetGroup) @@ -18,7 +20,7 @@ def testChainDictMaker(): ChainProp(name='HLT_j80_j60_L1J15', l1SeedThresholds=['FSNOSEED']*2, groups=MultiJetGroup), - ChainProp(name='HLT_j0_HT1000htSEP100etSEP0eta320_L1J15', + ChainProp(name='HLT_j0_HTSEP1000htSEP100etSEP0eta320_L1J15', l1SeedThresholds=['FSNOSEED'], groups=MultiJetGroup), @@ -41,5 +43,5 @@ def testChainDictMaker(): if __name__ == '__main__': dicts = testChainDictMaker() for d in dicts: - print - print d + print('') + print (d) diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py index a368fff65cf1bda61fb856e8242033f0d3509f2f..233b6e0686b9d1c3d6a9ab98f496b30dee754920 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/python/treeVisitors.py @@ -52,6 +52,7 @@ def scaleFactors(parameter): 'neta': -0.01, 'peta': 0.01, 'et': 1000., + 'ht': 1000., 'smc': 1000., 'djdeta': 0.1, 'djmass': 1000., @@ -403,6 +404,7 @@ class TreeParameterExpander(object): 'z': TreeParameterExpander_null, 'simple': TreeParameterExpander_simple, 'simplepartition': TreeParameterExpander_simple, + 'ht': TreeParameterExpander_simple, 'dijet': TreeParameterExpander_dijet, 'qjet': TreeParameterExpander_simple, 'not': TreeParameterExpander_null, diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/HTConditionMT.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/HTConditionMT.cxx index 473b3ae3f4c9a675b41d85e49589fa9f3e35c89c..bcc456d1a53ab543dc6ac23cbfa82a6b709489d0 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/HTConditionMT.cxx +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/HTConditionMT.cxx @@ -24,18 +24,27 @@ HTConditionMT::HTConditionMT(double ht_min, } -bool HTConditionMT::isSatisfied(const HypoJetVector& ips, - const std::unique_ptr<ITrigJetHypoInfoCollector>&) const { +bool +HTConditionMT::isSatisfied(const HypoJetVector& ips, + const std::unique_ptr<ITrigJetHypoInfoCollector>& infoCollector) const { if (m_filter) { HypoJetVector ips_c(ips.begin(), ips.end()); auto iter = std::partition(ips_c.begin(), ips_c.end(), *m_filter); + if (infoCollector) { + infoCollector -> collect("", "No of jets after filtering " + + std::to_string(iter - ips_c.begin())); + } + return std::accumulate(ips_c.begin(), iter, 0.0, [](double sum, const HypoJet::IJet* jp){ return sum + jp->et();}) > m_htMin; } else { + if(infoCollector) { + infoCollector -> collect("", "Nofiltering"); + } return std::accumulate(ips.begin(), ips.end(), diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetConditionConfig_ht.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetConditionConfig_ht.cxx new file mode 100644 index 0000000000000000000000000000000000000000..6c7de10a5c40de22198bf695adb263355e5d2ba1 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetConditionConfig_ht.cxx @@ -0,0 +1,68 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/* + Instantiator for Ht Conditions + */ +#include "TrigJetConditionConfig_ht.h" +#include "GaudiKernel/StatusCode.h" +#include "./HTConditionMT.h" +#include "./ArgStrToDouble.h" + +TrigJetConditionConfig_ht::TrigJetConditionConfig_ht(const std::string& type, + const std::string& name, + const IInterface* parent) : + base_class(type, name, parent){ + +} + + +StatusCode TrigJetConditionConfig_ht::initialize() { + CHECK(checkVals()); + + return StatusCode::SUCCESS; +} + + +ConditionMT TrigJetConditionConfig_ht::getCondition() const { + auto a2d = ArgStrToDouble(); + return std::make_unique<HTConditionMT>(a2d(m_htmin), + a2d(m_etmin), + a2d(m_etamin), + a2d(m_etamax)); +} + + +StatusCode TrigJetConditionConfig_ht::checkVals() const { + auto a2d = ArgStrToDouble(); + if (a2d(m_htmin) < 0.){ + ATH_MSG_ERROR("ht min < 0."); + return StatusCode::FAILURE; + } + + if (a2d(m_etmin) < 0.){ + ATH_MSG_ERROR("etmin < 0"); + return StatusCode::FAILURE; + } + + if (a2d(m_etamin) < 0.){ + ATH_MSG_ERROR("abseta min < 0"); + return StatusCode::FAILURE; + } + + + if (a2d(m_etamin) > a2d(m_etamax)){ + ATH_MSG_ERROR("abseta min > abseta max"); + return StatusCode::FAILURE; + } + return StatusCode::SUCCESS; +} + +bool TrigJetConditionConfig_ht::addToCapacity(std::size_t) { + return false; +} + +std::size_t TrigJetConditionConfig_ht::capacity() const { + return getCondition()->capacity(); +} diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetConditionConfig_ht.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetConditionConfig_ht.h new file mode 100644 index 0000000000000000000000000000000000000000..222b809d3eb41f5df2b710ec027ed72dea1f8144 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetConditionConfig_ht.h @@ -0,0 +1,48 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef TRIGJETCONDITIONCONFIG_HT_H +#define TRIGJETCONDITIONCONFIG_HT_H + +#include "ITrigJetConditionConfig.h" +#include "./ConditionsDefsMT.h" +#include "AthenaBaseComps/AthAlgTool.h" + +#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/ConditionsDefs.h" + +class TrigJetConditionConfig_ht: +public extends<AthAlgTool, ITrigJetConditionConfig> { + + public: + + TrigJetConditionConfig_ht(const std::string& type, + const std::string& name, + const IInterface* parent); + + virtual StatusCode initialize() override; + virtual ConditionMT getCondition() const override; + + virtual bool addToCapacity(std::size_t) override; + virtual std::size_t capacity() const override; + + private: + + // cut on sum + Gaudi::Property<std::string> + m_htmin{this, "htmin", {"0"}, "min ht (et sum for selected jets)"}; + + // cuts on input vectors + + Gaudi::Property<std::string> + m_etmin{this, "etmin", {"0"}, "min et for each jet"}; + + Gaudi::Property<std::string> + m_etamin{this, "etamin", {"0"}, "min eta for each jet"}; + + Gaudi::Property<std::string> + m_etamax{this, "etamax", {"inf"}, "max eta for each jet"}; + + StatusCode checkVals() const; +}; +#endif diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_ht.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_ht.cxx index 02f4f39d2bd37f1d57f705900db50223cd76c644..d5a94d93493ac4c808137c5d890d8b6af0b723ea 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_ht.cxx +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_ht.cxx @@ -8,7 +8,7 @@ #include "./conditionsFactoryMT.h" -#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/SingleJetGrouper.h" +#include "TrigHLTJetHypo/TrigHLTJetHypoUtils/AllJetsGrouper.h" #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/xAODJetAsIJetFactory.h" #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/CleanerFactory.h" #include "TrigHLTJetHypo/TrigHLTJetHypoUtils/TrigHLTJetHypoHelper2.h" @@ -68,7 +68,7 @@ TrigJetHypoToolConfig_ht::requiresNJets() const { std::unique_ptr<IJetGrouper> TrigJetHypoToolConfig_ht::getJetGrouper() const { - return std::make_unique<SingleJetGrouper>(); + return std::make_unique<AllJetsGrouper>(); } std::unique_ptr<IGroupsMatcherMT> diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_ht.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_ht.h index 9b008b048c2dba9b86f179ae7b670e8088bbf4af..58a7b9e91be21faec740dfd396edf0a3d3ee86d7 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_ht.h +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolConfig_ht.h @@ -50,13 +50,7 @@ public extends<AthAlgTool, ITrigJetHypoToolConfig> { ToolHandleArray<ITrigJetConditionConfig> m_conditionMakers{ this, "conditionMakers", {}, "hypo tree node to conditiionMaker map"}; - Gaudi::Property<std::vector<std::size_t>> m_treeVec{ - this, "treeVector", {}, "integer sequence representation of jet hypo tree"}; - - Gaudi::Property<std::vector<int>> m_sharedNodesVec{ - this, "sharedVector", {}, "nodeID groups for nodes that see input jets"}; - - std::vector<std::vector<int>> m_sharedNodes{}; + }; #endif diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolHelperMT.h b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolHelperMT.h index 7e39e5ea4a0eeb5d04617739398f0a440eafa4b7..085a05005b713006673aeaf4a3b2f183b80cc6be 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolHelperMT.h +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/TrigJetHypoToolHelperMT.h @@ -74,10 +74,10 @@ public extends<AthAlgTool, ITrigJetHypoToolHelperMT> { this, "HypoConfigurer", {}, "Configurer to set up TrigHLTJetHypoHelper2"}; Gaudi::Property<int> - m_parentNodeID {this, "parent_id", {}, "hypo tool tree parent node id"}; + m_parentNodeID {this, "parent_id", {0}, "hypo tool tree parent node id"}; Gaudi::Property<int> - m_nodeID {this, "node_id", {}, "hypo tool tree node id"}; + m_nodeID {this, "node_id", {0}, "hypo tool tree node id"}; Gaudi::Property<bool> m_debug {this, "debug", false, "instantantiate helpers with this debug flag"}; diff --git a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx index 497bc96b5eafdd50be831c17f1aa16b87411855f..7bac3f6c859eb47d55528c833f1d7b67833b3eb9 100644 --- a/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx +++ b/Trigger/TrigHypothesis/TrigHLTJetHypo/src/components/TrigHLTJetHypo_entries.cxx @@ -25,6 +25,7 @@ #include "../TrigJetConditionConfig_abs_eta.h" #include "../TrigJetConditionConfig_signed_eta.h" #include "../TrigJetConditionConfig_et.h" +#include "../TrigJetConditionConfig_ht.h" #include "../TrigJetConditionConfig_dijet_mass.h" #include "../TrigJetConditionConfig_dijet_dphi.h" #include "../TrigJetConditionConfig_dijet_deta.h" @@ -77,6 +78,7 @@ DECLARE_COMPONENT(TrigHLTJetHypo_EtaEt) DECLARE_COMPONENT(TrigJetConditionConfig_signed_eta) DECLARE_COMPONENT(TrigJetConditionConfig_abs_eta) DECLARE_COMPONENT(TrigJetConditionConfig_et) +DECLARE_COMPONENT(TrigJetConditionConfig_ht) DECLARE_COMPONENT(TrigJetConditionConfig_dijet_mass) DECLARE_COMPONENT(TrigJetConditionConfig_dijet_deta) DECLARE_COMPONENT(TrigJetConditionConfig_dijet_dphi) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py index 47727f914ee9c496393fb94ceb66664217c48b6e..bff457151ad634ce7e7c36b03ceb59bef78f7a22 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py @@ -123,7 +123,8 @@ JetChainParts = { 'hypoScenario' : ['simple', 'vbenf', 'vbenfSEP30etSEP34mass35SEP50fbet', 'dijetSEP80j1etSEP0j1eta240SEP80j2etSEP0j2eta240SEP700djmass', - 'HT1000htSEP100etSEP0eta320'], + 'HTSEP1000htSEP100etSEP0eta320', + 'HTSEP100htSEP10etSEP0eta320',], 'smc' : ['30smcINF', '35smcINF', '40smcINF', '50smcINF', '60smcINF', 'nosmc'], }