4def JetEfficiencyMonitoringConfig(flags):
5 '''Function to configure LVL1 JetEfficiency algorithm in the monitoring system.'''
6
7
8 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
9 from AthenaConfiguration.ComponentFactory import CompFactory
10 from TrigConfigSvc.TriggerConfigAccess import getL1MenuAccess
11 result = ComponentAccumulator()
12 l1menu = getL1MenuAccess(flags)
13
14
15 from AthenaConfiguration.Enums import Format
16
18 if flags.Input.Format is Format.POOL and not flags.Input.isMC and not any(["AOD" in a for a in flags.Input.ProcessingTags]):
19 from JetRecConfig.JetRecConfig import JetRecCfg
20 from JetRecConfig.StandardSmallRJets import AntiKt4EMPFlow
21 result.merge( JetRecCfg(flags,AntiKt4EMPFlow) )
22
23 from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg
24 if flags.DQ.Environment == "AOD":
25 result.merge(PFGlobalFlowElementLinkingCfg(flags, useMuonTopoClusters=True))
26 else:
27 result.merge(PFGlobalFlowElementLinkingCfg(flags))
28 from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg
29 result.merge(PFGlobalFlowElementLinkingCfg(flags))
30 from METReconstruction.METAssociatorCfg import METAssociatorCfg
32 from METUtilities.METMakerConfig import getMETMakerAlg
33 metCA=ComponentAccumulator()
34 metCA.addEventAlgo(getMETMakerAlg('AntiKt4EMPFlow'))
35 result.merge(metCA)
36
37
38
39 from TrigT1CaloMonitoring.LVL1CaloMonitoringConfig import L1CaloMonitorCfgHelper
40 helper = L1CaloMonitorCfgHelper(flags,CompFactory.JetEfficiencyMonitorAlgorithm,'JetEfficiencyMonAlg')
41 groupName = 'JetEfficiencyMonitor'
42 JetEfficiencyMonAlg = helper.alg
43 JetEfficiencyMonAlg.PackageName = groupName
44
45
46
50
51
52
53
54
55 passedb4Prescale = True
56 JetEfficiencyMonAlg.PassedBeforePrescale = passedb4Prescale
57
58
62
63
64 hltRandom_reference_triggers = ['HLT_j0_perf_L1RD0_FILLED', 'HLT_j0_perf_pf_ftf_L1RD0_FILLED']
65 JetEfficiencyMonAlg.HLTRandomReferenceTriggers = hltRandom_reference_triggers
66
67 muon_reference_triggers = ["L1_MU14FCH", "L1_MU18VFCH", "L1_2MU8F", "L1_MU8VF_2MU5VF", "L1_3MU3VF", "L1_MU5VF_3MU3VF", "L1_4MU3V", "L1_2MU5VF_3MU3V"]
68 JetEfficiencyMonAlg.MuonReferenceTriggers = muon_reference_triggers
69
70 JetEfficiencyMonAlg.BootstrapReferenceTrigger='L1_J15'
71
72 trigPath = 'Developer/JetEfficiency/'
73 ExpertTrigPath = 'Expert/Efficiency/'
74 distributionPath = 'Distributions/'
75 noRefPath = 'NoReferenceTrigger/'
76 muonRefPath = 'MuonReferenceTrigger/'
77 randomRefPath = 'RandomHLTReferenceTrigger/'
78 bsRefPath = 'BootstrapReferenceTrigger/'
79 GeV = 1000
80
81
82 gfex_SR_triggers = ['L1_gJ20p0ETA25', 'L1_gJ50p0ETA25', 'L1_gJ100p0ETA25', 'L1_gJ400p0ETA25']
83 gfex_LR_triggers = ['L1_gLJ80p0ETA25', 'L1_gLJ100p0ETA25', 'L1_gLJ140p0ETA25', 'L1_gLJ160p0ETA25']
84
85 jfex_SR_triggers = ['L1_jJ30','L1_jJ40','L1_jJ50', 'L1_jJ60', 'L1_jJ80','L1_jJ90', 'L1_jJ125','L1_jJ140','L1_jJ160', 'L1_jJ180']
86 jfex_LR_triggers = ['L1_SC175-SCjJ10']
87
88 all_SR_triggers = gfex_SR_triggers + jfex_SR_triggers
89 all_LR_triggers = gfex_LR_triggers + jfex_LR_triggers
90
91
92 JetEfficiencyMonAlg.SmallRadiusJetTriggers_phase1 = [trigger for trigger in all_SR_triggers if trigger in l1menu]
93 JetEfficiencyMonAlg.LargeRadiusJetTriggers_phase1 = [trigger for trigger in all_LR_triggers if trigger in l1menu]
94
95 JetEfficiencyMonAlg.SmallRadiusJetTriggers_gFEX = [trigger for trigger in gfex_SR_triggers if trigger not in l1menu]
96 JetEfficiencyMonAlg.LargeRadiusJetTriggers_gFEX = [trigger for trigger in gfex_LR_triggers if trigger not in l1menu]
97
98
99 if len(JetEfficiencyMonAlg.SmallRadiusJetTriggers_gFEX ) == 0: JetEfficiencyMonAlg.mygFexSRJetRoIContainer = ""
100 if len(JetEfficiencyMonAlg.LargeRadiusJetTriggers_gFEX ) == 0: JetEfficiencyMonAlg.mygFexLRJetRoIContainer = ""
101
102
103 reference_paths = {"Muon" : muonRefPath, "RandomHLT": randomRefPath, "No": noRefPath, "Bootstrap": bsRefPath}
104 references = ["Muon", "No", "Bootstrap"]
105
106
107 sr_props = ["SRpt"]
108 lr_props = ["LRpt"]
109 trigger_group_list = {"gfex_SR_triggers" : gfex_SR_triggers,
110 "gfex_LR_triggers" : gfex_LR_triggers,
111 "jfex_SR_triggers" : jfex_SR_triggers,
112 "jfex_LR_triggers" : jfex_LR_triggers }
113 properties_per_trigger_group = {"gfex_SR_triggers" : sr_props, "jfex_SR_triggers" : sr_props,
114 "gfex_LR_triggers" : lr_props, "jfex_LR_triggers" : lr_props }
115 pathadd_per_trigger_group = {"gfex_SR_triggers" : "gFEX/", "jfex_SR_triggers" : "jFEX/",
116 "gfex_LR_triggers" : "gFEX/", "jfex_LR_triggers" : "jFEX/" }
117 trigger_groups = list(trigger_group_list.keys())
118
119 xlabel_for_prop = { "SRpt" :'pT [MeV]', "SReta" : '#eta', "LRpt" :'pT [MeV]', "LReta" : '#eta'}
120 nbins = {"SRpt": 220, "SReta" :32, "LRpt": 220, "LReta" :32}
121 binmin = {"SRpt": -50, "SReta" :-3.3, "LRpt": -50, "LReta" :-3.3}
122 binmax = {"SRpt": 1800*GeV, "SReta" :3.3, "LRpt": 1800*GeV, "LReta" :3.3}
123
124
125 plotDistrubutions = False
126 if plotDistrubutions:
127 helper.defineHistogram('raw_pt',title='pT for all leading offline jets (with no trigger requirments);PT [MeV];Events', fillGroup=groupName, path=trigPath + distributionPath, xbins=nbins["SRpt"], xmin=binmin["SRpt"], xmax=binmax["SRpt"])
128
129 helper.defineHistogram('raw_eta', title='Eta Distribution for all leading offline jets (with no trigger requirments);#eta; Count', fillGroup=groupName, path=trigPath + distributionPath, xbins=nbins["SReta"], xmin=binmin["SReta"], xmax=binmax["SReta"])
130
131
132 for tgroup in trigger_groups:
133 for t in trigger_group_list[tgroup]:
134
135
136 thresholdConfig = {"Plateau":plateau_dict.get(t,[0.99,0.95])}
137 thresholdConfig["Threshold"] = get_or_estimate_thresholds(t)
138 xMaxConfig =
min(thresholdConfig[
"Threshold"][1]*2.5, binmax[
"SRpt"])
139
140 helper.defineDQAlgorithm("JetEfficiency_"+t,
141 hanConfig={"libname":"libdqm_algorithms.so","name":"Simple_fermi_Fit_TEff", "xmax":xMaxConfig, "ImproveFit":1},
142 thresholdConfig=thresholdConfig
143 )
144 for p in properties_per_trigger_group[tgroup]:
145 for r in references:
146
147
148 if t in l1menu: eff_plot_title = t+';'+xlabel_for_prop[p]+'; Efficiency '
149 elif t not in l1menu and t in (gfex_SR_triggers + gfex_LR_triggers): eff_plot_title = t+' Emulated;'+xlabel_for_prop[p]+'; Efficiency '
150 else: eff_plot_title = t+' NOT in Menu;'+xlabel_for_prop[p]+'; Efficiency '
151
152
153 if r == "Muon" and p in ["SRpt", "LRpt"]:
154 helper.defineHistogram(f"bool_{r}_{t}, val_{p};{p}_{t}", type='TEfficiency', title=eff_plot_title, fillGroup=groupName, path=ExpertTrigPath + pathadd_per_trigger_group[tgroup]+ reference_paths[r], xbins=nbins[p], xmin=binmin[p], xmax=binmax[p], hanConfig={"algorithm":"JetEfficiency_"+t}, opt='kAlwaysCreate')
155 else:
156 helper.defineHistogram(f"bool_{r}_{t}, val_{p};{p}_{t}", type='TEfficiency', title=eff_plot_title, fillGroup=groupName, path=trigPath + pathadd_per_trigger_group[tgroup]+ reference_paths[r], xbins=nbins[p], xmin=binmin[p], xmax=binmax[p], opt='kAlwaysCreate')
157
158
159
160 acc = helper.result()
161 result.merge(acc)
162 print(
"flags.DQ.Environment = " + flags.DQ.Environment )
163 return result
164