5 '''Function to configure LVL1 Efex monitoring algorithm'''
8 from AthenaConfiguration.ComponentFactory
import CompFactory
9 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
13 result.addEventAlgo( CompFactory.EfexMonitorAlgorithm(
'EfexMonAlg',
14 PackageName=
'EfexMonitor',
17 eFexEMTobKeyList = [
'L1_eEMRoI',
'L1_eEMxRoI'],
18 eFexTauTobKeyList = [
'L1_eTauRoI',
'L1_eTauxRoI']
26 Book the histograms for the efex monitoring. This is done in a separate method
27 to the algorithm creation (above) because the histograms are based on the list of container keys
28 given to the algorithm, which can be customized by the user before calling this method.
31 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
36 from TrigT1CaloMonitoring.LVL1CaloMonitoringConfig
import L1CaloMonitorCfgHelper
37 helper = L1CaloMonitorCfgHelper(flags,
None,
'EfexMonitoringCfg')
42 baseGroupName = EfexMonAlg.PackageName
46 trigPath = f
'Developer/{eFexAlg.name}/'
49 def pathFromKey(key,prefix="Nominal/"):
51 if "DAODSim" in key: path =
"DAODSim/"
52 elif "ReSim" in key: path =
"ReSim/"
53 elif "Sim" in key: path =
"Sim/"
54 if "_eEMx" in key: path +=
"eEMx"
55 elif "_eEM" in key: path +=
"eEM"
56 elif "_eTaux" in key: path +=
"eTAUx"
57 elif "_eTau" in key: path +=
"eTAU"
60 cut_names = [
"LowPtCut",
"HiPtCut"]
61 cut_vals = [EfexMonAlg.LowPtCut, EfexMonAlg.HiPtCut]
67 for phiOct
in range(0,8):
68 for etaIdx
in range(-25,25):
69 locIdxs += [
str(phiOct) +
":" +
str(etaIdx)]
71 for containerKey
in (
list(EfexMonAlg.eFexEMTobKeyList) +
list(EfexMonAlg.eFexTauTobKeyList)):
72 helper.defineHistogram(containerKey +
'_nTOBs_nocut;h_n'+containerKey+
'_nocut', title=
'Number of '+containerKey+
';Number of '+containerKey+
';Events',
73 fillGroup = baseGroupName,
74 path=trigPath+pathFromKey(containerKey)+
"NoCut",
75 type=
'TH1I', xbins=100,xmin=-0.5,xmax=99.5)
76 if "Sim" not in containerKey:
78 helper.defineHistogram(f
"LBN,{containerKey}_nTOBs_nocut;h_"+containerKey+
"_nTOBs", title =
"Average # of " + containerKey +
" TOBs;LBN",
79 fillGroup = baseGroupName +
"_" + containerKey,
80 path=trigPath+pathFromKey(containerKey)+
"NoCut",
82 xbins=1,xmin=0,xmax=1,ybins=20,ymin=-0.5,ymax=19.5, opt=[
'kAddBinsDynamically'])
85 commonAlgConfig = {
"libname":
"libdqm_summaries.so",
86 "name":
"L1Calo_BinsDiffFromStripMedian",
88 hotCuts = {
"ColdCut":-7,
"WarmCut":9,
"HotCut":20}
90 commonThresholdConfig = {
91 "NWrongKnown":[0,100],
97 "NConsecUnlikelyStrip":[2,5],
100 knownAnomalies_eEM = {
101 "KnownDead":
"\"49,41;49,42;48,8\"",
102 "KnownCold":
"\"48,8;2,18;3,17;4,18;5,17;20,31;21,31;23,26;49,10;11,30;11,44;11,51;15,51;40,12;40,19;40,26;10,17;10,18;10,20;2,50;24,49;14,54;12,20;14,51;16,49;21,46;23,47;31,24;34,40;35,40;36,39;37,39;42,38;46,41;47,47;47,8\"",
103 "KnownWarm":
"\"11,26;11,52;21,48;40,21;41,21;42,21;43,21;44,21;45,21;46,21;47,21;50,21\"",
104 "KnownHot":
"\"4,5;6,2;13,48;21,48;14,49;27,53;35,13;22,14\""
113 from TrigT1CaloMonitoring.EfexInputMonitorAlgorithm
import knownAnomalies_hotHcal
116 knownAnomalies_eTAU = {
117 "KnownCold":knownAnomalies_eEM[
"KnownDead"][:-1]+
";"+knownAnomalies_hotHcal[
"KnownDead"][1:-1].
replace(
"41,21;",
"")+knownAnomalies_hotHcal[
"KnownCold"][1:-1]+
";48,8;2,18;3,17;4,18;5,17;49,10;10,18;10,20;20,31;21,31;14,51;15,51;23,26;29,7;17,32;14,54;34,6;40,12;40,19;26,20;11,44;24,49;30,15;32,46;29,5;16,49;12,19;12,20;17,3;20,10;22,47;23,47;34,10;34,40;35,40;37,39;40,26;43,59;47,47;47,8\"",
118 "KnownWarm":
"\"24,39;41,21;43,21;44,21;47,21\"",
119 "KnownHot":
"\"4,5;6,2;11,27;13,48;15,49;21,48;40,24;42,35;18,4\""
126 helper.defineDQAlgorithm(
"Efex_eEM_etaThiMapFilled",
127 hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eEM,
128 thresholdConfig=commonThresholdConfig
130 helper.defineDQAlgorithm(
"Efex_eTAU_etaThiMapFilled",
131 hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eTAU,
132 thresholdConfig=commonThresholdConfig
135 helper.defineDQAlgorithm(
"Efex_eEM_etaPhiLBMapOutliers_Shifter",
136 hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eEM|{
"NBinsY":64,
"LiveMode":1},
137 thresholdConfig=commonThresholdConfig
139 helper.defineDQAlgorithm(
"Efex_eEM_etaPhiLBMapOutliers",
140 hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eEM|{
"NBinsY":64,
"LiveMode":0},
141 thresholdConfig=commonThresholdConfig
143 helper.defineDQAlgorithm(
"Efex_eTAU_etaPhiLBMapOutliers_Shifter",
144 hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eTAU|{
"NBinsY":64,
"LiveMode":1},
145 thresholdConfig=commonThresholdConfig
147 helper.defineDQAlgorithm(
"Efex_eTAU_etaPhiLBMapOutliers",
148 hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eTAU|{
"NBinsY":64,
"LiveMode":0},
149 thresholdConfig=commonThresholdConfig
154 for cut_name, cut_val
in zip(cut_names, cut_vals):
155 cut_title_addition =
'' if (cut_val == 0.0)
else ' [Et>=' +
'%.1f'%(cut_val/1000) +
'GeV]'
157 for containerKey
in EfexMonAlg.eFexEMTobKeyList:
158 fillGroup = baseGroupName+
'_'+containerKey+
'_'+cut_name
159 tobStr = containerKey
161 helper.defineHistogram(
'nEMTOBs;h_nEmTOBs', title=
'Number of '+tobStr+
's'+cut_title_addition+
';EM '+tobStr+
's;Number of EM '+tobStr+
's',
163 type=
'TH1I', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=10,xmin=0,xmax=10)
165 helper.defineHistogram(
'TOBTransverseEnergy;h_TOBTransverseEnergy', title=tobStr+
' ET [MeV]'+cut_title_addition,
167 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=100,xmin=0,xmax=50000)
169 helper.defineHistogram(
'TOBEta;h_TOBEta', title=tobStr+
' Eta'+cut_title_addition,
171 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=50,xmin=-2.5,xmax=2.5)
173 helper.defineHistogram(
'TOBPhi;h_TOBPhi', title=tobStr+
' Phi'+cut_title_addition,
175 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=64,xmin=-math.pi,xmax=math.pi)
177 helper.defineHistogram(f
"TOBEta,TOBPhi;h_{containerKey}_{cut_name}_EtaPhiMap", title=tobStr+
' Count'+cut_title_addition+
';#eta;#phi',
179 hanConfig={
"display":
"SetPalette(55)",
180 "description":f
"Any really significant hot/cold spots (see results for significances) should check over what LBs they occurred, using <a href='./detail/h_{containerKey}_{cut_name}_posVsLBN'>detail timeseries</a>. Any new (unknown) spots, if they occur multiple times in a week, please report",
"algorithm":
"Efex_eEM_etaThiMapFilled"},
182 path=((
"Expert/Outputs/"+pathFromKey(containerKey,
""))
if "Sim" not in containerKey
and "x" not in containerKey
else trigPath+pathFromKey(containerKey)+cut_name),
183 xbins=50,xmin=-2.5,xmax=2.5,ybins=64,ymin=-math.pi,ymax=math.pi,opt=[
'kAlwaysCreate'])
185 if "Sim" not in containerKey
and "x" not in containerKey:
186 helper.defineHistogram(f
"LBN,binNumber;h_{containerKey}_{cut_name}_posVsLBN", title=tobStr+
' Count'+cut_title_addition+
';LB;64(x-1)+y',
188 hanConfig={
"Expert/algorithm":f
"Efex_{pathFromKey(containerKey,'')}_etaPhiLBMapOutliers",
"Shifter/algorithm":f
"Efex_{pathFromKey(containerKey,'')}_etaPhiLBMapOutliers_Shifter",
189 "description":f
"Timeseries of TOB counts at each location ... y-axis relates to x and y bin numbers from <a href='../h_{containerKey}_{cut_name}_EtaPhiMap'>eta-phi map</a>. Use Projection X1 for 1D plot"},
191 paths=[
"Expert/Outputs/"+pathFromKey(containerKey,
"")+
"/detail",
"Shifter/Outputs/"+pathFromKey(containerKey,
"")],
192 xbins=1,xmin=0,xmax=10,
193 ybins=64*50,ymin=0.5,ymax=64*50+0.5,opt=[
'kAddBinsDynamically'])
195 helper.defineHistogram(
'TOBshelfNumber;h_TOBshelfNumber', title=tobStr+
' EM Shelf Number'+cut_title_addition,
197 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=2,xmin=0,xmax=2)
199 helper.defineHistogram(
'TOBeFEXNumberSh0;h_TOBeFEXNumberShelf0', title=tobStr+
' EM Module Number Shelf 0'+cut_title_addition,
201 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=12,xmin=0,xmax=12)
203 helper.defineHistogram(
'TOBeFEXNumberSh1;h_TOBeFEXNumberShelf1', title=tobStr+
' EM Module Number Shelf 1'+cut_title_addition,
205 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=12,xmin=0,xmax=12)
207 helper.defineHistogram(
'TOBfpga;h_TOBfpga', title=tobStr+
' EM FPGA'+cut_title_addition,
209 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4)
211 helper.defineHistogram(
'TOBReta;h_TOBReta', title=tobStr+
' EM Reta'+cut_title_addition,
213 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name,xbins=250,xmin=0,xmax=1)
215 helper.defineHistogram(
'TOBRhad;h_TOBRhad', title=tobStr+
' EM Rhad'+cut_title_addition,
217 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=250,xmin=0,xmax=1)
219 helper.defineHistogram(
'TOBWstot;h_TOBWstot', title=tobStr+
' EM Wstot'+cut_title_addition,
221 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=250,xmin=0,xmax=1)
223 threshold_labels = [
'fail',
'loose',
'medium',
'tight']
224 helper.defineHistogram(
'TOBReta_threshold;h_TOBReta_threshold', title=tobStr+
' EM Reta threshold'+cut_title_addition,
226 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name,xbins=4,xmin=0,xmax=4.0,xlabels=threshold_labels)
228 helper.defineHistogram(
'TOBRhad_threshold;h_TOBRhad_threshold', title=tobStr+
' EM Rhad threshold'+cut_title_addition,
230 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0,xlabels=threshold_labels)
232 helper.defineHistogram(
'TOBWstot_threshold;h_TOBWstot_threshold', title=tobStr+
' EM Wstot threshold'+cut_title_addition,
234 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0,xlabels=threshold_labels)
237 for containerKey
in EfexMonAlg.eFexTauTobKeyList:
238 fillGroup = baseGroupName+
'_'+containerKey+
'_'+cut_name
239 tobStr = containerKey
241 helper.defineHistogram(
'nTauTOBs;h_nTauTOBs', title=
'Number of '+tobStr+
's'+cut_title_addition+
';Tau '+tobStr+
's;Number of Tau '+tobStr+
's',
242 fillGroup = fillGroup,
243 type=
'TH1I', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=10,xmin=0,xmax=10)
245 helper.defineHistogram(
'tauTOBTransverseEnergy;h_tauTOBTransverseEnergy', title=tobStr+
' Tau Transverse Energy [MeV]'+cut_title_addition,
246 fillGroup = fillGroup,
247 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=100,xmin=0,xmax=50000)
249 helper.defineHistogram(
'tauTOBEta;h_tauTOBEta', title=tobStr+
' Tau Eta'+cut_title_addition,
250 fillGroup = fillGroup,
251 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=60,xmin=-2.5,xmax=2.5)
253 helper.defineHistogram(
'tauTOBPhi;h_tauTOBPhi', title=tobStr+
' Tau Phi'+cut_title_addition,
254 fillGroup = fillGroup,
255 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=100,xmin=-math.pi,xmax=math.pi)
257 helper.defineHistogram(f
"tauTOBEta,tauTOBPhi;h_{containerKey}_{cut_name}_EtaPhiMap", title=
'eTAU '+tobStr+
' Count'+cut_title_addition+
';#eta;#phi',
258 fillGroup = fillGroup,
259 hanConfig={
"display":
"SetPalette(55)",
260 "description":f
"Any really significant hot/cold spots (see results for significances) should check over what LBs they occurred, using <a href='./detail/h_{containerKey}_{cut_name}_posVsLBN'>detail timeseries</a>. Any new (unknown) spots, if they occur multiple times in a week, please report",
"algorithm":
"Efex_eTAU_etaThiMapFilled"},
262 path=((
"Expert/Outputs/"+pathFromKey(containerKey,
""))
if "Sim" not in containerKey
and "x" not in containerKey
else (trigPath+pathFromKey(containerKey)+cut_name)),
263 xbins=50,xmin=-2.5,xmax=2.5,ybins=64,ymin=-math.pi,ymax=math.pi,opt=[
'kAlwaysCreate'])
265 if "Sim" not in containerKey
and "x" not in containerKey:
266 helper.defineHistogram(f
"LBN,binNumber;h_{containerKey}_{cut_name}_posVsLBN", title=
'eTAU '+tobStr+
' Count'+cut_title_addition+
';LB;64(x-1)+y',
268 hanConfig={
"Expert/algorithm":f
"Efex_{pathFromKey(containerKey,'')}_etaPhiLBMapOutliers",
"Shifter/algorithm":f
"Efex_{pathFromKey(containerKey,'')}_etaPhiLBMapOutliers_Shifter",
269 "description":f
"Timeseries of TOB counts at each location ... y-axis relates to x and y bin numbers from <a href='../h_{containerKey}_{cut_name}_EtaPhiMap'>eta-phi map</a>. Use Projection X1 for 1D plot"},
271 paths=[
"Expert/Outputs/"+pathFromKey(containerKey,
"")+
"/detail",
"Shifter/Outputs/"+pathFromKey(containerKey,
"")],
272 xbins=1,xmin=0,xmax=10,
273 ybins=64*50,ymin=0.5,ymax=64*50+0.5,opt=[
'kAddBinsDynamically'])
275 helper.defineHistogram(
'tauTOBshelfNumber;h_tauTOBshelfNumber', title=tobStr+
' Tau Shelf Number'+cut_title_addition,
276 fillGroup = fillGroup,
277 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=2,xmin=0,xmax=2)
279 helper.defineHistogram(
'tauTOBeFEXNumberSh0;h_tauTOBeFEXNumberShelf0', title=tobStr+
' Tau Module Number Shelf 0'+cut_title_addition,
280 fillGroup = fillGroup,
281 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=12,xmin=0,xmax=12)
283 helper.defineHistogram(
'tauTOBeFEXNumberSh1;h_tauTOBeFEXNumberShelf1', title=tobStr+
' Tau Module Number Shelf 1'+cut_title_addition,
284 fillGroup = fillGroup,
285 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=12,xmin=0,xmax=12)
288 helper.defineHistogram(
'tauTOBfpga;h_tauTOBfpga', title=tobStr+
' Tau FPGA'+cut_title_addition,
289 fillGroup = fillGroup,
290 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4)
292 helper.defineHistogram(
'tauTOBRcore;h_tauTOBRcore', title=tobStr+
' Tau rCore'+cut_title_addition,
293 fillGroup = fillGroup,
294 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=250,xmin=0,xmax=1)
296 helper.defineHistogram(
'tauTOBRhad;h_tauTOBRhad', title=tobStr+
' Tau rHad'+cut_title_addition,
297 fillGroup = fillGroup,
298 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=250,xmin=0,xmax=1)
300 helper.defineHistogram(
'tauTOBRcore_threshold;h_tauTOBRcore_threshold', title=tobStr+
' Tau rCore threshold'+cut_title_addition,
301 fillGroup = fillGroup,
302 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0, xlabels=threshold_labels)
304 helper.defineHistogram(
'tauTOBRhad_threshold;h_tauTOBRhad_threshold', title=tobStr+
' Tau rHad threshold'+cut_title_addition,
305 fillGroup = fillGroup,
306 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0, xlabels=threshold_labels)
308 helper.defineHistogram(
'tauTOBthree_threshold;h_tauTOBthree_threshold', title=tobStr+
' Tau 3 taus threshold'+cut_title_addition,
309 fillGroup = fillGroup,
310 type=
'TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0, xlabels=threshold_labels)
312 acc = helper.result()
317 if __name__==
'__main__':
319 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
323 inputs = glob.glob(
'/eos/user/t/thompson/ATLAS/LVL1_mon/MC_ESD/l1calo.361024.Pythia8EvtGen_A14NNPDF23LO_jetjet_JZ4W.eFex_gFex_2022-01-13T2101.root')
326 flags.Input.Files = inputs
327 flags.Output.HISTFileName =
'ExampleMonitorOutput_LVL1_MC.root'
332 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
333 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
338 cfg.merge(EfexMonitorCfg)
341 cfg.printConfig(withDetails=
False, summariseProps =
True)