5 '''Function to configure LVL1 JetEfficiency algorithm in the monitoring system.'''
8 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
9 from AthenaConfiguration.ComponentFactory
import CompFactory
10 from TrigConfigSvc.TriggerConfigAccess
import getL1MenuAccess
15 from AthenaConfiguration.Enums
import Format
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) )
23 from eflowRec.PFCfg
import PFGlobalFlowElementLinkingCfg
24 if flags.DQ.Environment ==
"AOD":
28 from eflowRec.PFCfg
import PFGlobalFlowElementLinkingCfg
30 from METReconstruction.METAssociatorCfg
import METAssociatorCfg
32 from METUtilities.METMakerConfig
import getMETMakerAlg
39 from TrigT1CaloMonitoring.LVL1CaloMonitoringConfig
import L1CaloMonitorCfgHelper
40 helper = L1CaloMonitorCfgHelper(flags,CompFactory.JetEfficiencyMonitorAlgorithm,
'JetEfficiencyMonAlg')
41 groupName =
'JetEfficiencyMonitor'
42 JetEfficiencyMonAlg = helper.alg
43 JetEfficiencyMonAlg.PackageName = groupName
55 passedb4Prescale =
True
56 JetEfficiencyMonAlg.PassedBeforePrescale = passedb4Prescale
64 hltRandom_reference_triggers = [
'HLT_j0_perf_L1RD0_FILLED',
'HLT_j0_perf_pf_ftf_L1RD0_FILLED']
65 JetEfficiencyMonAlg.HLTRandomReferenceTriggers = hltRandom_reference_triggers
67 muon_reference_triggers = [
"L1_MU14FCH",
"L1_MU18VFCH",
"L1_MU8F_TAU20IM",
"L1_2MU8F",
"L1_MU8VF_2MU5VF",
"L1_3MU3VF",
"L1_MU5VF_3MU3VF",
"L1_4MU3V",
"L1_2MU5VF_3MU3V",
"L1_RD0_FILLED"]
68 JetEfficiencyMonAlg.MuonReferenceTriggers = muon_reference_triggers
70 JetEfficiencyMonAlg.BootstrapReferenceTrigger=
'L1_J15'
72 trigPath =
'Developer/JetEfficiency/'
73 ExpertTrigPath =
'Expert/Efficiency/'
74 distributionPath =
'Distributions/'
75 noRefPath =
'NoReferenceTrigger/'
76 muonRefPath =
'MuonReferenceTrigger/'
77 randomRefPath =
'RandomHLTReferenceTrigger/'
78 bsRefPath =
'BootstrapReferenceTrigger/'
85 gfex_SR_triggers = [
'L1_gJ20p0ETA25',
'L1_gJ50p0ETA25',
'L1_gJ100p0ETA25',
'L1_gJ400p0ETA25']
86 gfex_LR_triggers = [
'L1_gLJ80p0ETA25',
'L1_gLJ100p0ETA25',
'L1_gLJ140p0ETA25',
'L1_gLJ160p0ETA25']
88 jfex_SR_triggers = [
'L1_jJ30',
'L1_jJ40',
'L1_jJ50',
'L1_jJ60',
'L1_jJ80',
'L1_jJ90',
'L1_jJ125',
'L1_jJ140',
'L1_jJ160',
'L1_jJ180']
89 jfex_LR_triggers = [
'L1_SC111-CjJ40']
92 all_SR_singletriggers = single_triggers + gfex_SR_triggers + jfex_SR_triggers
93 all_LR_singletriggers = LR_triggers + gfex_LR_triggers + jfex_LR_triggers
96 JetEfficiencyMonAlg.SmallRadiusJetTriggers_phase1 = [trigger
for trigger
in all_SR_singletriggers
if trigger
in l1menu]
97 JetEfficiencyMonAlg.LargeRadiusJetTriggers_phase1 = [trigger
for trigger
in all_LR_singletriggers
if trigger
in l1menu]
99 JetEfficiencyMonAlg.SmallRadiusJetTriggers_gFEX = [trigger
for trigger
in gfex_SR_triggers
if trigger
not in l1menu]
100 JetEfficiencyMonAlg.LargeRadiusJetTriggers_gFEX = [trigger
for trigger
in gfex_LR_triggers
if trigger
not in l1menu]
103 if len(JetEfficiencyMonAlg.SmallRadiusJetTriggers_gFEX ) == 0: JetEfficiencyMonAlg.mygFexSRJetRoIContainer =
""
104 if len(JetEfficiencyMonAlg.LargeRadiusJetTriggers_gFEX ) == 0: JetEfficiencyMonAlg.mygFexLRJetRoIContainer =
""
107 reference_paths = {
"Muon" : muonRefPath,
"RandomHLT": randomRefPath,
"No": noRefPath,
"Bootstrap": bsRefPath}
108 references = [
"Muon",
"No",
"Bootstrap"]
113 trigger_group_list = {
"gfex_SR_triggers" : gfex_SR_triggers,
114 "gfex_LR_triggers" : gfex_LR_triggers,
115 "jfex_SR_triggers" : jfex_SR_triggers,
116 "jfex_LR_triggers" : jfex_LR_triggers }
117 properties_per_trigger_group = {
"gfex_SR_triggers" : sr_props,
"jfex_SR_triggers" : sr_props,
118 "gfex_LR_triggers" : lr_props,
"jfex_LR_triggers" : lr_props }
119 pathadd_per_trigger_group = {
"gfex_SR_triggers" :
"gFEX/",
"jfex_SR_triggers" :
"jFEX/",
120 "gfex_LR_triggers" :
"gFEX/",
"jfex_LR_triggers" :
"jFEX/" }
121 trigger_groups =
list(trigger_group_list.keys())
123 xlabel_for_prop = {
"SRpt" :
'pT [MeV]',
"SReta" :
'#eta',
"LRpt" :
'pT [MeV]',
"LReta" :
'#eta'}
124 nbins = {
"SRpt": 220,
"SReta" :32,
"LRpt": 220,
"LReta" :32}
125 binmin = {
"SRpt": -50,
"SReta" :-3.3,
"LRpt": -50,
"LReta" :-3.3}
126 binmax = {
"SRpt": 1800*GeV,
"SReta" :3.3,
"LRpt": 1800*GeV,
"LReta" :3.3}
129 plotDistrubutions =
False
130 if plotDistrubutions:
131 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"])
133 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"])
136 for tgroup
in trigger_groups:
137 for t
in trigger_group_list[tgroup]:
140 thresholdConfig = {
"Plateau":plateau_dict.get(t,[0.99,0.95])}
142 xMaxConfig =
min(thresholdConfig[
"Threshold"][1]*2.5, binmax[
"SRpt"])
144 helper.defineDQAlgorithm(
"JetEfficiency_"+t,
145 hanConfig={
"libname":
"libdqm_algorithms.so",
"name":
"Simple_fermi_Fit_TEff",
"xmax":xMaxConfig,
"ImproveFit":1},
146 thresholdConfig=thresholdConfig
148 for p
in properties_per_trigger_group[tgroup]:
152 if t
in l1menu: eff_plot_title = t+
';'+xlabel_for_prop[p]+
'; Efficiency '
153 elif t
not in l1menu
and t
in (gfex_SR_triggers + gfex_LR_triggers): eff_plot_title = t+
' Emulated;'+xlabel_for_prop[p]+
'; Efficiency '
154 else: eff_plot_title = t+
' NOT in Menu;'+xlabel_for_prop[p]+
'; Efficiency '
157 if r ==
"Muon" and p
in [
"SRpt",
"LRpt"]:
158 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')
160 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')
164 acc = helper.result()
166 print(
"flags.DQ.Environment = " + flags.DQ.Environment )