ATLAS Offline Software
LArDigitalTriggMonAlg.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 #
3 
4 # Define some handy strings for plot labels
5 
6 
7 # TO DO - add defined cut names for selections, add them to plot names
8 
9 from AthenaConfiguration.ComponentFactory import CompFactory
10 
11 
12 # selections from the digi (ADC) loop
13 selStr = {}
14 selStr["passDigiNom"] ="for unmasked SCs with ADC_max-pedestal > 10*RMS(DB) & good quality bits"
15 selStr["badNotMasked"] = "for unmasked SCs which have bad quality bits"
16 # selections from the sc (ET) loop
17 selStr["passSCNom"] = "for unmasked SCs which pass #tau selection with non-zero ET"
18 selStr["passSCNom1"] = "for unmasked SCs which pass #tau selection with ET > 1 GeV"
19 selStr["passSCNom10"] = "for unmasked SCs which pass tau selection with ET > 10 GeV"
20 selStr["passSCNom10tauGt3"] = "for unmasked SCs which pass tau selection with ET > 10 GeV and #tau > 3"
21 selStr["saturNotMasked"] = "for unmasked SCs which are saturated"
22 selStr["OFCbOFNotMasked"] = "for unmasked SCs with OFCb in overflow"
23 selStr["onlofflEmismatch"] = "for unmasked SCs which pass #tau selection where online & offline energies are different"
24 
25 selStr["notMaskedEoflNe0"] = "for unmasked SCs with non-zero ET ofl"
26 selStr["notMaskedEoflGt1"] = "for unmasked SCs with ET ofl > 1 GeV"
27 
28 
29 
30 def LArDigitalTriggMonConfig(flags,larLATOMEBuilderAlg, nsamples=32, streamTypes=[]):
31  '''Function to configures some algorithms in the monitoring system.'''
32  # The following class will make a sequence, configure algorithms, and link
33  # them to GenericMonitoringTools
34 
35  from AthenaMonitoring.AthMonitorCfgHelper import AthMonitorCfgHelper
36  helper = AthMonitorCfgHelper(flags,'LArDigitalTriggMonAlgCfg')
37 
38  from LArMonitoring.GlobalVariables import lArDQGlobals
39 
40  from AthenaCommon.Logging import logging
41  mlog = logging.getLogger( 'LArDigitalTriggMon' )
42 
43  if not flags.DQ.enableLumiAccess:
44  from LumiBlockComps.LuminosityCondAlgConfig import LuminosityCondAlgCfg
45  helper.resobj.merge(LuminosityCondAlgCfg(flags))
46 
47  #get SC onl-offl mapping from DB
48  from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg
49  helper.resobj.merge(LArOnOffIdMappingSCCfg(flags))
50 
51  # and elec. calib. coeffs
52  from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBSCCfg
53  helper.resobj.merge(LArElecCalibDBSCCfg(flags, condObjs=["Ramp","DAC2uA", "Pedestal", "uA2MeV", "MphysOverMcal", "OFC", "Shape", "HVScaleCorr"]))
54 
55 
56 
57  larDigitalTriggMonAlg = helper.addAlgorithm(CompFactory.LArDigitalTriggMonAlg('larDigitalTriggMonAlg'))
58  larDigitalTriggMonAlg.ProblemsToMask=["maskedOSUM"] #highNoiseHG","highNoiseMG","highNoiseLG","deadReadout","deadPhys"]
59 
60  hasEtId = False
61  hasEt = False
62  hasAdc = False
63  hasAdcBas = False
64  for i in range(0,len(streamTypes)):
65  mlog.info("runinfo.streamTypes()[i]: "+str(streamTypes[i]))
66  if streamTypes[i] == "SelectedEnergy":
67  hasEtId = True
68  larDigitalTriggMonAlg.LArRawSCContainerKey = "SC_ET_ID"
69  if streamTypes[i] == "Energy":
70  hasEt = True
71  larDigitalTriggMonAlg.LArRawSCContainerKey = "SC_ET"
72  if streamTypes[i] == "RawADC":
73  hasAdc = True
74  larLATOMEBuilderAlg.LArDigitKey = "SC"
75  larLATOMEBuilderAlg.isADCBas = False
76  larDigitalTriggMonAlg.LArDigitContainerKey = "SC"
77  if streamTypes[i] == "ADC":
78  hasAdcBas = True
79  larDigitalTriggMonAlg.isADCBas = True
80  larDigitalTriggMonAlg.LArDigitContainerKey = "SC_ADC_BAS"
81  larLATOMEBuilderAlg.isADCBas = True
82  larLATOMEBuilderAlg.LArDigitKey = "SC_ADC_BAS"
83 
84  if (hasEtId and hasEt): #prefer EtId if both in recipe
85  hasEt = False
86  #larDigitalTriggMonAlg.EtName = "SC_ET_ID"
87 
88  if (hasAdc and hasAdcBas): #prefer Raw Adc if both in recipe
89  hasAdc = False
90  larDigitalTriggMonAlg.isADCBas=False
91 
92  mlog.info("Mux settings from COOL:")
93  mlog.info("has ET Id: "+str(hasEtId))
94  mlog.info("has ET: "+str(hasEt))
95  mlog.info("has ADC: "+str(hasAdc))
96  mlog.info("has ADC Bas: "+str(hasAdcBas))
97 
98  SCGroupName="SC"
99  larDigitalTriggMonAlg.SCMonGroup=SCGroupName
100  # uncomment if needed:
101  #larDigitalTriggMonAlg.FileKey="CombinedMonitoring"
102 
103  SCGroup = helper.addGroup(
104  larDigitalTriggMonAlg,
105  SCGroupName,
106  '/LArDigitalTrigger/',
107  'run'
108  )
109 
110  sc_hist_path='/'
111 
112  LatomeDetBinMapping = dict([
113  ("0x48",{"Subdet":"FCALC","Bin":1}),
114  ("0x4c",{"Subdet":"EMEC/HECC","Bin":3}),
115  ("0x44",{"Subdet":"EMECC","Bin":11}),
116  ("0x4a",{"Subdet":"EMB/EMECC","Bin":27}),
117  ("0x42",{"Subdet":"EMBC","Bin":43}),
118  ("0x41",{"Subdet":"EMBA","Bin":59}),
119  ("0x49",{"Subdet":"EMB/EMECA","Bin":75}),
120  ("0x43",{"Subdet":"EMECA","Bin":91}),
121  ("0x4b",{"Subdet":"EMEC/HECA","Bin":107}),
122  ("0x47",{"Subdet":"FCALA","Bin":115})
123  ])
124  NLatomeBins=117
125  NLatomeBins_side=59
126 
127  BinLabel_LATOME=[]
128  BinLabel_LATOME_A=[]
129  BinLabel_LATOME_C=[]
130  phi=0
131  for bb in range (0,NLatomeBins):
132  Label=""
133  for detID in LatomeDetBinMapping:
134  if bb==(LatomeDetBinMapping[detID]["Bin"]-1):
135  Label=LatomeDetBinMapping[detID]["Subdet"]
136  phi=1
137  break
138  if bb < NLatomeBins_side:
139  BinLabel_LATOME_C+=[Label+str(phi)]
140  else:
141  BinLabel_LATOME_A+=[Label+str(phi)]
142 
143  BinLabel_LATOME+=[Label+str(phi)]
144  phi+=1
145 
146 
147 
148 
149  iphi_bins_dict = {"ALL": 63, "EMB": 63, "EMEC": 63, "HEC": 63, "FCAL": 15}
150 
151 
152 
153 
154  SCGroup.defineHistogram('lumi_block,event_size;EventSize_vs_LB',
155  title='Digital trigger event size per LB; LumiBlock; Event size [MB]',
156  type='TProfile',
157  path=sc_hist_path,
158  xbins=lArDQGlobals.LB_Bins, xmin=lArDQGlobals.LB_Min, xmax=lArDQGlobals.LB_Max)
159 
160 
161 
162 
163  partGroup_digi = helper.addArray([larDigitalTriggMonAlg.LayerNames], larDigitalTriggMonAlg, 'LArDigitalTriggerMon_digi', topPath='/LArDigitalTrigger/')
164  partGroup_sc = helper.addArray([larDigitalTriggMonAlg.LayerNames], larDigitalTriggMonAlg, 'LArDigitalTriggerMon_sc', topPath='/LArDigitalTrigger/')
165 
166  for part in larDigitalTriggMonAlg.LayerNames:
167  selStrPart = {}
168  for sel in selStr.keys():
169  selStrPart[sel] = "in "+part+" "+selStr[sel]
170  iphi_bins = 63
171  for key in iphi_bins_dict.keys():
172  if part.startswith(key):
173  iphi_bins = iphi_bins_dict[key]
174 
175  if part == "ALL":
176  partxbins=lArDQGlobals.SuperCell_Variables["etaRange"]["All"]["All"]
177  partybins=lArDQGlobals.SuperCell_Variables["phiRange"]["All"]["All"]
178  topPath=""
179  else:
180  topPath="PerPartition/"
181  Part = part[:-2]
182  if Part == "FCAL":
183  Part = "FCal"
184  Side = part[-1]
185  Sampling = part[-2]
186  if Sampling == "P":
187  Sampling = "0"
188  partxbins=lArDQGlobals.SuperCell_Variables["etaRange"][Part][Side][Sampling]
189  partybins=lArDQGlobals.SuperCell_Variables["phiRange"][Part][Side][Sampling]
190 
191 
192 
193 
194  for thisSel in [ "passDigiNom", "badNotMasked"]:
195  thisTopPath=f"/{thisSel}/{topPath}"
196  # Histos that we only want for all partitions/layers combined lalala
197  if part == "ALL":
198  partGroup_digi.defineHistogram('Digi_part_maxpos,Digi_part_partition;Partition_vs_maxSamplePosition_'+thisSel,
199  title='Partition vs. position of max sample '+selStrPart[thisSel],
200  cutmask='Digi_part_'+thisSel,
201  type='TH2F',
202  path=thisTopPath,
203  xbins=nsamples,xmin=0.5,xmax=nsamples+0.5,
204  ybins=lArDQGlobals.N_Partitions, ymin=-0.5, ymax=lArDQGlobals.N_Partitions-0.5,
205  xlabels = [str(x) for x in range(1,nsamples+1)],
206  ylabels=lArDQGlobals.Partitions,
207  pattern=[(part)])
208 
209  partGroup_digi.defineHistogram('Digi_part_latomesourceidbin,Digi_part_adc;ADCFullRange_vs_LATOME_'+thisSel,
210  title='ADC vs LATOME name '+selStrPart[thisSel]+'; ; ADC',
211  cutmask='Digi_part_'+thisSel,
212  type='TH2F',
213  path=thisTopPath,
214  xbins=NLatomeBins,xmin=1,xmax=NLatomeBins+1,
215  ybins=500, ymin=-2, ymax=2500, #raw ADC is 12 bit
216  xlabels=BinLabel_LATOME,
217  pattern=[(part)])
218 
219  partGroup_digi.defineHistogram('Digi_part_latomesourceidbin,Digi_part_pedestal;Pedestal_vs_LATOME_'+thisSel,
220  title='Pedestal vs LATOME name '+selStrPart[thisSel]+'; ; Pedestal',
221  cutmask='Digi_part_'+thisSel,
222  type='TH2F',
223  path=thisTopPath,
224  xbins=NLatomeBins,xmin=1,xmax=NLatomeBins+1,
225  ybins=500, ymin=-2, ymax=2500, #raw ADC is 12 bit
226  xlabels=BinLabel_LATOME,
227  pattern=[(part)])
228 
229  partGroup_digi.defineHistogram('Digi_part_latomesourceidbin,Digi_part_maxpos;MaxSamplePosition_vs_LATOME_'+thisSel,
230  title='Position of max sample vs. LATOME '+selStrPart[thisSel],
231  type='TH2F',
232  cutmask='Digi_part_'+thisSel,
233  path=thisTopPath,
234  xbins=NLatomeBins,xmin=1,xmax=NLatomeBins+1,
235  ybins=nsamples,ymin=0.5,ymax=nsamples+0.5,
236  xlabels=BinLabel_LATOME,
237  ylabels = [str(x) for x in range(1,nsamples+1)],
238  pattern=[(part)])
239 
240  partGroup_digi.defineHistogram('Digi_part_latomesourceidbin,Digi_part_diff_adc0_ped;Diff_ADC0_Ped_vs_LATOME_'+thisSel,
241  title='ADC[0] - Pedestal vs LATOME name '+selStrPart[thisSel]+'; ; ADC[0] - Pedestal',
242  type='TH2F',
243  cutmask='Digi_part_'+thisSel,
244  path=thisTopPath,
245  xbins=NLatomeBins,xmin=1,xmax=NLatomeBins+1,
246  ybins=64, ymin=-32, ymax=32,
247  xlabels=BinLabel_LATOME,
248  pattern=[(part)])
249 
250  partGroup_digi.defineHistogram('Digi_part_latomesourceidbin,Digi_part_diff_adc_ped_norm;Diff_ADC_Ped_Norm_vs_LATOME_'+thisSel,
251  title='(ADC-ped)/fabs(ADC_max-ped) '+selStrPart[thisSel]+'; LATOME Name; (ADC - pedestal) / fabs(ADC_max - pedestal)',
252  type='TH2F',
253  cutmask='Digi_part_'+thisSel,
254  path=thisTopPath,
255  xbins=NLatomeBins,xmin=1,xmax=NLatomeBins+1,
256  ybins=64, ymin=-32, ymax=32,
257  xlabels=BinLabel_LATOME,
258  pattern=[(part)])
259 
260 
261 
262  partGroup_digi.defineHistogram('Digi_part_eta,Digi_part_phi;Coverage_Eta_Phi_'+thisSel,
263  title='SC coverage '+selStrPart[thisSel]+': #phi vs #eta;#eta;#phi',
264  type='TH2F',
265  path=thisTopPath+'/Coverage',
266  cutmask='Digi_part_'+thisSel,
267  xbins=partxbins,
268  ybins=partybins,
269  pattern=[(part)])
270 
271 
272  if not flags.Common.isOnline: continue # Skip the remaining histos if we are running offline
273 
274  if thisSel != "passDigiNom": continue
275  partGroup_digi.defineHistogram('Digi_part_eta,Digi_part_phi,Digi_part_diff_adc0_ped;Coverage_Diff_ADC0_Ped_'+thisSel,
276  title='ADC[0] - Pedestal'+selStrPart[thisSel]+': #phi vs #eta;#eta;#phi',
277  type='TProfile2D',
278  cutmask='Digi_part_'+thisSel,
279  path=thisTopPath+'/Coverage',
280  xbins=partxbins,
281  ybins=partybins,
282  pattern=[(part)])
283 
284 
285 
286  partGroup_digi.defineHistogram('Digi_part_BCID,Digi_part_iphi,Digi_part_diff_adc_ped;Diff_ADC_Ped_Per_BCID_Per_iphi_'+thisSel,
287  title='ADC - Pedestal (all samples) '+selStrPart[thisSel]+': iphi vs BCID;BCID;iphi',
288  type='TProfile2D',
289  cutmask='Digi_part_'+thisSel,
290  path=thisTopPath,
291  xbins=3564,xmin=-0.5,xmax=3563.5,
292  ybins=iphi_bins+1,ymin=0,ymax=iphi_bins+1, # Make a lardqglobals for ieta iphi?
293  pattern=[(part)])
294 
295 
296 
297 
298 
299 
300  partGroup_digi.defineHistogram('Digi_part_sampos,Digi_part_adc;ADCZoom_vs_SamplePosition_'+thisSel,
301  title='ADC (zoom) vs sample position '+selStrPart[thisSel],
302  cutmask='Digi_part_'+thisSel,
303  type='TH2F',
304  path=thisTopPath,
305  xbins=nsamples,xmin=0.5,xmax=nsamples+0.5,
306  xlabels = [str(x) for x in range(1,nsamples+1)],
307  ybins=750, ymin=0, ymax=1300, #start from 0 otherwise miss endcap pedestals
308  pattern=[(part)])
309 
310  partGroup_digi.defineHistogram('Digi_part_sampos,Digi_part_adc;ADCFullRange_vs_SamplePosition_'+thisSel,
311  title='ADC vs sample position '+selStrPart[thisSel],
312  cutmask='Digi_part_'+thisSel,
313  type='TH2F',
314  path=thisTopPath,
315  xbins=nsamples,xmin=0.5,xmax=nsamples+0.5,
316  xlabels = [str(x) for x in range(1,nsamples+1)],
317  ybins=500, ymin=0, ymax=5000, #raw ADC is 12 bit
318  pattern=[(part)])
319 
320  partGroup_digi.defineHistogram('Digi_part_sampos,Digi_part_pedestal;Pedestal_vs_SamplePosition_'+thisSel,
321  title='Pedestal vs sample position '+selStrPart[thisSel],
322  cutmask='Digi_part_'+thisSel,
323  type='TH2F',
324  path=thisTopPath,
325  xbins=nsamples,xmin=0.5,xmax=nsamples+0.5,
326  xlabels = [str(x) for x in range(1,nsamples+1)],
327  ybins=500, ymin=0, ymax=5000, #raw ADC is 12 bit
328  pattern=[(part)])
329 
330  partGroup_digi.defineHistogram('Digi_part_diff_adc0_ped;Diff_ADC0_Ped_'+thisSel,
331  title='LATOME (ADC[0]-ped) '+selStrPart[thisSel]+'; (ADC - pedestal)',
332  type='TH1F',
333  cutmask='Digi_part_'+thisSel,
334  path=thisTopPath,
335  xbins=50,xmin=-25,xmax=25,
336  pattern=[(part)])
337 
338  partGroup_digi.defineHistogram('Digi_part_sampos,Digi_part_diff_adc_ped_norm;Diff_ADC_Ped_Norm_vs_SamplePosition_'+thisSel,
339  title='(ADC-ped)/fabs(ADC_max-ped) '+selStrPart[thisSel]+'; Sample position; (ADC - pedestal) / fabs(ADC_max - pedestal)',
340  type='TH2F',
341  cutmask='Digi_part_'+thisSel,
342  path=thisTopPath,
343  ybins=40,ymin=-1,ymax=1,
344  xbins=nsamples,xmin=0.5,xmax=nsamples+0.5,
345  xlabels = [str(x) for x in range(1,nsamples+1)],
346  pattern=[(part)])
347 
348  partGroup_digi.defineHistogram('Digi_part_BCID, Digi_part_adc;ADC_vs_BCID_'+thisSel,
349  title='ADC value vs BCID '+selStrPart[thisSel]+'; BCID; ADC Value',
350  type='TProfile',
351  cutmask='Digi_part_'+thisSel,
352  path=thisTopPath,
353  xbins=3564,xmin=-0.5,xmax=3563.5,
354  ybins=500, ymin=0, ymax=5000,
355  pattern=[(part)])
356 
357  partGroup_digi.defineHistogram('Digi_part_BCID, Digi_part_diff_adc0_ped;Diff_ADC0_Ped_vs_BCID_'+thisSel,
358  title='ADC[0] - Ped value vs BCID '+selStrPart[thisSel]+'; BCID; ADC[0] Value',
359  type='TProfile',
360  cutmask='Digi_part_'+thisSel,
361  path=thisTopPath,
362  xbins=3564,xmin=-0.5,xmax=3563.5,
363  ybins=500, ymin=-5, ymax=5,
364  pattern=[(part)])
365 
366 
367 
368 
369  for thisSel in [ "passSCNom", "passSCNom1", "passSCNom10", "passSCNom10tauGt3", "saturNotMasked", "OFCbOFNotMasked", "onlofflEmismatch", "notMaskedEoflNe0", "notMaskedEoflGt1"]:
370  thisTopPath=f"/{thisSel}/{topPath}"
371  # Histos that we only want for all partitions/layers combined lalala
372  if part == "ALL":
373  partGroup_sc.defineHistogram('SC_part_latomesourceidbin,SC_part_et_onl;SC_ET_Onl_vs_LATOME_'+thisSel,
374  title='SC ET [GeV] vs LATOME name '+selStrPart[thisSel]+'; ; ET SC [GeV]',
375  type='TH2F',
376  cutmask='SC_part_'+thisSel,
377  path=thisTopPath,
378  xbins=NLatomeBins,xmin=1,xmax=NLatomeBins+1,
379  ybins=200, ymin=-10, ymax=200,
380  xlabels=BinLabel_LATOME,
381  pattern=[(part)])
382 
383 
384  partGroup_sc.defineHistogram('SC_part_LB,SC_part_latomesourceidbin;LB_vs_LATOME_'+thisSel,
385  title='LATOME name vs LB '+selStrPart[thisSel]+';LB;LATOME',
386  type='TH2F',
387  cutmask='SC_part_'+thisSel,
388  path=thisTopPath,
389  xbins=lArDQGlobals.LB_Bins, xmin=lArDQGlobals.LB_Min, xmax=lArDQGlobals.LB_Max,
390  ybins=NLatomeBins,ymin=1,ymax=NLatomeBins+1,
391  ylabels=BinLabel_LATOME,
392  pattern=[(part)])
393 
394  partGroup_sc.defineHistogram('SC_part_time,SC_part_et_ofl;time_vs_et_ofl_'+thisSel,
395  title='SC coverage '+selStrPart[thisSel]+': #tau vs ET ofl;#tau;ET ofl',
396  type='TH2F',
397  cutmask='SC_part_'+thisSel,
398  path=thisTopPath,
399  xbins=500,xmin=-50,xmax=50,
400  ybins=500,ymin=-10,ymax=70,
401  pattern=[(part)])
402 
403 
404  partGroup_sc.defineHistogram('SC_part_latomesourceidbin,SC_part_time;MeanOfflineLATOMEtime_vs_LATOME_'+thisSel,
405  title='Average LATOME #tau from Offline computation per LATOME'+selStrPart[thisSel]+'; LATOME ; #tau [ns]',
406  type='TH2F',
407  cutmask='SC_part_'+thisSel,
408  path=thisTopPath,
409  xbins=NLatomeBins,xmin=1,xmax=NLatomeBins+1,
410  ybins=200, ymin=-50, ymax=50,
411  xlabels=BinLabel_LATOME,
412  pattern=[(part)])
413 
414  partGroup_sc.defineHistogram('SC_part_LB,SC_part_latomesourceidbin,SC_part_time;MeanOfflineLATOMEtime_perLB_perLATOME_'+thisSel,
415  title='SC #tau '+selStrPart[thisSel]+': LATOME vs LB;LB;LATOME',
416  type='TProfile2D',
417  cutmask='SC_part_'+thisSel,
418  path=thisTopPath,
419  xbins=lArDQGlobals.LB_Bins, xmin=lArDQGlobals.LB_Min, xmax=lArDQGlobals.LB_Max,
420  ybins=NLatomeBins,ymin=1,ymax=NLatomeBins+1,
421  ylabels=BinLabel_LATOME,
422  pattern=[(part)])
423 
424  partGroup_sc.defineHistogram('SC_part_LB,SC_part_time;MeanOfflineLATOMEtime_vs_LB_'+thisSel,
425  title='Average LATOME #tau from Offline computation per LB '+selStrPart[thisSel]+'; LumiBloc; #tau [ns]',
426  type='TProfile',
427  cutmask='SC_part_'+thisSel,
428  path=thisTopPath,
429  xbins=lArDQGlobals.LB_Bins, xmin=lArDQGlobals.LB_Min, xmax=lArDQGlobals.LB_Max,
430  pattern=[(part)])
431 
432 
433 
434 
435  partGroup_sc.defineHistogram('SC_part_eta,SC_part_phi;Coverage_Eta_Phi_'+thisSel,
436  title='SC coverage '+selStrPart[thisSel]+': #phi vs #eta;#eta;#phi',
437  type='TH2F',
438  cutmask='SC_part_'+thisSel,
439  path=thisTopPath+'/Coverage',
440  xbins=partxbins,
441  ybins=partybins,
442  pattern=[(part)])
443 
444 
445  partGroup_sc.defineHistogram('SC_part_time;OfflineLATOMEtime_'+thisSel,
446  title='LATOME #tau from Offline Computation '+selStrPart[thisSel]+';#tau [ns]; Evts;',
447  type='TH1F',
448  cutmask='SC_part_'+thisSel,
449  path=thisTopPath,
450  xbins=100,xmin=-25,xmax=25,
451  pattern=[(part)])
452 
453 
454  if not flags.Common.isOnline: continue # Skip the remaining histos if we are running offline
455 
456  if thisSel != "passSCNom": continue
457 
458  partGroup_sc.defineHistogram('SC_part_eta,SC_part_phi,SC_part_et_onl;Coverage_Et_Onl_'+thisSel,
459  title='SC Energy '+selStrPart[thisSel]+': #phi vs #eta;#eta;#phi',
460  type='TProfile2D',
461  cutmask='SC_part_'+thisSel,
462  path=thisTopPath+'/Coverage',
463  xbins=partxbins,
464  ybins=partybins,
465  pattern=[(part)])
466 
467  partGroup_sc.defineHistogram('SC_part_eta,SC_part_phi,SC_part_time;Coverage_OfflineLATOMEtime_'+thisSel,
468  title='LATOME #tau from Offline Computation '+selStrPart[thisSel]+': #phi vs #eta;#eta;#phi',
469  type='TProfile2D',
470  cutmask='SC_part_'+thisSel,
471  path=thisTopPath+'/Coverage',
472  xbins=partxbins,
473  ybins=partybins,
474  pattern=[(part)])
475 
476  partGroup_sc.defineHistogram('SC_part_et_onl,SC_part_et_ofl;ET_Ofl_vs_ET_Onl_'+thisSel,
477  title='LATOME ET vs Offline Computation '+selStrPart[thisSel]+'; ET Onl;ET Offl [GeV]',
478  type='TH2F',
479  cutmask='SC_part_'+thisSel,
480  path=thisTopPath,
481  xbins=0,xmin=0,xmax=20,
482  ybins=0,ymin=0,ymax=20,
483  pattern=[(part)])
484 
485  partGroup_sc.defineHistogram('SC_part_et_diff;ET_Diff_OnlOfl_'+thisSel,
486  title='LATOME ET vs Offline Computation '+selStrPart[thisSel]+'; ET Onl - ET Offl [GeV]; Evts;',
487  type='TH1F',
488  cutmask='SC_part_'+thisSel,
489  path=thisTopPath,
490  xbins=200,xmin=-10,xmax=10,
491  pattern=[(part)])
492 
493 
494  partGroup_sc.defineHistogram('SC_part_et_onl;SC_ET_Onl_'+thisSel,
495  title='SC eT [GeV] '+selStrPart[thisSel],
496  type='TH1F',
497  cutmask='SC_part_'+thisSel,
498  path=thisTopPath,
499  xbins=500, xmin=-100, xmax=400,
500  pattern=[(part)])
501 
502 
503  partGroup_sc.defineHistogram('SC_part_BCID,SC_part_time;MeanOfflineLATOMEtime_vs_BCID_'+thisSel,
504  title='Average LATOME #tau from Offline computation per BCID '+selStrPart[thisSel]+'; BCID; #tau [ns]',
505  type='TProfile',
506  cutmask='SC_part_'+thisSel,
507  path=thisTopPath,
508  xbins=3564,xmin=-0.5,xmax=3563.5,
509  pattern=[(part)])
510 
511  partGroup_sc.defineHistogram('SC_part_BCID,SC_part_et_onl_muscaled;AvEnergyVsBCID_'+thisSel,
512  title='Average Energy vs BCID '+selStrPart[thisSel]+'; BCID; Energy per SC [MeV]',
513  type='TProfile',
514  cutmask='SC_part_'+thisSel,
515  path=thisTopPath,
516  xbins=3564,xmin=-0.5,xmax=3563.5,
517  ybins=10, ymin=-20, ymax=20,
518  pattern=[(part)])
519 
520 
521  return helper.result()
522 
523 
524 if __name__=='__main__':
525 
526  from AthenaConfiguration.AllConfigFlags import initConfigFlags
527  from AthenaConfiguration.TestDefaults import defaultGeometryTags
528  flags = initConfigFlags()
529 
530  from AthenaConfiguration.Enums import LHCPeriod
531  flags.GeoModel.Run = LHCPeriod.Run3
532 
533  flags.Input.Files = ["/eos/atlas/atlascerngroupdisk/proj-spot/spot-job-inputs/data23_13p6TeV/data23_13p6TeV.00451569.physics_Main.daq.RAW._lb0260._SFO-14._0001.data"]
534 
535  flags.Output.HISTFileName = 'LArDigitalTriggMonOutput.root'
536 
537  flags.DQ.useTrigger = False
538  flags.GeoModel.AtlasVersion=defaultGeometryTags.RUN3
539  flags.PerfMon.doFullMonMT=True
540  flags.Exec.MaxEvents=100
541  flags.fillFromArgs()
542  flags.lock()
543 
544  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
545  cfg = MainServicesCfg(flags)
546 
547  # in case of tier0 workflow:
548  from CaloRec.CaloRecoConfig import CaloRecoCfg
549  cfg.merge(CaloRecoCfg(flags))
550 
551  from LArBadChannelTool.LArBadChannelConfig import LArBadChannelCfg
552  cfg.merge(LArBadChannelCfg(flags, isSC=True))
553 
554  from LArByteStream.LArRawSCDataReadingConfig import LArRawSCDataReadingCfg
555  SCData_acc = LArRawSCDataReadingCfg(flags)
556 
557  cfg.merge(SCData_acc)
558 
559  larLATOMEBuilderAlg=CompFactory.LArLATOMEBuilderAlg("LArLATOMEBuilderAlg",LArDigitKey="SC", isADCBas=False)
560  cfg.addEventAlgo(larLATOMEBuilderAlg)
561 
562  streamTypes = ["SelectedEnergy", "ADC"]
563  aff_acc = LArDigitalTriggMonConfig(flags, larLATOMEBuilderAlg, streamTypes=streamTypes)
564  cfg.merge(aff_acc)
565 
566  from PerfMonComps.PerfMonCompsConfig import PerfMonMTSvcCfg
567  cfg.merge(PerfMonMTSvcCfg(flags))
568 
569  cfg.run()
570 
571 
python.CaloRecoConfig.CaloRecoCfg
def CaloRecoCfg(flags, clustersname=None)
Definition: CaloRecoConfig.py:9
python.LuminosityCondAlgConfig.LuminosityCondAlgCfg
def LuminosityCondAlgCfg(flags, useOnlineLumi=None, suffix=None)
Definition: LuminosityCondAlgConfig.py:17
LArCablingConfig.LArOnOffIdMappingSCCfg
def LArOnOffIdMappingSCCfg(configFlags)
Definition: LArCablingConfig.py:65
python.LArBadChannelConfig.LArBadChannelCfg
def LArBadChannelCfg(configFlags, tag=None, isSC=False)
Definition: LArBadChannelConfig.py:8
python.LArRawSCDataReadingConfig.LArRawSCDataReadingCfg
def LArRawSCDataReadingCfg(configFlags, **kwargs)
Definition: LArRawSCDataReadingConfig.py:8
python.PerfMonCompsConfig.PerfMonMTSvcCfg
def PerfMonMTSvcCfg(flags, **kwargs)
A minimal new-style configuration for PerfMonMTSvc.
Definition: PerfMonCompsConfig.py:10
LArDigitalTriggMonAlg.LArDigitalTriggMonConfig
def LArDigitalTriggMonConfig(flags, larLATOMEBuilderAlg, nsamples=32, streamTypes=[])
Definition: LArDigitalTriggMonAlg.py:30
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:256
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.LArElecCalibDBConfig.LArElecCalibDBSCCfg
def LArElecCalibDBSCCfg(flags, condObjs, sqlite=None)
Definition: LArElecCalibDBConfig.py:126
str
Definition: BTagTrackIpAccessor.cxx:11