ATLAS Offline Software
Loading...
Searching...
No Matches
JetTriggerAnalysisConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3# AnaAlgorithm import(s):
4from AnalysisAlgorithmsConfig.ConfigBlock import ConfigBlock
5from AthenaConfiguration.Enums import LHCPeriod
6from Campaigns.Utils import Campaign
7from TriggerAnalysisAlgorithms.TriggerAnalysisConfig import TriggerAnalysisBlock
8from TriggerAnalysisAlgorithms.TriggerAnalysisSFConfig import trigger_set
9
10
11class JetTriggerMatchingBlock (ConfigBlock):
12
13 def __init__ (self) :
14 super (JetTriggerMatchingBlock, self).__init__ ()
15 self.addOption ('triggerChainsPerYear', {}, type=dict,
16 info="a dictionary with key (string) the year and value (list of "
17 "strings) the trigger chains.")
18 self.addOption ('includeAllYearsPerRun', False, type=bool,
19 info="all configured years in the LHC run will "
20 "be included in all jobs.")
21 self.addOption ('removeHLTPrefix', True, type=bool,
22 info="remove the HLT prefix from trigger chain names.")
23 self.addOption ('containerName', '', type=str,
24 info="the input jet container, with a possible selection, in "
25 "the format `container` or `container.selection`.")
26 self.addOption ('runL1Matching', True, type=bool,
27 info="Add L1 matching decorations")
28 self.addOption ('runHLTMatching', True, type=bool,
29 info="Add HLT matching decorations")
30
31 def instanceName (self) :
32 """Return the instance name for this block"""
33 return self.containerName
34
35 def makeAlgs (self, config) :
36
37 triggers = trigger_set(config, self.triggerChainsPerYear,
38 self.includeAllYearsPerRun)
39 decisionTool = TriggerAnalysisBlock.makeTriggerDecisionTool(config)
40
41 for chain in triggers:
42 chain_noHLT = chain.replace("HLT_", "")
43 chain_out = chain_noHLT if self.removeHLTPrefix else chain
44 chain_out = chain_out.replace("-","_").replace(".","p")
45
46 alg = config.createAlgorithm( 'CP::JetTriggerDecoratorAlg',
47 'JetTriggerDecoratorAlg_' + chain )
48
49 alg.trigger = chain
50
51 # To add missing HLT jets -- only for buggy triggers
52 # These extra jets are added because of bug in trigger navigation
53 # Will be removed once bug fixed at DAOD level
54 alg.triggerBugList = [
55 "HLT_j80c_020jvt_j55c_020jvt_j28c_020jvt_j20c_020jvt_SHARED_2j20c_020jvt_bdl1d77_pf_ftf_presel2c20XX2c20b85_L1J45p0ETA21_3J15p0ETA25",
56 "HLT_j75c_020jvt_j50c_020jvt_j25c_020jvt_j20c_020jvt_SHARED_2j20c_020jvt_bgn177_pf_ftf_presel2c20XX2c20b85_L1J45p0ETA21_3J15p0ETA25"
57 ]
58
59 alg.TrigDecisionTool = f"{decisionTool.getType()}/{decisionTool.getName()}"
60
61 alg.doL1Matching = self.runL1Matching
62 alg.doHLTMatching = self.runHLTMatching
63 alg.jets = config.readName (self.containerName)
64
65 if config.geometry() is LHCPeriod.Run2 and self.runHLTMatching:
66 # Configuration adapted from
67 # https://gitlab.cern.ch/atlas/athena/-/blob/main/Trigger/TrigEmulation/TrigBtagEmulationTool/python/TrigBtagEmulationToolConfig.py
68
69 alg.useEmulationTool = True
70 config.addPrivateTool( 'trigEmulationTool',
71 'Trig::TrigBtagEmulationTool' )
72
73 from TrigBtagEmulationTool.TrigBtagEmulationToolConfig import (
74 TrigBtagEmulation_kwargs)
75 tool_kwargs = TrigBtagEmulation_kwargs(config.flags, [chain])
76 for prop, value in tool_kwargs.items():
77 setattr(alg.trigEmulationTool, prop, value)
78
79 alg.trigEmulationTool.TrigDecisionTool = (
80 f"{decisionTool.getType()}/{decisionTool.getName()}")
81
82 config.addPrivateTool( 'trigEmulationTool.JM_a4tcemsubjes_CNT',
83 'Trig::JetManagerTool' )
84 a4tcemsubjesJet = ('HLT_xAOD__JetContainer_a4tcemsubjesFS'
85 if config.campaign() is Campaign.MC20a or config.dataYear()==2016
86 else 'HLT_xAOD__JetContainer_a4tcemsubjesISFS')
87 alg.trigEmulationTool.JM_a4tcemsubjes_CNT.JetContainerName = a4tcemsubjesJet
88
89 config.addPrivateTool( 'trigEmulationTool.JM_Split_CNT',
90 'Trig::JetManagerTool' )
91 alg.trigEmulationTool.JM_Split_CNT.JetContainerName = 'HLT_xAOD__JetContainer_SplitJet'
92
93 if not(config.campaign() is Campaign.MC20a or config.dataYear()==2016):
94 config.addPrivateTool( 'trigEmulationTool.JM_GSC_CNT',
95 'Trig::JetManagerTool' )
96 alg.trigEmulationTool.JM_GSC_CNT.JetContainerName = 'HLT_xAOD__JetContainer_GSCJet'
97
99 alg.L1Et = "match_" + chain_out + "_L1et_%SYS%"
100 alg.L1Eta = "match_" + chain_out + "_L1eta_%SYS%"
101 alg.L1Phi = "match_" + chain_out + "_L1phi_%SYS%"
102 alg.L1DR = "match_" + chain_out + "_L1dr_%SYS%"
103 alg.L1Threshold = "match_" + chain_out + "_L1thresholds_%SYS%"
104 for var in ["L1et", "L1eta", "L1phi", "L1dr", "L1thresholds"]:
105 config.addOutputVar (self.containerName,
106 "match_" + chain_out + "_" + var + "_%SYS%",
107 "match_" + chain_out + "_" + var, noSys=True)
108
109 if self.runHLTMatching:
110 alg.HLTPt = "match_" + chain_out + "_HLTpt_%SYS%"
111 alg.HLTEta = "match_" + chain_out + "_HLTeta_%SYS%"
112 alg.HLTPhi = "match_" + chain_out + "_HLTphi_%SYS%"
113 alg.HLTDR = "match_" + chain_out + "_HLTdr_%SYS%"
114 alg.HLTThreshold = "match_" + chain_out + "_HLTthresholds_%SYS%"
115 for var in ["HLTpt", "HLTeta", "HLTphi", "HLTdr", "HLTthresholds"]:
116 config.addOutputVar (self.containerName,
117 "match_" + chain_out + "_" + var + "_%SYS%",
118 "match_" + chain_out + "_" + var, noSys=True)
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:312