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_2MU8F",
"L1_MU8VF_2MU5VF",
"L1_3MU3VF",
"L1_MU5VF_3MU3VF",
"L1_4MU3V",
"L1_2MU5VF_3MU3V"]
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/'
82 gfex_SR_triggers = [
'L1_gJ20p0ETA25',
'L1_gJ50p0ETA25',
'L1_gJ100p0ETA25',
'L1_gJ400p0ETA25']
83 gfex_LR_triggers = [
'L1_gLJ80p0ETA25',
'L1_gLJ100p0ETA25',
'L1_gLJ140p0ETA25',
'L1_gLJ160p0ETA25']
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']
88 all_SR_triggers = gfex_SR_triggers + jfex_SR_triggers
89 all_LR_triggers = gfex_LR_triggers + jfex_LR_triggers
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]
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]
99 if len(JetEfficiencyMonAlg.SmallRadiusJetTriggers_gFEX ) == 0: JetEfficiencyMonAlg.mygFexSRJetRoIContainer =
""
100 if len(JetEfficiencyMonAlg.LargeRadiusJetTriggers_gFEX ) == 0: JetEfficiencyMonAlg.mygFexLRJetRoIContainer =
""
103 reference_paths = {
"Muon" : muonRefPath,
"RandomHLT": randomRefPath,
"No": noRefPath,
"Bootstrap": bsRefPath}
104 references = [
"Muon",
"No",
"Bootstrap"]
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())
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}
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"])
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"])
132 for tgroup
in trigger_groups:
133 for t
in trigger_group_list[tgroup]:
136 thresholdConfig = {
"Plateau":plateau_dict.get(t,[0.99,0.95])}
138 xMaxConfig =
min(thresholdConfig[
"Threshold"][1]*2.5, binmax[
"SRpt"])
140 helper.defineDQAlgorithm(
"JetEfficiency_"+t,
141 hanConfig={
"libname":
"libdqm_algorithms.so",
"name":
"Simple_fermi_Fit_TEff",
"xmax":xMaxConfig,
"ImproveFit":1},
142 thresholdConfig=thresholdConfig
144 for p
in properties_per_trigger_group[tgroup]:
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 '
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')
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')
160 acc = helper.result()
162 print(
"flags.DQ.Environment = " + flags.DQ.Environment )