ATLAS Offline Software
trigbs_dumpHltDsData.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
4 
5 import eformat
6 import argparse
7 
8 __doc__ = """\
9 Dump content of the HLT result and HLT related details from the event header.
10 """
11 parser = argparse.ArgumentParser(description = __doc__)
12 
13 parser.add_argument("files", metavar="FILE", nargs='+',
14  help="RAW file to inspect")
15 
16 parser.add_argument("-n", "--events", metavar="N", action="store", type=int,
17  help="Process N events")
18 
19 parser.add_argument("-s", "--skip", metavar="N", action="store", type=int,
20  help="Skip N events")
21 
22 parser.add_argument("--interactive", action="store_true", default=False,
23  help="after opening the file enter interactive prompt")
24 
25 parser.add_argument("-v", "--verbosity",type=int, choices=[0, 1, 2], default=2,
26  help="change output verbosity (default 2)")
27 
28 args = parser.parse_args()
29 
30 from TrigByteStreamTools.hltResult import hltResult, print_all_navigation
31 res = hltResult()
32 
33 def ds_dump(bsfile):
34  """Runs the dumping routines"""
35 
36  # open a file
37  if (args.verbosity > 0):
38  print("="*100)
39  print("Opening", bsfile)
40 
41  input = eformat.istream(bsfile)
42 
43  if args.interactive:
44  import code
45  code.interact(local=locals())
46 
47  event_count = 0
48  ds_ROB_counts = {}
49  offset = args.skip if args.skip else 0
50  for event in input:
51  if offset>0:
52  offset -= 1
53  continue
54 
55  event_count += 1
56  if args.events is not None and event_count>args.events:
57  event_count -=1
58  break
59 
60  # Extract the DS module IDs and set the flag for finding the corresponding ROB
61  ds_module_ids={}
62  for stag in event.stream_tag():
63  if (stag.type == 'calibration') and ((stag.name).startswith('DataScouting_')):
64  ds_module_ids[int((stag.name).split('_')[1])] = (False, stag.name)
65  if stag.name not in ds_ROB_counts:
66  ds_ROB_counts[stag.name] = {'ROBfound':0, 'ROBnotFound':0, 'noContainers':0, 'emptyContainers':0}
67 
68  # loop over the SubDetFragments and find DS ROBs
69  for f in event.children():
70  if (f.source_id().subdetector_id() == eformat.helper.SubDetector.TDAQ_HLT) and (f.source_id().module_id() in ds_module_ids):
71  if (args.verbosity >= 1):
72  print("======================= RunNumber : %d , Event: %d, LB: %d, LVL1_ID: %d, Global_ID: %d bunch-x: %d TT: x%x =========================="
73  % ( event.run_no(), event_count, event.lumi_block(), event.lvl1_id(), event.global_id(), event.bc_id(), event.lvl1_trigger_type()))
74  # Print the stream tags
75  if (args.verbosity >= 1):
76  print(".. Stream Tags:", [(s.name, s.type) for s in event.stream_tag()])
77 
78  featureSizes={}
79  if (args.verbosity >= 1):
80  print('.. %s %s %s bytes' % (f.__class__.__name__, f.source_id(), f.fragment_size_word()*4))
81  try:
82  res.load(f)
83  ds_module_ids[f.source_id().module_id()] = (True, ds_module_ids[f.source_id().module_id()][1]) # The expected ROB was found
84  if (args.verbosity >= 2):
86  for feature in res.nav_payload:
87  key = feature[0]+'#'+feature[1]
88  if key not in featureSizes:
89  featureSizes[key] = 0
90  featureSizes[key] += feature[2]
91  except Exception as ex:
92  print('... **** problems in analyzing payload', ex)
93  print('... **** raw data[:10]', list(f.rod_data())[:10])
94  # check that feature containers are there and that they are not empty
95  if (featureSizes == {}):
96  if (args.verbosity >= 1):
97  print(" FATAL : No containers are available for Data Scouting HLTResult with module ID = ",f.source_id().module_id(),", Stream name = ",ds_module_ids[f.source_id().module_id()][1])
98  ds_ROB_counts[ ds_module_ids[f.source_id().module_id()][1] ]['noContainers'] += 1
99  for item in featureSizes.items():
100  if (item[1] == 0):
101  if (args.verbosity >= 1):
102  print(" ERROR : Empty container for feature = ",item[0])
103  ds_ROB_counts[ ds_module_ids[f.source_id().module_id()][1] ]['emptyContainers'] += 1
104 
105  if (args.verbosity >= 2):
106  print(".. EOF DS HLTResult with module ID = ", f.source_id().module_id())
107 
108  # check if all expected DS ROBs from the StreamTags were found
109  for item in ds_module_ids.items():
110  if (item[1][0] is False):
111  if (args.verbosity >= 1):
112  print(" FATAL : No Data Scouting HLTResult found for expected module ID = ",item[0],", Stream name = ",item[1][1])
113  ds_ROB_counts[ item[1][1] ]['ROBnotFound'] += 1
114  else:
115  ds_ROB_counts[ item[1][1] ]['ROBfound'] += 1
116 
117  if (args.verbosity >= 0):
118  print("\n Events read: ", event_count)
119  print("\n Summary of Data Scouting information:\n"," -------------------------------------\n", ds_ROB_counts)
120 
121 if __name__ == "__main__":
122  for f in args.files:
123  ds_dump(f)
python.hltResult.print_all_navigation
def print_all_navigation(result)
Definition: hltResult.py:105
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
trigbs_dumpHltDsData.ds_dump
def ds_dump(bsfile)
Definition: trigbs_dumpHltDsData.py:33
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
trigbs_dumpHltDsData.int
int
Definition: trigbs_dumpHltDsData.py:25