Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Functions
EfexMonitorAlgorithm Namespace Reference

Functions

def EfexMonitoringConfig (inputFlags)
 
def EfexMonitoringHistConfig (flags, eFexAlg)
 

Function Documentation

◆ EfexMonitoringConfig()

def EfexMonitorAlgorithm.EfexMonitoringConfig (   inputFlags)
Function to configure LVL1 Efex monitoring algorithm

Definition at line 4 of file EfexMonitorAlgorithm.py.

4 def EfexMonitoringConfig(inputFlags):
5  '''Function to configure LVL1 Efex monitoring algorithm'''
6 
7  # get the component factory - used for merging the algorithm results
8  from AthenaConfiguration.ComponentFactory import CompFactory
9  from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
10  result = ComponentAccumulator()
11 
12  # add algorithm to the helper
13  result.addEventAlgo( CompFactory.EfexMonitorAlgorithm('EfexMonAlg',
14  PackageName='EfexMonitor',
15  LowPtCut = 0.0,
16  HiPtCut = 15000.0,
17  eFexEMTobKeyList = ['L1_eEMRoI', 'L1_eEMxRoI'],
18  eFexTauTobKeyList = ['L1_eTauRoI', 'L1_eTauxRoI']
19  ) )
20 
21  return result
22 
23 

◆ EfexMonitoringHistConfig()

def EfexMonitorAlgorithm.EfexMonitoringHistConfig (   flags,
  eFexAlg 
)
Book the histograms for the efex monitoring. This is done in a separate method
to the algorithm creation (above) because the histograms are based on the list of container keys
given to the algorithm, which can be customized by the user before calling this method.

Definition at line 24 of file EfexMonitorAlgorithm.py.

24 def EfexMonitoringHistConfig(flags, eFexAlg):
25  """
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.
29  """
30  import math
31  from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
32  result = ComponentAccumulator()
33 
34 
35  # make the athena monitoring helper again so we can add groups
36  from TrigT1CaloMonitoring.LVL1CaloMonitoringConfig import L1CaloMonitorCfgHelper
37  helper = L1CaloMonitorCfgHelper(flags,None,'EfexMonitoringCfg')
38  helper.alg = eFexAlg
39 
40  # we don't add the algorithm again, use the supplied one
41  EfexMonAlg = eFexAlg
42  baseGroupName = EfexMonAlg.PackageName
43 
44  # Some helpful variables for declaring the histograms
45  # mainDir = 'L1Calo'
46  trigPath = f'Developer/{eFexAlg.name}/' # Default Directory trigger path for output histos
47  # Map from the key name to the output directory substructure.
48 
49  def pathFromKey(key,prefix="Nominal/"):
50  path=prefix
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"
58  return path
59 
60  cut_names = ["LowPtCut", "HiPtCut"] # List of cut names, for looping over to separate out histograms into directories
61  cut_vals = [EfexMonAlg.LowPtCut, EfexMonAlg.HiPtCut] # List of values, for looping over to add to histogram titles
62 
63  # First, define the histograms with no Pt cut
64  # add monitoring algorithm to group, with group name and main directory
65 
66  locIdxs = []
67  for phiOct in range(0,8):
68  for etaIdx in range(-25,25):
69  locIdxs += [str(phiOct) + ":" + str(etaIdx)]
70 
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:
77  # don't make these expensive plots for simulation
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",
81  type="TH2I",
82  xbins=1,xmin=0,xmax=1,ybins=20,ymin=-0.5,ymax=19.5, opt=['kAddBinsDynamically'])
83 
84 
85  commonAlgConfig = {"libname":"libdqm_summaries.so",
86  "name":"L1Calo_BinsDiffFromStripMedian",
87  "PublishDetail":32}
88  hotCuts = {"ColdCut":-5,"WarmCut":9,"HotCut":20} # when looking at frequency of hot deposits, use these cuts
89 
90  commonThresholdConfig = {
91  "NWrongKnown":[0,100], # warn of any corrections that are needed for the known anomalies lists
92  "NDead":[0,2], # warn on any new dead spots, error if more than a couple
93  "NHot":[0,2], # warn on any new hot spots, error if more than a couple
94  "NCold":[0,2], # warn on any new cold spots, error if more than a couple
95  "NWarm":[0,5], # warn on any new warm spots, error if more than 5
96  "NDeadStrip":[0,0], # no dead strips - exception to this will be in cold hcal, where tile cannot be negative
97  "NConsecUnlikelyStrip":[2,5], # warn if more than 2 consecutive strips deemed unlikely
98  }
99 
100  knownAnomalies_eEM = {
101  "KnownCold":"\"\"",
102  "KnownWarm":"\"\""
103  }
104  knownAnomalies_eTAU = {
105  "KnownCold":"\"\"",
106  "KnownWarm":"\"\""
107  }
108 
109  helper.defineDQAlgorithm("Efex_eEM_etaThiMapFilled",
110  hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eEM,
111  thresholdConfig=commonThresholdConfig
112  )
113  helper.defineDQAlgorithm("Efex_eTAU_etaThiMapFilled",
114  hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eTAU,
115  thresholdConfig=commonThresholdConfig
116  )
117 
118  helper.defineDQAlgorithm("Efex_eEM_etaPhiLBMapOutliers_Shifter",
119  hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eEM|{"NBinsY":64,"LiveMode":1},
120  thresholdConfig=commonThresholdConfig
121  ) # configuration for P1 monitoring
122  helper.defineDQAlgorithm("Efex_eEM_etaPhiLBMapOutliers",
123  hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eEM|{"NBinsY":64,"LiveMode":0},
124  thresholdConfig=commonThresholdConfig
125  )
126  helper.defineDQAlgorithm("Efex_eTAU_etaPhiLBMapOutliers_Shifter",
127  hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eTAU|{"NBinsY":64,"LiveMode":1},
128  thresholdConfig=commonThresholdConfig
129  ) # configuration for P1 monitoring
130  helper.defineDQAlgorithm("Efex_eTAU_etaPhiLBMapOutliers",
131  hanConfig=commonAlgConfig|hotCuts|knownAnomalies_eTAU|{"NBinsY":64,"LiveMode":0},
132  thresholdConfig=commonThresholdConfig
133  )
134 
135 
136  # Now define the histograms with low/hi Pt cut
137  for cut_name, cut_val in zip(cut_names, cut_vals):
138  cut_title_addition = '' if (cut_val == 0.0) else ' [Et>=' + '%.1f'%(cut_val/1000) + 'GeV]'
139  # Em first
140  for containerKey in EfexMonAlg.eFexEMTobKeyList:
141  fillGroup = baseGroupName+'_'+containerKey+'_'+cut_name
142  tobStr = containerKey
143  # histograms of eEM variables
144  helper.defineHistogram('nEMTOBs;h_nEmTOBs', title='Number of '+tobStr+'s'+cut_title_addition+';EM '+tobStr+'s;Number of EM '+tobStr+'s',
145  fillGroup=fillGroup,
146  type='TH1I', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=10,xmin=0,xmax=10)
147 
148  helper.defineHistogram('TOBTransverseEnergy;h_TOBTransverseEnergy', title=tobStr+' ET [MeV]'+cut_title_addition,
149  fillGroup=fillGroup,
150  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=100,xmin=0,xmax=50000)
151 
152  helper.defineHistogram('TOBEta;h_TOBEta', title=tobStr+' Eta'+cut_title_addition,
153  fillGroup=fillGroup,
154  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=50,xmin=-2.5,xmax=2.5)
155 
156  helper.defineHistogram('TOBPhi;h_TOBPhi', title=tobStr+' Phi'+cut_title_addition,
157  fillGroup=fillGroup,
158  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=64,xmin=-math.pi,xmax=math.pi)
159 
160  helper.defineHistogram(f"TOBEta,TOBPhi;h_{containerKey}_{cut_name}_EtaPhiMap", title=tobStr+' Count'+cut_title_addition+';#eta;#phi',
161  fillGroup=fillGroup,
162  hanConfig={"display":"SetPalette(55)",
163  "description":f"Inspect for hot/cold spots - check help for list of known hot/coldspots, then check <a href='./detail/h_{containerKey}_{cut_name}_posVsLBN'>detail timeseries</a>. Warning if more than 1 deadspot, but could just be low stats","algorithm":"Efex_eEM_etaThiMapFilled"},
164  type='TH2F',
165  path=(("Expert/Outputs/"+pathFromKey(containerKey,"")) if "Sim" not in containerKey and "x" not in containerKey else trigPath+pathFromKey(containerKey)+cut_name),
166  xbins=50,xmin=-2.5,xmax=2.5,ybins=64,ymin=-math.pi,ymax=math.pi,opt=['kAlwaysCreate'])
167 
168  if "Sim" not in containerKey and "x" not in containerKey:
169  helper.defineHistogram(f"LBN,binNumber;h_{containerKey}_{cut_name}_posVsLBN", title=tobStr+' Count'+cut_title_addition+';LB;64(x-1)+y',
170  fillGroup=fillGroup,
171  hanConfig={"Expert/algorithm":f"Efex_{pathFromKey(containerKey,'')}_etaPhiLBMapOutliers","Shifter/algorithm":f"Efex_{pathFromKey(containerKey,'')}_etaPhiLBMapOutliers_Shifter",
172  "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"},
173  type='TH2I',
174  paths=["Expert/Outputs/"+pathFromKey(containerKey,"")+"/detail","Shifter/Outputs/"+pathFromKey(containerKey,"")],
175  xbins=1,xmin=0,xmax=10,
176  ybins=64*50,ymin=0.5,ymax=64*50+0.5,opt=['kAddBinsDynamically'])
177 
178  helper.defineHistogram('TOBshelfNumber;h_TOBshelfNumber', title=tobStr+' EM Shelf Number'+cut_title_addition,
179  fillGroup=fillGroup,
180  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=2,xmin=0,xmax=2)
181 
182  helper.defineHistogram('TOBeFEXNumberSh0;h_TOBeFEXNumberShelf0', title=tobStr+' EM Module Number Shelf 0'+cut_title_addition,
183  fillGroup=fillGroup,
184  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=12,xmin=0,xmax=12)
185 
186  helper.defineHistogram('TOBeFEXNumberSh1;h_TOBeFEXNumberShelf1', title=tobStr+' EM Module Number Shelf 1'+cut_title_addition,
187  fillGroup=fillGroup,
188  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=12,xmin=0,xmax=12)
189 
190  helper.defineHistogram('TOBfpga;h_TOBfpga', title=tobStr+' EM FPGA'+cut_title_addition,
191  fillGroup=fillGroup,
192  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4)
193 
194  helper.defineHistogram('TOBReta;h_TOBReta', title=tobStr+' EM Reta'+cut_title_addition,
195  fillGroup=fillGroup,
196  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name,xbins=250,xmin=0,xmax=1)
197 
198  helper.defineHistogram('TOBRhad;h_TOBRhad', title=tobStr+' EM Rhad'+cut_title_addition,
199  fillGroup=fillGroup,
200  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=250,xmin=0,xmax=1)
201 
202  helper.defineHistogram('TOBWstot;h_TOBWstot', title=tobStr+' EM Wstot'+cut_title_addition,
203  fillGroup=fillGroup,
204  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=250,xmin=0,xmax=1)
205 
206  threshold_labels = ['fail','loose','medium','tight']
207  helper.defineHistogram('TOBReta_threshold;h_TOBReta_threshold', title=tobStr+' EM Reta threshold'+cut_title_addition,
208  fillGroup=fillGroup,
209  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name,xbins=4,xmin=0,xmax=4.0,xlabels=threshold_labels)
210 
211  helper.defineHistogram('TOBRhad_threshold;h_TOBRhad_threshold', title=tobStr+' EM Rhad threshold'+cut_title_addition,
212  fillGroup=fillGroup,
213  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0,xlabels=threshold_labels)
214 
215  helper.defineHistogram('TOBWstot_threshold;h_TOBWstot_threshold', title=tobStr+' EM Wstot threshold'+cut_title_addition,
216  fillGroup=fillGroup,
217  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0,xlabels=threshold_labels)
218 
219  # Now Tau
220  for containerKey in EfexMonAlg.eFexTauTobKeyList:
221  fillGroup = baseGroupName+'_'+containerKey+'_'+cut_name
222  tobStr = containerKey
223  # plotting of eTau variables
224  helper.defineHistogram('nTauTOBs;h_nTauTOBs', title='Number of '+tobStr+'s'+cut_title_addition+';Tau '+tobStr+'s;Number of Tau '+tobStr+'s',
225  fillGroup = fillGroup,
226  type='TH1I', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=10,xmin=0,xmax=10)
227 
228  helper.defineHistogram('tauTOBTransverseEnergy;h_tauTOBTransverseEnergy', title=tobStr+' Tau Transverse Energy [MeV]'+cut_title_addition,
229  fillGroup = fillGroup,
230  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=100,xmin=0,xmax=50000)
231 
232  helper.defineHistogram('tauTOBEta;h_tauTOBEta', title=tobStr+' Tau Eta'+cut_title_addition,
233  fillGroup = fillGroup,
234  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=60,xmin=-2.5,xmax=2.5)
235 
236  helper.defineHistogram('tauTOBPhi;h_tauTOBPhi', title=tobStr+' Tau Phi'+cut_title_addition,
237  fillGroup = fillGroup,
238  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=100,xmin=-math.pi,xmax=math.pi)
239 
240  helper.defineHistogram(f"tauTOBEta,tauTOBPhi;h_{containerKey}_{cut_name}_EtaPhiMap", title='eTAU '+tobStr+' Count'+cut_title_addition+';#eta;#phi',
241  fillGroup = fillGroup,
242  hanConfig={"display":"SetPalette(55)",
243  "description":f"Inspect for hot/cold spots - check help for list of known hot/coldspots, then check <a href='./detail/h_{containerKey}_{cut_name}_posVsLBN'>detail timeseries</a>. Warning if any deadspots/empty, but could just be low stats","algorithm":"Efex_eTAU_etaThiMapFilled"},
244  type='TH2F',
245  path=(("Expert/Outputs/"+pathFromKey(containerKey,"")) if "Sim" not in containerKey and "x" not in containerKey else (trigPath+pathFromKey(containerKey)+cut_name)),
246  xbins=50,xmin=-2.5,xmax=2.5,ybins=64,ymin=-math.pi,ymax=math.pi,opt=['kAlwaysCreate'])
247 
248  if "Sim" not in containerKey and "x" not in containerKey:
249  helper.defineHistogram(f"LBN,binNumber;h_{containerKey}_{cut_name}_posVsLBN", title='eTAU '+tobStr+' Count'+cut_title_addition+';LB;64(x-1)+y',
250  fillGroup=fillGroup,
251  hanConfig={"Expert/algorithm":f"Efex_{pathFromKey(containerKey,'')}_etaPhiLBMapOutliers","Shifter/algorithm":f"Efex_{pathFromKey(containerKey,'')}_etaPhiLBMapOutliers_Shifter",
252  "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"},
253  type='TH2I',
254  paths=["Expert/Outputs/"+pathFromKey(containerKey,"")+"/detail","Shifter/Outputs/"+pathFromKey(containerKey,"")],
255  xbins=1,xmin=0,xmax=10,
256  ybins=64*50,ymin=0.5,ymax=64*50+0.5,opt=['kAddBinsDynamically'])
257 
258  helper.defineHistogram('tauTOBshelfNumber;h_tauTOBshelfNumber', title=tobStr+' Tau Shelf Number'+cut_title_addition,
259  fillGroup = fillGroup,
260  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=2,xmin=0,xmax=2)
261 
262  helper.defineHistogram('tauTOBeFEXNumberSh0;h_tauTOBeFEXNumberShelf0', title=tobStr+' Tau Module Number Shelf 0'+cut_title_addition,
263  fillGroup = fillGroup,
264  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=12,xmin=0,xmax=12)
265 
266  helper.defineHistogram('tauTOBeFEXNumberSh1;h_tauTOBeFEXNumberShelf1', title=tobStr+' Tau Module Number Shelf 1'+cut_title_addition,
267  fillGroup = fillGroup,
268  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=12,xmin=0,xmax=12)
269 
270 
271  helper.defineHistogram('tauTOBfpga;h_tauTOBfpga', title=tobStr+' Tau FPGA'+cut_title_addition,
272  fillGroup = fillGroup,
273  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4)
274 
275  helper.defineHistogram('tauTOBRcore;h_tauTOBRcore', title=tobStr+' Tau rCore'+cut_title_addition,
276  fillGroup = fillGroup,
277  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=250,xmin=0,xmax=1)
278 
279  helper.defineHistogram('tauTOBRhad;h_tauTOBRhad', title=tobStr+' Tau rHad'+cut_title_addition,
280  fillGroup = fillGroup,
281  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=250,xmin=0,xmax=1)
282 
283  helper.defineHistogram('tauTOBRcore_threshold;h_tauTOBRcore_threshold', title=tobStr+' Tau rCore threshold'+cut_title_addition,
284  fillGroup = fillGroup,
285  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0, xlabels=threshold_labels)
286 
287  helper.defineHistogram('tauTOBRhad_threshold;h_tauTOBRhad_threshold', title=tobStr+' Tau rHad threshold'+cut_title_addition,
288  fillGroup = fillGroup,
289  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0, xlabels=threshold_labels)
290 
291  helper.defineHistogram('tauTOBthree_threshold;h_tauTOBthree_threshold', title=tobStr+' Tau 3 taus threshold'+cut_title_addition,
292  fillGroup = fillGroup,
293  type='TH1F', path=trigPath+pathFromKey(containerKey)+cut_name, xbins=4,xmin=0,xmax=4.0, xlabels=threshold_labels)
294 
295  acc = helper.result()
296  result.merge(acc)
297  return result
298 
299 
EfexMonitorAlgorithm.EfexMonitoringHistConfig
def EfexMonitoringHistConfig(flags, eFexAlg)
Definition: EfexMonitorAlgorithm.py:24
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
str
Definition: BTagTrackIpAccessor.cxx:11
EfexMonitorAlgorithm.EfexMonitoringConfig
def EfexMonitoringConfig(inputFlags)
Definition: EfexMonitorAlgorithm.py:4