ATLAS Offline Software
CostAnalysisPostProcessing.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 #
3 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
4 #
5 
6 '''
7 @file CostAnalysisPostProcessing.py
8 @brief Script to consume merged cost histograms from the CostAnalysis and
9  produce structured CSV output.
10 '''
11 
12 import ROOT
13 from TrigCostAnalysis.Util import exploreTree
14 from TrigCostAnalysis.CostMetadataUtil import saveMetadata
15 from AthenaCommon.Logging import logging
16 log = logging.getLogger('CostAnalysisPostProcessing')
17 
18 def main():
19  from argparse import ArgumentParser
20  parser = ArgumentParser()
21  parser.add_argument('--file', default='TrigCostRoot_Results.root', help='Input ROOT file to generate output from')
22  parser.add_argument('--userDetails', help='User supplied metadata string giving any extra details about this run.')
23  parser.add_argument('--oksMetadata', action='store_true', help='Retrieve additional metadata from OKS for Cost CPU studies')
24  parser.add_argument('--jira', help='Related jira ticket number')
25  parser.add_argument('--trpDetails', type=bool, default=False, help='Include details read from TRP like pileup and deadtime in the metadata - to be used for P1 data')
26  parser.add_argument('--amiTag', help='AMI tag used for data reprocessing')
27  parser.add_argument('--partition', default='ATLAS', help='Used partition (needed to read OKS details)')
28  parser.add_argument('--underflowThreshold', default=0.5, help='Threshold of underflow percent value to save warning in metadata tree.')
29  parser.add_argument('--overflowThreshold', default=0.1, help='Threshold of underflow percent value to save warning in metadata tree.')
30  parser.add_argument('--dumpAlgorithmSummary', action='store_true', help='Print algorithm\'s mean time of execution to the log file')
31  parser.add_argument('--onlyMetadata', type=bool, default=False, help='Only save metadata (csv tables will not be produced)')
32  parser.add_argument('--maxRanges', type=int, default=5, help="Maximum number of ranges to process. Use -1 to process all.")
33  parser.add_argument('--skipRanges', type=int, default=-1, help="Skip n first ranges. Use -1 to process all.")
34  parser.add_argument('--loglevel', type=int, default=3, help='Verbosity level: 1 - VERBOSE, 2 - DEBUG, 3 - INFO')
35  args = parser.parse_args()
36  log.level = args.loglevel
37 
38  inputFile = ROOT.TFile(args.file, 'READ')
39 
40  metadata = {
41  "jira": args.jira,
42  "amiTag" : args.amiTag,
43  "userDetails" : args.userDetails,
44  "readOKSDetails": args.oksMetadata,
45  "partition": args.partition
46  }
47 
48  if inputFile.IsOpen():
49  if args.onlyMetadata:
50  saveMetadata(inputFile, metadata, [], args.trpDetails, args.loglevel, args.maxRanges)
51  else:
52  warningMsg = exploreTree(inputFile, args.dumpAlgorithmSummary, args.underflowThreshold, args.overflowThreshold, args.maxRanges, args.skipRanges)
53  if not warningMsg:
54  log.error("Postprocessing script failed!")
55  else:
56  saveMetadata(inputFile, metadata, warningMsg, args.trpDetails, args.loglevel, args.maxRanges)
57  else:
58  log.error("File %s not found", args.file)
59 
60  # to speed up closing the ROOT file
61  ROOT.gROOT.GetListOfFiles().Remove(inputFile)
62  inputFile.Close()
63 
64 
65 if __name__== "__main__":
66  main()
python.Util.exploreTree
def exploreTree(inputFile, dumpSummary=False, underflowThreshold=0.1, overflowThreshold=0.1, maxRanges=5, skipRanges=-1)
Definition: TrigCostAnalysis/python/Util.py:18
RatesAnalysisOnlineProcessing.saveMetadata
def saveMetadata(dirName, data)
Definition: RatesAnalysisOnlineProcessing.py:176
CostAnalysisPostProcessing.main
def main()
Definition: CostAnalysisPostProcessing.py:18